files/en-us/web/css/reference/values/repeat/index.md
The repeat() CSS function represents a repeated fragment of the track list, allowing a large number of columns or rows that exhibit a recurring pattern to be written in a more compact form.
{{InteractiveExample("CSS Demo: repeat()")}}
grid-template-columns: repeat(2, 60px);
grid-template-columns: 1fr repeat(2, 60px);
grid-template-columns: repeat(2, 20px 1fr);
grid-template-columns: repeat(auto-fill, 40px);
<section class="default-example" id="default-example">
<div class="example-container">
<div class="transition-all" id="example-element">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
</section>
#example-element {
border: 1px solid #c5c5c5;
display: grid;
grid-auto-rows: 40px;
grid-gap: 10px;
width: 220px;
}
#example-element > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
}
This function can be used in the CSS grid properties {{cssxref("grid-template-columns")}} and {{cssxref("grid-template-rows")}}.
/* <track-repeat> values */
repeat(4, 1fr)
repeat(4, [col-start] 250px [col-end])
repeat(4, [col-start] 60% [col-end])
repeat(4, [col-start] 1fr [col-end])
repeat(4, [col-start] min-content [col-end])
repeat(4, [col-start] max-content [col-end])
repeat(4, [col-start] auto [col-end])
repeat(4, [col-start] minmax(100px, 1fr) [col-end])
repeat(4, [col-start] fit-content(200px) [col-end])
repeat(4, 10px [col-start] 30% [col-middle] auto [col-end])
repeat(4, [col-start] min-content [col-middle] max-content [col-end])
/* <auto-repeat> values */
repeat(auto-fill, 250px)
repeat(auto-fit, 250px)
repeat(auto-fill, [col-start] 250px [col-end])
repeat(auto-fit, [col-start] 250px [col-end])
repeat(auto-fill, [col-start] minmax(100px, 1fr) [col-end])
repeat(auto-fill, 10px [col-start] 30% [col-middle] 400px [col-end])
/* <fixed-repeat> values */
repeat(4, 250px)
repeat(4, [col-start] 250px [col-end])
repeat(4, [col-start] 60% [col-end])
repeat(4, [col-start] minmax(100px, 1fr) [col-end])
repeat(4, [col-start] fit-content(200px) [col-end])
repeat(4, 10px [col-start] 30% [col-middle] 400px [col-end])
The repeat() function takes two arguments:
auto-fill or auto-fit. These keyword values repeat the set of tracks as many times as is needed to fill the grid container.<track-size> value or a <fixed-size> value. You can also specify one or more line names before or after each track, by providing <line-names> values before and/or after the track size.If you use auto-fill or auto-fit to set the repeat count, you may only specify track sizes using the <fixed-size> type, not the <track-size> type. This give us three main syntax forms for repeat():
<track-repeat>, which uses:
<track-size> values to set track sizes.<auto-repeat>, which uses
auto-fill or auto-fit to set the repeat count<fixed-size> to set track sizes.<fixed-repeat>, which uses:
<fixed-size> values to set track sizes.Then if a property declaration uses <auto-repeat>, it is only allowed to use <fixed-repeat> for any additional repeat() calls. For example, this is invalid, because it combines the <auto-repeat> form with the <track-repeat> form:
.wrapper {
grid-template-columns:
repeat(auto-fill, 10px)
repeat(2, minmax(min-content, max-content));
}
There is a fourth form, <name-repeat>, which is used to add line names to subgrids. It only used with the subgrid keyword and only specifies line names, not track sizes.
<fixed-size>
min given as a {{cssxref("<length-percentage>")}} valuemax given as one of a {{cssxref("<length-percentage>")}} value, a {{cssxref("<flex>")}} value, or one of the following keywords: min-content, max-content, or automin given as a {{cssxref("<length-percentage>")}} value or one of the following keywords: min-content, max-content, or automax given as a {{cssxref("<length-percentage>")}} value.{{cssxref("<flex>")}}
fr specifying the track's flex factor. Each <flex>-sized track takes a share of the remaining space in proportion to its flex factor.{{cssxref("<length>")}}
<line-names>
[first header-start].{{cssxref("<percentage>")}}
<percentage> must be treated as auto. The user-agent may adjust the intrinsic size contributions of the track to the size of the grid container and increase the final size of the track by the minimum amount that would result in honoring the percentage.<track-size>
min-content, max-content, or automin given as a {{cssxref("<length-percentage>")}} value, or one of the following keywords: min-content, max-content, or automax given as a {{cssxref("<length-percentage>")}} value, a {{cssxref("<flex>")}} value, or one of the following keywords: min-content, max-content, or autoauto
max-content. As a minimum it represents the largest minimum size (as specified by {{cssxref("min-width")}}/{{cssxref("min-height")}}) of the grid items occupying the grid track.auto-fill
grid-template-rows or grid-template-columns), if that is definite. Otherwise, as its minimum track sizing function, and taking grid-gap into account. If any number of repetitions would overflow, then the repetition is 1. Otherwise, if the grid container has a definite minimal size in the relevant axis, the number of repetitions is the smallest possible positive integer that fulfills that minimum requirement. Otherwise, the specified track list repeats only once.auto-fit
: Behaves the same as auto-fill, except that after placing the grid items any empty repeated tracks are collapsed. An empty track is one with no in-flow grid items placed into or spanning across it. (This can result in all tracks being collapsed, if they're all empty.)
A collapsed track is treated as having a single fixed track sizing function of 0px, and the gutters on either side of it collapse.
For the purpose of finding the number of auto-repeated tracks, the user agent floors the track size to a user agent specified value (e.g., 1px), to avoid division by zero.
{{cssxref("max-content")}}
{{cssxref("min-content")}}
{{CSSSyntaxRaw(<track-repeat> <auto-repeat> <fixed-repeat> <name-repeat>)}}
<div id="container">
<div>This item is 50 pixels wide.</div>
<div>Item with flexible width.</div>
<div>This item is 50 pixels wide.</div>
<div>Item with flexible width.</div>
<div>Inflexible item of 100 pixels width.</div>
</div>
#container {
display: grid;
grid-template-columns: repeat(2, 50px 1fr) 100px;
grid-gap: 5px;
box-sizing: border-box;
height: 200px;
width: 100%;
background-color: #8cffa0;
padding: 10px;
}
#container > div {
background-color: #8ca0ff;
padding: 5px;
}
{{EmbedLiveSample("Specifying_grid_columns_using_repeat", "100%", 200)}}
{{Specifications}}
{{Compat}}