【发布时间】:2021-08-31 14:06:33
【问题描述】:
我在 CSS Grid 项目中有一个内容块,它工作正常。在某些情况下,我希望能够如此准确地缩进 1 或 2 列子元素,使其与其父网格对齐。
我确实通过将相同的网格应用于子块(例如storyblock__caption)来实现这一点,但这导致元素跨越可用空间的 100% 宽,这是我不想要的。所以我决定尝试使用calc 来解决它。
我提供了一个乍一看实际上看起来正确的示例。示例中使用calc 的段落似乎与网格的第二列对齐。但是,如果您要更改间距,使其与第 3 列的左边缘对齐,例如:margin-left: calc(((2 / 4) * 100%) - ((2 / 4) * 12px));,您会看到数学不相加。
我相信这可能是因为网格没有考虑storyblock__caption 的 12px 左/右填充。但我尝试从计算中添加/减去 24px,但我无法让它工作。
这是我的示例代码:
/* #BASE */
body {color: white; margin: 0 auto;}
img {width: 100%; max-width: 100%;}
h1 {margin-bottom: 15px;}
p {margin-bottom: 15px;}
.btn {background: white; color: black; display: inline-block; padding: 8px 24px; text-decoration: none;}
/* #CONTENT BLOCK */
.storyblock {
display: grid;
grid-column-gap: 12px;
grid-template-columns: repeat(4, 1fr);
margin: 0 auto;
position: relative;
max-width: 375px;
}
.storyblock--overlay {
align-items: end;
}
.storyblock--overlay .storyblock__media,
.storyblock--overlay .storyblock__caption {
grid-row: 1;
}
.storyblock__media,
.storyblock__caption {
grid-column: 1/5;
}
.storyblock__caption {
padding: 0 12px 24px;
}
.storyblock__caption p {
margin-left: calc(((1 / 4) * 100%) - ((1 / 4) * 12px));
}
<div class="storyblock storyblock--overlay">
<div class="storyblock__media">
<img src="https://www.fillmurray.com/375/500" alt="ALT TEXT" />
</div>
<div class="storyblock__caption">
<h1>Lorem Ipsum</h1>
<p>Lorem ipsum dolor sit amet consectetur adipiscing.</p>
<a href=" #" class="btn">Shop Now</a>
</div>
</div>
【问题讨论】: