Skip to content

多列布局

实现类似于报纸的布局方式

① 设置给包裹元素的 CSS 属性(共 8 个属性)

CSS 属性名含义
column-count列数数字
column-width列宽长度
columns同时设置列数和列宽空格分隔两个值
column-gap列间距长度
column-rule-style列分隔线风格同 border-style
column-rule-color列分隔线颜色颜色
column-rule-width列分隔线宽度长度
column-rule列分隔线复合属性空格分隔两个值

column-count 和 column-width:

sh
哪个属性分出来的列数少,就按照哪一个。

② 设置给子元素的 CSS 属性(共 4 个属性)

CSS 属性名含义
column-span跨列none:不跨列,默认值。
all:跨所有列
-webkit-column-break-before(了解)设置元素前面是否断列auto:自动,默认值。
always:必须断列。
avoid:必须不断列。
-webkit-column-break-after(了解)设置元素后面是否断列auto:自动,默认值。
always:必须断列。
avoid:必须不断列。
-webkit-column-break-inside(了解)设置元素内部是否断列auto:自动,默认值。
avoid:必须不断列。

伸缩盒布局 Flex

布局的传统解决方案,基于盒状模型,依赖 display 属性 + position 属性 + float 属性。

2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

Flex 是 Flexible Box 的缩写,意为"伸缩盒模型"或者"弹性盒模型",用来为盒状模型提供最大的灵活性。

伸缩容器和伸缩项目

伸缩盒模型专业术语

主轴方向、侧轴方向: 默认主轴方向是水平的,侧轴方向是垂直的;如果设置主轴方向是垂直的,那么侧轴方向就是水平的。

主轴:Flex 容器的主轴主要用来配置 Flex 项目;伸缩项目会沿主轴分布;他不一定是水平的,这主要取决于 flex-direction 属性。

主轴起点,主轴终点:Flex 项目的配置从容器的主轴起点边开始,往主轴终点边结束。

主轴长度:Flex 项目在主轴方向的宽度或高度就是项目的主轴长度,Flex 项目的主轴长度属性是 widthheight 属性,由哪一个对着主轴方向决定。

侧轴:与主轴垂直的轴称作侧轴,是侧轴方向的延伸。

侧轴起点,侧轴终点:伸缩行的配置从容器的侧轴起点边开始,往侧轴终点边结束。

侧轴长度:Flex 项目在侧轴方向的宽度或高度就是项目的侧轴长度,Flex 项目的侧轴长度属性是 widthheight 属性,由哪一个对着主轴方向决定。

image-20240311111319081

① 概念定义

伸缩容器: 元素设置 display:flex或者display:inline-flex,该元素就称为伸缩容器 父元素的位置。

伸缩项目: 伸缩容器的子元素称为伸缩项目。

② 伸缩项目的特点

sh
1. 伸缩项目沿主轴排列(主轴默认横向),不会脱离文档流
2. 不论元素原来的显示模式是什么,变为伸缩项目之后,具有自己的显示特点:
 不存在外边距的塌陷和合并,默认宽高被内容撑开
 宽高内外边距都可以设置,不会被父元素当成文本

设置主轴方向和换行方式

主轴: 伸缩项目沿着主轴排列,主轴的默认方向是从左到右。

侧轴: 与主轴垂直的是侧轴。

① 设置主轴方向

伸缩容器设置CSS属性 flex-direction 可以修改主轴方向,该属性的值如下:

css
row				水平从左到右
row-reverse		水平从右到左
column			竖直从上到下
column-reverse	竖直从下到上

② 设置换行方式

伸缩容器设置CSS属性flex-wrap 可以修改换行方式,该属性值如下:

css
nowrap			不换行
wrap			自动换行
wrap-reverse	换行并翻转

③ 同时设置主轴方向和换行方式

flex-flow 可以同时设置主轴方向和换行方式,是 flex-directionflex-wrap 的复合属性。

设置伸缩项目在主轴上的对齐方式

伸缩容器设置CSS属justify-content,可以调整伸缩项目在主轴上的对齐方式,该属性的值如下:

css
flex-start				主轴起点对齐,默认值
flex-end				主轴终点对齐
center					居中对齐
space-between			两端对齐,两端无间距
space-around			两端对齐,两端间距是中间间距一半
space-evenly			两端对齐,两端间距与中间间距相等

设置伸缩项目在侧轴上的对齐方式

① 一条主轴线(伸缩项目在主轴上不换行)

给伸缩容器设置CSS属性 align-items, 该属性的值如下:前提是需要在伸缩容器上设置高度或宽度,侧轴上需要有长度。

设置伸缩项目不在侧轴上对齐,只需要在伸缩项目上设置宽度即可。

css
stretch		伸缩项目在侧轴方向拉伸(前提:不设置侧轴方向对应的长度) 默认
flex-start	侧轴起点 高度被内容撑开
flex-end	侧轴终点 
center		居中
baseline	基线

② 多条主轴线 (伸缩项目在主轴上发生换行)

给伸缩容器设置CSS属性 align-content, 该属性的值如下:

css
stretch					伸缩项目在侧轴方向拉伸,默认
flex-start				侧轴起点对齐,默认值
flex-end				侧轴终点对齐
center					居中对齐
space-between			两端对齐,两端无间距
space-around			两端间距是中间间距一半
space-evenly			两端间距与中间间距相等

伸缩项目在主轴的伸缩性

① 伸缩项目在主轴上的长度 flex-basis

如果设置了 flex-basis,伸缩项目在主轴上的长度就按照 flex-basis, 与主轴方向对应的 width 或者 height 将不生效。

flex-basis 的默认值是 auto,表示 flex-basis 不起作用,主轴方向的长度仍然按照 width 或者 height 的设置。

② 扩展比率 flex-grow 对应的伸

伸缩项目扩展的前提:

css
1. 伸缩容器在主轴方向有富余的空间
2. 伸缩项目的扩展比率flex-grow不能是0

伸缩项目扩展的规则:

css
			  原来的主轴长度  扩展比率    瓜分比重
.item01         100            1        1/10     100+400*1/10即100+40
.item02         200            6        6/10     100+400*6/10即200+240
.item03         300            3        3/10     100+400*3/10即300+120

富余空间: 400
分母: 1+6+3=10

③ 收缩比率 flex-shrink

伸缩项目收缩的前提:

1. 伸缩容器在主轴上的长度不够,小于所有伸缩项目的主轴长度和
2. 不能换行
3. 伸缩项目的收缩比率不能是0,默认值是 1
flex布局中,伸缩容器宽度不足,伸缩容器会等比例缩小
在伸缩项目上设置  flex-shrink:0; 伸缩项目自动不收缩

伸缩项目收缩的规则:

css
			原来的主轴长度    收缩比率    瓜分比重
.item01         100            5        500/1700     100-100*5/17
.item02         200            3        600/1700     200-100*6/17
.item03         300            2        600/1700     300-100*6/17

亏空长度: 100
分母:    100*5 + 200*3 + 300*2 = 1700

④ flex 复合属性

css
flex: grow shrink basis
css
basis 为0 代表主轴上边的富裕空间是100%
flex: 1 1 0; 伸缩容器被伸缩项目瓜分掉
flex: 0 0 auto; 伸缩容器不伸长也不收缩
flex: 0 1 auto;
  • 如果缩写为 flex: 1 , 则其计算值为 1 1 0%
  • 如果缩写 flex: auto , 则其计算值为 1 1 auto
  • 如果flex: none , 则其计算值为0 0 auto
  • 如果 flex: 0 auto 或者 flex: initial , 则其计算值为0 1 auto,即 flex 初始值

伸缩项目排序

给伸缩项目设置 order 属性,属性值是数字,值越大排序越靠后,可以是负值。

单独设置伸缩项目在侧轴上的对齐方式

给伸缩项目设置 align-self ,该属性的值:

css
auto: 	   按照伸缩容器 align-items 的设置,默认值
stretch		伸缩项目在侧轴方向拉伸
flex-start	侧轴起点
flex-end	侧轴终点
center		居中
baseline	基线

伸缩盒相关 CSS 属性总结

① 设置给伸缩容器的属性

CSS 属性名含义
display设置伸缩容器flex
inline-flex
flex-direction主轴方向row
row-reverse
column
column-reverse
flex-wrap换行方式nowrap
wrap
wrap-reverse
flex-flow同时设置主轴方向和换行方式
justify-content主轴上的对齐方式flex-start
flex-end
center
space-between
space-around
space-evenly
align-items侧轴上的对齐方式stretch
flex-start
flex-end
center
baseline
align-content侧轴上的对齐方式(发生换行)stretch
flex-start
flex-end
center
space-between
space-around
space-evenly

② 设置给伸缩项目的属性

CSS 属性名含义
flex-basis伸缩项目的主轴长度auto,长度
flex-grow扩展比率数字,默认值0
flex-shrink收缩比率数字,默认值1
flex复合属性
order排序数字
align-self单独设置侧轴对齐

定位元素 天下第一,权重最高,脱离文档流

浮动不如伸缩项目,