Это не относится к сетке CSS, но к поведению сжимается до соответствия абсолютного элемента.Из спецификации мы имеем:
Расчет ширины сжатия для подгонки аналогичен вычислению ширины ячейки таблицы с использованием алгоритма автоматической компоновки таблицы.Грубо говоря: вычислите предпочтительную ширину, отформатировав содержимое без разрывов строк , кроме случаев, когда происходят явные разрывы строк, а также рассчитайте предпочтительную минимальную ширину, например, попробовав все возможные разрывы строк.CSS 2.1 не определяет точный алгоритм.В-третьих, вычислите доступную ширину: это определяется путем определения «ширины» после установки «влево» (в случае 1) или «вправо» (в случае 3) на 0.
Тогда сжатие доподходящая ширина: min(max(preferred minimum width, available width), preferred width).
В вашем случае доступная ширина достаточно велика, и предпочтительная минимальная ширина совпадает с предпочтительной шириной (используемой), поскольку возможный разрыв строки отсутствует.
И если мы проверяем спецификацию сетки CSS, относящуюся к auto-fill
Когда в качестве номера повторения задано автоматическое заполнение, если контейнер сеткиимеет определенный размер или максимальный размер на соответствующей оси, тогда число повторений является наибольшим возможным положительным целым числом, которое не приводит к тому, что сетка переполняет свой контейнерный массив (рассматривая каждую дорожку как функцию максимального размера дорожки, если она определена или какв противном случае его функция минимального размера дорожки и с учетом разрыва); если любое количество повторений переполнится, то 1 повторение .В противном случае, если контейнер сетки имеет определенный минимальный размер на соответствующей оси, количество повторений является наименьшим возможным положительным целым числом, которое удовлетворяет этому минимальному требованию. В противном случае указанный список дорожек повторяется только один раз.
В основном вы попадаете в последний случай, поскольку размер абсолютного элемента равен размеру его содержимого, и мы можем толькопоместите в него одно повторение.
Удалите display:grid
, чтобы увидеть размер:
main {
width: 300px;
}
div {
position: relative;
}
section {
width: 100%;
height: 30px;
background-color: black;
}
aside {
position: absolute;
grid-template-columns: repeat(auto-fill, 2em);
top: 0;
right: 5px;
height: 100%;
}
span {
display: block;
}
span:nth-child(1) {
background-color: yellow;
}
span:nth-child(2) {
background-color: blue;
}
/* Adding this class to <aside>
fixes the issue, but aligns
grid contents to the left */
.fix1 {
width: 100%;
}
/* Adding this class to <aside>
fixes the issue, but breaks
the placement of <aside> */
.fix2 {
position: relative;
}
<main>
<div>
<aside class="">
<span>.</span>
<span>.</span>
</aside>
<section/>
</div>
</main>
Чтобы получить то, что вы хотите, вы можете рассмотреть поток столбцов и определить каждый столбец как 2em:
main {
width: 300px;
}
div {
position: relative;
}
section {
width: 100%;
height: 30px;
background-color: black;
}
aside {
position: absolute;
display:grid;
grid-auto-columns: 2em;
grid-auto-flow:column;
top: 0;
right: 5px;
height: 100%;
}
span {
display: block;
}
span:nth-child(1) {
background-color: yellow;
}
span:nth-child(2) {
background-color: blue;
}
/* Adding this class to <aside>
fixes the issue, but aligns
grid contents to the left */
.fix1 {
width: 100%;
}
/* Adding this class to <aside>
fixes the issue, but breaks
the placement of <aside> */
.fix2 {
position: relative;
}
<main>
<div>
<aside class="">
<span>.</span>
<span>.</span>
</aside>
<section/>
</div>
</main>
position:relative
исправьте проблему, потому что расчет ширины больше не будет соответствовать усадке, но у вас будет 100%
контейнераширина блока ref , поэтому у вас достаточно места для повторения.
width:100%
исправьте проблему так же, как и position:relative
, так как ширина будет увеличиваться додостаточно места для повторения.