Google 整理的 2024 年新的 CSS 語法 Part 1

Google 整理了他們在 Chrome 2024 年值得提出來的修改與增加的 CSS 的語法,共分為 5 個 Component,4 個 Interaction 以及 8 個 DX Feature,以下就來看看各別的介紹。

Components

field sizing

field sizing 可以讓你的輸入欄位自動根據內容展開。

過去,沒有欄位自動調整功能時,若要製作一個符合內容大小的輸入欄位,您必須猜測文字輸入的平均大小,或者使用 JavaScript 計算字元數,隨著使用者輸入文字來動態調整元素的高度或寬度。現在,只需一行 CSS 即可完成!

語法:

textarea, select, input {
  field-sizing: content;
}

 

Animate to height: auto

許多人經常請求的 CSS 功能之一是能夠對 height: auto 進行動畫處理。而這個需求的稍微變化版本則是希望對 width 屬性進行過渡效果,或者對像 min-contentmax-contentfit-content 這些內建尺寸關鍵字進行過渡。

從 Chrome 129 開始,您可以使用 interpolate-size 屬性或 calc-size() 函數,實現從固定長度到內建尺寸關鍵字(例如 min-content)及其相互切換的平滑過渡與動畫效果。

啟用此功能最簡單的方法是讓整個頁面選擇使用,您只需在 :root 宣告以下設定即可:

:root {
    interpolate-size: allow-keywords; 
}

這樣即可全局啟用對內建尺寸關鍵字的平滑過渡效果。

大多數情況下,使用 interpolate-size 就已經足夠了。但如果您需要更高的控制能力,例如對計算出的像素值進行運算,或者在同兩個內建尺寸關鍵字之間進行過渡,可以改用 calc-size() 函數。

這樣能讓您更靈活地操作尺寸計算和動畫過渡,以滿足更複雜的需求。

 

Exclusive <details>

網頁中常見的一種使用者介面模式是 手風琴元件。此元件由幾個可展開或收合的「詳細內容小工具」組成,用於顯示或隱藏內容。

這種模式可以透過幾個 <details> 元素來實現,通常會將它們在視覺上分組,表示它們屬於同一組。

如果您想實現一個互斥型手風琴(exclusive accordion),只需為每個 <details> 元素添加一個 name 屬性。當多個 <details> 元素具有相同的 name 值時,它們會形成一個語意群組。在此群組中,當您打開一個 <details> 元素時,先前已打開的元素會自動關閉。

以下是一個範例:

 這樣就能輕鬆實現互斥的手風琴效果,無需額外的 JavaScript!

 

Styleable <details>

從 Chrome 131 開始,您可以使用更多選項來設計 <details><summary> 元素的結構,使其更適合構建揭露式或手風琴式小工具。

特別是 Chrome 131 引入了以下改進:

  1. 支援對這些元素使用 display 屬性,例如將其設置為 flexgrid
  2. 新增 ::details-content 偽元素,用於樣式化可展開和收合的部分內容。

以下是一個創建水平互斥手風琴的範例,其中應用了一個橫向流動的 Flex 布局:

details {
  display: flex;
  flex-direction: row;
}

 在 Chrome 131 及更高版本中,除了支援更多的 display 類型外,<details> 元素的內容會自動包裹在一個 ::details-content 偽元素中。這個偽元素會將 <details> 元素的所有子元素(除了 <summary>)都插入到其中。

您可以利用 ::details-content 偽元素來控制展開和收合的部分,從而對樣式進行更細緻的設計。

 

Anchor Positioning 

錨點(Anchoring)是一種全新的聲明式方法,用於將元素彼此相對定位。這種方法非常適合設計像是選單、工具提示(tooltips)、下拉選單(selects)、標籤、卡片、設定對話框等介面元件。有了瀏覽器內建的錨點定位功能,您可以構建分層式使用者介面,而無需依賴第三方函式庫。

錨點關係的構成

錨點關係由兩個元素組成:

  1. 錨點(anchor):提供參考位置的元素。
  2. 定位元素(positioned element):相對於錨點進行定位的元素。

如何將一個元素變成錨點

只需一行 CSS 即可將某個元素設置為錨點:

.anchor {
  anchor-name: --over-easy;
}

定位元素是相對於錨點進行定位的元素。它們透過 position-anchor 指向需要對齊的錨點,並使用第二行 CSS 來指定定位的方向或區域。

使用方式

  1. 設定錨點:為錨點元素設置 position: anchor;
  2. 設定定位元素
    • 使用 position-anchor 指向錨點。
    • 使用屬性(如 inset-anchoralign)指定定位方向或區域。
.positioned-element {
  position: fixed;
  position-anchor: --over-easy;
  position-area: block-end;
}

以下是一個示範,說明如何讓「可愛的蛋」成為錨點,而文字 "Over-Easy" 是定位的元素:

 這種設計方式非常適合用於工具提示(tooltips)或標籤等情境,輕鬆完成整潔的 UI 效果!

position-area 屬性提供了多種選項,讓您能夠靈活地將定位元素放置在錨點的不同位置。在這個範例中,使用了邏輯屬性值 block-end,但您也可以使用 centerbottom 等其他值來實現不同的定位效果。

為了幫助您視覺化這些選項,Una Kravets 開發了一個圖形化工具,方便您探索和選擇適合的定位方式。

 

Interactions

Custom Scrollbars

捲軸樣式化一直可以透過 ::-webkit-scrollbar-* 偽元素實現,但這種方法僅適用於 Chrome 和 Safari,且並未被 CSS 工作組標準化。

Chrome 121 開始,您可以使用標準化的 scrollbar-widthscrollbar-color 屬性來樣式化捲軸的寬度與顏色,這使得跨瀏覽器的支持更加一致。

.scroller {
  scrollbar-color: hotpink blue;
  scrollbar-width: 10%;
}

 

 

 

Cross-Document View Transitions

2023 年,Chrome 成為首個支援同文件視圖過渡(same-document view transitions)的瀏覽器,為網頁平台帶來豐富且流暢的過渡效果,讓您的網站視圖切換更加生動。今年,Chrome 更進一步,在 Chrome 126 推出了跨文件視圖過渡(cross-document view transitions)

這項新功能允許您在兩個不同文件之間運行視圖過渡,這意味著您不需要將網站重新構建為單頁應用程式(SPA)也可以使用這些效果。它直接基於網頁核心特性——從一個頁面導航到另一個頁面——真正展現了「網頁的本質」。

要在兩個頁面之間啟用視圖過渡(View Transition),需要滿足以下兩個條件:

  1. 同源導航(Same-Origin Navigation)
    頁面之間的導航必須發生在相同的域名下,確保安全性和一致性。

  2. 頁面選擇加入過渡功能(Opt-In to View Transitions)
    兩個頁面都需要顯式啟用視圖過渡,這可以通過以下 CSS 規則來實現:

@view-transition {
  navigation: auto;
}

一旦啟用,跨文件檢視轉場(Cross-Document View Transitions)會使用與同文件檢視轉場相同的基本構件:將 view-transition-name 屬性添加到您想要捕捉的元素,動畫則由 CSS 動畫提供動力。

除了推出跨文件檢視轉場功能外,Chrome 還新增了一些功能,讓使用檢視轉場更為方便,例如 view-transition-class。這些更新已於 2024 年 5 月的 Google I/O 大會上宣布。

 

Scroll-Driven Animations

滾動驅動動畫(Scroll-Driven Animations)是網頁上一種常見的用戶體驗模式。滾動驅動動畫與滾動容器的滾動位置相關聯,這意味著當您向上或向下滾動時,關聯的動畫會隨之向前或向後播放,直接響應滾動的動作。

在以下示範中,如果您的瀏覽器支援 CSS 滾動驅動動畫,當圖片穿過滾動視窗(scrollport)時,它們會逐漸顯示完整的內容。

 

為了支援 Chrome 115 中滾動驅動動畫的推出,Chrome 開發者關係團隊(Chrome DevRel)製作了一個名為 「釋放滾動驅動動畫的力量」(Unleash the Power of Scroll-Driven Animations) 的 10 部分影片課程。該課程將教您透過 CSS 或 JavaScript 全面掌握滾動驅動動畫的所有相關知識。

 

Scroll Snap Events

內建的快照事件(Snap Events)讓滾動過程中以前不可見的瞬間變得可見,並且在正確的時機觸發,且始終精確無誤。這些事件是補足滾動快照功能的關鍵,使其成為一個完整的解決方案。

新增了兩個快照事件:scrollsnapchangescrollsnapchanging

scroller.addEventListener('scrollsnapchange', event=> {
    console.log(event.snapTargetBlock);
    console.log(event.snapTargetInline);
  })

scrollsnapchange 事件的觸發時機類似於 scrollend,會在滾動停止且使用者停止與滾動容器互動時觸發。

scrollsnapchanging 事件會更早觸發,當滾動容器有新的快照目標時,立即調用回呼函式(callback)。這對於提供即時用戶體驗回饋非常有用,能根據使用者的互動即刻進行視覺更新。

scroller.addEventListener('scrollsnapchanging', event=> {
    console.log(event.snapTargetBlock);
    console.log(event.snapTargetInline);
  })

透過結合這些事件,您可以利用滾動手勢創建一個流暢的選取體驗。以下是一個尺規範例,此範例會對齊至四分之一英吋的數值,並使用滾動驅動動畫來突顯選取的數值。

  • scrollsnapchanging 事件:用於即時更新數字輸入框中的值,提供即時回饋。
  • scrollsnapchange 事件:用於確認使用者選取的數值並支持最終的交互體驗。

範例流程:

  1. 使用滾動手勢在尺規上滾動。
  2. 當尺規有新的對齊目標時(觸發 scrollsnapchanging),即時更新顯示數值。
  3. 當滾動停止且快照完成時(觸發 scrollsnapchange),確認選取的數值並執行相關邏輯,例如更新資料或觸發動畫。

這種設計確保了滾動的即時性與最終結果的準確性,帶來更直觀且流暢的用戶體驗。

您可以參閱 developer.chrome.com 上的文章,了解更多詳細資訊與範例。此外,下方的範例連結提供了一個 Snap Event 視覺化工具,幫助您感受並觀察這些新事件的觸發時機和效果。

這些資源將為您提供實用的指引,讓您能更好地運用快照事件於您的專案中!

 

 

課程推薦

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

AI工作術全面學習實戰營:6 堂精選課程,學會最好用 AI 工具,翻轉你的人生

《PChome雜誌》攜手 5 位在 AI 領域的專業講師,打造上述 6 堂實用課程,教你學會時下最好用的 AI 工具,導入生成式 AI 來產製工作內容,改造並升級你的工作流程。

輸入折扣碼 ZERO2024 還可以額外獲得 NT$400 優惠喔。

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

HTML與SEO實戰應用—並以ChatGPT助力提升網站品質與流量

本課程專為希望深入了解 HTML 並有效結合 SEO 策略的學員設計。我們將重點放在 HTML 的深度學習與應用上,同時穿插介紹如何透過搜索引擎優化提升網站能見度。透過即時互動式的直播教學,加上 ChatGPT 的輔助,您將學習到如何建立一個結構優良、美觀且符合 SEO 標準的網站。這不僅會提升網站的用戶體驗,還會大幅提高網站的搜索引擎排名,進而增加訪客流量和潛在客戶。
用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

用AI強化職場競爭力 ChatGPT、Midjourney從入門到精通

在快速變遷的職場中,提升競爭力成為關鍵。透過引領潮流的AI技術,ChatGPT和Midjourney將助您勇攀高峰。無論您是AI新手還是專家,這個課程將引導您從入門到精通,解密AI的奧秘,並學習如何運用於職場。
GitHub Copilot AI 程式碼編輯工具應用實務班

GitHub Copilot AI 程式碼編輯工具應用實務班

讓學員瞭解有效地使用該工具來加速開發流程、提高程式碼品質和生產力。課程重點放在以 JavaScript 程式語言為例,介紹 Copilot 的基本原理、使用方法和最佳實踐。

輸入折扣碼 TC1456JA 還可以額外獲得 NT$500 優惠喔。

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

ChatGPT X Clipchamp AI 生成影片、配音與字幕應用實戰班

掌握Clipchamp AI的操作技巧,靈活運用Clipchamp AI進行影片編輯和創作,實現創意表達和傳播目的。

輸入折扣碼 TC1451JAN 還可以額外獲得 NT$500 優惠喔。

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

如何串接多種數位工具資訊?Looker Studio 資料視覺化實戰班|GoogleAds x FB廣告 x GA流量數據

Looker Studio除了可協助使用者監控網站流量、廣告成效、選擇匯入資源的管道之外,還可以將數據資料多平台整合、數據報表即時更新、數據範本可重複套用的效益,透過自動化系統,將數據全部匯入同一個報表平台,是企業不可或缺的重要工具。

輸入折扣碼 TC1270JIA 還可以額外獲得 NT$500 優惠喔。

和我們交流

加入我們的社群,裡面會有一些技術的內容、有趣的技術梗,以及職缺的分享,歡迎和我們一起討論。