Мой вопрос идентичен этому вопросу , но данное решение не работает.
Вот кодовая ручка того, с чем я работаю.
Я пробовал два разных подхода, оба из которых почти правильные, но не совсем:
1.Применение классов ::before
и ::after
psuedo к первому и последнему элементам сетки
К сожалению, когда я добавляю свойства margin-left
и margin-right
к первому и последнему элементу сетки соответственно, этодобавляет пространство к элементам сетки, как если бы оно было padding
пробелом, а не margin
пробелом, в противном случае это работает нормально.
2.Применение классов ::before
и ::after
psuedo к контейнеру сетки
Это не позволит мне манипулировать width
из ::before
.По какой-то причине свойство width
::before
не вступает в силу.Примечательно, что кажется, что значение его width
равно значению width
, как и у любого элемента сетки.
Я заметил еще одну особенность, которая в конечном счете не имеет значения, и с этим подходом.Если я применяю width
к ::after
, grid-gap
также применяется, как будто он вставляет невидимый элемент сетки.
:root {
--gap: 25px;
}
body {
width: 100vw;
overflow-x: hidden;
margin: 0
}
#c {
width: 100%;
height: 50px;
overflow-x: auto;
display: grid;
grid-gap: 20px;
grid-auto-flow: column;
grid-auto-columns: calc(calc(100% - calc(var(--gap) * 2)) / 1.5);
border: solid red 1px;
}
/* second approach */
#c::before {
content: '';
width: var(--gap);
}
#c::after {
content: '';
width: 1px; /* works out to about 25px or var(--gap) */
}
.i {
width: 100%;
height: 25px;
}
/* first approach */
/*
.i:first-child::before {
content: '';
margin-left: var(--gap);
}
.i:last-child::after {
content: '';
margin-right: var(--gap);
}
*/
.i:nth-child(odd) {
background: skyblue;
}
.i:nth-child(even) {
background: pink;
}
<div id='c'>
<div class='i'>1</div>
<div class='i'>2</div>
<div class='i'>3</div>
<div class='i'>4</div>
<div class='i'>5</div>
<div class='i'>6</div>
<div class='i'>7</div>
<div class='i'>8</div>
<div class='i'>9</div>
<div class='i'>10</div>
<div class='i'>11</div>
<div class='i'>12</div>
<div class='i'>13</div>
<div class='i'>14</div>
<div class='i'>15</div>
<div class='i'>16</div>
<div class='i'>17</div>
<div class='i'>18</div>
<div class='i'>19</div>
<div class='i'>20</div>
<div class='i'>21</div>
<div class='i'>22</div>
<div class='i'>23</div>
<div class='i'>24</div>
</div>
Кто-нибудь знает, почему это происходит?
Как изменить ширину ::before
?