小tip: 純CSS實現視差滾動效果

jopen 9年前發布 | 15K 次閱讀 CSS 前端技術

原文  http://www.zhangxinxu.com/wordpress/2015/03/css-only-parallax-effect/

一、效果Demo先行~

視差滾動效果大家可能都聽過,基本上都是JS實現的,有對應插件 – Parallax.js .

實際上,如果你對兼容性要求不是很高,比方說忽略IE瀏覽器,則我們使用簡單的幾行CSS代碼就可以實現視差滾動效果了。

對于效果展示,先看效果是最能引起興趣,激發學習熱情的,如下(IE9+):

您可以狠狠地點擊這里: 純CSS實現的視差滾動效果Demo

進入Demo滾動滾動條,最好鼠標慢慢拖動,效果更明顯——表情花朵等小圖標在手機圖片上方飛動的視差感覺。目前,Chrome以及FireFox等瀏覽器(不包括IE11在內的瀏覽器)都是有效果。

二、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)中的. 這幾個數字之間有什么關系呢?

我們先看下面這個3D視角示意圖(來自 這里 ):

小tip: 純CSS實現視差滾動效果

當我們在屏幕前面個單位的地方,看屏幕后面個單位的元素,肉眼所見的畫面大小只有實際的1/2,即所謂的近大遠小。此時scale(2)讓內容放大到原來2倍,正好在平面上看上去好像是原來大小。

雖然肉眼所見體積似乎是1:1,但是,滾動時候的位移變化還是1:2, 應該很好理解。舉個極端的例子,我們坐在電瓶車上看天上的月亮,雖然車子在40碼的速度奔啊奔,但是,好像月亮的位置沒有移動,一直就在頭頂。網頁中的3D就是模擬真實世界的3D效果,因此,也會有這種視差體驗。

或者這么講吧,CSS3 3D天然視差效果,滾動,只是視差體現的一個觸發條件。

于是,親愛的同學。如果你想實現3層視差滾動怎么辦?很簡單,來個transform: translateZ(-2px)試試~

三、結語

據我測試,直接body或html滾動似乎難以實現視差滾動效果,不過天色已晚,我沒深究,有興趣的小伙伴可以研究分享下。

OK, 就像絢爛驚奇的魔術,解密之后,會發現不過爾爾。不知你成功解密了CSS視差滾動的秘密了沒?

小tip: 純CSS實現視差滾動效果

感謝閱讀,歡迎交流!

本文為原創文章,會經常更新知識點以及修正一些錯誤,因此轉載請保留原出處,方便溯源,避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。

本文地址: http://www.zhangxinxu.com/wordpress/?p=4720

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!