The flex-basis
CSS property specifies the initial main size of a flex item. This property determines the size of the content-box unless specified otherwise using box-sizing
.
/* Specify <'width'> */ 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; /* Automatically size based on the flex item’s content */ flex-basis: content; /* Global values */ flex-basis: inherit; flex-basis: initial; flex-basis: unset;
Initial value | auto |
---|---|
Applies to | flex items, including in-flow pseudo-elements |
Inherited | no |
Percentages | refer to the flex container's inner main size |
Media | visual |
Computed value | as specified, but with relative lengths converted into absolute lengths |
Animation type | a length, percentage or calc(); |
Canonical order | the length or percentage before the keyword, if both are present |
Syntax
The flex-basis
property is specified as either the keyword content
or a <'width'>
.
Values
<'width'>
- Defined as a number followed by an absolute unit such as
px
,mm
orpt
, or a percentage of the parent flex container main size property. Negative values are invalid. content
- Indicates automatic sizing, based on the flex item’s content.
-
Note:Note that this value was not present in the initial release of Flexible Box Layout, and thus some older implementations will not support it. The equivalent effect can be had by using auto together with a main size (width or height) of auto.
Note: Brief history
- Originally, "flex-basis:auto" meant "look at my width or height property".
- Then, flex-basis:auto was changed to mean automatic-sizing, and "main-size" was introduced as the "look at my width or height property" keyword. It was implemented in bug 1032922.
- Then, that change was reverted in bug 1093316, so "auto" once again means "look at my width or height property"; and a new 'content' keyword is being introduced to trigger automatic sizing. (bug 1105111 covers adding that keyword).
Formal syntax
content | <'width'>
Example
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: 20px; text-align: center; position: relative; } .flex:after { position: absolute; z-index: 1; left: 0; top: 100%; margin-top: 10px; width: 100%; color: #333; font-size: 18px; } .flex1 { flex-basis: auto; } .flex1:after { content: 'auto'; } .flex2 { flex-basis: -webkit-max-content; flex-basis: -moz-max-content; flex-basis: max-content; } .flex2:after { content: 'max-content'; } .flex3 { flex-basis: -webkit-min-content; flex-basis: -moz-min-content; flex-basis: min-content; } .flex3:after { content: 'min-content'; } .flex4 { flex-basis: -webkit-fit-content; flex-basis: -moz-fit-content; flex-basis: fit-content; } .flex4:after { content: 'fit-content'; } .flex5 { flex-basis: content; } .flex5:after { content: 'content'; } .flex6 { flex-basis: -webkit-fill-available; flex-basis: -moz-available; flex-basis: fill; } .flex6:after { content: 'fill/-webkit-fill-available/-moz-available'; }
Results
Specifications
Specification | Status | Comment |
---|---|---|
CSS Flexible Box Layout Module The definition of 'flex-basis' in that specification. |
Candidate Recommendation | Initial definition |
Browser compatibility
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 21 -webkit- | Yes Yes -webkit- | 221 49 -webkit- 18 — 283 | 114 | 12.1 15 -webkit- | 9 7 -webkit- |
auto | 21 | Yes | 18 | 11 | 12.1 | 7 -webkit- |
content | No | Yes | No | No | No | No |
Feature | Android webview | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic support | ? | ? | Yes Yes -webkit- | 221 49 -webkit- 18 — 283 | No | 12.1 15 -webkit- | 9.2 |
auto | ? | ? | Yes | 18 | ? | 12.1 | ? |
content | ? | No | Yes | No | No | No | No |
1. Since Firefox 28, multi-line flexbox is supported.
2. From version 44: this feature is behind the layout.css.prefixes.webkit
preference (needs to be set to true
). To change preferences in Firefox, visit about:config.
3. From version 18 until version 28 (exclusive): this feature is behind the layout.css.flexbox.enabled
preference (needs to be set to true
). To change preferences in Firefox, visit about:config.
4. When a non-auto
flex-basis
is specified, Internet Explorer 10 and 11 always uses a content-box
box model to calculate the size of a flex item, even if box-sizing: border-box
is applied to the element. See Flexbug #7 for more info.
See also
- CSS Flexbox Guide: Basic Concepts of Flexbox
- CSS Flexbox Guide: Controlling Ratios of flex items along the main axis
width