以前写 CSS 布局,不是 float 就是 inline-block,各种清除浮动,元素居中更是要搜一堆 hack。后来 Flexbox 基本上所有浏览器都支持了(IE 就不说了),我就彻底切过来了。不过属性太多,有些不常用的老是搞混,记一下免得每次都去 MDN 翻。
1. 先搞清楚两个角色
Flex 布局里就两个概念:容器(父元素)和项目(子元素)。给父元素加 display: flex,它所有直接子元素就自动成 flex 项目了。
1 | .container { |
2. 容器上的属性(我常用的)
flex-direction:主轴方向
1 | .container { |
justify-content:主轴对齐
这个用得最多,尤其是居中和两端对齐。
1 | .container { |
align-items:交叉轴对齐
1 | .container { |
flex-wrap:换行
1 | .container { |
3. 水平垂直居中:两行搞定
以前写居中要一堆代码,现在就两行:
1 | .container { |
这可能是 Flex 最让人感动的地方了。
4. 项目上的属性
flex: 1 到底是啥
项目上最常写的就是 flex: 1,它是三个属性的缩写:
1 | .item { |
最典型的场景:
1 | /* 经典的 "左侧固定宽度 + 右侧自适应" 布局 */ |
align-self:单独控制某个项目的对齐
1 | /* 其他项目都居中,就这一个靠底部 */ |
order:调顺序
不想改 HTML 结构,又想让某个元素显示在前面?
1 | .item-last { |
5. 几个实际场景
导航栏
1 | .navbar { |
卡片列表自动换行
1 | .card-grid { |
底部粘在页面底部(Sticky Footer)
页面内容少的时候,footer 也能粘在底部:
1 | body { |
6. 跟 Grid 的分工
简单说,Flex 适合一维布局(一行或一列),Grid 适合二维布局(同时控制行和列)。不过说实话,日常写页面 Flex 能搞定 80% 以上的布局需求了,Grid 我一般在做比较规整的表格式布局时才拿出来用。
掌握这些基本就够日常干活了,偶尔遇到记不住的看看这篇就行。
评论加载中…