Flex布局 - 图1

布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。
demo 地址

Flex布局是什么

Flex 是 Flexible Box 的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局。

  1. .box{
  2. display: flex;
  3. }

行内元素也可以使用 Flex 布局。

  1. .box{
  2. display: inline-flex;
  3. }

Webkit 内核的浏览器,必须加上-webkit前缀。

  1. .box{
  2. display: -webkit-flex; /* Safari */
  3. display: flex;
  4. }

注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。

基本概念

采用 Flex 布局的元素,称为 Flex 容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称”项目”。
Flex布局 - 图2
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

容器的属性

容器上可以设置以下6个属性

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

flex-direction

flex-direction属性决定主轴的方向(即项目的排列方向)

  1. .box {
  2. flex-direction: row | row-reverse | column | column-reverse;
  3. }

Flex布局 - 图3
它有4个值:

  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

flex-wrap

默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。

Flex布局 - 图4

  1. .box{
  2. flex-wrap: nowrap | wrap | wrap-reverse;
  3. }

它可能取三个值。
(1)nowrap(默认):不换行。
Flex布局 - 图5

(2)wrap:换行,第一行在上方。
Flex布局 - 图6

(3)wrap-reverse:换行,第一行在下方。
Flex布局 - 图7

flex-flow

flex-flow 属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

  1. .box {
  2. flex-flow: <flex-direction> || <flex-wrap>;
  3. }

justify-content

justify-content属性定义了项目在主轴上的对齐方式.

  1. .box {
  2. justify-content: flex-start | flex-end | center | space-between | space-around;
  3. }

Flex布局 - 图8
它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。

  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

align-items

align-items属性定义项目在交叉轴上如何对齐。

  1. .box {
  2. align-items: flex-start | flex-end | center | baseline | stretch;
  3. }

Flex布局 - 图9
它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。

  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

align-content

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

  1. .box {
  2. align-content: flex-start | flex-end | center | space-between | space-around | stretch;
  3. }

Flex布局 - 图10
该属性可能取6个值。

  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。

项目的属性

以下6个属性设置在项目上。

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

    order属性

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

  1. .item {
  2. order: <integer>;
  3. }

Flex布局 - 图11

flex-grow属性

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

  1. .item {
  2. flex-grow: <number>; /* default 0 */
  3. }

Flex布局 - 图12
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

flex-shrink属性

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

  1. .item {
  2. flex-shrink: <number>; /* default 1 */
  3. }

Flex布局 - 图13
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
负值对该属性无效。

flex-basis属性

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

  1. .item {
  2. flex-basis: <length> | auto; /* default auto */
  3. }

它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

flex属性

flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

  1. .item {
  2. flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
  3. }

该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

align-self属性

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

  1. .item {
  2. align-self: auto | flex-start | flex-end | center | baseline | stretch;
  3. }

Flex布局 - 图14
该属性可能取6个值,除了auto,其他都与align-items属性完全一致。

实例代码

flex.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Flex 布局示例</title>
  6. <link rel="stylesheet" type="text/css" href="style.css">
  7. </head>
  8. <body>
  9. <h1>Flex 布局示例</h1>
  10. <p>感谢阮一峰老师的教程<a target="_blank" href="http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html">http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html</a>
  11. <br>本示例将教程上所有的布局都简单的实现了一遍,并保存GitHub上面
  12. <br><a href="https://github.com/JailBreakC/flex-box-demo">https://github.com/JailBreakC/flex-box-demo</a></p>
  13. <h2>容器的属性</h2>
  14. <h3>1、flex-direction属性</h3>
  15. <p>flex-direction属性决定主轴的方向(即项目的排列方向)。</p>
  16. <p>
  17. .box {
  18. flex-direction: row | row-reverse | column | column-reverse;
  19. }
  20. </p>
  21. <div class="box box-1">
  22. <div class="box-item">1</div>
  23. <div class="box-item">2</div>
  24. <div class="box-item">3</div>
  25. <div class="box-item">4</div>
  26. </div>
  27. <h3>2、flex-wrap属性</h3>
  28. <p>默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。</p>
  29. <p>
  30. .box{
  31. flex-wrap: nowrap | wrap | wrap-reverse;
  32. }
  33. </p>
  34. <p>nowrap(默认):不换行。</p>
  35. <div class="box box-2">
  36. <div class="box-item">1</div>
  37. <div class="box-item">2</div>
  38. <div class="box-item">3</div>
  39. <div class="box-item">4</div>
  40. <div class="box-item">5</div>
  41. <div class="box-item">6</div>
  42. <div class="box-item">7</div>
  43. </div>
  44. <p>wrap:换行,第一行在上方。</p>
  45. <div class="box box-3">
  46. <div class="box-item">1</div>
  47. <div class="box-item">2</div>
  48. <div class="box-item">3</div>
  49. <div class="box-item">4</div>
  50. <div class="box-item">5</div>
  51. <div class="box-item">6</div>
  52. <div class="box-item">7</div>
  53. </div>
  54. <p>wrap-reverse:换行,第一行在下方。</p>
  55. <div class="box box-4">
  56. <div class="box-item">1</div>
  57. <div class="box-item">2</div>
  58. <div class="box-item">3</div>
  59. <div class="box-item">4</div>
  60. <div class="box-item">5</div>
  61. <div class="box-item">6</div>
  62. <div class="box-item">7</div>
  63. </div>
  64. <h3>3、flex-flow</h3>
  65. <p>flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。</p>
  66. <p>
  67. .box {
  68. flex-flow: &lt;flex-direction&gt; || &lt;flex-wrap&gt;;
  69. }
  70. </p>
  71. <div class="box box-5">
  72. <div class="box-item">1</div>
  73. <div class="box-item">2</div>
  74. <div class="box-item">3</div>
  75. <div class="box-item">4</div>
  76. <div class="box-item">5</div>
  77. <div class="box-item">6</div>
  78. <div class="box-item">7</div>
  79. </div>
  80. <h3>4、justify-content属性</h3>
  81. <p>justify-content属性定义了项目在主轴上的对齐方式。</p>
  82. <p>
  83. .box {
  84. justify-content: flex-start | flex-end | center | space-between | space-around;
  85. }
  86. </p>
  87. <p>flex-start(默认值):左对齐</p>
  88. <div class="box box-6">
  89. <div class="box-item">1</div>
  90. <div class="box-item">2</div>
  91. <div class="box-item">3</div>
  92. <div class="box-item">4</div>
  93. </div>
  94. <p>flex-end:右对齐</p>
  95. <div class="box box-7">
  96. <div class="box-item">1</div>
  97. <div class="box-item">2</div>
  98. <div class="box-item">3</div>
  99. <div class="box-item">4</div>
  100. </div>
  101. <p>center: 居中</p>
  102. <div class="box box-8">
  103. <div class="box-item">1</div>
  104. <div class="box-item">2</div>
  105. <div class="box-item">3</div>
  106. <div class="box-item">4</div>
  107. </div>
  108. <p>space-between:两端对齐,项目之间的间隔都相等。</p>
  109. <div class="box box-9">
  110. <div class="box-item">1</div>
  111. <div class="box-item">2</div>
  112. <div class="box-item">3</div>
  113. <div class="box-item">4</div>
  114. </div>
  115. <p>space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。</p>
  116. <div class="box box-10">
  117. <div class="box-item">1</div>
  118. <div class="box-item">2</div>
  119. <div class="box-item">3</div>
  120. <div class="box-item">4</div>
  121. </div>
  122. <h3>5、align-items属性</h3>
  123. <p>align-items属性定义项目在交叉轴上如何对齐。</p>
  124. <p>
  125. .box {
  126. align-items: flex-start | flex-end | center | baseline | stretch;
  127. }
  128. </p>
  129. <p>flex-start:交叉轴的起点对齐。</p>
  130. <div class="box box-11">
  131. <div class="box-item">1</div>
  132. <div class="box-item item-tall">2</div>
  133. <div class="box-item">3</div>
  134. <div class="box-item item-tall">4</div>
  135. </div>
  136. <p>flex-end:交叉轴的终点对齐。</p>
  137. <div class="box box-12">
  138. <div class="box-item">1</div>
  139. <div class="box-item item-tall">2</div>
  140. <div class="box-item">3</div>
  141. <div class="box-item item-tall">4</div>
  142. </div>
  143. <p>center:交叉轴的中点对齐。</p>
  144. <div class="box box-13">
  145. <div class="box-item">1</div>
  146. <div class="box-item item-tall">2</div>
  147. <div class="box-item">3</div>
  148. <div class="box-item item-tall">4</div>
  149. </div>
  150. <p>baseline: 项目的第一行文字的基线对齐。</p>
  151. <div class="box box-14 line">
  152. <div class="box-item">1</div>
  153. <div class="box-item item-tall">2</div>
  154. <div class="box-item">3</div>
  155. <div class="box-item item-tall">4</div>
  156. </div>
  157. <p>stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。</p>
  158. <div class="box box-15">
  159. <div class="box-item">1</div>
  160. <div class="box-item item-tall">2</div>
  161. <div class="box-item">3</div>
  162. <div class="box-item item-tall">4</div>
  163. </div>
  164. <h3>6、align-content属性</h3>
  165. <p>align-content属性定义了多根轴线(多行)的对齐方式。如果项目只有一根轴线,该属性不起作用。</p>
  166. <p>
  167. .box {
  168. align-content: flex-start | flex-end | center | space-between | space-around | stretch;
  169. }
  170. </p>
  171. <p>flex-start:交叉轴的起点对齐。</p>
  172. <div class="box box-tall box-16">
  173. <div class="box-item">1</div>
  174. <div class="box-item">2</div>
  175. <div class="box-item">3</div>
  176. <div class="box-item">4</div>
  177. <div class="box-item">5</div>
  178. <div class="box-item">6</div>
  179. <div class="box-item">7</div>
  180. <div class="box-item">8</div>
  181. <div class="box-item">9</div>
  182. </div>
  183. <p>flex-end:与交叉轴的终点对齐。</p>
  184. <div class="box box-tall box-17">
  185. <div class="box-item">1</div>
  186. <div class="box-item">2</div>
  187. <div class="box-item">3</div>
  188. <div class="box-item">4</div>
  189. <div class="box-item">5</div>
  190. <div class="box-item">6</div>
  191. <div class="box-item">7</div>
  192. <div class="box-item">8</div>
  193. <div class="box-item">9</div>
  194. </div>
  195. <p>center:与交叉轴的中点对齐。</p>
  196. <div class="box box-tall box-18">
  197. <div class="box-item">1</div>
  198. <div class="box-item">2</div>
  199. <div class="box-item">3</div>
  200. <div class="box-item">4</div>
  201. <div class="box-item">5</div>
  202. <div class="box-item">6</div>
  203. <div class="box-item">7</div>
  204. <div class="box-item">8</div>
  205. <div class="box-item">9</div>
  206. </div>
  207. <p>space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。</p>
  208. <div class="box box-tall box-19">
  209. <div class="box-item">1</div>
  210. <div class="box-item">2</div>
  211. <div class="box-item">3</div>
  212. <div class="box-item">4</div>
  213. <div class="box-item">5</div>
  214. <div class="box-item">6</div>
  215. <div class="box-item">7</div>
  216. <div class="box-item">8</div>
  217. <div class="box-item">9</div>
  218. </div>
  219. <p>space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。</p>
  220. <div class="box box-tall box-20">
  221. <div class="box-item">1</div>
  222. <div class="box-item">2</div>
  223. <div class="box-item">3</div>
  224. <div class="box-item">4</div>
  225. <div class="box-item">5</div>
  226. <div class="box-item">6</div>
  227. <div class="box-item">7</div>
  228. <div class="box-item">8</div>
  229. <div class="box-item">9</div>
  230. </div>
  231. <p>stretch(默认值):轴线占满整个交叉轴。</p>
  232. <div class="box box-tall box-21">
  233. <div class="box-item">1</div>
  234. <div class="box-item">2</div>
  235. <div class="box-item">3</div>
  236. <div class="box-item">4</div>
  237. <div class="box-item">5</div>
  238. <div class="box-item">6</div>
  239. <div class="box-item">7</div>
  240. <div class="box-item">8</div>
  241. <div class="box-item">9</div>
  242. </div>
  243. <h2>项目的属性</h2>
  244. <h3>1、order属性</h3>
  245. <p>order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。</p>
  246. <p>
  247. .item {
  248. order: &lt;integer&gt;;
  249. }
  250. </p>
  251. <div class="box box-22">
  252. <div class="box-item">1</div>
  253. <div class="box-item">2</div>
  254. <div class="box-item">3</div>
  255. <div class="box-item order">4 <div>(order:-1)</div></div>
  256. </div>
  257. <h3>2、flex-grow属性</h3>
  258. <p>flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。</p>
  259. <p>如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。</p>
  260. <p>
  261. .item {
  262. flex-grow: &lt;number&gt;; /* default 0 */
  263. }
  264. </p>
  265. <div class="box box-23">
  266. <div class="box-item grow">1 <div>flex-grow: 1</div></div>
  267. <div class="box-item grow grow-2">2 <div>flex-grow: 2</div></div>
  268. <div class="box-item grow">3 <div>flex-grow: 1</div></div>
  269. </div>
  270. <h3>3、flex-shrink</h3>
  271. <p>flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。</p>
  272. <p>如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。<br>负值对该属性无效。</p>
  273. <p>
  274. .item {
  275. flex-shrink: &lt;number&gt;; /* default 1 */
  276. }
  277. </p>
  278. <div class="box box-24">
  279. <div class="box-item shrink">1 <div>flex-shrink: 0</div></div>
  280. <div class="box-item">2</div>
  281. <div class="box-item">3</div>
  282. </div>
  283. <h3>4、flex-basis属性</h3>
  284. <p>flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。</p>
  285. <p>
  286. .item {
  287. flex-basis: &lt;length&gt;; | auto; /* default auto */
  288. }
  289. </p>
  290. <div class="box box-25">
  291. <div class="box-item">1</div>
  292. <div class="box-item">2</div>
  293. <div class="box-item">3</div>
  294. </div>
  295. <h3>5、flex属性</h3>
  296. <p>flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。</p>
  297. <p>该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。</p>
  298. <p>
  299. .item {
  300. flex: none | [ &lt;'flex-grow'&gt; &lt;'flex-shrink'&gt;? || &lt;'flex-basis'&gt; ]
  301. }
  302. </p>
  303. <h3>6、align-self属性</h3>
  304. <p>align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。</p>
  305. <p>
  306. .item {
  307. align-self: auto | flex-start | flex-end | center | baseline | stretch;
  308. }
  309. </p>
  310. <div class="box box-26">
  311. <div class="box-item">1</div>
  312. <div class="box-item">2</div>
  313. <div class="box-item end">3<div>flex-end</div></div>
  314. <div class="box-item">4</div>
  315. </div>
  316. </body>
  317. </html>

style.css

  1. body {
  2. padding: 20px;
  3. margin: 0 auto;
  4. background-color: #E2E2E2;
  5. max-width: 1024px;
  6. color: #595B66;
  7. font-family: 'Microsoft Yahei', sans-serif;
  8. }
  9. h1,h2,h3,h4 {
  10. color: #797979;
  11. // border-bottom: solid 1px #797979;
  12. padding: 5px 0;
  13. }
  14. h1, h2 {
  15. border-bottom: solid 2px #797979;
  16. }
  17. p {
  18. font-size: 15px;
  19. background: #797979;
  20. padding: 10px;
  21. border-radius: 5px;
  22. color: white;
  23. line-height: 2;
  24. }
  25. a {
  26. color: #FFD200;
  27. }
  28. .box {
  29. background-color: white;
  30. margin: 0 0 55px;
  31. display: flex;
  32. }
  33. .box-tall {
  34. height: 800px;
  35. }
  36. .box-item {
  37. width: 200px;
  38. height: 200px;
  39. line-height: 200px;
  40. vertical-align: middle;
  41. margin: 5px;
  42. background-color: #ffd200;
  43. font-size: 100px;
  44. color: white;
  45. text-align: center;
  46. }
  47. .item-tall {
  48. height: 400px;
  49. line-height: 400px;
  50. }
  51. .box-1 {
  52. flex-direction: row;
  53. }
  54. .box-2 {
  55. flex-direction: row;
  56. flex-wrap: nowrap;
  57. }
  58. .box-3 {
  59. flex-direction: row;
  60. flex-wrap: wrap;
  61. }
  62. .box-4 {
  63. flex-direction: row;
  64. flex-wrap: wrap-reverse;
  65. }
  66. .box-5 {
  67. flex-flow: row nowrap;
  68. }
  69. .box-6 {
  70. justify-content: flex-start;
  71. }
  72. .box-7 {
  73. justify-content: flex-end;
  74. }
  75. .box-8 {
  76. justify-content: center;
  77. }
  78. .box-9 {
  79. justify-content: space-between;
  80. }
  81. .box-10 {
  82. justify-content: space-around;
  83. }
  84. .box-11 {
  85. align-items: flex-start;
  86. }
  87. .box-12 {
  88. align-items: flex-end;
  89. }
  90. .box-13 {
  91. align-items: center;
  92. }
  93. .box-14 {
  94. align-items: baseline;
  95. }
  96. .box-14 .box-item{
  97. font-size: 88px;
  98. line-height: initial;
  99. text-decoration: underline;
  100. }
  101. .box-14 .item-tall{
  102. font-size: 122px;
  103. line-height: initial;
  104. }
  105. .box-15 {
  106. align-items: stretch;
  107. }
  108. .box-15 .box-item {
  109. height: auto;
  110. }
  111. .box-16 {
  112. flex-wrap: wrap;
  113. align-content: flex-start;
  114. }
  115. .box-17 {
  116. flex-wrap: wrap;
  117. align-content: flex-end;
  118. }
  119. .box-18 {
  120. flex-wrap: wrap;
  121. align-content: center;
  122. }
  123. .box-19 {
  124. flex-wrap: wrap;
  125. align-content: space-between
  126. }
  127. .box-20 {
  128. flex-wrap: wrap;
  129. align-content: space-around;
  130. }
  131. .box-21 {
  132. flex-wrap: wrap;
  133. align-content: stretch;
  134. }
  135. .box-21 .box-item {
  136. height: auto;
  137. }
  138. .box-22 .order {
  139. order: -1;
  140. }
  141. .box-item div{
  142. font-size: 14px;
  143. position: relative;
  144. top: -150px;
  145. }
  146. .box-23 .box-item{
  147. flex-grow: 1;
  148. width: auto;
  149. }
  150. .box-23 .grow-2 {
  151. flex-grow: 2;
  152. }
  153. .box-24 .box-item {
  154. width: 400px;
  155. }
  156. .box-24 .shrink{
  157. flex-shrink: 0;
  158. }
  159. .box-25 .box-item {
  160. flex-basis: 200px;
  161. width: 400px; // width 将失去作用
  162. }
  163. .box-26 {
  164. height: 400px;
  165. }
  166. .box-26 .box-item {
  167. align-self: flex-start;
  168. }
  169. .box-26 .end {
  170. align-self: flex-end;
  171. }