【发布时间】:2018-12-14 13:48:57
【问题描述】:
我是 Keith Clark 的纯 CSS 视差技术的忠实粉丝,并且在我自己的一个网站上使用它并取得了一些成功。然而,最近我注意到背景视差元素even in his own demo 并没有紧靠屏幕左侧,而是留有间隙,其大小取决于它们在 3D 空间中渲染的距离。
据我所知,罪魁祸首是滚动条。 应该有这个滚动条(在父视差 div 内),但它会在父容器的大小(在其中呈现 3d 空间)和容器的大小之间产生差异视差儿童,这为那个差距留下了空间。我在最新版本的 Chrome、Firefox 和 Safari 中看到了它(尽管我可以发誓我甚至一年前都没有看到它)。
这可以通过对每个视差组或层应用width: 100vw 规则来解决。但是,虽然这消除了差距,但它会使元素与视图的默认中心不对齐(因此对于没有应用100vw 规则的任何元素)。我还想要一个尽可能遵循“纯 CSS”原则的解决方案。
来自 Keith Clark 示例的 HTML:
<div class="parallax">
<div class="parallax__group">
<div class="parallax__layer parallax__layer--base">
<div>Base Layer</div>
</div>
<div class="parallax__layer parallax__layer--back">
<div>Background Layer</div>
</div>
</div>
</div>
CSS:
.parallax { // parent, page-level container
height: 500px;
height: 100vh;
overflow-x: hidden;
overflow-y: auto;
-webkit-perspective: 300px;
perspective: 300px;
-webkit-perspective-origin-x: 100%;
perspective-origin-x: 100%;
}
.parallax__group {
position: relative;
height: 500px;
height: 100vh;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.parallax__layer {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
-webkit-transform-origin-x: 100%;
transform-origin-x: 100%;
}
.parallax__layer--base {
-webkit-transform: translateZ(0);
transform: translateZ(0);
z-index: 4;
}
.parallax__layer--back {
-webkit-transform: translateZ(-300px) scale(2);
transform: translateZ(-300px) scale(2);
z-index: 3;
}
【问题讨论】:
标签: html css scrollbar parallax pure-css