目錄
基礎
定位腳註
錨點和目標
移動目標
視圖驅動動畫
移動端怎麼辦?
總結
首頁 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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1666
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
靜態表單提供商的比較 靜態表單提供商的比較 Apr 16, 2025 am 11:20 AM

讓我們嘗試在這裡造成一個術語:“靜態表單提供商”。你帶上html

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

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

每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom 每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom Apr 17, 2025 am 10:55 AM

在本週的平台新聞綜述中,Chrome引入了一個用於加載的新屬性,Web開發人員的可訪問性規範以及BBC Move

帶有HTML對話框元素的一些動手 帶有HTML對話框元素的一些動手 Apr 16, 2025 am 11:33 AM

這是我第一次查看HTML元素。我已經意識到了一段時間,但是尚未將其旋轉。它很酷,

紙張形式 紙張形式 Apr 16, 2025 am 11:24 AM

購買或建造是技術的經典辯論。自己構建東西可能會感覺更便宜,因為您的信用卡賬單上沒有訂單項,但是

'訂閱播客”鏈接應在哪裡? '訂閱播客”鏈接應在哪裡? Apr 16, 2025 pm 12:04 PM

有一段時間,iTunes是播客中的大狗,因此,如果您將“訂閱播客”鏈接到喜歡:

它全部都在頭上:管理帶有React頭盔的React Power Site的文檔頭 它全部都在頭上:管理帶有React頭盔的React Power Site的文檔頭 Apr 15, 2025 am 11:01 AM

該文檔負責人可能不是網站上最迷人的部分,但是其中所處的內容對於您的網站的成功也一樣重要

託管您自己的非JavaScript分析的選項 託管您自己的非JavaScript分析的選項 Apr 15, 2025 am 11:09 AM

有很多分析平台可幫助您跟踪網站上的訪問者和使用數據。也許最著名的是Google Analytics(廣泛使用)

See all articles