CSS-常规布局(flex、grid)用法笔记

/post/css-layout article cover image

本篇主要回顾复习一下CSS中常见的布局方式:弹性盒子、网格、多栅栏(flex boxgridMultiple-column)总结其共通点及实现方式

flexbox

  • 2019: display: box
  • 2011: display: flexbox
  • 2016: display: flex

根据flex-direction: row | column来确定主轴(main axis)方向那么另外一个就是交叉轴(cross axis)

Flex Container(display: flex)属性: flex-direction | flex-wrap | flex-flow | justify-content | align-items | align-content

Flex Items属性: order | flex-grow | flex-shrink | flex-basis | flex(grow shrink basis) | align-self

通常搭配media query断点来适配不同尺寸并展现不同样式

grid

网格布局可以向网格轨道的行(row)或者列(column)扩展一个或多个单位,从而创建出一个网络区域

网格分为隐式和显示网格,使用grid-template-columns定义列轨道的同时会隐式创建(grid-auto-rows)所需的行

网格线是通过网络轨道交错形成的即是grid-column-startgrid-column-end起始结尾设置的点

网格单元是通过设置起始终点之后形成的块,网格间距通过grid-column-gapgrid-row-gap设置行与列之间的间距

网格区域是由一个或者多个网格单元组成的一个矩形区域,可以使用base line或者grid area方式创建

Grid Container(display: grid)属性: grid | grid-template-rows | grid-template-columns | grid-template-area | grid-auto-rows | gap

Grid Item属性: grid-column-start | grid-column-end | grid-row-start | grid-row-end | grid-area

Grid定位方式: 网格轨道、命名区域、网格命名

Grid中有两个轴线用于对齐(Block axisInline/Row axis)可以使用flexbox中的盒对齐属性align-selfalign-itemsjustify-selfjustify-itemsalign-contentjustify-content

multiple-column

多列布局解决常见了左中右三列布局,通过设置column-count来制定列数并创建具有弹性的宽度(column-width)任何剩余的空间都将被现有的列平分

Column Container属性: column-count | column-width | column-gap | column-rule Column Item属性: 通常搭配 CSS Fragmentation 属性使用break-inside | page-break-inside