Summary
The CSS align-items
property defines how the browser distributes space between and around flex items along the cross-axis of their container. This means it works like justify-content
but in the perpendicular direction.
The difference to the align-content
property is that it specifies the alignment of the items within the current flex container's line, whereas align-content
specifies the alignment of the lines themselves.
Initial value | stretch |
---|---|
Applies to | flex containers |
Inherited | no |
Media | visual |
Computed value | as specified |
Animation type | discrete |
Canonical order | the unique non-ambiguous order defined by the formal grammar |
See Using CSS flexible boxes for more properties and information.
Syntax
/* Align to cross-start */ align-items: flex-start; /* Align to cross-end */ align-items: flex-end; /* Center items in the cross-axis */ align-items: center; /* Align the items' baselines */ align-items: baseline; /* Stretch the items to fit */ align-items: stretch; /* Global values */ align-items: inherit; align-items: initial; align-items: unset;
Values
flex-start
- The cross-start margin edge of the flex item is flushed with the cross-start edge of the line.
flex-end
- The cross-end margin edge of the flex item is flushed with the cross-end edge of the line.
center
- The flex item's margin box is centered within the line on the cross-axis. If the cross-size of the item is larger than the flex container, it will overflow equally in both directions.
baseline
- All flex items are aligned such that their baselines align. The item with the largest distance between its cross-start margin edge and its baseline is flushed with the cross-start edge of the line.
stretch
- Flex items are stretched such as the cross-size of the item's margin box is the same as the line while respecting width and height constraints.
-
Formal syntax
flex-start | flex-end | center | baseline | stretch
Example
CSS
#container { display: flex; height:200px; width: 240px; flex-wrap: wrap; align-items: flex-end; /* Can be changed in the live sample */ background-color: #8c8c8c; } div > div { border: 2px solid #8c8c8c; width: 50px; } #item1 { background-color: #8cffa0; min-height: 30px; } #item2 { background-color: #a0c8ff; min-height: 50px; } #item3 { background-color: #ffa08c; min-height: 40px; } #item4 { background-color: #ffff8c; min-height: 60px; } #item5 { background-color: #ff8cff; min-height: 70px; } #item6 { background-color: #8cffff; min-height: 50px; }
HTML
<div id="container"> <div id="item1"></div> <div id="item2"></div> <div id="item3"></div> <div id="item4"></div> <div id="item5"></div> <div id="item6"></div> </div> <select id="itemsAlignment"> <option value="flex-start">flex-start</option> <option value="flex-end" selected>flex-end</option> <option value="center">center</option> <option value="baseline">baseline</option> <option value="stretch">stretch</option> </select>
JavaScript
var itemsAlignment = document.getElementById("itemsAlignment"); itemsAlignment.addEventListener("change", function (evt) { document.getElementById("container").style.alignItems = evt.target.value; });
Specifications
Specification | Status | Comment |
---|---|---|
CSS Flexible Box Layout Module The definition of 'align-items' in that specification. |
Candidate Recommendation | Initial definition |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 21.0-webkit[1] | 20.0 (20.0)[2] | 11.0[3] | 12.10 | 7.0-webkit |
Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | 4.4 | (Yes) | 20.0 (20.0)[2] | No support | 12.10 | 7.0-webkit | ? |
[1] Older versions of the spec treat absolute positioned children as though they are a 0 by 0 flex item. Later spec versions take them out of the flow and set their positions based on align and justify properties. Chrome implements the new behavior beginning with Chrome 52.
[2] To activate flexbox support in Firefox 18 and 19, the user has to visit about:config and change the value of the layout.css.flexbox.enabled
preference to true
. Multi-line flexbox has been supported since Firefox 28.
In addition to the unprefixed support, Gecko 48.0 (Firefox 48.0 / Thunderbird 48.0 / SeaMonkey 2.45) added support for a -webkit
prefixed version of the property for web compatibility reasons behind the preference layout.css.prefixes.webkit
, defaulting to false
. Since Gecko 49.0 (Firefox 49.0 / Thunderbird 49.0 / SeaMonkey 2.46) the preference defaults to true
.
[3] In Internet Explorer 10-11 (but not 12+), if column flex items have align-items: center;
set on them and their content is too large, they will overflow the bounds of their container. See Flexbug #2 for more info.