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.
/* Basic keywords */ align-items: normal; align-items: stretch; /* Positional alignment */ align-items: center; /* Pack items around the center */ align-items: start; /* Pack items from the start */ align-items: end; /* Pack items from the end */ align-items: flex-start; /* Pack flex items from the start */ align-items: flex-end; /* Pack flex items from the end */ align-items: self-start; align-items: self-end; align-items: left; /* Pack items from the left */ align-items: right; /* Pack items from the right */ /* Baseline alignment */ align-items: baseline; align-items: first baseline; align-items: last baseline; /* Overflow alignment (for positional alignment only) */ align-items: safe center; align-items: unsafe center; /* Global values */ align-items: inherit; align-items: initial; align-items: unset;
The difference to the align-content
property is that align-items
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 |
normal
start
on replaced absolutely-positioned boxes, and as stretch
on all other absolutely-positioned boxes.
stretch
.stretch
.stretch
, except for boxes with an aspect ratio or an intrinsic sizes where it behaves like start
.flex-start
flex-end
center
start
end
center
left
start
.right
start
.self-start
self-end
baseline
first baseline
last baseline
stretch
safe
start
.unsafe
flex-start | flex-end | center | baseline | stretch
#container { height:200px; width: 240px; align-items: center; /* Can be changed in the live sample */ background-color: #8c8c8c; } .flex { display: flex; flex-wrap: wrap; } .grid { display: grid; grid-template-columns: repeat(auto-fill, 50px); } div > div { box-sizing: border-box; border: 2px solid #8c8c8c; width: 50px; display: flex; align-items: center; justify-content: center; } #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; font-size: 30px; } select { font-size: 16px; } .row { margin-top: 10px; }
<div id="container" class="flex"> <div id="item1">1</div> <div id="item2">2</div> <div id="item3">3</div> <div id="item4">4</div> <div id="item5">5</div> <div id="item6">6</div> </div> <div class="row"> <label for="display">display: </label> <select id="display"> <option value="flex">flex</option> <option value="grid">grid</option> </select> </div> <div class="row"> <label for="values">align-items: </label> <select id="values"> <option value="normal">normal</option> <option value="flex-start">flex-start</option> <option value="flex-end">flex-end</option> <option value="center" selected>center</option> <option value="baseline">baseline</option> <option value="stretch">stretch</option> <option value="start">start</option> <option value="end">end</option> <option value="self-start">self-start</option> <option value="self-end">self-end</option> <option value="left">left</option> <option value="right">right</option> <option value="first baseline">first baseline</option> <option value="last baseline">last baseline</option> <option value="safe center">safe center</option> <option value="unsafe center">unsafe center</option> <option value="safe right">safe right</option> <option value="unsafe right">unsafe right</option> <option value="safe end">safe end</option> <option value="unsafe end">unsafe end</option> <option value="safe self-end">safe self-end</option> <option value="unsafe self-end">unsafe self-end</option> <option value="safe flex-end">safe flex-end</option> <option value="unsafe flex-end">unsafe flex-end</option> </select> </div>
Specification | Status | Comment |
---|---|---|
CSS Box Alignment Module Level 3 The definition of 'align-items' in that specification. | Working Draft | Adds the [ first | last ]? baseline , self-start , self-end , start , end , left , right , unsafe | safe values. |
CSS Flexible Box Layout Module The definition of 'align-items' in that specification. | Candidate Recommendation | Initial definition |
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 211 |
Yes Yes -webkit- |
202 49 -webkit- 18 —?3 |
115 | 12.1 | 7 -webkit- |
first baseline and last baseline
|
? | ? | 45 | ? | ? | ? |
start and end
|
? | ? | 45 | ? | ? | ? |
left and right
|
? | ? | 45 | ? | ? | ? |
Feature | Android webview | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic support | 4.4 | ? |
Yes Yes -webkit- |
202 49 -webkit- 18 —?3 |
No | 12.1 | 7 -webkit- |
first baseline and last baseline
|
? | ? | ? | 45 | ? | ? | ? |
start and end
|
? | ? | ? | 45 | ? | ? | ? |
left and right
|
? | ? | ? | 45 | ? | ? | ? |
1. Older versions of the specification treat absolute positioned children as though they are a 0 by 0 flex item. Later specification versions take the children out of the flow and set their positions based on align and justify properties. Chrome implements the new behavior beginning with Chrome 52.
2. Multi-line flexbox has been supported since Firefox 28.
3. From version 18: 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. From version 48: this feature is behind the layout.css.prefixes.webkit
preference (needs to be set to true
). To change preferences in Firefox, visit about:config.
5. In Internet Explorer 10 and 11, if column flex items have align-items: center;
set on them and their content is too large, then they will overflow the bounds of their container. See Flexbug #2.
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/align-items