flex布局(弹性布局)

本文详细介绍了CSS的Flex布局,包括如何开启flex布局,以及在父类和子类中设置的各种样式属性,如flex-direction、justify-content、align-items等,帮助实现灵活的页面布局。
摘要由CSDN通过智能技术生成

前言

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

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

Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。

开启flex布局

display: flex / inline-flex;

flex: 将对象作为弹性伸缩盒显示
inline-flex:将对象作为内联块级弹性伸缩盒显示 

在父类中设置的样式

flex-direction:子类在主轴上的分布

flex items默认都是沿着main axis(主轴)从main start 开始往main end 方向排布

flex-direction决定了main axis的方向,有4个取值:

  1. row(默认):从左往右
  2. row-reverse:从右往左
  3. column:从上往下
  4. column-reverse:从下往上

效果如下

 justify-content:子类在主轴上的对齐方式 

 justify-content决定了flex items在main axis 上的对齐方式,共6个取值:

  1. flex-start(默认值):与 main start 对齐
  2. flex-end:与 main end 对齐
  3. center:居中对齐
  4. space-between:flex items之间的距离相等,与main start、main end两端对齐
  5. space-evenly:flex items之间的距离相等,与main start、main end之间距离等于flex items之间的距离
  6. space-around:flex items之间的距离相等,与main start、main end之间距离等于flex items之间的距离的一半

效果如下:

align-content:子类在交叉轴上的分布 

 align-content决定了多行flex items在cross axis上的对齐方式,用法和 justify-content类似,共7个取值:

  1. stretch(默认值):与align-items的stretch类似
  2. flex-start:与cross start对齐
  3. flex-end:与cross end对齐
  4. center:居中对齐
  5. space-between:flex items之间的距离相等,与cross start、cross end两端对齐
  6. space-evenly:flex items之间的距离相等,与cross start、cross end之间距离等于flex items之间的距离
  7. space-around:flex items之间的距离相等,与cross start、cross end之间距离等于flex items之间的距离的一半

 align-items:子类在交叉轴上的对齐方式

align-items决定了flex items在cross axis上的对齐方式,共6个取值:

  1. normal:在弹性布局中,效果和stretch一样
  2. stretch:当flex items在cross axis方向的size为auto时,会自动拉伸至填充flex container
  3. flex-start:与cross start对齐
  4. flex-end:与cross end对齐
  5. center:居中对齐
  6. baseline:与基准线对齐

  flex-wrap:子类的多行显示

flex-wrap决定了flex container是单行还是多行,共3个取值:

  1. nowrap(默认):单行
  2. wrap:多行
  3. wrap-reverse:多行(对比wrap,cross start与cross end相反)

 在子类中设置的样式

flex-grow:子类的扩展

flex-grow决定了flex items如何扩展

  • 可以设置任意非负数字(正小数、正整数、0),默认值为0
  • 当flex container在main axis方向上有剩余size时,flex-grow属性才会有效

如果所有flex items的flex-grow总和sum超过1

  • 每个flex items扩展的size = flex container的剩余size*flex-grow / sum

如果所有flex items的flex-grow总和sum不超过1

  • 每个flex items扩展的size = flex container的剩余size*flex-grow

flex items扩展后的最终size不能超过max-width 、max-height

 flex-shrink:子类的收缩

 flex-shrink决定了flex items如何收缩

  • 可以设置任意非负数字(正小数、正整数、0),默认值为1
  • 当flex items在main axis方向上超过了flex container的size时,flex-shrink属性才会有效

align-self:子类在交叉轴上的对齐方式

flex items可以通过align-self覆盖flex container设置的align-items,共6个取值:

  1. auto(默认值):遵从flex container设置的align-items
  2. stretch、flex-start、flex-end、center、baseline,效果和align-items一样

flex

flex是flex-grow,flex-shrink、flex-basis的简写,flex属性可以指定1/2/3个值

单值语法:

值必须为以下其中之一:

  1. 一个无单位数:它会被当做flex-grow的值
  2. 一个有效的宽度值:它会被当作flex-basis的值
  3. 关键字none、auto或initial

双值语法:

第一个值必须为一个无单位数,并且它会被当作flex-grow的值

第二个值必须为以下之一:

  1. 一个无单位数:它会被当做flex-shrink的值
  2. 一个有效的宽度值:它会被当作flex-basis的值

三值语法:

第一个值必须为一个无单位数,作为flex-grow的值

第二个值必须为一个无单位数,作为flex-shrink的值

第三个值必须为一个有效的宽度值:它会被当作flex-basis的值

  • 14
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呦呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值