Flex容器是采用Flexbox布局的父元素,它控制其子元素的排列和对齐方式。
基本概念
Flexbox,全称 Flexible Box 布局模型,是一种用于一维布局的 CSS 技术。它允许开发者在容器内灵活地分配空间给子元素,并轻松地对齐这些元素。
常见的应用场景
应用场景 | 描述 |
---|---|
响应式布局 | Flexbox 可以创建灵活的布局,使得网页能够适应不同屏幕尺寸和分辨率。 |
导航栏 | 使用 Flexbox 可以轻松地创建水平导航栏,并且能够对齐和分配空间给导航项。 |
卡片布局 | 卡片视图通常需要等高或等宽的布局,Flexbox 可以轻松实现这种效果。 |
网格布局 | 虽然 CSS Grid 布局更适合二维布局,但 Flexbox 仍然可以用来创建简单的网格布局。 |
动态内容区域 | 对于内容大小不固定的元素,Flexbox 可以自动调整它们的大小以适应可用空间。 |
对齐元素 | Flexbox 提供了多种对齐方式,可以轻松地在容器内对齐文本、图片或其他元素。 |
多列布局 | 虽然传统的多列布局使用 column-count 属性,但 Flexbox 也可以用于创建多列布局。 |
订单和排序 | Flexbox 允许开发者动态地改变元素顺序,而不需要更改 HTML 结构。 |
自适应布局 | Flexbox 可以根据浏览器窗口大小的变化自动调整布局,实现真正的自适应设计。 |
溢出隐藏 | 当内容超出容器大小时,Flexbox 可以轻松实现内容的溢出隐藏。 |
空间分布 | Flexbox 可以均匀地在元素之间分配空间,或者将空间集中在特定元素。 |
复杂布局 | 对于更复杂的布局,如聊天应用的对话列表、仪表板等,Flexbox 提供了一种相对简单的解决方案。 |
交互式界面 | 在需要动态调整布局的交互式界面中,Flexbox 可以响应用户操作,如调整大小、切换标签页等。 |
Flex容器属性
justify-content
用于水平分配项目之间和项目周围的空间。
属性值/描述 | 代码示例 | 效果 |
---|---|---|
center 居中对齐 | .container { display: flex; justify-content: center; ... } .block { width: 50px; height: 50px; background-color: black; } | |
flex-start(默认) 默认值,左对齐 | .container { display: flex; justify-content: flex-start; ... } | |
flex-end 右对齐 | .container { display: flex; justify-content: flex-end; ... } | |
space-between 两端对齐 | .container { display: flex; justify-content: space-between; ... } | |
space-around 项目之间的间隔是项目与Flex容器边缘间隔的两倍 | .container { display: flex; justify-content: space-around; ... } | |
space-evenly 项目之间的间隔与Flex容器边缘的间隔相等 | .container { display: flex; justify-content: space-evenly; ... } |
align-items
用于垂直分配项目之间和项目周围的空间。
- 如果容器是水平的(主轴为行),则
align-items
将影响子元素的垂直对齐方式; - 如果容器是垂直的(主轴为列),则
align-items
将影响子元素的水平对齐方式; - flex-direction影响容器是水平还是垂直。
属性值/描述 | 代码示例 | 效果 |
---|---|---|
center 居中对齐 | .container { display: flex; align-items: center; ... } .block { width: 50px; height: 50px; background-color: black; } | |
flex-start 容器头部对齐 | .container { display: flex; align-items: flex-start; ... } | |
flex-end 容器尾部对齐 | .container { display: flex; align-items: flex-end; ... } | |
baseline 基线对齐 | .container { display: flex; align-items: baseline; ... } .block1 { width: 50px; height: 80px; background-color: black; } .block2 { width: 50px; height: 50px; background-color: white; } | |
stretch 在未设置高度情况下,将占满容器的高度 | .container { display: flex; align-items: stretch; ... } .block1 { width: 50px; background-color: black; } .block2 { width: 50px; background-color: white; } |
flex-direction
用于指定项目的方向,并且会影响容器是水平还是垂直方向(会影响align-items的使用)。
属性值/描述 | 代码示例 | 效果 |
---|---|---|
row(默认) 容器为水平方向,从左到右 | .container { display: flex; flex-direction: row; ... } .block { ... } | |
row-reverse 容器为水平方向,从右到左 | .container { display: flex; flex-direction: row-reverse; ... } ... | |
column 容器为垂直方向,从上到下 | .container { display: flex; flex-direction: column; ... } ... | |
column-reverse 容器为垂直方向,从下到上 | .container { display: flex; flex-direction: column-reverse; ... } ... |
order
用于指定项目相对于同一容器内其余项目的顺序。
<view class="container">
<view class="block1">1</view>
<view class="block2">2</view>
<view class="block3">3</view>
</view>
CSS | 效果 |
---|---|
.container { display: flex; ... } .block1 { order: 3; ... } .block2 { order: 1; ... } .block3 { order: 2; ... } |
align-self
用于单独指定某一项目为其他项目不一样的对齐方式。(项目属性可以覆盖父容器设置的 align-items 属性)
属性值/描述 | 代码示例 | 效果 |
---|---|---|
center 居中对齐 | .container { display: flex; align-items: flex-start; ... } .block1 { align-self: center; ... } .block2 { ... } | |
flex-start 容器头部对齐 | .container { display: flex; align-items: center; ... } .block1 { align-self: flex-start; ... } .block2 { ... } | |
flex-end 容器尾部对齐 | .container { display: flex; align-items: center; ... } .block1 { align-self: flex-end; ... } .block2 { ... } | |
stretch 在未设置高度情况下,将占满容器的高度 | .container { display: flex; align-items: center; ... } .block1 { align-self: stretch; width: 50px; ... } .block2 { width: 50px; height: 50px; ... } |
flex-wrap
用于指定当项目在容器中一行无法显示的时候如何处理。
属性值/描述 | 代码示例 | 效果 |
---|---|---|
nowrap(默认) 不换行 | .container { display: flex; flex-wrap: nowrap; ... } .block { ... } | |
wrap 正常换行,第一个位于第一行的第一个 | .container { display: flex; flex-wrap: wrap; ... } ... | |
wrap-reverse 反向换行 | .container { display: flex; flex-wrap: wrap-reverse; ... } ... |
align-content
注意与align-items不同,align-content影响的是行与行之间的间隔。
align-items与align-content的区别
- 作用对象:
align-items
对单个子元素起作用,align-content
对行(子元素组)起作用。 - 使用场景:
align-items
用于单行或单列布局,align-content
用于多行布局。 - 对齐方式:两者都可以使用
flex-start
、flex-end
、center
等值,但align-content
还支持space-between
、space-around
等值,用于控制行与行之间的间距。
属性值/描述 | 代码示例 | 效果 |
---|---|---|
center 居中对齐 | .container { display: flex; flex-wrap: wrap; align-content: center; ... } .block { ... } | |
flex-start(默认) 默认值,左对齐 | .container { display: flex; flex-wrap: wrap; align-content: flex-start; ... } ... | |
flex-end 右对齐 | .container { display: flex; flex-wrap: wrap; align-content: flex-end; ... } ... | |
space-between 两端对齐 | .container { display: flex; flex-wrap: wrap; align-content: space-between; ... } ... | |
space-around 项目之间的间隔是项目与Flex容器边缘间隔的两倍 | .container { display: flex; flex-wrap: wrap; align-content: space-around; ... } ... |
混合使用案例
核心样式 | 效果 |
---|---|
justify-content: center; align-items: center; | |
justify-content: flex-end; flex-direction: column; | |
justify-content: center; align-items: center; flex-direction: row-reverse; | |
flex-direction: column-reverse; align-items: center; justify-content: flex-end; | |
flex-wrap: wrap; justify-content: center; align-content: flex-end; | |
justify-content: space-around; flex-direction:column-reverse; align-items: flex-end; | |
justify-content: center; flex-direction: column-reverse; flex-wrap: wrap-reverse; align-content: center; |