The CSS place-items
shorthand property allows you to align items along both the block and inline directions at once (i.e. the align-items
and justify-items
properties) in a relevant layout system such as Grid or Flexbox . If the second value is not set, the first value is also used for it.
This property is a shorthand for the following CSS properties:
/* Positional alignment */
place-items: center;
place-items: normal start;
place-items: center normal;
place-items: start legacy;
place-items: end normal;
place-items: self-start legacy;
place-items: self-end normal;
place-items: flex-start legacy;
place-items: flex-end normal;
place-items: anchor-center;
/* Baseline alignment */
place-items: baseline normal;
place-items: first baseline legacy;
place-items: last baseline normal;
place-items: stretch legacy;
/* Global values */
place-items: inherit;
place-items: initial;
place-items: revert;
place-items: revert-layer;
place-items: unset;
One of the following forms:
A single align-items
value, which is used to set alignment in both block and inline directions.
An align-items
value, which sets alignment in the block direction, followed by a justify-items
value, which sets alignment in the inline direction.
place-items = <'align-items'> <'justify-items'> ? <align-items> = normal | stretch | <baseline-position> | [ <overflow-position> ? <self-position> ] | anchor-center <justify-items> = normal | stretch | <baseline-position> | <overflow-position> ? [ <self-position> | left | right ] | legacy | legacy && [ left | right | center ] | anchor-center <baseline-position> = [ first | last ] ? && baseline <overflow-position> = unsafe | safe <self-position> = center | start | end | self-start | self-end | flex-start | flex-end In flexbox justify-self
or justify-items
do not apply, as on the main axis items are treated as a group. Therefore, the second value will be ignored.
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;
font-size: 2em;
}
#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;
}
select {
font-size: 16px;
}
.row {
margin-top: 10px;
}
<div id="container">
<div id="item1">1</div>
<div id="item2">2</div>
<div id="item3">3</div>
</div>
<div class="row">
<label for="values">place-items: </label>
<select id="values">
<option value="stretch">stretch</option>
<option value="start">start</option>
<option value="center">center</option>
<option value="end">end</option>
<option value="left">left</option>
<option value="right">right</option>
<option value="auto center">auto center</option>
<option value="normal start">normal start</option>
<option value="center normal">center normal</option>
<option value="start auto">start auto</option>
<option value="end normal">end normal</option>
<option value="self-start auto">self-start auto</option>
<option value="self-end normal">self-end normal</option>
<option value="flex-start auto">flex-start auto</option>
<option value="flex-end normal">flex-end normal</option>
<option value="left auto">left auto</option>
<option value="right normal">right normal</option>
<option value="baseline normal">baseline normal</option>
<option value="first baseline auto">first baseline auto</option>
<option value="last baseline normal">last baseline normal</option>
<option value="stretch auto">stretch auto</option>
</select>
</div>
const values = document.getElementById("values");
const container = document.getElementById("container");
values.addEventListener("change", (evt) => {
container.style.placeItems = evt.target.value;
});
CSS
#container {
height: 200px;
width: 240px;
place-items: stretch; /* You can change this value by selecting another option in the list */
background-color: #8c8c8c;
display: flex;
}
Result
The following grid container has items which are smaller than the grid areas they are placed in, therefore place-items
will move them in the block and inline dimensions.
div > div {
box-sizing: border-box;
border: 2px solid #8c8c8c;
}
#item1 {
background-color: #8cffa0;
min-height: 30px;
font-size: 2em;
}
#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;
}
select {
font-size: 16px;
}
.row {
margin-top: 10px;
}
<div id="gridcontainer">
<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>
<div class="row">
<label for="gridvalues">place-items: </label>
<select id="gridvalues">
<option value="stretch">stretch</option>
<option value="start">start</option>
<option value="center">center</option>
<option value="end">end</option>
<option value="left">left</option>
<option value="right">right</option>
<option value="auto center">auto center</option>
<option value="normal start">normal start</option>
<option value="center normal">center normal</option>
<option value="start auto">start auto</option>
<option value="end normal">end normal</option>
<option value="self-start auto">self-start auto</option>
<option value="self-end normal">self-end normal</option>
<option value="flex-start auto">flex-start auto</option>
<option value="flex-end normal">flex-end normal</option>
<option value="left auto">left auto</option>
<option value="right normal">right normal</option>
<option value="baseline normal">baseline normal</option>
<option value="first baseline auto">first baseline auto</option>
<option value="last baseline normal">last baseline normal</option>
<option value="stretch auto">stretch auto</option>
</select>
</div>
const values = document.getElementById("gridvalues");
const container = document.getElementById("gridcontainer");
values.addEventListener("change", (evt) => {
container.style.placeItems = evt.target.value;
});
CSS
#gridcontainer {
height: 200px;
width: 240px;
place-items: stretch; /* You can change this value by selecting another option in the list */
background-color: #8c8c8c;
display: grid;
grid-template-columns: repeat(3, 1fr);
}
#gridcontainer > div {
width: 50px;
}
Result
BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.