目錄
基礎
定位腳註
錨點和目標
移動目標
視圖驅動動畫
移動端怎麼辦?
總結
首頁 web前端 css教學 使用CSS錨定位和視圖驅動的動畫彈出評論

使用CSS錨定位和視圖驅動的動畫彈出評論

Mar 07, 2025 pm 05:04 PM

Popping Comments With CSS Anchor Positioning and View-Driven Animations

2024 年 CSS 現狀調查結果已出爐,一如既往地引人入勝。雖然每個部分都值得深入分析,但我們通常最關注的是最常用 CSS 功能的部分。如果您有興趣撰寫關於 Web 開發的文章(也許可以和我們一起開始寫作?),您會特別想查看該功能的“閱讀清單”部分。它包含調查受訪者在完成調查後希望閱讀的功能,通常由社區認知度較低的最新功能組成。

令我興奮的一個功能是我 2024 年的首選:CSS 錨點定位,在調查中排名第四。您可以在下面找到滾動驅動動畫,這是另一個今年獲得廣泛瀏覽器支持的出色功能。兩者都優雅且提供良好的開發者體驗,但將它們結合起來會打開新的可能性,這些可能性在去年大多數人看來都屬於 JavaScript 的領域。

我想展示其中一種可能性,同時進一步了解這兩個功能。具體來說,我們將創建一個博客文章,其中腳註會作為評論彈出在每段文本的旁邊。

對於此演示,我們的要求如下:

  • 腳註進入屏幕時彈出。
  • 將它們附加到相應的文本。
  • 腳註位於屏幕兩側,因此我們需要一個移動端備用方案。

基礎

首先,我們將使用以下常見的博客文章佈局示例:標題、封面圖片和正文:

需要注意的唯一一點是,我們偶爾會有一段帶有腳註的段落:

<code><main><p>
    非常有趣的信息!
     关于它的脚注
  </p>
</main></code>
登入後複製
登入後複製
登入後複製

定位腳註

在此演示中,腳註位於文章正文中,緊跟在我們想要註釋的文本之後。但是,我們希望它們作為浮動氣泡附加在文本旁邊。過去,我們可能需要結合使用絕對定位和相對定位,並為每個腳註找到正確的內邊距屬性。

但是,我們現在可以使用錨點定位來完成這項工作,這項功能允許我們將絕對定位的元素相對於其他元素進行定位——而不僅僅是相對於其所在的容器上下文。我們將討論“錨點”和“目標”一段時間,因此在開始時需要一些術語:

  • 錨點:這是用作定位其他元素的參考的元素,因此得名錨點。
  • 目標:這是相對於一個或多個錨點定位的絕對定位元素。目標是我們從現在開始使用的名稱,但在其他資源中,您經常會發現它只是“絕對定位元素”。

我不會詳細介紹每個細節,但如果您想了解更多信息,我強烈推薦我們的錨點定位指南,其中包含完整的信息和示例。

錨點和目標

很容易知道每個 .footnote 都是目標元素。然而,選擇我們的錨點需要更多的細微差別。雖然看起來每個 .note 元素都應該是錨點元素,但最好選擇整個 .post 作為錨點。如果我們將 .footnote 的位置設置為絕對定位,我來解釋一下:

<code><main><p>
    非常有趣的信息!
     关于它的脚注
  </p>
</main></code>
登入後複製
登入後複製
登入後複製

您會注意到,文章中的 .footnote 元素已從正常的文檔流中移除,並且它們在視覺上懸停在它們的 .note 元素上方。這是個好消息!由於它們已經在垂直軸上對齊,我們只需使用文章作為錨點,在水平軸上將它們移動到側面即可。

這時,我們需要找到正確的內邊距屬性才能將它們放在兩側。雖然這是可行的,但這卻是一個痛苦的選擇,因為:

  1. 您必須依賴一個神奇數字。
  2. 它取決於視口。
  3. 它取決於腳註的內容,因為它會改變其寬度。

元素默認情況下不是錨點,因此要將文章註冊為錨點,我們必須使用 anchor-name 屬性並為其提供一個短橫線標識符(以兩個短橫線開頭的自定義名稱)作為名稱。

<code>.footnote {
  position: absolute;
}</code>
登入後複製
登入後複製

在這種情況下,我們的目標元素將是 .footnote。要使用目標元素,我們可以保留絕對定位並使用 position-anchor 屬性選擇錨點元素,該屬性採用錨點的短橫線標識符。這將使 .post 成為下一步中目標的默認錨點。

<code>.post {
  anchor-name: --post;
}</code>
登入後複製
登入後複製

移動目標

與其為 .footnoteleftright 屬性選擇任意內邊距值,我們可以使用 anchor() 函數。它返回一個表示錨點一側位置的 <length></length> 值,允許我們始終正確設置目標的內邊距屬性。因此,我們可以將目標的左側連接到錨點的右側,反之亦然:

<code>.footnote {
  position: absolute;
  position-anchor: --post;
}</code>
登入後複製
登入後複製

但是,您會注意到它卡在文章的一側,中間沒有空間。幸運的是,margin 屬性的工作方式與您希望的針對目標元素的方式一樣,並在腳註目標和文章錨點之間留出一些空間。我們還可以添加更多樣式以使外觀更漂亮:

<code>.footnote {
  position: absolute;
  position-anchor: --post;

  /* 将它们放在右侧 */
  left: anchor(right);

  /* 或将它们放在左侧 */
  right: anchor(left);

  /* 每次只使用其中一个! */
}</code>
登入後複製
登入後複製

最後,所有 .footnote 元素都在文章的同一側,如果我們想將它們安排在每一側,我們可以使用 nth-of-type() 選擇器來選擇奇數和偶數註釋並將它們設置在相對的側邊。

<code>.footnote {
  /* ... */

  background-color: #fff;
  border-radius: 20px;
  margin: 0px 20px;
  padding: 20px;
}</code>
登入後複製

我們使用 nth-of-type() 而不是 nth-child,因為我們只想迭代 .note 元素而不是所有同級元素。

請記住從 .footnote 中刪除最後一個內邊距聲明,然後!我們的腳註位於每一側。您會注意到我還為每個腳註添加了一個小三角形,但這超出了本文的範圍:

視圖驅動動畫

讓我們開始創建彈出動畫。我發現這是最簡單的一部分,因為視圖和滾動驅動動畫都盡可能直觀。我們將首先使用常見的 @keyframes 註冊動畫。我們想要的是讓我們的腳註從不可見開始,然後慢慢變大並可見:

<code><main><p>
    非常有趣的信息!
     关于它的脚注
  </p>
</main></code>
登入後複製
登入後複製
登入後複製

這就是我們的動畫,現在我們只需要將其添加到每個 .footnote

<code>.footnote {
  position: absolute;
}</code>
登入後複製
登入後複製

這本身不會做任何事情。我們通常會為它設置一個 animation-duration 以使其開始。但是,視圖驅動動畫不會通過設定的時間運行,而是動畫進度將取決於元素在屏幕上的位置。為此,我們將 animation-timeline 設置為 view()

<code>.post {
  anchor-name: --post;
}</code>
登入後複製
登入後複製

這使得動畫在元素離開屏幕時結束。我們希望它在更易讀的位置結束。最後的潤色是將 animation-range 設置為 cover 0% cover 40%。這意味著,“我希望元素在視圖中為 0% 時開始動畫,並在視圖中為 40% 時結束。”

<code>.footnote {
  position: absolute;
  position-anchor: --post;
}</code>
登入後複製
登入後複製

Bramus 的這個令人驚嘆的工具更側重於滾動和視圖驅動動畫,它更好地展示了 animation-range 屬性的工作原理。

移動端怎麼辦?

您可能已經註意到,這種腳註方法在較小的屏幕上不起作用,因為文章兩側沒有空間。修復很簡單。我們希望腳註在小屏幕上顯示為普通腳註,在大屏幕上顯示為註釋,我們可以通過僅在屏幕大於某個閾值(約 1000 像素)時才顯示我們的註釋來做到這一點。如果不是,則註釋將像您在 Web 上找到的任何其他註釋一樣顯示在文章正文中。

<code>.footnote {
  position: absolute;
  position-anchor: --post;

  /* 将它们放在右侧 */
  left: anchor(right);

  /* 或将它们放在左侧 */
  right: anchor(left);

  /* 每次只使用其中一个! */
}</code>
登入後複製
登入後複製

現在,只有當有足夠的空間時,我們的註釋才會顯示在兩側:

總結

如果您也喜歡撰寫自己熱衷的內容,您會經常發現自己會進入隨機的切線,或者想要為每段添加評論以提供額外的上下文。至少,這就是我的情況,因此能夠動態顯示評論是一個很好的補充。特別是當我們僅使用 CSS 就能實現這一點時——這是我們一年前無法做到的!

以上是使用CSS錨定位和視圖驅動的動畫彈出評論的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

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

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

帶有粘性定位的堆疊卡和一點點的雜物 帶有粘性定位的堆疊卡和一點點的雜物 Apr 03, 2025 am 10:30 AM

前幾天,我發現了科里·金尼文(Corey Ginnivan)網站上的這一點,當您滾動時,彼此之間的卡片堆放集。

Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? 為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? Apr 05, 2025 pm 05:51 PM

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

如何通過CSS選擇第一個類名為item的子元素? 如何通過CSS選擇第一個類名為item的子元素? Apr 05, 2025 pm 11:24 PM

在元素個數不固定的情況下如何通過CSS選擇第一個指定類名的子元素在處理HTML結構時,常常會遇到元素個數不�...

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? 在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? Apr 05, 2025 pm 10:21 PM

在前端開發中如何實現類似Windows...

See all articles