我试图在不使用 background-image
和 background-attachment: fixed
的情况下创建视差效果,因为 background-attachment: fixed
在 iOS 上效果不佳。这是我想出的:
HTML
<article class="twentyseventeen-panel">
<div class="panel-image">
<div style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;" >
<img src="<?php echo esc_url( $thumbnail[0] ); ?>" style="width: 100%;" />
</div>
</div>
</article>
CSS
.twentyseventeen-panel {
overflow: hidden;
position: relative;
}
.panel-image {
position: relative;
height: 100vh;
max-height: 200px;
}
现在我坚持让图像滚动来做视差效果。我已经尝试将图像设置为 fixed
位置,但是当我这样做时我的图像不再出现。如何使此图像具有视差效果?
原文由 user979331 发布,翻译遵循 CC BY-SA 4.0 许可协议
不幸的是,我不知道使用纯 CSS 有什么确定的方法。原因是因为无法获取当前滚动位置(我们可以在
calc()
中使用)。此外,当使用fixed
定位元素时,它不再关心其父元素,并且无法强制执行overflow:hidden
。有两种方法可以在不使用背景的情况下创建视差效果,一种是使用 JavaScript,我已经为您提供了一个完整的工作示例。它是最小的,可能会使浏览器无所事事地工作太多,但它确实有效。如果您有很多元素,您肯定会希望对其进行优化以仅应用于可见的元素。
现在是完整的 CSS 部分……实现起来有点复杂,并且不能对每种布局都完成。诀窍是让您的图像使用
position:fixed
规则。但是,与其不成功地依赖overflow:hidden
,不如让它们处于最低的 z-index,让所有元素都有背景,并在要显示图像的地方创建“孔”。这会在添加背景时产生很多问题,您必须制作多个不同的元素以确保始终有可能显示视差图像。我试图在不创建过于复杂的示例的情况下演示如何实现这一点。此技术仅适用于 1 张图像。如果您希望它与多个图像一起使用,则必须使用 javascript 相应地切换可见性,并且一次只能看到 1 个视差效果。