纯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视角示意图

 

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

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

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

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

结语

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

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

时间: 2024-10-25 00:35:23

纯CSS实现滚动效果实例代码的相关文章

JS小功能(offsetLeft实现图片滚动效果)实例代码_javascript技巧

效果: 代码: 复制代码 代码如下: <head runat="server">    <title></title>    <style type="text/css">        #div1        {            width: 245px;            height: 150px;            background: red;            margin: 250p

利用JavaScript实现新闻滚动效果(实例代码)_javascript技巧

最近要实现一个滚动新闻效果,在网上查了一些资料,发现基本的实现方法有两种: 1.使用Marquee标签.这个标签的使用我已经转载了一篇比较详细的文章,这个标签的优点是便于使用,缺点是人们已经逐渐不适用它了,许多浏览器不支持,甚至在IE8想,XHTML4.0的loose.dtd是可以的,而去掉loose.dtd却不行. 2.使用div+javascript的方法.这种方法的好处是可以兼容几乎所有的浏览器,并且在可以预料的时间内仍能稳定运行.并且使用div使得网页可以利用现有的css资源实现很多炫目

js实现单行文本向上滚动效果实例代码_javascript技巧

复制代码 代码如下: /***************滚动场次开始*****************/ function ScrollText(content, btnPrevious, btnNext, autoStart) {    this.Delay = 10;    this.LineHeight = 20;    this.Amount = 1;     this.Direction = "up";    this.Timeout = 1500;    this.Scrol

js图片向右一张张滚动效果实例代码_javascript技巧

先来张效果图 样式 复制代码 代码如下:         #div_left{float:left;width:60px;height:86px;}        #starScroll{width:843px;height:188px;margin-left:15px;margin-right:15px;padding-top:9px;overflow:hidden;border:1px solid red;float:left;}        #starScroll #contentScr

javascript跟随滚动效果插件代码(javascript Follow Plugin)

这篇文章介绍了javascript跟随滚动效果插件代码(javascript Follow Plugin),有需要的朋友可以参考一下   Js 跟随滚动效果插件 支持定义多个跟随ID,采用css fixed属性,不支持ie6,兼容其他主流浏览器. 支持定义滚动到底部的最小高度,不会覆盖底部 页面大小resize后,插件会自动重置参数 ======= Js 跟随滚动效果插件 1.支持定义多个跟随ID,采用css fixed属性,不支持ie6,兼容其他主流浏览器. 2.支持定义滚动到底部的最小高度,

JS实用的带停顿的逐行文本循环滚动效果实例_javascript技巧

如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JS实用的带停顿的逐行文本循环

纯 CSS 实现波浪效果!

一直以来,使用纯 CSS 实现波浪效果都是十分困难的. 因为实现波浪的曲线需要借助贝塞尔曲线. 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法. 当然,借助其他力量(SVG.CANVAS),是可以很轻松的完成所谓的波浪效果的,先看看,非 CSS 方式实现的波浪效果.   使用 SVG 实现波浪效果 借助 SVG ,是很容易画出三次贝塞尔曲线的. 看看效果: 代码如下: <svg width="200px" height="200px" ve

js形成页面的一种遮罩效果实例代码

 这篇文章主要介绍了js形成页面的一种遮罩效果实例代码,有需要的朋友可以参考一下 用这锻代码 之前请先下载jquery库   代码如下: var maskStackCount = 0;   function mask(method){   //这里是你想要进行遮罩的窗口,我这里想要遮罩的是一个iframe窗口,也可以用var winObj=$(window)   var winObj=window.top.$("body").find("iframe[name='dialog

Android5.0多种侧滑栏效果实例代码_Android

1.普通侧滑 效果图:   思路:通过自定义View继承HorizontalScrollView,然后重写onMeasure(),onLayout(),onTouchEvent() 方法并设置menu(通过动画使menu开始时处于隐藏状态)布局和content布局.(注意:使用ViewHelper类需要导入nineoldandroids-2.4.0.jar包) menu(left_menu)布局代码: <?xml version="1.0" encoding="utf-