包裝 CSS:2023!

CSS 包裝標頭

CSS 年度總回顧:2023!

太棒了!2023 年是 CSS 的重大年份!

#Interop2023 到 CSS 和 UI 空間中的許多新登陸頁面,這些功能讓開發人員在網路平台上實現原本認為不可能的功能。如今,所有新型瀏覽器都支援容器查詢、子格線、:has() 選取器,以及大量新色彩空間和函式。Chrome 支援 CSS 專用捲動驅動動畫,並可透過檢視畫面轉場在網路檢視畫面之間流暢地播放動畫。更棒的是,我們推出了許多新的原始元素,可為開發人員提供更優質的體驗,例如 CSS 巢狀結構範圍樣式。

回顧精彩的一年!因此,我們想在這個里程碑年結束之際,感謝瀏覽器開發人員和網路社群的辛勤付出,讓這一切得以實現。

架構基礎

首先,我們來談談核心 CSS 語言和功能的更新。這些功能是您編寫和整理樣式的基礎,可讓開發人員發揮強大的力量。

三角函數

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 108.
  • Safari: 15.4.

Source

Chrome 111 新增對三角函式 sin()cos()tan()asin()acos()atan()atan2() 的支援,讓這些函式可在所有主要引擎中使用。這些函式非常適合用於動畫和版面配置。舉例來說,現在您可以更輕鬆地在圓形上以所選中心為基準排列元素。

三角函式示範

進一步瞭解 CSS 中的三角函式

複雜的 nth-* 選取作業

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 9.

使用:nth-child() 擬造類別選取器,即可根據索引選取 DOM 中的元素。使用 An+B 微語法,您可以精確控制要選取的元素。

根據預設,:nth-*() 擬物會考量所有子項。自 Chrome 111 起,您可以選擇將選取器清單傳遞至 :nth-child():nth-last-child()。這樣一來,您可以在 An+B 執行操作前,先過濾子項清單。

在以下示範中,3n+1 邏輯只會套用至小娃娃,因為我們使用 of .small 預先篩除大娃娃。使用下拉式選單動態變更所使用的選取器。

複雜的 nth-* 選取示範

進一步瞭解複雜的 nth-* 選取項目

範圍

Browser Support

  • Chrome: 118.
  • Edge: 118.
  • Firefox: behind a flag.
  • Safari: 17.4.

Source

Chrome 118 新增了對 @scope 的支援,@scope 是一種 at-rule,可讓您將選取器範圍比對至文件的特定子樹狀結構。有了區隔樣式,您可以明確指定要選取哪些元素,而無需撰寫過於特定的選取器,或將選取器與 DOM 結構緊密結合。

範圍子樹狀結構是由「範圍根目錄」 (上限) 和選用的「範圍限制」 (下限) 定義。

@scope (.card) {  } /* scoping root */
@scope (.card) to (.card__content) {  } /* scoping root + scoping limit*/

放在範圍區塊內的樣式規則,只會指定所切割子樹內的元素。舉例來說,下列範圍限定的樣式規則只會針對 .card 元素與 [data-component] 選取器相符的任何巢狀元件之間的 <img> 元素。

@scope (.card) to ([data-component]) {
  img {  }
}

在下列示範中,由於套用的範圍限制,因此輪轉介面元件中的 <img> 元素無法比對。

範圍示範螢幕截圖

@scope 示範的參考螢幕截圖

Scope 現場示範

CSS @scope 示範

如要進一步瞭解 @scope,請參閱「如何使用 @scope 限制選取器的觸及範圍」一文。本文將說明 :scope 選取器、如何處理特異性、無前置程式的範圍,以及 @scope 如何影響層疊。

巢狀結構

Browser Support

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 117.
  • Safari: 17.2.

Source

在巢狀結構之前,每個選取器都必須明確宣告,且彼此分開。這會導致重複、大量樣式表單和零散的撰寫體驗。選取器現在可以繼續使用內部分組的相關樣式規則。

dl {
  /* dt styles */
  
  dt {
    /* dl dt styles */
  }

  dd {
    /* dl dd styles */
  }
}

/* same as */
dt {
  /* dt styles */
}

dl dt {
  /* dl dt styles */
}

dl dd {
  /* dl dd styles */
}

巢狀螢幕側錄

巢狀結構現場示範

變更放鬆的巢狀選取器,以決定競賽的勝出者

巢狀結構可減少樣式表的大小、減少重複選取器的額外負擔,並集中元件樣式。這個語法最初發布時有限制,需要在不同位置使用 &,但後來已透過巢狀語法更新解除限制。

進一步瞭解巢狀結構

子格

Browser Support

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 71.
  • Safari: 16.

Source

您可以使用 CSS subgrid 建立更複雜的格線,並在子版面配置之間進行更佳對齊。這個屬性可讓位於另一個格線內的格線,使用 subgrid 做為格線列或欄的值,採用外部格線的列和欄。

子格線螢幕側錄

子格線現場示範

頁首、主體和頁尾會根據相依項目的動態大小進行對齊。

子格線特別適合用於將同層元素對齊彼此的動態內容。這樣一來,文案撰寫者、使用者體驗撰寫者和翻譯人員就無須嘗試建立「適合」版面的專案文案。使用子格線時,版面配置可以調整為配合內容。

進一步瞭解子格

字體排版

網頁字體在 2023 年有幾項重大更新。text-wrap 屬性是漸進式改善的絕佳選擇。這個屬性可啟用排版調整功能,在瀏覽器中組合,不必額外編寫指令碼。告別彆扭的文字行長度,迎接更可預測的排版!

Initial-letter

Browser Support

  • Chrome: 110.
  • Edge: 110.
  • Firefox: not supported.
  • Safari: 9.

Source

initial-letter 屬性是 Chrome 110 年初推出的一項 CSS 功能,雖然小巧,但功能強大,可設定初始字母的樣式。您可以將字母置於下墜或升起狀態。這個屬性會接受兩個引數:第一個引數用於指定字母在對應段落中的位置,第二個引數則用於指定字母在段落上方的位置。您甚至可以同時使用這兩種方法,如以下示範所示。

初始字母螢幕截圖

初始字母示範的螢幕截圖

初始字母示範

變更 ::first-letter 擬造元素的 initial-letter 值,觀察其變化。

進一步瞭解initial-letter

text-wrap: balance and pretty

開發人員無法得知標題或段落的最終大小、字型大小,甚至語言。瀏覽器會提供所有變數,讓您有效且美觀地處理文字斷行問題。由於瀏覽器「確實」瞭解字型大小、語言和分配區域等所有因素,因此非常適合處理進階且品質優良的文字版面配置。

這時就需要使用兩種新的文字斷行技巧,分別是 balanceprettybalance 值旨在建立和諧的文字區塊,而 pretty 則旨在防止孤行並確保適當的斷字。這兩項工作過去都是手動完成,現在只要將工作交給瀏覽器,就能讓它處理任何翻譯語言,實在太棒了!

文字換行螢幕側錄

文字包覆功能現場示範

在以下示範中,您可以拖曳滑桿,比較 balancepretty 在標題和段落上的效果。試著將示範翻譯成其他語言!

進一步瞭解 text-wrap: balance