使用CSS3来实现滚动视差效果的教程


Posted in HTML / CSS onAugust 24, 2015

“视差(parallax)”效果现在在互联网上越来越流行了。如果你还没听说过什么是视差效果,它其实就是利用图片形成不同的层,分别以不同的速度,不同的方向移动产生的效果。这会产生出很奇妙的视觉效果,能有力的吸引住浏览者的目光。

观看演示

在web设计中,最常见的实现视差效果的方式是使用jQuery插件。但这种方法有一些弊端。这些插件大多都是在window对象的scroll事件上放置监听器。这会导致JavaScript需要处理大量的事件触发(处理scroll事件很容易造成浏览器性能问题,使用时需要非常小心。)移动不同的层,计算背景的位置,设置图片的属性,这都引起了大量的DOM操作。

简言之,使用JavaScript来实现视差效果会让页面的滚动出现性能问题,出现卡顿。

background-attachment属性回顾
background-attachment -- 定义背景图片随滚动轴的移动方式
取值: scroll | fixed | inherit
scroll: 随着页面的滚动轴背景图片将移动
fixed: 随着页面的滚动轴背景图片不会移动
inherit: 继承
初始值: scroll
继承性: 否
适用于: 所有元素
background:背景.attachment:附着.
示例

CSS Code复制内容到剪贴板
  1. body    
  2. {   
  3.  background-image:url('list-orange.png');   
  4.  background-attachment:fixed;   
  5.  background-repeat:repeat-x;   
  6.  background-position:center center;   
  7. }  

屏幕的背景图片为一条橙色线.随着滚动轴移动,橙色线的视觉位置不变.
CSS background-attachment 属性示例

使用background-attachment: fixed实现视差效果

为什么只有一小部分人知道,这种效果实际上可以用CSS实现。

为了实现视差效果,多个背景图片必须放置在不同的元素上。这些背景图需要定义成background-attachment: fixed。通过设定background-attachment,我们可以改变背景图像的效果和位置。

background-attachment的缺省值是scroll,也就是背景图片和内容的位置是相对静止的。这我们大家都见过,当我们上下滚动一个网页时,背景和内容一起滚动。

当把background-attachment设置成fixed时,事情会变得有趣。fixed是说背景图片不随内容一起滚动,而是跟窗口保持静止。也就是说,当你拖动滚动条时,背景图片没有变化。这就能够产生漂亮的视差效果。

让我看一个实际实现:

CSS Code复制内容到剪贴板
  1. <!-- Four containers for setting the background images -->   
  2. <div class="parallax">   
  3.   <div class="bg__foo">foo</div>   
  4.   <div class="bg__bar">bar</div>   
  5.   <div class="bg__baz">baz</div>   
  6.   <div class="bg__bazz">bazz</div>   
  7. </div>   
  8. // setting base styles to image containers   
  9. [class*="bg__"] {   
  10.   height: 50vh;   
  11.   
  12.   text-indent: -9999px;   
  13.   
  14.   /* fix background */  
  15.   background-attachmentfixed;   
  16.   
  17.   /* center it */  
  18.   background-positioncenter center;   
  19.   
  20.   /* Scale it nicely to the element */  
  21.   background-size: cover;   
  22.   
  23.   /* just make it look a bit better  */  
  24.   &:nth-child(2n) {   
  25.     box-shadow: inset 0 0 1em #111;   
  26.   }   
  27. }   
  28.   
  29. .bg__foo {   
  30.   background-imageurl(   
  31.     http://www.webhek.com/wordpress/wp-content/uploads/2014/07/parallax1.jpg   
  32.   );   
  33. }   
  34.   
  35. .bg__bar {   
  36.   background-imageurl(   
  37.     http://www.webhek.com/wordpress/wp-content/uploads/2014/07/parallax2.jpg   
  38.   );   
  39. }   
  40.   
  41. .bg__baz {   
  42.   background-imageurl(   
  43.     http://www.webhek.com/wordpress/wp-content/uploads/2014/07/parallax3.jpg   
  44.   );   
  45. }   
  46.   
  47. .bg__bazz {   
  48.   height: 100vh;   
  49.   
  50.   background-imageurl(   
  51.     http://www.webhek.com/wordpress/wp-content/uploads/2014/07/parallax1.jpg   
  52.   );   
  53. }  

关于这种技术的浏览器兼容情况,你可以参考这里,基本上,现代浏览器和IE9+的浏览器都支持。

观看演示

对我个人而言,我更喜欢CSS技术实现的视差效果,而不是用JavaScript。用CSS实现,是受浏览器原生支持,没有编程逻辑,没有对DOM额外的操作,使得整个方案非常的简洁漂亮。

即使是CSS实现的视差效果,也会给浏览器带来负担。

background-attachment: fixed会导致浏览器更多的渲染,也会影响浏览器滚动的效率。所以,开发时一定要多做测试,视性能情况而决定实现的效果。

HTML / CSS 相关文章推荐
CSS3 实用技巧:实现黑白图像效果示例代码
Jul 11 HTML / CSS
CSS3 透明色 RGBA使用介绍
Aug 06 HTML / CSS
CSS3实现swap交换动画
Jan 19 HTML / CSS
css3 实现元素弧线运动的示例代码
Apr 24 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
Oct 16 HTML / CSS
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
Mar 05 HTML / CSS
html5调用摄像头功能的实现代码
May 07 HTML / CSS
HTML5 Canvas中绘制椭圆的4种方法
Apr 24 HTML / CSS
HTML5新标签兼容——&gt; 的两种方法
Sep 12 HTML / CSS
HTML5页面无缝闪开的问题及解决方案
Jun 11 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
Oct 19 HTML / CSS
基于HTML十秒做出淘宝页面
Oct 24 HTML / CSS
CSS3中的opacity属性使用教程
Aug 19 #HTML / CSS
实例讲解CSS3中的border-radius属性
Aug 18 #HTML / CSS
详解CSS3中使用gradient实现渐变效果的方法
Aug 18 #HTML / CSS
全方位了解CSS3的Regions扩展
Aug 07 #HTML / CSS
CSS3中Animation属性的使用详解
Aug 06 #HTML / CSS
利用CSS3的transition属性实现滑动效果
Aug 05 #HTML / CSS
详解CSS3中@media的实际使用
Aug 04 #HTML / CSS
You might like
php读取msn上的用户信息类
2008/12/05 PHP
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
代码获取历史上的今天发生的事
2014/04/11 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
python+pygame实现坦克大战
2019/09/10 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
计算机专业大学生的自我评价
2013/11/14 职场文书
心理健康教育心得体会
2013/12/29 职场文书
快递业务员岗位职责
2014/01/06 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
导游词之太湖
2019/10/08 职场文书
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby
python中urllib包的网络请求教程
2022/04/19 Python
Win11软件图标固定到任务栏
2022/04/19 数码科技