terminal
Weekly Digest // STYLING — Week 14-2026
paletteWeekly Report

CSS position: stickyが軸ごとに最寄りのScrollerへ固定される… — 2026年 第14週 CSS・スタイリング

CSS architecture, utility frameworks, and animation performance

calendar_todaysummarizeWeek 14-2026
レイアウト

CSS position: stickyが軸ごとに最寄りのScrollerへ固定されるように

長年のCSS制約がついに解消されました。position: stickyが、軸ごとに異なるスクロールコンテナを同時に追跡できるようになりました。従来はoverflow-x: autoのラッパー内に幅広のデータテーブルを配置すると、sticky header(top: 0)と先頭列(left: 0)が同じスクロール基準を共有し、垂直方向のstickyが機能しませんでした。重要なポイントはラッパーにoverflow: auto clipを使用することで、overflow-x: autoのみを使うとoverflow-yautoに計算されて問題が再発します。Chrome 148のExperimental Web Platform Featuresフラグで試験利用可能で、Chrome 150からは@supports named-feature(single-axis-scroll-container)による機能検出がサポートされます。FirefoxとSafariはまだ対応していません。

CSS position: stickyが軸ごとに最寄りのScrollerへ固定されるように
Read Articlearrow_forward
Video · CSSマインドセット

CSSとの戦いを永遠にやめよう

Kevin Powellはカードレイアウトの実例を通じて、CSSでよくある落とし穴 — 過度に命令的なスタイルの記述 — を診断します。固定heightと固定widthの宣言がコンポーネントを実際のレイアウトに配置した際にoverflowとグリッドの崩れを引き起こす過程を実演しています。核心的な考え方の転換: ブラウザはすでにサイジングの方法を知っているので、ブラウザと戦うのではなくブラウザと協調する。具体的なルール: 明示的なheightの設定を避ける(要素は必要な高さだけ持とうとする)、overflowなしに収縮を許可するにはwidthよりmax-widthを使用する、コンポーネントのmarginwidthが周囲のグリッドに影響しないようレイアウトの関心事とコンポーネントの関心事を分離する。この動画はプロパティの暗記よりブラウザ協調型CSSの哲学を軸にしたCSS Demystified v2コースの再リリースに合わせて公開されました。

AI_INFOGRAPHIC
CSSとの戦いを永遠にやめよう — infographicWATCH_VIDEOarrow_forward
Article · アニメーションREAD TIME: 5m

JavaScriptなしのCSS Entry・Exit Animation

3つのモダンなCSS機能により、JavaScriptを使ったshow/hideアニメーションが不要になりました。@starting-styleは要素がDOMに現れる際のトランジション開始前の状態を定義します。transition-behavior: allow-discretedisplayのような離散プロパティをtransitionに参加させ、終了アニメーション完了後にdisplay: noneを適用します。interpolate-size: allow-keywordsheight: autoのようなキーワードサイズへのトランジションをレイアウト時にピクセル値へ解決してアニメーションを可能にします。ブラウザサポートは@starting-styletransition-behaviorChrome 117Firefox 129Safari 17.5interpolate-sizeChrome 129Safari 18で利用可能ですがFirefoxは未対応です。3つを組み合わせることでGSAPやFramer Motionなしに基本的なUI表示/非表示パターンを実装できます。

READ_FULL_LOGarrow_forward
Article · パフォーマンスREAD TIME: 15m

CSS Containmentとは?どう使う?

Harry Robertsがあまり活用されていないcontainプロパティとその4つの値 — layoutpaintsizestyle — について、レンダリングパイプラインの観点から実践的に解説しています。contain: layoutはコンポーネント内部のレイアウトを独立させ、フォーマットコンテキストを確立し、position: fixedの子要素の基準をビューポートではなく該当要素に限定します。contain: paintはレンダリングをpadding boxにクリップし、画面外のサブツリーをスキップします。shorthandのcontent(layout+paint+style)とstrict4つ全て)はカードやウィジェットパターンに最適で、strictcontain-intrinsic-sizeによる明示的なサイズ指定が必要です。OpenTableの事例ではモバイルドロワーにcontain: strictを適用し、レイアウトイベントで触れるノードを4,371個から73個に削減し約6倍高速化しました。

READ_FULL_LOGarrow_forward
Article · ツーリングREAD TIME: 2m

view-transitions-toolkitを発表:View Transitions API向けUtility Function

Bramus Van Dammeが、View Transitions APIに関する数年間の実験から得た高度なパターンを再利用可能なヘルパー関数としてまとめたnpmパッケージview-transitions-toolkitを公開しました。このツールキットはView Transitionsサブ機能の検出、document.activeViewTransitionのshimサポート、keyframeアニメーションの抽出・最適化(SCALE・SLIDEストラテジー対応)、トランジション再生制御(一時停止・スクラブ)、そしてナビゲーションの起点・終点に基づくView Transitionタイプの自動注入を提供します。npm i view-transitions-toolkitでインストールし、必要なモジュールのみ個別にimportして使用できます。デモサイトはchrome.dev/view-transitions-toolkit/で公開されています。

READ_FULL_LOGarrow_forward
Article · グリッドREAD TIME: 9m

列をまたぐ可変Contentの整列:CSS Subgridで解決

可変長の見出しを持つ兄弟カード間でディバイダーを揃えることは、CSS subgridを知るまで不可能に思えるレイアウト課題です。解決策は親にgrid-template-columns: repeat(auto-fit, minmax(15rem, 1fr))を設定し、各カードがgrid-row: span 3で親の3行トラックを占有しつつgrid-template-rows: subgridで親の行サイズ決定に参加する方法です。subgridは親のgap値を継承するため、カード内部ではrow-gap: 0で上書きして内部間隔を維持します。トラック共有は同じ視覚的な行のカードのみに適用されるため、JavaScriptや@media queryなしでもレスポンシブラッピングが正しく機能します。:has()疑似クラスでアイコンの有無によるバリアントカードを宣言的に処理できます。subgridは2026年3月にBaseline Widely Availableに達しました。

READ_FULL_LOGarrow_forward
Article · ツーリングREAD TIME: 6m

CSS @propertyにはもっと良いToolingが必要 — だからValidatorを作る

CSS @property at-ruleはcustom propertyにcolorlengthtimeimageなどの型コントラクトを宣言できますが、使用箇所でその型を検証するツールが存在しません。登録されたプロパティを誤用した場合(例: --brand-colorcolorで登録されているのにbackground-image: var(--brand-color)と使用する)、仕様でIACVTと呼ばれる方式で計算値時点にサイレントに失敗します。CSS Property Type ValidatorはTypeScriptライブラリとCLI(コアバリデーションエンジンとCLIラッパーの2つのscoped npmパッケージ)で、スタイルシートを解析して@propertyレジストリを構築し、var()の使用箇所を巡回してcss-treeのlexerで型互換性を検査します。終了コードは慣習的(0/1/2)でJSON出力によりCI統合が可能です。現在は宣言ごとに単一のvar()のみ対応し、Stylelintプラグインとエディタ統合が予定されています。

READ_FULL_LOGarrow_forward
summarizeDigest_Summary

第14週はJavaScriptへの依存を減らすCSS機能のアップグレードが相次ぎました。最も実用的な影響を持つのはChrome 148での軸ごとのposition: sticky修正です。ラッパー要素にoverflow: auto clipを使うことで、データテーブルのstickyヘッダーと先頭列が異なるスクロールコンテナを同時に追跡でき、Chrome 150では@supports named-feature(single-axis-scroll-container)で機能検出が可能になります。また、3つのCSS機能の組み合わせによりJSベースのshow/hideアニメーションが不要になります:エントリートランジション用の@starting-styledisplayなどの離散プロパティ用のtransition-behavior: allow-discreteheight: autoアニメーション用のinterpolate-size: allow-keywordsです。

Harry RobertsはCSS containmentの詳細ガイドを発表し、モバイルドロワーにcontain: strictを適用するとレイアウトイベントが4,371ノードから73ノードへと約6倍高速化することを示しました。content-visibility: autocontain-intrinsic-sizeと組み合わせると、JavaScriptなしで仮想化に近いパフォーマンスを得られます。グリッド面ではCSS subgrid2026年3月にBaseline Widely Availableに達し、grid-template-rows: subgridgrid-row: span 3の実践ガイドがJavaScriptなしで列間の可変高さカードコンテンツを揃える方法を実演しました。

ツール面でも注目すべき2件がありました。Bramus Van Dammeが高度なView Transitions APIヘルパーを提供するview-transitions-toolkitをnpmで公開し、新しいTypeScriptベースのCSS Property Type Validator CLIがタイプされた@property custom propertyが誤った値型で使用される静的なIACVT失敗を検出します。

Key Takeaways
  • Chrome 148は軸ごとのposition: stickyを修正しました。ラッパーにoverflow-x: autoだけでなくoverflow: auto clipを使うことで、ヘッダーと先頭列が異なるスクロールコンテナを同時に追跡できます。
  • @starting-styletransition-behavior: allow-discrete、interpolate-size: allow-keywordsを組み合わせると、モダンブラウザでエントリー・イグジット・height: autoトランジションにJSクラストグルアニメーションが不要になります。
  • contain: strictで実際のOpenTableモバイルドロワーのレイアウトが4,371ノードから73ノードに削減されました。独立したカードやウィジェットコンポーネントにCSS containmentを適用すると測定可能なレンダリング改善が得られます。