CSS DISCLOSURE LAB

Details Animation

ブラウザ標準の開閉機能をHTMLで扱い、動きはCSSで制御。

details-content interpolate-size
01

LIVE COMPARISON

同じdetails、違う開き方

SAME HTML
WHY DETAILS? HTMLに開閉を任せる
  • SEMANTICS開閉できる補足情報と伝わる
  • KEYBOARDEnter・Spaceで標準操作
  • STATEopen属性で状態を持てる
  • SEARCH非表示状態でもページ内検索の対象になる
NAME ATTRIBUTE 1つだけ開く
GRID TRACK

0fr → 1fr

grid-template-rows
01なぜdetailsを使う?
開閉・キーボード操作・状態管理がHTMLに含まれます。

JavaScriptで開閉ロジックを作らなくても、基本機能をそのまま利用できます。

02Gridは何を動かす?
中身を置いた1行の高さを、0frから1frへ変えます。

内容の高さを数値で決めず、Gridトラックの伸縮として表現します。

03非対応環境では?
通常のdetailsとして、即時に開閉します。

アニメーションがなくても、内容と操作方法は失われません。

TRACK 0fr1fr 内容を1行のGridとして伸縮
INTRINSIC SIZE

0 → auto

interpolate-size
01何が読みやすい?
閉じた高さ0から、内容本来のautoへ移ると読めます。

要素自身の高さを直接アニメーションするため、意図が素直です。

02なぜ指定が必要?
autoは従来、数値との間を補間できませんでした。

allow-keywordsで、長さと内在サイズの補間を明示的に許可します。

03今すぐ使える?
現時点ではChromium系への追加強化として使います。

@supportsで囲み、非対応環境には標準の開閉を残します。

HEIGHT 0auto 要素自身の内在サイズを補間
PROGRESSIVE ENHANCEMENT

非対応でも開閉できる。 対応ブラウザでは、動きまで滑らかになる。

HTMLdetails-contentmotion
CSS RECIPE

開閉の仕組みをコピー

GRID TRACK 0frから1frへ

内容をGridの1行に入れ、そのトラックを伸縮します。内側の高さを数値で決めません。

grid-template-rows
INTRINSIC SIZE 0からautoへ

要素自身の高さを、0から内容本来のサイズへ補間します。現在はChromium系の追加強化です。

interpolate-size