使用伪元素(及其高度)的视差
Parallax using pseudo elements (and their height)
我正在尝试在我的网站上创建视差效果,并研究了几种 css 解决方案。我选择了一个可以看到的 Joshua Bemenderfer here
我稍微编辑了示例代码以使问题更加明显,但是因为它使用的是伪元素,与其父元素的大小相匹配,所以当我调整视差部分大小时我很难停止白色 space 在图像移动时不可见。
(注意,您必须在代码段上全屏查看问题):
*编辑:Codepen because the snippet isn't showing the problem in full screen or in the preview
/* Tiny reset thingy */
body,html{margin:0;padding:0;}
.wrapper {
/* The height needs to be set to a fixed value for the effect to work.
* 100vh is the full height of the viewport. */
height: 100vh;
/* The scaling of the images would add a horizontal scrollbar, so disable x overflow. */
overflow-x: hidden;
/* Enable scrolling on the page. */
overflow-y: auto;
/* Set the perspective to 2px. This is essentailly the simulated distance from the viewport to transformed objects.*/
perspective: 2px;
}
.section {
/* Needed for children to be absolutely positioned relative to the parent. */
position: relative;
/* The height of the container. Must be set, but it doesn't really matter what the value is. */
height: 200px;
/* For text formatting. */
display: flex;
align-items: center;
justify-content: center;
color: white;
text-shadow: 0 0 5px #000;
}
.parallax::after {
/* Display and position the pseudo-element */
content: " ";
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
/* Move the pseudo-element back away from the camera,
* then scale it back up to fill the viewport.
* Because the pseudo-element is further away, it appears to move more slowly, like in real life. */
transform: translateZ(-1px) scale(1.5);
/* Force the background image to fill the whole element. */
background-size: 100%;
/* Keep the image from overlapping sibling elements. */
z-index: -1;
}
/* The styling for the static div. */
.static {
background: red;
}
/* Sets the actual background images to adorable kitties. This part is crucial. */
.bg1::after {
background-image: url('https://placekitten.com/g/900/700');
}
.bg2::after {
background-image: url('https://placekitten.com/g/800/600');
}
<main class="wrapper">
<section class="section static">
<h1>Boring</h1>
</section>
<section class="section parallax bg2">
<h1>SO FWUFFY AWWW</hi>
</section>
<section class="section static">
<h1>Boring</h1>
</section>
</main>
关于如何解决这个问题有什么想法吗?我似乎无法在不破坏效果的情况下让它工作
谢谢
使伪元素变大以隐藏这种不良效果。只需将顶部底部值设置为负数即可:
/* Tiny reset thingy */
body,html{margin:0;padding:0;}
.wrapper {
height: 100vh;
overflow-x: hidden;
overflow-y: auto;
perspective: 2px;
}
.section {
position: relative;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
color: white;
text-shadow: 0 0 5px #000;
}
.parallax::after {
content: " ";
position: absolute;
top: -100px;
right: 0;
bottom: -100px;
left: 0;
transform: translateZ(-1px) scale(1.5);
background-size: 100% auto;
z-index: -1;
}
/* The styling for the static div. */
.static {
background: red;
}
/* Sets the actual background images to adorable kitties. This part is crucial. */
.bg1::after {
background-image: url('https://placekitten.com/g/900/700');
}
.bg2::after {
background-image: url('https://placekitten.com/g/800/600');
}
<main class="wrapper">
<section class="section static">
<h1>Boring</h1>
</section>
<section class="section parallax bg2">
<h1>SO FWUFFY AWWW</h1>
</section>
<section class="section static">
<h1>Boring</h1>
</section>
</main>
我正在尝试在我的网站上创建视差效果,并研究了几种 css 解决方案。我选择了一个可以看到的 Joshua Bemenderfer here
我稍微编辑了示例代码以使问题更加明显,但是因为它使用的是伪元素,与其父元素的大小相匹配,所以当我调整视差部分大小时我很难停止白色 space 在图像移动时不可见。
(注意,您必须在代码段上全屏查看问题):
*编辑:Codepen because the snippet isn't showing the problem in full screen or in the preview
/* Tiny reset thingy */
body,html{margin:0;padding:0;}
.wrapper {
/* The height needs to be set to a fixed value for the effect to work.
* 100vh is the full height of the viewport. */
height: 100vh;
/* The scaling of the images would add a horizontal scrollbar, so disable x overflow. */
overflow-x: hidden;
/* Enable scrolling on the page. */
overflow-y: auto;
/* Set the perspective to 2px. This is essentailly the simulated distance from the viewport to transformed objects.*/
perspective: 2px;
}
.section {
/* Needed for children to be absolutely positioned relative to the parent. */
position: relative;
/* The height of the container. Must be set, but it doesn't really matter what the value is. */
height: 200px;
/* For text formatting. */
display: flex;
align-items: center;
justify-content: center;
color: white;
text-shadow: 0 0 5px #000;
}
.parallax::after {
/* Display and position the pseudo-element */
content: " ";
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
/* Move the pseudo-element back away from the camera,
* then scale it back up to fill the viewport.
* Because the pseudo-element is further away, it appears to move more slowly, like in real life. */
transform: translateZ(-1px) scale(1.5);
/* Force the background image to fill the whole element. */
background-size: 100%;
/* Keep the image from overlapping sibling elements. */
z-index: -1;
}
/* The styling for the static div. */
.static {
background: red;
}
/* Sets the actual background images to adorable kitties. This part is crucial. */
.bg1::after {
background-image: url('https://placekitten.com/g/900/700');
}
.bg2::after {
background-image: url('https://placekitten.com/g/800/600');
}
<main class="wrapper">
<section class="section static">
<h1>Boring</h1>
</section>
<section class="section parallax bg2">
<h1>SO FWUFFY AWWW</hi>
</section>
<section class="section static">
<h1>Boring</h1>
</section>
</main>
关于如何解决这个问题有什么想法吗?我似乎无法在不破坏效果的情况下让它工作
谢谢
使伪元素变大以隐藏这种不良效果。只需将顶部底部值设置为负数即可:
/* Tiny reset thingy */
body,html{margin:0;padding:0;}
.wrapper {
height: 100vh;
overflow-x: hidden;
overflow-y: auto;
perspective: 2px;
}
.section {
position: relative;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
color: white;
text-shadow: 0 0 5px #000;
}
.parallax::after {
content: " ";
position: absolute;
top: -100px;
right: 0;
bottom: -100px;
left: 0;
transform: translateZ(-1px) scale(1.5);
background-size: 100% auto;
z-index: -1;
}
/* The styling for the static div. */
.static {
background: red;
}
/* Sets the actual background images to adorable kitties. This part is crucial. */
.bg1::after {
background-image: url('https://placekitten.com/g/900/700');
}
.bg2::after {
background-image: url('https://placekitten.com/g/800/600');
}
<main class="wrapper">
<section class="section static">
<h1>Boring</h1>
</section>
<section class="section parallax bg2">
<h1>SO FWUFFY AWWW</h1>
</section>
<section class="section static">
<h1>Boring</h1>
</section>
</main>