flex-basis
flex-basis CSS 属性设置 弹性项目 的初始主尺寸。它设置内容框的大小,除非通过 box-sizing 另行设置。
注意: 建议使用 flex 缩写,并带有像 auto 或 initial 这样的关键字值,而不是单独设置 flex-basis。这些关键字值扩展为 flex-grow、flex-shrink 和 flex-basis 的可靠组合,有助于实现通常所需的弹性行为。
试一试
flex-basis: auto;
flex-basis: 0;
flex-basis: 200px;
<section class="default-example" id="default-example">
<div class="transition-all" id="example-element">Item One</div>
<div>Item Two</div>
<div>Item Three</div>
</section>
.default-example {
border: 1px solid #c5c5c5;
width: auto;
max-height: 300px;
display: flex;
}
.default-example > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
margin: 10px;
flex-grow: 1;
flex-shrink: 1;
flex-basis: auto;
}
在此示例中,flex-grow 和 flex-shrink 属性在所有三个项目上都设置为 1,表示弹性项目可以从初始 flex-basis 增长和收缩。
此演示更改了设置在第一个弹性项目上的 flex-basis 值,使其增长或收缩以填充可用空间。其他弹性项目也会改变大小;它们至少为 min-content 大小。例如,当第一个项目的 flex-basis 设置为 200px 时,它将从 200px 开始,但随后会收缩以适应可用空间。
如果 flex-basis 设置为 auto 以外的值,并且该弹性项目也设置了 width(或 flex-direction: column 情况下的 height),则 flex-basis 值优先。
语法
/* Specify <'width'> */
flex-basis: 10em;
flex-basis: 3px;
flex-basis: 50%;
flex-basis: auto;
/* Intrinsic sizing keywords */
flex-basis: max-content;
flex-basis: min-content;
flex-basis: fit-content;
/* Automatically size based on the flex item's content */
flex-basis: content;
/* Global values */
flex-basis: inherit;
flex-basis: initial;
flex-basis: revert;
flex-basis: revert-layer;
flex-basis: unset;
flex-basis 属性被指定为关键字 content 或 <'width'>。
值
content-
表示基于弹性项目内容自动调整大小。
<'width'>-
以下任何单位:
<length>设置绝对值。<percentage>设置包含块内容区域宽度或高度的百分比。flex-basis的百分比值根据弹性容器解析。如果弹性容器的大小不确定,则flex-basis的使用值是content。auto在水平书写模式下使用width的值,在垂直书写模式下使用height的值;当相应值也为auto时,则使用content值。max-content设置固有的首选宽度。min-content设置固有的最小宽度。fit-content设置包含块内容区域的最大可能大小,受min-content和max-content值限制,并根据当前元素的内容计算。
正式定义
正式语法
flex-basis =
content |
<'width'>
<width> =
auto |
<length-percentage [0,∞]> |
min-content |
max-content |
fit-content( <length-percentage [0,∞]> ) |
<calc-size()> |
<anchor-size()> |
stretch |
fit-content |
contain
<length-percentage> =
<length> |
<percentage>
<calc-size()> =
calc-size( <calc-size-basis> , <calc-sum> )
<anchor-size()> =
anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )
<calc-size-basis> =
<size-keyword> |
<calc-size()> |
any |
<calc-sum>
<calc-sum> =
<calc-product> [ [ '+' | '-' ] <calc-product> ]*
<anchor-name> =
<dashed-ident>
<anchor-size> =
width |
height |
block |
inline |
self-block |
self-inline
<calc-product> =
<calc-value> [ [ '*' | / ] <calc-value> ]*
<calc-value> =
<number> |
<dimension> |
<percentage> |
<calc-keyword> |
( <calc-sum> )
<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN
示例
设置弹性项目的初始尺寸。
HTML
<ul class="container">
<li class="flex flex1">1: flex-basis test</li>
<li class="flex flex2">2: flex-basis test</li>
<li class="flex flex3">3: flex-basis test</li>
<li class="flex flex4">4: flex-basis test</li>
<li class="flex flex5">5: flex-basis test</li>
</ul>
<ul class="container">
<li class="flex flex6">6: flex-basis test</li>
</ul>
CSS
.container {
font-family: "Arial", sans-serif;
margin: 0;
padding: 0;
list-style-type: none;
display: flex;
flex-wrap: wrap;
}
.flex {
background: #6ab6d8;
padding: 10px;
margin-bottom: 50px;
border: 3px solid #2e86bb;
color: white;
font-size: 14px;
text-align: center;
position: relative;
}
.flex::after {
position: absolute;
z-index: 1;
left: 0;
top: 100%;
margin-top: 10px;
width: 100%;
color: #333333;
font-size: 12px;
}
.flex1 {
flex-basis: auto;
}
.flex1::after {
content: "auto";
}
.flex2 {
flex-basis: max-content;
}
.flex2::after {
content: "max-content";
}
.flex3 {
flex-basis: min-content;
}
.flex3::after {
content: "min-content";
}
.flex4 {
flex-basis: fit-content;
}
.flex4::after {
content: "fit-content";
}
.flex5 {
flex-basis: content;
}
.flex5::after {
content: "content";
}
结果
Flex basis 0 与 0%
此示例演示了当 flex-direction 设置为 column 且弹性容器和弹性项目没有设置高度时,flex-basis 为 0 与 flex-basis 为 0% 之间的区别;虽然 0 是绝对长度,但百分比 flex-basis 值解析为 content 值。
HTML
我们包含两个结构相同的弹性容器,它们将以类似的方式进行样式设置,除了它们的 flex-basis 值。每个容器都有两个子元素:一个标题 <div> 和一个 <section>。<section> 元素有一个内容 <div> 子元素,它不会被设置为弹性项目,但会给定一个高度。
<div class="container basis-0">
<div>heading</div>
<section>
flex-basis: 0;
<div class="content"></div>
</section>
</div>
<div class="container basis-0-percent">
<div>heading</div>
<section>
flex-basis: 0%;
<div class="content"></div>
</section>
</div>
CSS
我们将容器样式设置为并排显示的行内弹性容器,以便更好地比较它们。我们将 flex-direction 设置为 column。第一个容器的弹性项目具有 flex-basis 值 0,而第二个容器的弹性项目具有 flex-basis 值 0%。弹性容器及其弹性项目都没有明确设置高度,但 section 元素的高度不能超过 200px,并且其子元素的高度为 300px。
.container {
width: 40vw;
padding: 1rem;
border: 1px dashed blue;
display: inline-flex;
flex-direction: column;
}
section {
border: 1px solid red;
overflow: auto;
min-height: 200px;
}
.content {
background: wheat;
height: 300px;
}
.container.basis-0 > * {
flex-basis: 0;
}
.container.basis-0-percent > * {
flex-basis: 0%;
}
结果
在第一个容器中,flex-basis: 0,<section> 元素的初始主尺寸为零,它增长到 200px 的高度限制。在第二个容器中,flex-basis: 0%,<section> 元素的初始主尺寸为 300px,因为弹性容器没有设置高度,百分比 flex-basis 值解析为 content 值。
规范
| 规范 |
|---|
| CSS 弹性盒子布局模块第 1 级 # flex-basis 属性 |
浏览器兼容性
加载中…