最近研究CSS的时候发现了 仅使用两个CSS属性就可以制作出全屏滚动效果 ,这两个属性就是:
- scroll-snap-type
- scroll-snap-align
使用它就可以实现 fullpage.js
这种全屏滚动效果,其实,这种全屏滚动效果的理论非常简单,就是使用js监听界面滚动,当界面滚动到某个值时就让界面持续滚动到下一个屏幕,但是!要考虑到屏幕尺寸大小带来的兼容性问题就是一件非常麻烦的事情。
今天说的这两个属性并不能替代 fullpage.js
,有下面2个原因:
- 它们在浏览器上面存在兼容性问题。
- CSS属性无法监听事件,也就无法提供动画完成时的回调函数。
1. 兼容性
目前主流的浏览器都已经支持了这两个CSS属性,可以放心的使用。如果你需要兼容IE浏览器,那么请选择 fullpage.js
。
2. 使用
使用的方法其实很简单, scroll-snap-type
属性放在 需要全屏滚动的容器的父容器上 ,而 scroll-snap-align
则需要 放在全屏滚动的容器上 ,多说无益,我们直接来看一下代码就可以很清楚的知道如何使用这两个CSS属性。
整个网页的完整代码很简单,下面直接将它贴上来:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>CSS scroll snap</title> <style> body { margin: 0; } .container { height: 100vh; overflow-y: scroll; /* 在父容器上面使用 scroll-snap-type 属性 */ scroll-snap-type: y mandatory; } section { padding: 112px; height: calc(100vh - 224px); color: white; /* 在需要滚动的容器上使用 scroll-snap-align 属性 */ scroll-snap-align: start; } section:nth-of-type(1) { background-color: #60af15; } section:nth-of-type(2) { background-color: #158baf; } section:nth-of-type(3) { background-color: #af1581; } section h3 { font-size: 48px; } section p { font-size: 20px; } </style> </head> <body> <div class="container"> <section> <h3>A subtitle lives here</h3> <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus deleniti dignissimos ducimus expedita iure maxime qui rerum veniam voluptatibus. Accusamus asperiores assumenda atque consectetur consequuntur culpa cum deserunt dicta distinctio error excepturi fuga ipsa iste magnam modi nobis, obcaecati, pariatur perspiciatis placeat quo quod reiciendis repudiandae saepe soluta tempora unde vel? Aliquam exercitationem iste maiores placeat reprehenderit voluptates voluptatum. Ad at commodi culpa cumque debitis delectus dolorum, eius error et explicabo harum in ipsum iste labore laborum libero magni maiores nam non nostrum nulla officia pariatur quam quasi quia quo recusandae reprehenderit saepe similique vel vero vitae voluptas voluptatem! Quibusdam. </p> </section> <section> <h3>A subtitle lives here</h3> <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus deleniti dignissimos ducimus expedita iure maxime qui rerum veniam voluptatibus. Accusamus asperiores assumenda atque consectetur consequuntur culpa cum deserunt dicta distinctio error excepturi fuga ipsa iste magnam modi nobis, obcaecati, pariatur perspiciatis placeat quo quod reiciendis repudiandae saepe soluta tempora unde vel? Aliquam exercitationem iste maiores placeat reprehenderit voluptates voluptatum. Ad at commodi culpa cumque debitis delectus dolorum, eius error et explicabo harum in ipsum iste labore laborum libero magni maiores nam non nostrum nulla officia pariatur quam quasi quia quo recusandae reprehenderit saepe similique vel vero vitae voluptas voluptatem! Quibusdam. </p> </section> <section> <h3>A subtitle lives here</h3> <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus deleniti dignissimos ducimus expedita iure maxime qui rerum veniam voluptatibus. Accusamus asperiores assumenda atque consectetur consequuntur culpa cum deserunt dicta distinctio error excepturi fuga ipsa iste magnam modi nobis, obcaecati, pariatur perspiciatis placeat quo quod reiciendis repudiandae saepe soluta tempora unde vel? Aliquam exercitationem iste maiores placeat reprehenderit voluptates voluptatum. Ad at commodi culpa cumque debitis delectus dolorum, eius error et explicabo harum in ipsum iste labore laborum libero magni maiores nam non nostrum nulla officia pariatur quam quasi quia quo recusandae reprehenderit saepe similique vel vero vitae voluptas voluptatem! Quibusdam. </p> </section> </div> </body> </html>
可以看到代码并不复杂,下面我们就着重讲解一下这两个CSS属性。
3. scroll-snap-type
该CSS属性拥有下面这些值:
none:当这个滚动容器的可视的 viewport 是滚动的,不做任何处理。
- x :滚动容器只捕捉其水平轴上的捕捉位置。
- y :滚动容器只捕捉其垂直轴上的捕捉位置。
- block:滚动容器仅捕捉到其块轴上的捕捉位置。
- inline:滚动容器仅捕捉到其内联轴上的捕捉位置。
- both:滚动容器会独立捕捉到其两个轴上的位置(可能会捕捉到每个轴上的不同元素)。
- mandatory :如果滚动容器被滚动,那么它超过临界值后会自动滚动到下个容器上。
- proximity :如果滚动容器被滚动,那么它超过临界值后不会自动滚动到下个容器上。
其中需要注意的就是上面粗体标注的几个属性,使用 mandatory
就是全屏滚动, 则当滚动过一定阈值后,会自动滚动到下一屏幕,如果没有滚动过某一阈值,则回弹。
而 proximity
不一样的是: 滚动过一定阈值后,就可以正常进行滚动(而 mandatory
是直接进入下一屏),如果没有滚动过某一阈值,则回弹。
理解这两个属性其实非常简单,将上面的代码改改自己体验下就明白了。
注:使用 mandatory
,如果 滚动容器的高度已经大于屏幕的高度时 需要慎用,因为可能会导致有一部分内容因为强制滚屏的原因导致阅读起来非常困难。
4. scroll-snap-align
该CSS属性拥有下面这些值:
none:该容器不会进行定义在父容器上面对应轴的捕捉。 start:该容器被捕捉的位置是该容器开始的部分。 end:该容器被捕捉的位置是该容器结束的部分。 center:该容器被捕捉的位置是该容器中间的部分。
用一张图可以很形象的明白这些属性所代表的容器位置:
5. 最后
因为我看到 scroll-snap
的 其它属性大部分都存在很严重的兼容性问题 ,所以就不在这里细讲了,如果有兴趣的话可以到 CSS Scroll Snap 直接查看,不过使用上面的这两个属性其实已经完全够用了。
参考文章:
scroll-snap-align MDN
scroll-snap-type MDN
Practical CSS Scroll Snapping
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]