css做滚动,纯CSS实现滚动效果实例代码

本文介绍如何使用纯CSS实现视差滚动效果,通过设置perspective、transform等属性模拟真实世界中的近大远小现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前都是用JS实现视差滚动效果的,比如插件 Parallax.js ,如果你的站点只考虑高版本的浏览器的话(比如IE9 ),用纯CSS也是可以实现的。

CSS实现的原理

原理说透了很简单,下面几个关键CSS声明起的作用(红色高亮部分):

 代码如下复制代码

.container {

/* 滚动容器 */

perspective: 1px;

padding: 0; height: calc(100vh - 300px); overflow: auto;

}

.box {

/* 视差元素的父级需要3D视角 */

height: 1280px;

transform-style: preserve-3d;

position: relative;

}

.background {

/* 滚动比较慢的背景元素 */

position: absolute; left: 50%;

transform: translate3D(-50%, -120px, -1px) scale(2);

}

大家可以注意上面红色高亮代码出现了一个1px(来自perspective), 一个-1px(来自transform)以及scale(2)中的2. 这几个数字之间有什么关系呢?

我们先看下面这个3D视角示意图

a_30158

当我们在屏幕前面1个单位的地方,看屏幕后面1个单位的元素,肉眼所见的画面大小只有实际的1/2,即所谓的近大远小。此时scale(2)让内容放大到原来2倍,正好在平面上看上去好像是原来大小。

虽然肉眼所见体积似乎是1:1,但是,滚动时候的位移变化还是1:2, 应该很好理解。举个极端的例子,我们坐在电瓶车上看天上的月亮,虽然车子在40码的速度奔啊奔,但是,好像月亮的位置没有移动,一直就在头顶。网页中的3D就是模拟真实世界的3D效果,因此,也会有这种视差体验。

或者这么讲吧,CSS3 3D天然视差效果,滚动,只是视差体现的一个触发条件。

于是,亲爱的同学。如果你想实现3层视差滚动怎么办?很简单,来个transform: translateZ(-2px)试试~

结语

据我测试,直接body或html滚动似乎难以实现视差滚动效果,不过天色已晚,我没深究,有兴趣的小伙伴可以研究分享下。

OK, 就像绚烂惊奇的魔术,解密之后,会发现不过尔尔。不知你成功解密了CSS视差滚动的秘密了没?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值