files/en-us/web/css/reference/properties/align-content/index.md
The CSS align-content property sets the distribution of space between and around content items along a flexbox's cross axis, or a grid or block-level element's block axis.
This property has no effect on single line flex containers (i.e., ones with flex-wrap: nowrap).
The interactive example below uses grid layout to demonstrate some of the values of this property.
{{InteractiveExample("CSS Demo: align-content")}}
align-content: start;
align-content: center;
align-content: space-between;
align-content: space-around;
<section class="default-example" id="default-example">
<div class="example-container">
<div class="transition-all" id="example-element">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
</div>
</section>
#example-element {
border: 1px solid #c5c5c5;
display: grid;
grid-template-columns: 60px 60px;
grid-auto-rows: 40px;
column-gap: 10px;
height: 180px;
}
#example-element > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
}
/* Normal alignment */
align-content: normal;
/* Basic positional alignment */
/* align-content does not take left and right values */
align-content: start;
align-content: center;
align-content: end;
align-content: flex-start;
align-content: flex-end;
/* Baseline alignment */
align-content: baseline;
align-content: first baseline;
align-content: last baseline;
/* Distributed alignment */
align-content: space-between;
align-content: space-around;
align-content: space-evenly;
align-content: stretch;
/* Overflow alignment */
align-content: safe center;
align-content: unsafe center;
/* Global values */
align-content: inherit;
align-content: initial;
align-content: revert;
align-content: revert-layer;
align-content: unset;
normal
align-content value was set.start
center
end
flex-start
start.flex-end
end.baseline, first baseline, last baseline
: Specifies participation in first- or last-baseline alignment: aligns the alignment baseline of the box's first or last baseline set with the corresponding baseline in the shared first or last baseline set of all the boxes in its baseline-sharing group.
The fallback alignment for first baseline is start, the one for last baseline is end.
space-between
space-around
space-evenly
stretch
auto-sized items have their size increased equally (not proportionally), while still respecting the constraints imposed by {{cssxref("max-height")}}/{{cssxref("max-width")}} (or equivalent functionality), so that the combined size exactly fills the alignment container along the cross axis.safe
start.unsafe
[!NOTE] The
<content-distribution>values (space-between,space-around,space-evenly, andstretch) have no effect in block layout as all the content in that block is treated as a single alignment-subject.
{{CSSInfo}}
{{csssyntax}}
In this example, you can switch between three different {{cssxref("display")}} property values, including flex, grid, and block. You can also switch between the different values for align-content.
<section>
<div class="olive">Olive</div>
<div class="coral">Coral</div>
<div class="deepskyblue">Deep
sky
blue</div>
<div class="orchid">Orchid</div>
<div class="slateblue">Slateblue</div>
<div class="maroon">Maroon</div>
</section>
<fieldset class="controls">
<legend>Controls</legend>
<div class="row">
<label for="display">display: </label>
<select id="display">
<option value="block" selected>block</option>
<option value="flex">flex</option>
<option value="grid">grid</option>
</select>
</div>
<div class="row">
<label for="alignContent">align-content: </label>
<select id="alignContent">
<option value="normal" selected>normal</option>
<option value="start">start</option>
<option value="center">center</option>
<option value="end">end</option>
<option value="flex-start">flex-start</option>
<option value="flex-end">flex-end</option>
<option value="space-between">space-between</option>
<option value="space-around">space-around</option>
<option value="space-evenly">space-evenly</option>
</select>
</div>
<p>CSS applied</p>
<pre>
section {
display: <span id="displayStyle">block</span>;
align-content: <span id="align">normal</span>
}
</pre>
</fieldset>
body {
font-size: 1.25rem;
display: flex;
gap: 1rem;
}
section div {
font-family: monospace;
padding: 3px;
}
section {
border: solid 1.5px tomato;
height: 300px;
width: 300px;
flex-wrap: wrap; /* used by flex only */
gap: 0.2rem; /* not used by block */
}
.olive {
background-color: olive;
}
.coral {
background-color: coral;
}
.deepskyblue {
background-color: deepskyblue;
}
.orchid {
background-color: orchid;
}
.slateblue {
background-color: slateblue;
color: white;
}
.maroon {
background-color: maroon;
color: white;
}
const alignContent = document.querySelector("#alignContent");
const display = document.querySelector("#display");
const container = document.querySelector("section");
const displayStyle = document.querySelector("#displayStyle");
const alignStyle = document.querySelector("#align");
alignContent.addEventListener("change", () => {
updatePage();
});
display.addEventListener("change", () => {
updatePage();
});
function updatePage() {
const alVal = alignContent.value;
const dVal = display.value;
container.style.alignContent = alVal;
container.style.display = dVal;
alignStyle.innerText = alVal;
displayStyle.innerText = dVal;
}
updatePage();
Try changing the display value and the align-content value.
{{EmbedLiveSample("Examples", 260, 310)}}
In block layout, child elements are treated as a single element, meaning space-between, space-around, and space-evenly behave differently.
{{Specifications}}
{{Compat}}