html - 阴影被切断并显示在新列中 - CSS Masonry
问题描述
正如问题所述,我正在通过 CSS 创建一个砌体布局,它首先工作得很好。我最近注意到的一件事是,最后一个元素的 box-shadow 触及 grid-wrapper 的最底部被切断并显示在这个 grid-wrapper 的最顶部。我尝试在底部添加填充和边距甚至间距元素,但似乎没有任何效果。
希望得到帮助!如有遗漏,我会尽快给您补充!
非常可爱的问候
body {background:grey;}
:root {
--masonry-spacer-index: 1rem;
--masonry-columns-index: 3;
--gap:1em;
--columns:var(--masonry-columns-index);
}
.quote-grid {
width:980px;
display:column;
columns:var(--columns);
gap:var(--gap);
position:relative;
margin:0 auto;
background:orange;
}
.quote-grid > quote {
break-inside:avoid;
margin-bottom:var(--gap);
display:block;
position:relative;
transition:all .1s linear;
background:white;
padding:24px;
box-shadow:8px 0 20px black;
}
@supports (grid-template-rows: masonry) {
.quote-grid {
display: grid;
grid-template-columns: repeat(var(--columns), 1fr);
grid-template-rows: masonry;
grid-auto-flow: dense;
/* align-tracks: stretch; */
}
.quote-grid > * {
margin-bottom: 0em;
}
}
<div class="quote-grid">
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
</div>
解决方案
这似乎是 Chrome/Edge 的问题。
在我的 Windows10 笔记本电脑上,Firefox 给出了这个,阴影是正确的:
然而,在 Chrome/Edge 上,它给出了问题中讨论的问题:
注意:每个条目底部的阴影比 Chrome 示例中每个条目底部的阴影要细/浅得多。事实上,最后一个条目是唯一正确的!
这似乎与 Chrome(因此也是 Edge)的一个已知问题有关。来自caniuse.com:
Chrome 被报告错误地计算容器高度,并且经常在边距、填充上中断,并且可以在上一列的底部显示下一列的 1px。
caniuse 然后建议:
这些问题的一部分可以通过添加 -webkit-perspective:1 来解决;到列容器。这会为容器创建一个新的堆叠上下文,并且显然会导致 chrome (重新)计算列布局。
但是强制一个新的堆叠上下文——我尝试了几种方法——似乎并没有解决这个问题。
简化所有内容并将阴影放在元素上但没有显示列,使用 inline-block 代替,阴影在每个元素上确实显示正确。显然,如果您要使用此方法,则需要适当注意百分比以获得与在列中显示相同的布局,此代码段仅用于说明:
<style>body {
background: grey;
}
:root {
--masonry-spacer-index: 1rem;
--masonry-columns-index: 3;
--gap: 1em;
--columns: var(--masonry-columns-index);
}
.quote-grid {
width: 980px;
display: inline-block;
margin: 0 auto;
background: orange;
}
.quote-grid>quote {
break-inside: avoid;
margin-bottom: var(--gap);
display: block;
position: relative;
transition: all .1s linear;
background: white;
padding: 24px;
box-shadow: 8px 0 20px black;
display: inline-block;
width: 25%;
margin: 1%;
}
<div class="quote-grid">
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
<quote>/* quote inr */</quote>
</div>
推荐阅读
- python - 如何在远程机器上执行 python 脚本时发送密码
- html - paginate_by 如何显示省略号 - Django
- linux - 如何将“which”与正则表达式一起使用,或以其他方式在 $PATH 中查找命令
- dictionary - Angular 6:请求的资源上不存在“Access-Control-Allow-Origin”标头
- css - 按钮 CSS 样式在移动设备上不起作用
- c# - 我们需要在 Fluent Api 中定义所有模型吗?
- arrays - 将迭代分布在具有最小值和最大值的特定数组中的列中
- angular - 获取错误 Http 服务:NgFor 仅支持绑定到 Iterables,例如 Arrays。”
- ios - 在不同的测试目标之间有效地共享测试替身
- node.js - 尝试获取特定的单个记录时,GraphiQL 返回空值