亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
何為 @scroll-timeline 捲動時間軸?
示意DEMO
@scroll-timeline 文法介紹
使用 @scroll-timeline 實現(xiàn)滾動進(jìn)度指示器
使用 scroll-offsets 精確控制動畫觸發(fā)時機(jī)
使用 @scroll-timeline 實現(xiàn)各類效果
@scroll-timeline 的實驗室特性與特性檢測
特性檢測
最后
首頁 web前端 css教學(xué) 深入了解CSS動畫新功能:@scroll-timeline

深入了解CSS動畫新功能:@scroll-timeline

Mar 18, 2022 am 10:55 AM
css 動畫 新特性

在之前的文章《2022年你值得了解的幾個CSS新特性(收藏學(xué)習(xí))》中帶大家簡單介紹了幾個CSS新特性,今天帶大家深入了解其中的一個新特色(動畫殺手鐧):@scroll-timeline,希望對大家有幫助!

深入了解CSS動畫新功能:@scroll-timeline

在 CSS 規(guī)格 Scroll-linked Animations 中,推出了一個劃時代的 CSS 功能。也就是 -- The @scroll-timeline at-rule,直譯過來就是滾動時間軸。

本文,就將帶大家一探究竟,從入門到學(xué)會使用 CSS @scroll-timeline。 (建議學(xué)習(xí):css影片教學(xué)

何為 @scroll-timeline 捲動時間軸?

什麼是 @scroll-timeline 滾動時間軸呢?

@scroll-timeline 能夠設(shè)定一個動畫的開始和結(jié)束由滾動容器內(nèi)的滾動進(jìn)度決定,而不是由時間決定。

意思是,我們可以定義一個動畫效果,該動畫的開始和結(jié)束可以透過容器的滾動來控制。

示意DEMO

再系統(tǒng)性學(xué)習(xí)文法之前,我們透過一個DEMO,簡單了解一下它的用法:

#我們先實作一個簡單的字體F旋轉(zhuǎn)動畫

<div id="g-box">F</div>
#g-box {
    animation-name: rotate;
    animation-duration: 3s;
    animation-direction: alternate;
    animation-easing-function: linear;
}
@keyframes rotate {
    0% {
        transform: rotate(0);
    }
    100% {
        transform: rotate(360deg);
    }
}

正常而言,它是這樣一個簡單的動畫:

深入了解CSS動畫新功能:@scroll-timeline

接下來,我們把這個動畫和@scroll-timeline 結(jié)合,需要把它放置到一個可滾動的容器中:

<div id="g-box">F</div>
#g-content {
    width: 300px;
    height: 170vh;
    background: #999;
}
#g-box {
    font-size: 150px;
    margin: 70vh auto 0;
    animation-name: rotate;
    animation-duration: 3s;
    animation-direction: alternate;
    animation-easing-function: linear;
    animation-timeline: box-rotate;
}
@keyframes rotate {
    0% {
        transform: rotate(0);
    }
    100% {
        transform: rotate(360deg);
    }
}
@scroll-timeline box-rotate {
    source: selector("#g-content");
}

這裡,我們實作了一個可滾動容器#g-content,它的高度是170vh,也就是可視界面高度的1.7 倍,並且把#g-box 容器放置在一個距離頂部70vh 高度的地方:

深入了解CSS動畫新功能:@scroll-timeline

有意思的來了,我們設(shè)定的旋轉(zhuǎn)動畫不會自動開始,只有當(dāng)我們向下滾動的時候,動畫才會開始進(jìn)行,實際效果Gif:

深入了解CSS動畫新功能:@scroll-timeline

CodePen Demo -- @scroll-timeline Demo

https://codepen.io/Chokcoco/pen/JjOZMaQ

看到這裡,大家應(yīng)該能夠理解@scroll-timeline 的作用及意義了,它賦予了CSS 能夠基於滾動條的滾動去控制動畫行進(jìn)的能力! Amazing! !

@scroll-timeline 文法介紹

接下來,我們先緩一緩,簡單看一看 @scroll-timeline 的文法。

使用 @scroll-timeline,最核心的就是需要定義一個 @scroll-timeline 規(guī)則:

@scroll-timeline moveTimeline {
  source: selector("#g-content");
  orientation: vertical;
  scroll-offsets: 0px, 500px;
}

其中:

  • source:綁定觸發(fā)滾動動畫的滾動容器
    • source: auto:綁定到 Document,也就是全局 Windows 對象
    • source: selector("id-selector"),通過 selector(),內(nèi)置一個 #id 選擇器,選取一個可滾動容器
    • source: none:不指的滾動容器
  • orientation:設(shè)定滾動時間線的方向
    • orientation: auto:默認(rèn)為 vertical,也就是豎直方向的滾動
    • orientation: vertical:豎直方向的滾動
    • orientation: horizontal:水平方向的滾動
    • orientation: block:不太常用,使用沿塊軸的滾動位置,符合書寫模式和方向性
    • orientation: inline:不太常用,使用沿內(nèi)聯(lián)軸的滾動位置,符合書寫模式和方向性
  • scroll-offsets:滾動時間線的核心,設(shè)定在滾動的什么階段,觸發(fā)動畫,可通過三種方式之一進(jìn)行設(shè)置:
    • scroll-offsets: none 這意味著沒有 scroll-offset 指定。
    • 由逗號分隔的 length-percentage 值列表確定。每個值都映射到animation-duration。例如,如果 ananimation-duration 設(shè)置為 2s 且滾動偏移量為 0px, 30px, 100px,則在 1s 時,滾動偏移量將為 30px。
    • 第三種確定滾動偏移量的方法是使用元素偏移量。這意味著可以指定頁面內(nèi)的元素,其位置決定了滾動時間線以及要使用這些元素的哪個邊緣。指定元素是使用 selector() 函數(shù)完成的,該函數(shù)接收元素的 id。邊緣由關(guān)鍵字 start 或確定 end??蛇x的閾值的 0–1 可用于表示元素滾動中預(yù)期可見的百分比。

scroll-offsets 的理解會比較困難,我們稍后詳述。

在設(shè)定了一個 @scroll-timeline 之后,我們只需要將它和動畫綁定起來即可,通過 animation-timeline

@scroll-timeline moveTimeline {
  source: selector("#g-content");
  orientation: vertical;
  scroll-offsets: 0px, 500px;
}
div {
    animation-name: move;
    animation-duration: 3s;
    animation-timeline: moveTimeline;
}
@keyframes move{
    0% {
        transform: translate(0, 0);
    }
    100% {
        transform: translate(100%, 0);
    }
}

使用 @scroll-timeline 實現(xiàn)滾動進(jìn)度指示器

之前在 不可思議的純 CSS 滾動進(jìn)度條效果 一文中,我們介紹了一種使用漸變實現(xiàn)的純 CSS 滾動進(jìn)度指示器效果:

深入了解CSS動畫新功能:@scroll-timeline

該方法有些小小的瑕疵。其中一個就是當(dāng)滾動距離太短的時候,進(jìn)度條右側(cè)會有明顯的斜邊效果。

而有了 @scroll-timeline 之后,我們終于可以將滾動和動畫這兩個元素綁定起來,再實現(xiàn)滾動進(jìn)度指示器,就已經(jīng)非常輕松了:

<div id="g-container">
    <p>...文本內(nèi)容...</p>
</div>
#g-container {
    width: 100vw;
}
#g-container::before {
    content: "";
    position: fixed;
    height: 5px;
    left: 0;
    top: 0;
    right: 0;
    background: #ffc107;
    animation-name: scale;
    animation-duration: 1s;
    animation-fill-mode: forwards;
    animation-timeline: box-rotate;
    transform-origin: 0 50%;
}

@keyframes scale {
    0% {
        transform: scaleX(0);
    }
    100% {
        transform: scaleX(1);
    }
}
@scroll-timeline box-rotate {
    source: auto;
    orientation: vertical;
}

1、我們在頁面最上方,通過一個偽元素,實現(xiàn)一個占滿屏幕 100%5px 高的進(jìn)度條。正常而言是這樣:

深入了解CSS動畫新功能:@scroll-timeline

2、通過設(shè)定一個 transform: scaleX(0)transform: scaleX(1) 的動畫,并且將它與 body 的滾動相綁定,即可得到滾動指示器,效果如下:

深入了解CSS動畫新功能:@scroll-timeline

完整的代碼,你可以戳這里:CodePen Demo - 使用 @scroll-timeline 實現(xiàn)滾動進(jìn)度條

https://codepen.io/Chokcoco/pen/eYeKLMj

使用 scroll-offsets 精確控制動畫觸發(fā)時機(jī)

大家可以再看看上面的 Gif 圖,都有一個問題,就是動畫的開始時間都是從滾動一開始就開始了,剛好在滾動結(jié)束時結(jié)束。那么如果我希望動畫在滾動的特定階段觸發(fā),那該怎么辦呢?

這里,就需要借助 scroll-offsets,去更加精確的控制我們的動畫。

在滾動過程中,我們可以將一個元素,劃分為 3 個區(qū)域:

  • 滾動過程中,從上方視野盲區(qū),進(jìn)入視野
  • 滾動過程中,處于視野中
  • 滾動過程中,從視野中,進(jìn)入下方視野盲區(qū)

在這里,我們就可以得到兩個邊界,上方邊界,下方邊界:

深入了解CSS動畫新功能:@scroll-timeline

而對于上下兩個邊界,又會有兩種狀態(tài)。以上邊界為例子,會有:

  • 元素剛剛開始進(jìn)入可視區(qū)
  • 元素完全進(jìn)入可視區(qū)

對于這兩種狀態(tài),我們用 start 0start 1 表示,同理,下方的邊界也可以用 end 0end 1 表示:

深入了解CSS動畫新功能:@scroll-timeline

這里的 0 和 1 實際表示的是,元素滾動中預(yù)期可見的百分比。

有了這些狀態(tài)值,配合 scroll-offsets,我們就可以精確控制滾動動畫的觸發(fā)時間。

我們設(shè)定一個從左向右并且伴隨透明度變化的動畫,的看看下面幾種情況:

1、滾動動畫在元素從下方開始出現(xiàn)時開始,完全出現(xiàn)后截止。

動畫運行范圍:end 0 --> end 1

@keyframes move {
    0% {
        transform: translate(-100%, 0);
        opacity: 0;
    }
    100% {
        transform: translate(0, 0);
        opacity: 1;
    }
}
@scroll-timeline box-move {
    source: auto;
    orientation: "vertical";
    scroll-offsets: 
        selector(#g-box) end 0, 
        selector(#g-box) end 1;

    /* Legacy Descriptors Below: */
    start: selector(#g-box) end 0;
    end: selector(#g-box) end 1;
    time-range: 1s;
}
#g-box {
    animation-name: move;
    animation-duration: 3s;
    animation-fill-mode: both;
    animation-timeline: box-move;
}

效果如下:

深入了解CSS動畫新功能:@scroll-timeline

2、滾動動畫在元素從下方完全出現(xiàn)時開始,在滾動到上方即將離開屏幕后截止:

動畫運行范圍:end 1 --> start 1

// ...
@scroll-timeline box-move {
    source: auto;
    orientation: "vertical";
    scroll-offsets: 
        selector(#g-box) end 1, 
        selector(#g-box) start 1;

    /* Legacy Descriptors Below: */
    start: selector(#g-box) end 1;
    end: selector(#g-box) start 1;
    time-range: 1s;
}
// ...

效果如下:

深入了解CSS動畫新功能:@scroll-timeline

3、滾動動畫在元素滾動到上方即將離開屏幕后開始,完全離開屏幕后截止:

動畫運行范圍:start 1 --> start 0

// ...
@scroll-timeline box-move {
    source: auto;
    orientation: "vertical";
    scroll-offsets: 
        selector(#g-box) start 1, 
        selector(#g-box) start 0;

    /* Legacy Descriptors Below: */
    start: selector(#g-box) start 1;
    end: selector(#g-box) start 0;
    time-range: 1s;
}
// ...

效果如下:

1深入了解CSS動畫新功能:@scroll-timeline

掌握 scroll-offsets 的用法是靈活運用滾動時間線的關(guān)鍵,當(dāng)然,在上面你還會看到 start: selector(#g-box) start 1end: selector(#g-box) start 0 這種寫法,這是規(guī)范歷史遺留問題,最新的規(guī)范已經(jīng)使用了 scroll-offsets 去替代 start: end: 的寫法。

把上述 3 種情況放在一起,再比較比較:

1深入了解CSS動畫新功能:@scroll-timeline

完整的代碼,你可以戳這里:CodePen Demo - @scroll-timeline Demo | element-based offset

使用 @scroll-timeline 實現(xiàn)各類效果

在能夠掌握 @scroll-timeline 的各個語法之后,我們就可以開始使用它創(chuàng)造各種動畫效果了。

譬如如下的,滾動內(nèi)容不斷劃入:

1深入了解CSS動畫新功能:@scroll-timeline

代碼較長,可以戳這里,來自 bramus 的 Codepen CodePen Demo -- Fly-in Contact List (CSS @scroll-timeline version)

https://codepen.io/bramus/pen/bGwJVzg

甚至可以結(jié)合 scroll-snap-type 制作一些全屏滾動的大屏特效動畫:

1深入了解CSS動畫新功能:@scroll-timeline

要知道,這在以前,是完全不可能利用純 CSS 實現(xiàn)的。完整的代碼你可以戳這里:CodePen Demo -- CSS Scroll-Timeline Split Screen Carousel

https://codepen.io/Chokcoco/pen/QWOrPdM

簡而言之,任何動畫效果,如今,都可以和滾動相結(jié)合起來,甚至乎是配合 SVG 元素也不例外,這里我還簡單改造了一下之前的一個 SVG 線條動畫:

1深入了解CSS動畫新功能:@scroll-timeline

完整的代碼你可以戳這里:CodePen Demo -- SVG Text Line Effect | Scroll Timeline

https://codepen.io/Chokcoco/pen/wvPxbRm

@scroll-timeline 的實驗室特性與特性檢測

@scroll-timeline 雖好,目前仍處于實驗室特性時間,Chrome 從 85 版本開始支持,但是默認(rèn)是關(guān)閉的。

兼容性如下(2022-03-07):

1深入了解CSS動畫新功能:@scroll-timeline

在最新的 chrome、Edge、Opera 可以通過瀏覽器配置開啟該特性,Chrome 下開啟該特性需要:

  • 瀏覽器 URL 框輸入 chrome://flags

  • 開啟 #enable-experimental-web-platform-features

美酒雖好,但是離完全能用,瀏覽器大規(guī)模支持還需要等待一會,給時間一點時間吧!

特性檢測

基于目前的兼容性問題,我們可以通過瀏覽器的特性檢測 @supports 語法,來漸進(jìn)增強(qiáng)使用該功能。

特性檢測的語法也非常簡單:

@supports (animation-timeline: works) {
    @scroll-timeline list-item-1 {
	source: selector(#list-view);
	start: selector(#list-item-1) end 0;
	end: selector(#list-item-1) end 1;
        scroll-offsets:
            selector(#list-item-1) end 0,
            selector(#list-item-1) end 1
        ;
	time-range: 1s;
    }
    // ...
}

通過 @supports (animation-timeline: works) {} 可以判斷瀏覽器是否支持 @scroll-timeline。

最后

目前關(guān)于 @scroll-timeline 的相關(guān)介紹還非常少,但是它確是能夠改變 CSS 動畫的一個非常大的革新。隨著兼容性的逐漸普及,未來勢必會在 CSS 中占據(jù)一席之地。

本文到此結(jié)束,希望對你有幫助 :)

(學(xué)習(xí)視頻分享:web前端

以上是深入了解CSS動畫新功能:@scroll-timeline的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何用PHP搭建社交分享功能 PHP分享接口集成實戰(zhàn) 如何用PHP搭建社交分享功能 PHP分享接口集成實戰(zhàn) Jul 25, 2025 pm 08:51 PM

在PHP中搭建社交分享功能的核心方法是通過動態(tài)生成符合各平臺要求的分享鏈接。 1.首先獲取當(dāng)前頁面或指定的URL及文章信息;2.使用urlencode對參數(shù)進(jìn)行編碼;3.根據(jù)各平臺協(xié)議拼接生成分享鏈接;4.在前端展示鏈接供用戶點擊分享;5.動態(tài)生成頁面OG標(biāo)籤優(yōu)化分享內(nèi)容展示;6.務(wù)必對用戶輸入進(jìn)行轉(zhuǎn)義以防止XSS攻擊。該方法無需複雜認(rèn)證,維護(hù)成本低,適用於大多數(shù)內(nèi)容分享需求。

PHP打造博客評論系統(tǒng)變現(xiàn) PHP評論審核與防刷策略 PHP打造博客評論系統(tǒng)變現(xiàn) PHP評論審核與防刷策略 Jul 25, 2025 pm 08:27 PM

1.評論系統(tǒng)商業(yè)價值最大化需結(jié)合原生廣告精準(zhǔn)投放、用戶付費增值服務(wù)(如上傳圖片、評論置頂)、基於評論質(zhì)量的影響力激勵機(jī)制及合規(guī)匿名數(shù)據(jù)洞察變現(xiàn);2.審核策略應(yīng)採用前置審核 動態(tài)關(guān)鍵詞過濾 用戶舉報機(jī)制組合,輔以評論質(zhì)量評分實現(xiàn)內(nèi)容分級曝光;3.防刷需構(gòu)建多層防禦:reCAPTCHAv3無感驗證、Honeypot蜜罐字段識別機(jī)器人、IP與時間戳頻率限制阻止灌水、內(nèi)容模式識別標(biāo)記可疑評論,持續(xù)迭代應(yīng)對攻擊。

什麼是常見的CSS瀏覽器不一致? 什麼是常見的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

不同瀏覽器對CSS解析存在差異,導(dǎo)致顯示效果不一致,主要包括默認(rèn)樣式差異、盒模型計算方式、Flexbox和Grid佈局支持程度及某些CSS屬性行為不一致。 1.默認(rèn)樣式處理不一致,解決方法是使用CSSReset或Normalize.css統(tǒng)一初始樣式;2.舊版IE的盒模型計算方式不同,建議統(tǒng)一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現(xiàn)有差異,應(yīng)多測試並使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse並提供降級

如何用Mac搭建PHP Nginx環(huán)境 MacOS配置Nginx與PHP服務(wù)組合 如何用Mac搭建PHP Nginx環(huán)境 MacOS配置Nginx與PHP服務(wù)組合 Jul 25, 2025 pm 08:24 PM

Homebrew在Mac環(huán)境搭建中的核心作用是簡化軟件安裝與管理。 1.Homebrew自動處理依賴關(guān)係,將復(fù)雜的編譯安裝流程封裝為簡單命令;2.提供統(tǒng)一的軟件包生態(tài),確保軟件安裝位置與配置標(biāo)準(zhǔn)化;3.集成服務(wù)管理功能,通過brewservices可便捷啟動、停止服務(wù);4.便於軟件升級與維護(hù),提升系統(tǒng)安全性與功能性。

描述'垂直align”屬性及其典型用例 描述'垂直align”屬性及其典型用例 Jul 26, 2025 am 07:35 AM

1.ItAdjustSelementsLikeImagesRikeImagesOrformInputswithIntExtLineSustLineSlineSlineSlineSlikeLikeLikeBaseline,中間,Super,Super,Super和Sub.2.intablebecells,ItControlScontentalStalteNtalmscontentalMedwithThtop,Middle,Middle,Midder,Midder,經(jīng)常

什麼是口音色的物業(yè)? 什麼是口音色的物業(yè)? Jul 26, 2025 am 09:25 AM

accent-color是CSS中用於自定義復(fù)選框、單選按鈕和滑塊等表單元素高亮顏色的屬性;1.它直接改變表單控件選中狀態(tài)的默認(rèn)顏色,如將復(fù)選框的藍(lán)色勾選標(biāo)記改為紅色;2.支持的元素包括type="checkbox"、type="radio"和type="range"的輸入框;3.使用accent-color可避免複雜的自定義樣式和額外DOM結(jié)構(gòu),保持原生可訪問性;4.現(xiàn)代瀏覽器普遍支持,舊瀏覽器需降級處理;5.設(shè)置accent-col

如何將SCSS編譯到CSS? 如何將SCSS編譯到CSS? Jul 27, 2025 am 01:58 AM

installdartsassvianpmafterinstallingnode.jsusingnpminstall-gsass.2.compilescsstocssssusingthecommandSassInput.scsssoutput.css.3。 useass - watchinput.scssoutput.csstoauto-compileonsave.4.watchentirefolderswithsass-watchscss:css.5.usepartialswith_prefixfo

如何更改CSS中的文本顏色? 如何更改CSS中的文本顏色? Jul 27, 2025 am 04:25 AM

要改變CSS中文本顏色,需使用color屬性;1.使用color屬性可設(shè)置文本前景色,支持顏色名稱(如red)、十六進(jìn)制碼(如#ff0000)、RGB值(如rgb(255,0,0))、HSL值(如hsl(0,100%,50%))以及帶透明度的RGBA或HSLA(如rgba(255,0,0,0.5));2.可將顏色應(yīng)用於包含文本的任何元素,如h1至h6標(biāo)題、段落p、鏈接a(需注意a:link、a:visited、a:hover、a:active不同狀態(tài)的顏色設(shè)置)、按鈕、div、span等;3.最

See all articles