【发布时间】:2019-08-08 05:46:00
【问题描述】:
我的问题与question, 相同,但给定的解决方案不起作用。
这是我正在使用的codepen。
我尝试了两种不同的方法,这两种方法几乎都是正确的,但并不完全正确:
1.将::before 和::after 伪类应用于第一个和最后一个网格项
不幸的是,当我分别将margin-left 和margin-right 属性添加到第一个和最后一个网格项时,它会将空间添加到网格项中,就好像它是padding 空间而不是margin 空间一样,否则这是可行的很好。
2.将::before 和::after 伪类应用于网格容器
它不允许我操纵::before 的width。由于某种原因,::before 的 width 属性不生效。值得注意的是,它的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的宽度?
【问题讨论】:
-
前一个元素只是一个网格元素,因此它将采用为其他元素定义的相同宽度(请注意,元素位于网格轨道内,因此其宽度在另一个隐藏的包装器内定义)
-
@TemaniAfif 但为什么它允许我操纵
::after的width,这似乎也是一个网格元素?以及如何更改::before的宽度? -
不确定这可能与溢出有关
-
@TemaniAfif 我怀疑它与
auto-flow和auto-columns有关系,而不是溢出? -
是的,肯定会溢出。轨道具有正确的宽度,但溢出不考虑轨道的宽度,而只考虑元素宽度。基本上
after的行为与before相同,但它的轨道溢出并且不在滚动区域内。
标签: css css-grid grid-layout