CSS Flex 布局规范

本文深入介绍了CSS Flex布局,包括相关概念、术语、flex容器和flex项的属性,如flex-direction、flex-wrap、justify-content和align-items等,帮助理解并掌握弹性布局的使用。
摘要由CSDN通过智能技术生成

引子

最近接触 flex 布局的时候,碰到一些问题,于是借着这个机会,对 flex 相关的知识点进行整理。

简介

CSS 2.1 定义了 4 种布局模式,这些算法是根据盒子与它们的兄弟和祖先盒子的关系,来确定盒子自身大小和位置。分别有:

  • block 布局,为文档布局设计
  • inline 布局,为文本布局设计
  • table 布局,为表格形式的 2D 数据布局设置
  • positioned 布局,设计用于非常明确的定位,不用考虑文档中的其他元素

新引入的 flex 布局,跟 block 布局很类似,它缺少很多在 block 布局中,有关文本和文档相关的特性,例如浮动。相应的,它拥有了简单且强大的工具,用于来分配空间,并可以按照 web 应用程序和复杂网页经常需要的方式对齐内容。

目前处于候选推荐阶段,主流浏览器支持的情况很不错,详细见 Can I use flex

相关概念和术语

一个元素设置 display 属性值为 flexinline-flex,就会变成一个 flex 容器(flex container),其直接子元素被称为 flex 项(flex items),它们布局使用 flex 布局模式。

在 CSS 中定义了一些跟物理方向和空间相对应的一些概念,这些概念为未来定义新的布局提供理论支持,在 flex 布局模式中对应物理方向和空间的概念如下图。

32-css-flex

  • main axis:主轴,flex 项的排列是按照主轴进行排列,主轴的方向取决于 flex-direction 属性,不一定是水平方向。
  • main-start/main-end:flex 容器主轴上的开始/结束位置,flex 项的排列是从 main-start 开始,到 main-end 结束。
  • main-size:在主轴方向 flex 容器或者 flex 项的高度或宽度,它可能是元素的 widthheight 属性。类似的,它的 min/max main size 属性取决于它的 min-width/max-width 或者 min-height/max-height 属性。
  • cross axis:侧轴,跟主轴方向垂直的轴。
  • cross-start/cross-end:flex 容器侧轴上的开始/结束位置,flex 项的排列是从 cross-start 开始,到 cross-end 结束。
  • cross-size:在侧轴方向 flex 容器或者 flex 项的高度或宽度,它可能是元素的 widthheight 属性。类似的,它的 min/max cross size 属性取决于它的 min-width/max-width 或者 min-height/max-height 属性。

flex container

成为 flex 容器的方式是,设置 display 属性值为 flex | inline-flex

  • flex:当一个块级元素放在流布局中,这个值会让这个元素生成一个 flex 容器盒子。
  • inline-flex:当一个内联元素放在流布局中,这个值会让这个元素生成一个 flex 容器盒子。

flex 容器会为它的内容建立一个 flex 格式化上下文,它形成的包含块就像块级容器做的那样。flex 容器的外边距(margin)不会跟它内容的边距重合。overflow 属性适用于 flex 容器。flex 容器不是块级容器,并且有些适用于 block 布局的属性在 flex 布局中并不适用,特别是:

  • floatclear 不会产生浮动或者清空 flex 项,并且不会让元素脱离文档流。
  • vertical-align 对 flex 项没有作用。
  • ::first-linefirst-letter 伪元素不适用于 flex 容器,flex 容器不会为它们的祖先提供第一行格式化或第一个字母。

这是测试示例,移动端查看如下。

32-qrcode-flex-test

如果一个元素的 display 属性设置为 inline-flex,在特定的环境下,它的的 display 属性会被计算为 flex

用于 flex 容器的相关属性有:

  • flex-direction
  • flex-w
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值