CSS 動畫格狀版面配置

在 CSS Grid 中,grid-template-columns 和 grid-template-rows 屬性可分別定義格線欄和列的線條名稱和軌道大小。支援這些屬性的內插,可讓格線版面配置在狀態之間順暢轉換,而不會在動畫或轉場的中間點貼齊。

Browser Support

  • Chrome: 107.
  • Edge: 107.
  • Firefox: 66.
  • Safari: 16.

CSS 中的值內插

在 CSS 中,您可以使用 transition 屬性,將屬性從一個值順暢轉換為另一個值。

#target {
  opacity: 0.5;
  transition: opacity ease-in-out 0.25s;
}

#target:hover {
  opacity: 1;
}

算繪引擎會自動偵測指定屬性值的類型,並使用該資訊順暢轉換為新值。

例如:

  • 要將 opacity 從 0 轉換為 1 嗎? 這就是數值內插。
  • 要將 background-color 從white轉換為black嗎? 在來源和目標顏色之間淡出。
  • 正在轉換 width?以數值方式插補,並視需要轉換單位。

CSS 動畫也是如此,瀏覽器會在主要畫面格之間進行值內插。

為 grid-template-columns 和 grid-template-rows 加上動畫

格線版面配置也可以在狀態之間流暢轉換,而不會在動畫或轉場的中間點貼齊。

在以下示範中,格線會顯示多個顯示圖片。為節省空間,系統會使用 grid-template-columns 限制各欄寬度,讓顯示圖片重疊。滑鼠游標懸停時,每個資料欄都會獲得更多空間。

.avatars {
  display: grid;
  gap: 0.35em;

  grid-auto-flow: column;
  grid-template-columns: repeat(4, 2em);
  transition: all ease-in-out 0.25s;
}

.avatars:hover {
  grid-template-columns: repeat(4, 4em);
}

設定 transition 屬性後,格線會順暢地在值之間插補。

這項效果也適用於變更 grid-template-columns 或 grid-template-rows 值的動畫。