用于 | 属性名 | CSS 版本 |
---|---|---|
① 设置 伸缩项的 伸缩性和比例 (简写属性,用于伸缩项)。 | flex |
3 |
❶ 伸缩项 主轴上的 宽或高的 剩余空间的分配和比例 ( 数字值,默认不分配 0 ) |
flex-grow |
3 |
❷ 设置 伸缩项的 收缩因子/比例 (数字值,默认 等比例收缩 1 ) |
flex-shrink |
3 |
❸ 伸缩项的 主轴方向上的 初始 宽或高 (伸缩前的 假设大小 ,不一定等于真实 宽或高,默认 按照宽高比 auto ) |
flex-basis |
3 |
② 同时设置 主轴方向和 伸缩项的换行 (简写属性) | flex-flow |
3 |
❶ 设置 主轴方向 和 伸缩项排列方向 (用于 伸缩容器,默认值 正文本方向row ) |
flex-direction |
3 |
❷ 设置 伸缩容器中 伸缩项的换行 (用于 伸缩容器,默认 不换行 nowrap ) |
flex-wrap |
3 |
③ 设置 伸缩容器 或 网格容器中 项目(子元素)的 排列顺序 (正负整数值,默认值 0 , 用于伸缩项/项目 本身) |
order |
3 |
Flexible Box Layout
)是 CSS 的模块之一, 针对 用户界面设计 而优化的 CSS 盒子模型。
flex
flex-basis
flex-direction
flex-flow
flex-grow
flex-shrink
flex-wrap
order
align-content
、align-self
、align-items
和 justify-content
最初出现在 Flexbox 规范中,如今在 Box Alignment 中定义。align-content
align-items
align-self
justify-content
place-content
row-gap
column-gap
gap
Flexbox
)
Flexbox
是 CSS Flexible Box Layout Module
的常用名称,用于 单个维度(行或列)中 显示项目的布局模型。flexbox
是一维的布局,是因为 一次只能处理 一个维度上的元素布局,一行或者一列。作为对比的是 二维布局 CSS 网格布局 ( Grid Layout
),可以同时处理 行和列上的布局。Flex Container
)
display
⇒ 伸缩容器 + 伸缩项 ⇒ 伸缩 格式化上下文。
display
的属性值: 定义一个 flexbox
(伸缩盒布局),需要 在一个父级元素上 使用 display
属性的值:❶ flex
或 ❷ inline-flex
。
flex container
(❶ 伸缩容器),而它的所有子元素 将变成 flex item
(❷ 伸缩项)。flex
值 ⇒ 将元素渲染成为 一个 ❶ 块级 伸缩容器,使用 inline-flex
值 ⇒ 将元素渲染成一个 ❷ 行内级 伸缩容器。flex formatting context
),这类似于 块的格式化上下文。margins
)不会和 伸缩项的外边距 合并。Flex Item
)
Main Axis
)
flex-direction
定义,另一根轴 垂直于它。main-Start
) 和 主轴终点(main-end
): 伸缩项 被放置于 伸缩容器中,从主轴起点 到主轴终点 进行排列。Cross Axis
)
Cross-Start
) 和 交叉轴终点(Cross-end
): 换行的方向 ⇒ 在容器中 沿交叉轴方向 从起点向终点分布。Flex
)flex-flow
flex-direction
flex-wrap
flex
flex-grow
flex-shrink
flex-basis
order
flex
属性
flex-grow
flex-grow
: ;
(数字,不带单位)0
,负值无效。flex-shrink
flex : ;
(数字,不带单位)1
,负值无效。flex-basis
flex-basis
: auto | | | content;
(长度值,带单位 ,百分比值,关键字值)auto
。若值为0
,则必须 加上单位,以免被视作 伸缩性。flex-grow: 0
flex-shrink: 1
flex-basis: auto
auto
、initial
、none
或 无单位 正的数字。flex-grow
> flex-shrink
> flex- basis
): 被当作
的值 ⇒ 剩余空间分配。
flex: 1 0px;
值 假设为1
(默认值),等比例 收缩。
值 假设为0
= 无假设大小,按照最小 内容大小 显示。 (非默认值,默认值是 auto
按照宽或高 比例显示)。
flex-basis
会从 默认值auto
变为0px
.
的值 ⇒ 假设大小宽或高。none
,auto
或 initial
。
的值。
的值。
的值。grow
→ shrink
→ basis
)
的值。
的值。
的值。initial
initial
⇔ flex: 0 1 auto;
。auto
auto
⇔ flex: 1 1 auto;
none
none
⇔ flex: 0 0 auto;
。flex-basis: auto
;flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ];
/* 关键字值 Keyword values */
flex: auto;
flex: initial;
flex: none;
/* 一个值 ⇒ 分配剩余空间 One value, unitless number: flex-grow */
flex: 2;
/* 一个值 ⇒ 假设大小 One value, width/height: flex-basis */
flex: 10em;
flex: 30%;
flex: min-content;
/* 两个值 ⇒ 分配剩余空间 比例 + 假设大小 Two values: flex-grow | flex-basis */
flex: 1 30px;
/* 两个值 ⇒ 分配剩余空间 比例 + 收缩比例 Two values: flex-grow | flex-shrink */
flex: 2 2;
/* 三个值 ⇒ 配剩余空间 比例 + 收缩比例 + 假设大小 (初始大小) Three values: flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;
/* 全局值 Global values */
flex: inherit;
flex: initial;
flex: unset;
flex-grow
属性
main size
): 主轴上的 宽或高。
flex-grow
= 剩余空间 分配 给 伸缩项的比例 ⇒ flex-grow
有效 ⇒ 剩余空间 分配到 伸缩项的内容区 (content-box
,外边距、边框、内边距等 大小不变,只有内容区的宽或高 改变)flex-grow
无效。flex-basis:0;
无假设大小 ⇒ 此时,即使 伸缩容器大小不足时, 也会有剩余空间 ⇒ flex-grow
有效 。flex items
), 包括 in-flow pseudo-elements
.flex-grow
与 ❶ flex-shrink
和 ❷ flex-basis
一起使用,通常使用 flex
简写属性 来定义,以确保 设置了所有值。flex-grow
: ;
0
。该元素不分配 父元素的剩余空间,如果值大于0
,表示分配。值越大,分配的剩余空间越多。/* 数字值 values */
flex-grow: 3;
flex-grow: 0.6;
/* 全局值 Global values */
flex-grow: inherit;
flex-grow: initial;
flex-grow: unset;
<h2>做人h2>
<div class="flexcontainer">
<div class="flexitem1">不怨天尤人,div>
<div class="flexitem2">不恶语伤人,div>
<div class="flexitem3">群处守嘴,div>
<div class="flexitem4">独处守心。div>
div>
.flexcontainer{
border: solid 5px lightseagreen;
width: 40%;
margin: 10px;
padding: 10px;
display: flex;
font-weight: bold;
}
.flexcontainer div{
border: dashed 5px lightskyblue;
padding: 10px;
margin: 10px;
/*flex-grow: 1;*/
/*-webkit-flex-grow: 1;*/
flex-shrink: 1;
flex-basis: 0;
}
.flexitem1{
flex-grow: 1;
}
.flexitem2{
flex-grow: 2;
}
.flexitem3{
flex-grow: 3;
}
.flexitem4{
flex-grow: 4;
}
<div class="flexcontainer">
<div class="flexitem1 green">不怨天尤人,div>
<div class="flexitem2 red">不恶语伤人,div>
<div class="flexitem3 green">群处守嘴,div>
<div class="flexitem4 red">独处守心。div>
div>
.flexcontainer{
border: solid 5px lightseagreen;
width:700px;
margin: 10px;
padding: 10px;
display: flex;
font-weight: bold;
}
.flexcontainer div{
border: dashed 5px lightskyblue;
padding: 10px;
margin: 10px;
/*伸缩容器有剩余空间时,剩余空间的分配*/
/*flex-grow: 0;!*不分配剩余空间*!*/
/*flex-grow: 1;!*等比例分配 剩余空间*!*/
}
.flexitem1{
/*flex-grow: 1;*/
flex-basis: 50px;
}
.flexitem2{
/*flex-grow: 2;*/
width: 100px;
flex-basis: 100px;/*父元素宽度足够时 +不分配剩余空间 ⇒ 实际宽度 = 此值,父元素的宽度不够时,元素的宽度实际值 并不是此值*/
}
.flexitem3{
/*flex-grow: 3;*/
flex-basis: 50px;
}
.flexitem4{
/*flex-grow: 4;*/
-webkit-flex-basis: 100px;
}
.green{
background-color: lightgreen;
}
.red{
background-color: lightpink;
}
flex-grow: 0;
flex-grow: 1;
(相同数字 = 等比例)
flex-shrink
属性,美 /ʃrɪŋk/
flex-shrink
进行缩小。flex-shrink
与 flex-grow
和 flex-basis
一起使用,通常使用 flex
简写 来定义。content size
) 以下。
flex-basis: 0;
= 不设置 预设宽高时 ⇒ 显示的 就是伸缩项的 最小 内容大小。min-width
,min-height
。flex : ;
1
。当 伸缩空间不够时,由于 收缩因子 flex-shrink
的默认值为1
,所以所有 伸缩项 被等比例被压缩。
/* values */
flex-shrink: 2;
flex-shrink: 0.6;
/* Global values */
flex-shrink: inherit;
flex-shrink: initial;
flex-shrink: unset;
flex-basis
,flex-grow
。flex-shrink
成反比。
width:41%;
) ⇒ 伸缩项 不收缩 ⇒ 收缩因子 无效。
flex-shrink: 0;
⇒ 伸缩容器 空间不够时,会溢出。
500px
width
= 500px
-450px
= 50px
1300
.flexcontainer div{
border: dashed 5px lightskyblue;
padding: 10px;
margin: 10px;
flex-shrink: 0;/*即便溢出 也不收缩*/
flex-shrink: 1;/*伸缩项 缩小的比例相同 ⇒ 相当于乘以 同一个百分比 ⇒ 等比例收缩 ≠ 各项收缩的大小一样,而是比例一样*/
flex-shrink: 3;/*伸缩项 缩小的比例相同 ⇒ 相当于乘以 同一个百分比 ⇒ 等比例收缩 ≠ 各项收缩的大小一样,而是比例一样*/
/*flex-basis: 0;!*伸缩容器的宽度不足时 ⇒ 有剩余空间,所有元素,都按照 相同的最小宽度 处理*!*/
}
.flexitem1{
flex-shrink: 1;
flex-basis: 50px;
}
.flexitem2{
flex-shrink: 2;
flex-basis: 100px;
}
.flexitem3{
flex-shrink: 3;
flex-basis: 50px;
}
.flexitem4{
flex-shrink: 4;
flex-basis: 100px;
}
.green{
background-color: lightgreen;
}
.red{
background-color: lightpink;
}
flex-basis
,美 /ˈbeɪsɪs/
flex-grow
和 flex-shrink
生效前的尺寸。flex-basis
= 默认 伸缩项 内容区 实际占用的空间(宽度或高度)。flex-basis
⇒ 主轴方向的假设大小,并不是 真实大小,其真实大小 取决于 伸缩容器(父元素)的宽度,伸缩项的 min-width
,max-width
等。
flex-basis
假设大小 >宽高 width
/ height
flex-basis
(auto
值除外)和 ❶ width
(或 ❷ height
—— 对于 flex-direction: column
),则 flex-basis
具有 更高优先级。优先级 高于宽高。
flex-basis
: auto | | | content;
auto
。 自动按照 伸缩项 宽或高比例 显示尺寸大小。content
: 宽或高 ⇒ 根据内容 自动调整大小,而不是伸缩项本身的 宽或高比例。flex-basis:0
和 flex-basis:auto
的区别。
flex-basis
⇒ 指定 初始尺寸,当设置为0
时(绝对 弹性元素),此时相当于告诉 flex-grow
和 flex-shrink
在伸缩的时候 不需要考虑 元素的尺寸;
flex-grow
值 是一样的话,那么他们的尺寸 一定是一样的。auto
时(相对 弹性元素) ⇒ 需要在伸缩时 考虑 元素尺寸。min-content
/ max-content
/* 长度值/关键字 */
flex-basis: 10em;
flex-basis: 3px;
flex-basis: auto;
/* 内在/固有的尺寸关键字 Intrinsic sizing keywords */
flex-basis: fill;
flex-basis: max-content;
flex-basis: min-content;
flex-basis: fit-content;
/* 根据伸缩项的内容 自动调整大小 */
flex-basis: content;
/* 全局值 Global values */
flex-basis: inherit;
flex-basis: initial;
flex-basis: unset;
.flexcontainer div{
border: dashed 5px lightskyblue;
padding: 10px;
margin: 10px;
flex-basis: auto;/*伸缩容器的宽度不足时 ⇒ 无剩余空间*/
flex-basis: content;/*伸缩容器的宽度不足时 ⇒ 无剩余空间*/
flex-basis: 0;/*伸缩容器的宽度不足时 ⇒ 有剩余空间,所有元素,都按照 相同的最小宽度 处理*/
flex-basis: 100px;/*按照相同比例,分配空间*/
flex-basis: 300px;/*按照相同比例,分配空间*/
}
flex-basis: auto;
.flexitem1{
width: 50px;
}
.flexitem2{
width: 100px;
}
② 设置 伸缩项的宽度: 第一项和第二项的 宽度比例是1:2
,则分配空间时, 伸缩项的内容区width
的比例,也是1:2
❷ flex-basis: content;
③ 伸缩项 都设置为: flex-basis: 0;
④ 伸缩项 都设置为 相同值: flex-basis: 100px;
.flexitem1{
flex-basis: 50px;
}
.flexitem2{
flex-basis: 100px;/*父元素宽度足够时 等于此值,父元素的宽度不够时,元素的宽度实际值 并不是此值*/
}
.flexitem3{
flex-basis: 50px;
}
.flexitem4{
flex-basis: 100px;
}
⑤ 设置为不同值+ 主轴横向+ 伸缩容器(父元素)宽度不够 ⇒ 相当于 伸缩项 内容区的宽度之比: 1:2:1:2
⑥ 伸缩项的 最大宽度 max-width
+ 最小宽度min-width
和 假设大小
min-width: 60px;
flex-basis: 55px;
flex-flow
, 美 /floʊ/ ,流向
flex-direction: row
flex-direction: row | row-reverse | column | column-reverse;
flex-wrap: nowrap
flex-wrap: nowrap | wrap | wrap-reverse;
flex containers
)flex-flow: <'flex-direction'> || <'flex-wrap'>;
/* 只设置 主轴方向和伸缩项的 排列方向 flex-flow: <'flex-direction'> */
flex-flow: row;
flex-flow: row-reverse;
flex-flow: column;
flex-flow: column-reverse;
/* 只设置 伸缩项的换行 flex-flow: <'flex-wrap'> */
flex-flow: nowrap;
flex-flow: wrap;
flex-flow: wrap-reverse;
/* 同时设置 flex-flow: <'flex-direction'> and <'flex-wrap'> */
flex-flow: row nowrap;
flex-flow: column wrap;
flex-flow: column-reverse wrap-reverse;
/* 全局值 Global values */
flex-flow: inherit;
flex-flow: initial;
flex-flow: unset;
flex-direction
flex container
)中 放置 伸缩项(flex items
)的方式,定义了 主轴的方向和伸缩项的 排列方向(正方向或反方向reverse
)。dir
属性
row
和 row-reverse
受 伸缩容器的 方向性 的影响。dir
属性是 ltr
row
表示从左到右 定向的水平轴,而 row-reverse
表示 从右到左;dir
属性是 rtl
row
表示 从右到左 定向的水平轴,而 row-reverse
表示 从左到右。writing-mode
属性
writing-mode
不同 ⇒ 主轴方向 和 伸缩项排列方向 也不同。flex containers
)display
属性的值:❶ flex
或 ❷ inline-flex
⇒ 这个父元素 = 伸缩容器。.flexcontainer {
border: solid 5px lightseagreen;
width:700px;
/*width:500px;*/
/*width: 450px;*/
margin: 10px;
padding: 10px;
font-weight: bold;
/* 该元素 设置为 伸缩容器*/
display: flex;
/*主轴和方向*/
flex-direction: row;/*正文本方向,水平书写模式下*/
/*flex-direction: row-reverse;!*反文本方向,水平书写模式下*!*/
/*flex-direction: column;!*正块轴方向,水平书写模式下*!*/
/*flex-direction: column-reverse;!*反块轴方向,水平书写模式下*!*/
/*writing-mode: horizontal-tb;!*前面指定 ❶ 内联级内容 / 文本 的 主方向 + 后面指定 ❷ 块流方向和文本换行方向*!*/
/*writing-mode: vertical-lr;*/
/*writing-mode: vertical-rl;*/
}
⑵ 主轴和伸缩项方向的 语法和属性值 (示例图 代码见上方)
flex-direction: row | row-reverse | column | column-reverse;
★ 书写模式 writing-mode
不同 ⇒ 主轴也不同。
① 正文本方向 (默认值): row
② 反文本方向: row-reverse
③ 正块轴方向: column
④ 反块轴方向: column-reverse
⑶ 合法值
/* 正文本方向 */
flex-direction: row;
/* 反文本方向 */
flex-direction: row-reverse;
/* 正块轴方向/文本换行方向 */
flex-direction: column;
/* 反块轴方向 */
flex-direction: column-reverse;
/* 全局值 Global values */
flex-direction: inherit;
flex-direction: initial;
flex-direction: unset;
flex-wrap
,美 /ræp/
flex containers
) ⇒ 用在伸缩容器上 ,但影响的是 伸缩容器内部的 多个伸缩项 溢出容器时的 换行。display
属性的值:❶ flex
或 ❷ inline-flex
⇒ 这个父元素 = 伸缩容器。.flexcontainer {
border: solid 5px lightseagreen;
/*width:700px;*/
/*width:500px;*/
width: 450px;
/*height: 500px;*/
margin: 10px;
padding: 10px;
display: flex;
font-weight: bold;
flex-wrap: nowrap;
flex-wrap: wrap;
flex-wrap: wrap-reverse;
}
flex-wrap: nowrap | wrap | wrap-reverse;
nowrap
wrap
wrap-reverse
flex-direction: row
+ 水平书写模式 writing-mode:horizontal-tb;
。
flex-basis: auto
+ 水平书写模式 writing-mode:horizontal-tb;
flex-basis
的值 采用元素 内容的尺寸。flex-wrap :nowrap
。flex-grow:0;
、flex-shrink:1;
)order
order
属性的值的增序/升序 进行布局。 ⇒ 数字越大 ⇒ 元素的位置 越靠后。order
属性值的元素 ⇒ 按照 在源代码中 出现的顺序 进行布局。order
仅仅对元素的 ❶ 视觉顺序 (visual order
) 产生作用,并不会影响元素的 ❶ 逻辑或 ❷ 制表符tab
顺序。order
不可以用于 非视觉媒体,例如 语音speech
。flex items
) 和 ❷ 绝对定位的 伸缩容器的子元素 (absolutely-positioned flex container children
)order: ;
CSS 数据类型是一种特殊的 数值
类型,它表示一个 整数,可以是正数 或负数。Initial value
): 0
Inherited
): no
/* 正负 整数值 values */
order: 5;
order: -5;
/* 全局值 Global values */
order: inherit;
order: initial;
order: unset;
.flexcontainer {
border: solid 5px lightseagreen;
width:700px;
/*width:500px;*/
margin: 10px;
padding: 10px;
font-weight: bold;
display: flex;
/*主轴和方向*/
/*flex-direction: row;!*正文本方向,水平书写模式下*!*/
flex-direction: row-reverse;/*反文本方向,水平书写模式下*/
}
.flexcontainer div {
border: dashed 5px lightskyblue;
padding: 10px;
margin: 10px;
}
.flexitem1 {
width: 50px;
/*order: 1;!*数字越大,位置越靠后*!*/
/*order: 0;*/
/*order: -1;*/
}
.flexitem2 {
width: 100px;
/*order: 2;*/
}
.flexitem3 {
width: 50px;
/*order: 3;*/
/*order: 4;*/
}
.flexitem4 {
width: 100px;
/*order: 4;*/
}
.flexitem1 {
width: 50px;
order: 1;/*数字越大,位置越靠后*/
}
flex-direction: row-reverse;
.flexitem1 {
width: 50px;
order: 1;/*数字越大,位置越靠后*/
/*order: 0;*/
/*order: -1;*/
}
.flexitem2 {
width: 100px;
order: 2;
}
.flexitem1 {
width: 50px;
order: 1;/*数字越大,位置越靠后*/
/*order: 0;*/
/*order: -1;*/
}
.flexitem2 {
width: 100px;
order: 2;
}
.flexitem3 {
width: 50px;
order: 3;
/*order: 4;*/
}
.flexitem4 {
width: 100px;
order: -4;
}
友情链接