純CSS實現滾動效果執行個體代碼

來源:互聯網
上載者:User

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視差滾動的秘密了沒?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.