Flexbox翻译为弹性盒子:
flex布局是目前web开发中使用最多的布局方案:
为什么需要flex布局呢?
原来的布局存在哪些痛点呢? 举例说明:
两个重要的概念:
当flex container中的子元素变成了flex item时, 具备一下特点:
设置 display 属性为 flex 或者 inline-flex 可以成为 flex container
flex container 上的 CSS 属性 |
flex items 上的 CSS 属性 |
flex-flow |
flex-grow |
flex-direction |
flex-basis |
flex-wrap |
flex-shrink |
flex-flow |
order |
justify-content |
align-self |
align-items |
flex |
align-content |
flex items 默认都是沿着 main axis(主轴)从 main start 开始往 main end 方向排布
Document
1
2
3
flex-wrap 决定了 flex container 是单行还是多行
属性值 |
说明 |
nowrap |
(默认)单行 |
wrap |
多行 |
wrap-reverse |
多行(对比 wrap,cross start 与 cross end 相反) |
Document
1
2
3
flex-flow 属性是 flex-direction 和 flex-wrap 的简写。顺序任何, 并且都可以省略;
Document
1
2
3
justify-content 决定了 flex items 在 main axis 上的对齐方式
属性值 |
说明 |
flex-start |
(默认值):与 main start 对齐 |
flex-end |
与 main end 对齐 |
center |
居中对齐 |
space-between |
flex items 之间的距离相等,与 main start、main end两端对齐 |
space-around |
flex items 之间的距离相等,flex items 与 main start、main end 之间的距离是 flex items 之间距离的一半 |
space-evenly |
flex items 之间的距离相等,flex items 与 main start、main end 之间的距离等于 flex items 之间的距离 |
Document
1
2
3
4
align-items 决定了 flex items 在 cross axis 上的对齐方式
属性值 |
说明 |
normal |
在弹性布局中,效果和stretch一样 |
stretch |
当 flex items 在 cross axis 方向的 size 为 auto 时,会自动拉伸至填充 flex container |
flex-start |
与 cross start 对齐 |
flex-end |
与 cross end 对齐 |
center |
居中对齐 |
baseline |
与基准线对齐 |
Document
1x
2x
3x
4x
align-content 决定了多行 flex items 在 cross axis 上的对齐方式,用法与 justify-content 类似
属性值 |
说明 |
stretch |
(默认值):与 align-items 的 stretch 类似 |
flex-start |
与 cross start 对齐 |
flex-end |
与 cross end 对齐 |
center |
居中对齐 |
space-between |
flex items 之间的距离相等 与 cross start、cross end两端对齐 |
space-around |
flex items 之间的距离相等 flex items 与 cross start、cross end 之间的距离是 flex items 之间距离的一半 |
space-evenly |
flex items 之间的距离相等 flex items 与 cross start、cross end 之间的距离 等于 flex items 之间的距离 |
Document
1x
2x
3x
4x
2x
3x
4x
2x
3x
4x
order 决定了 flex items 的排布顺序
Document
1
2
3
flex items 可以通过 align-self 覆盖 flex container 设置的 align-items
Document
1
2
3
flex-grow 决定了 flex items 如何扩展(拉伸/成长)
如果所有 flex items 的 flex-grow 总和 sum 超过 1,每个 flex item 扩展的 size 为
flex items 扩展后的最终 size 不能超过 max-width\max-height
Document
1
2
3
flex-shrink 决定了 flex items 如何收缩(缩小)
如果所有 flex items 的 flex-shrink 总和超过 1,每个 flex item 收缩的 size为
flex items 收缩后的最终 size 不能小于 min-width\min-height
Document
1
2
3
4
5
flex-basis 用来设置 flex items 在 main axis 方向上的 base size
决定 flex items 最终 base size 的因素,从优先级高到低
Document
1
2我是coderwhy_why_hahahaha
3
flex 是 flex-grow || flex-shrink || flex-basis 的简写,flex 属性可以指定1个,2个或3个值。
单值语法: 值必须为以下其中之一:
双值语法: 第一个值必须为一个无单位数,并且它会被当作
三值语法:
Document
1
2我是coderwhy_why_hahahaha
3
itemRandomColor.js
function getRandomColor() {
return `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})`
}
const itemEls = document.querySelectorAll(".item")
for (const item of itemEls) {
item.style.backgroundColor = getRandomColor()
}