Функция CSS `repeat()`
Базовая поддержка Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с октября 2017 года.
repeat() CSS функция представляет собой повторяющийся фрагмент списка треков или списка линий правил. Она позволяет записывать повторяющиеся шаблоны столбцов, строк и их оформления промежутков в компактной форме.
Попробуйте
grid-template-columns: repeat(2, 60px); rule-color: repeat(2, green, orange), yellow;
grid-template-columns: 1fr repeat(2, 60px); rule-color: repeat(2, green), repeat(2, yellow);
grid-template-columns: repeat(2, 20px 1fr); rule-color: repeat(auto, green), repeat(2, yellow);
grid-template-columns: repeat(auto-fill, 40px); rule-color: repeat(2, orange, yellow), repeat(auto, green);
<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>
<div></div>
<div></div>
<div></div>
<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;
rule: solid 4px;
}
#example-element > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
}
Эту функцию можно использовать со следующими свойствами:
Свойства CSS Grid:
Свойства CSS для промежутков:
column-rule-colorrow-rule-color-
rule-color— сокращённое свойство column-rule-stylerow-rule-style-
rule-style— сокращённое свойство column-rule-widthrow-rule-width-
rule-width— сокращённое свойство -
column-rule— сокращённое свойство -
row-rule— сокращённое свойство -
rule— сокращённое свойство
Синтаксис
/* <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]) /* <name-repeat> values */ repeat(5, [footer]) repeat(auto-fill, [header]) repeat(2, [header footer]) /* <repeat-line> */ repeat(4, dashed) repeat(2, solid, dotted, inset) repeat(3, medium) repeat(4, red) repeat(3, green medium outset) /* <auto-repeat-line> */ repeat(auto, dotted) repeat(auto, 10px) repeat(auto, currentcolor) repeat(auto, red, blue, green) repeat(auto, var(--lineColor) var(--lineSize) solid)
Значения
Функция repeat() принимает два аргумента: первый задаёт количество повторений, а второй — список повторяемых значений (список значений для повторения).
Значения количества повторений
-
<integer> - Положительное целое число, большее или равное
1, задающее количество повторений списка компонентов из второго параметра. -
auto-fill - Задаёт автоматический повторитель, который повторяет значения, чтобы заполнить пространство. Вычисляется как наибольшее количество повторений, не приводящее к переполнению ограниченного (имеющего максимальный размер) контейнера содержимого. В противном случае, если у контейнера содержимого есть минимальный размер, используется наименьшее количество повторений, удовлетворяющее этому размеру. Если нет ни минимального, ни максимального размера, вычисляется как
1. При использовании с подрешёткой второй параметр должен быть списком имён линий. -
auto-fit - Ведёт себя как
auto-fill, но после размещения элементов сетки все пустые повторяющиеся треки сворачиваются. -
auto - Задаёт автоматический повторитель. После применения значений из других компонентов значения из второго параметра повторяются столько раз, сколько необходимо, заполняя все отсутствующие значения.
Список повторяемых значений
Список одного из следующих типов списков треков. Разделяются ли компоненты списка запятыми или пробелами, зависит от разделителя, предусмотренного для данного типа списка значений свойства.
-
<line-names> - Чтобы добавить имена линий в подрешётки, каждый
<line-names>— это ноль или несколько значений<custom-ident>, разделённых пробелами и заключённых в квадратные скобки, например[start header-start]. -
<track-size> - Каждый
<track-size>— это положительное значение<length-percentage>, функцияminmax(), первым параметром которой является ключевое словоmin-content,max-contentилиauto, либо положительное значение<length-percentage>, либо функцияfit-content. -
<fixed-size> - Каждый
<fixed-size>— это либо положительное значение<length-percentage>, либо функцияminmax(), первый параметр которой является положительным значением<length-percentage>, а второй — неотрицательной размерностью с единицейfr, задающей коэффициент гибкости трека, или ключевым словомmin-content,max-contentилиauto; либо функцияminmax(), первый параметр которой является положительным значением<length-percentage>или ключевым словомmin-content,max-contentилиauto, а второй параметр — положительным значением<length-percentage>. -
<value> - При определении правил промежутков каждый
<value>— это значение, допустимое для свойства, в котором встречаетсяrepeat(), например<line-style>,<line-width>,colorили все три значения в виде<gap-rule>.
Описание
Функция repeat() представляет собой повторяющийся фрагмент в списке значений, разделённых запятыми или пробелами. Она позволяет записывать повторяющийся шаблон в более компактной форме, чтобы повторять его заданное количество раз или автоматически.
Общий вид синтаксиса repeat() приблизительно таков:
repeat( <repeat-count>, <values-list> )
Первый аргумент — количество повторений — задаёт число повторений. Он определяет, сколько раз следует повторить список значений, указанный во втором параметре. Это значение задаётся целым числом 1 или больше либо ключевым словом auto-fill, auto-fit или auto.
Второй аргумент — список значений, разделённых запятыми или пробелами, допустимых для свойства, в котором встречается repeat(). Он задаёт тип повторяемого значения, которым обычно являются повторяемые треки или свойства правил.
- треки:
- Задаёт набор повторяемых треков. По сути, это одно или несколько значений, разделённых пробелами, каждое из которых задаёт размер соответствующего трека. Каждый размер задаётся значением
<track-size>или<fixed-size>. Перед каждым треком или после него также можно указать одно или несколько имён линий, добавив значения<line-names>до и/или после размера трека. - свойство правила:
- Задаёт повторяемое свойство правила. Это либо список значений
color,<line-width>или<line-style>, разделённых запятыми, либо список сокращённых объявлений, задающих цвет, ширину и стиль линии.
Формы синтаксиса
Функция repeat() имеет несколько форм синтаксиса:
-
<track-repeat>=repeat( <integer>, [ <line-names>? <track-size> ]+ <line-names>? ) -
Элемент
<integer>задаёт количество повторений.Значения
<track-size>задают размер трека. Значение<track-size>— это либо<length-percentage>, значениеflex(положительное значение в единицахfr), ключевое словоmin-content,max-contentилиauto, функцияfit-contentс параметром<length-percentage>либо функцияminmax(). Для значений трековminmax()элементmin— это либо<length-percentage>, либо ключевое словоmin-content,max-contentилиauto, тогда какmaxможет быть любым из этих значений или значением<flex>.Перед каждым
<track-size>могут указываться<line-names>— ноль или несколько значений<custom-ident>, разделённых пробелами и заключённых в квадратные скобки.Завершающий элемент
<line-names>необязателен. -
<auto-repeat>=repeat( auto-fill | auto-fit, [ <line-names>? <fixed-size> ]+ <line-names>? ) -
Ключевое слово
auto-fillилиauto-fitзадаёт количество повторений.Элемент
<fixed-size>задаёт размер трека. Значение<fixed-size>— это либо значение<length-percentage>, либо функцияminmax(), в которой параметрminилиmaxявляется значением<length-percentage>, а второй параметр также является значением<length-percentage>или задан ключевым словомmin-content,max-contentилиauto.Перед каждым
<fixed-size>может указываться<line-names>.Завершающий элемент
<line-names>необязателен. -
<fixed-repeat>=repeat( <integer>, [ <line-names>? <fixed-size> ]+ <line-names>? ) - То же, что и
<auto-repeat>, но элемент<integer>задаёт количество повторений, поэтому автоматического повторения нет. -
<name-repeat>=repeat( [ <integer> | auto-fill ], <line-names>+) -
Целое число или ключевое слово
auto-fillзадаёт количество повторений.Элемент
<line-names>— это одно или несколько значений<custom-ident>, разделённых пробелами и заключённых в квадратные скобки.Эти имена линий (а не размеры треков) актуальны для
subgrid. -
<repeat-value-type>=repeat( <integer> , <value># ) -
Элемент
<integer>задаёт количество повторений.Элемент
<value>— это одно или несколько допустимых значений свойства, к которому применяется функцияrepeat(), разделённых запятыми.В одном объявлении значения можно использовать несколько функций
repeat()типа<repeat-value-type>. -
<auto-repeat-value-type>=repeat( auto , <value># ) -
Ключевое слово
autoзадаёт автоматический повторитель. Автоматический повторитель заполняет значения, отсутствующие в промежутках, которые иначе не получили бы значений из других частей списка.Элемент
<value>— это одно или несколько допустимых значений свойства, к которому применяется функцияrepeat(), разделённых запятыми.В одном списке значений автоматическим повторителем может быть не более одной функции
repeat().
Сравнение auto-fit и auto-fill
Если первый параметр функции repeat() — это ключевое слово auto-fill, auto-fit или auto, а не целое число, создаётся автоматический повторитель. Автоматически повторяющая функция repeat() повторяет значения, заданные вторым параметром, столько раз, сколько необходимо.
При использовании auto-fill, если для контейнера задан определённый или максимальный размер по соответствующей оси, количество повторений является наибольшим возможным положительным целым числом, при котором содержимое не выходит за пределы контейнера. Каждый трек считается имеющим максимально возможную функцию определения размера (каждое независимое значение, используемое для определения grid-template-rows или grid-template-columns), если она определена. В противном случае, если определённый или максимальный размер не задан, функция repeat() является функцией минимального размера трека. Если любое количество повторений приведёт к переполнению, количество повторений равно 1. В противном случае, если для контейнера сетки задан определённый минимальный размер по соответствующей оси, количество повторений является наименьшим возможным положительным целым числом, удовлетворяющим этому минимальному требованию. В остальных случаях указанный список треков повторяется только один раз.
Значение auto-fit ведёт себя так же, как auto-fill, но после размещения элементов сетки все пустые повторяющиеся треки сворачиваются. Пустым считается трек, в котором нет ни одного размещённого элемента сетки в обычном потоке или элемента, охватывающего этот трек. (В результате могут свернуться все треки, если они все пусты.)
Свернувшийся трек считается имеющим единственную фиксированную функцию определения размера трека со значением 0px, а промежутки по обе стороны от него сворачиваются.
Чтобы определить количество автоматически повторяемых треков, пользовательский агент округляет размер трека вниз до значения, заданного пользовательским агентом (например, 1px), чтобы избежать деления на ноль.
Исключения и правила использования
При использовании repeat() действуют некоторые правила и ограничения:
Значение свойства может содержать несколько функций repeat().
.wrapper {
grid-template-columns:
repeat(2, 10px)
repeat(2, minmax(min-content, max-content));
}
Значение свойства может содержать не более одной функции автоматического повтора repeat().
.wrapper {
row-rule:
repeat(auto, yellow 3px solid, red 1px dashed),
repeat(auto, green 5px dotted);
}
Если в объявлении свойства используется <auto-repeat>, все дополнительные вызовы repeat() могут использовать только <fixed-repeat>. Автоматические повторения (auto-fill или auto-fit) нельзя сочетать с полностью внутренними или гибкими размерами. Например, следующий вариант недопустим, поскольку сочетает форму <auto-repeat> с формой <track-repeat>:
.wrapper {
grid-template-columns:
repeat(auto-fill, 10px)
repeat(2, minmax(min-content, max-content));
}
Запись repeat() нельзя вкладывать в другую функцию repeat().
.wrapper {
grid-template-columns: repeat(
2,
minmax(min-content, max-content),
repeat(3, 10px)
);
column-rule: repeat(
auto,
yellow 3px solid,
repeat(5, green 5px dotted),
red 1px dashed
);
}
Формальный синтаксис
<repeat-line> <track-repeat> <auto-repeat> <fixed-repeat> <name-repeat> <auto-repeat-line>
Примеры
Задание столбцов сетки с помощью repeat()
HTML
<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>
CSS
#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;
}
Результат
Спецификации
| Спецификация |
|---|
| Модуль CSS Grid Layout, уровень 2 # repeat-notation |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
repeat |
57 |
16 |
76
57–76Толькоrepeat(auto-fill, ...) и repeat(auto-fit, ...) поддерживают один повторяющийся столбец (см. ошибку 1341507). |
44 |
10.1 |
57 |
79
57–79Толькоrepeat(auto-fill, ...) и repeat(auto-fit, ...) поддерживают один повторяющийся столбец (см. ошибку 1341507). |
43 |
10.3 |
6.0 |
57 |
10.3 |
См. также
grid-templategrid-template-rowsgrid-template-columnsgrid-template-areasgrid-auto-columnsgrid-auto-rowsgrid-auto-flow- Размещение по линиям в CSS Grid
- Области шаблона сетки: сокращённые свойства определения сетки
- CSS Grid Layout модуль
- CSS Gaps модуль
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/repeat