本篇主要是对 css-tricks.com/snippets/cs… 的翻译,并加以自己的理解。
1 flex布局的用途
让容器能够自行调整item的宽高,来填充可用空间,适应不同的显示设备与屏幕大小。一个弹性容器可以扩展item适应空间也可以收缩item防止溢出。
与常规布局(inline与block)相比,flex布局与方向无关。虽然block与inline在页面上工作得很好,但它们缺乏支持大型或复杂应用程序的灵活性(特别是在改变方向、调整大小、拉伸、收缩等方面)。
Flex布局最适合应用程序的组件和小规模布局,而网格布局则适合较大规模的布局。
2 基本概念与术语
- 容器(父元素):container
- 子元素:flex item flex布局方向基于flex-flow directions
- main size:item在主轴方向上的长度
- cross szie:item在侧轴方向上的长度
3 容器的属性
3.1 diaplay
使用flex布局,需设置容器的display属性为flex。
.container {
display: flex; /* or inline-flex */
}
3.2 flex-direction
定义了主轴的方向
.container {
flex-direction: row | row-reverse | column | column-reverse;
}
几种不同的取值(当容器的dir属性为ltr从左至右时):
- row(flex-direction默认值):
- row-reverse:
- column:
- column-reverse:
3.3 flex-wrap
默认情况所有flex item都会挤到一行里,修改flex-wrap便能改变这种规则。
.container {
flex-wrap: nowrap | wrap | wrap-reverse;
}
- nowrap(默认值):所有items挤在一行
- wrap:沿着top到bottom的方向分成多行
- wrap-reverse:沿着bottom到top方向分成多行
3.4 flex-flow
同时定义flex-direction flex-wrap,
.container {
flex-flow: column wrap;
}
3.5 justify-content对齐方式
用于定义沿着主轴方向的对齐方式
.container {
justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe;
}
flex-start为其默认值 效果:
3.6 align-items
定义了item在横轴上的默认行为。 默认值flex-start 效果:
3.7 align-content
用于控制横轴方向上的items间的对齐方式
- flex-start
- center
- space-between,特点是每行的间距相等,顶部底部空间被挤压
- space-around,顶部至第一行距离*2=行间距
4 flex item的属性
4.1 order
决定各个item的排列顺序
4.2 flex-grow
这定义了item在必要时增长的能力。 它接受作为比例的无单位值。 它决定了items应在容器内部占用多少剩余的可用空间。(flex-shrink决定了item在必要时收缩的能力)
4.3 flex-basis
它允许您在计算其他任何内容之前指定元素的初始/开始大小。 它可以是百分比或绝对值。 下图是flex-basis与width的对比:
- 首先方向不一定与width一致(flex-direction=column的情况)
- 其次flex-basis对绝对定位的flex items无效。
注意❗❗❗❗❗❗:如果同时为元素设置了flex-basis(非auto)和width(或flex-direction:column时的高度),则flex-basis具有优先权。