1. 视差滚动
指多层背景以不同的速度移动,形成立体的运动效果。 分三层:悬浮层、内容层、背景层
2. 实现方式
css实现:
- background-attachment
- transform:translate3D
background-attachment
设置背景图像是否固定或者随着页面的其余部分滚动
- scroll:默认值,背景图像会随着页面其余部分的滚动而滚动
- fixed:当页面的其余部分滚动时,背景图像不会移动
- inherit:继承父元素background-attachment属性的值
div{
height:100vh
.a-img1{
background-image:url(...);
background-attachment: fixed;
background-size: cover;
background-position: center center;
}
}
transform:translate3D
perspective:css3属性,当元素涉及3d变换时,perspective可以定义我们眼睛看到的3d立体效果,即空间感。
<style>
html {
overflow: hidden;
height: 100%
}
body {
/* 视差元素的父级需要3D视角 */
perspective: 1px;
transform-style: preserve-3d;
height: 100%;
overflow-y: scroll;
overflow-x: hidden;
}
#app{
width: 100vw;
height:200vh;
background:skyblue;
padding-top:100px;
}
.one{
width:500px;
height:200px;
background:#409eff;
transform: translateZ(0px);
margin-bottom: 50px;
}
.two{
width:500px;
height:200px;
background:#67c23a;
transform: translateZ(-1px);
margin-bottom: 150px;
}
.three{
width:500px;
height:200px;
background:#e6a23c;
transform: translateZ(-2px);
margin-bottom: 150px;
}
</style>
<div id="app">
<div class="one">one</div>
<div class="two">two</div>
<div class="three">three</div>
</div>
- 容器设置transform-style: preserve-3d,perspective: xpx,那么处于这个容器的子元素就将位于3D空间中
- 子元素设置不同的transform:translateZ(),这个时候不同元素在3D Z轴方向距离屏幕(我们的眼睛)的距离也就不一样
- 滚动滚动条,由于子元素设置了不同的transform:translateZ(),那么他们滚动的上下距离translateY相对屏幕,也是不一样的,这就达到了滚动视差的效果