ギフプロギフプロ

CSSの「あいまいな境界」を操作する:Gap Decorationsとrandom()がもたらす表現の自由

CSSの「あいまいな境界」を操作する:Gap Decorationsとrandom()がもたらす表現の自由

CSSの「隙間」を飾る:Gap Decorationsの衝撃

2026年5月、CSSにGap Decorationsが正式に追加された。FlexboxやGridレイアウトで生まれる「隙間(gap)」に、線やドット、独自パターンを描けるプロパティ群だ。これまで装飾といえばborderやbox-shadow、疑似要素に頼るしかなかった。Gap Decorationsは、レイアウト構造そのものを装飾のキャンバスにする。

具体的には、gap-decorationgap-decoration-stylegap-decoration-colorgap-decoration-widthといったプロパティが利用できる。仕組みはシンプルで、gap領域にCSSグラデーションや画像を敷き詰めるイメージ。例えばこう書ける。

.grid {
  display: grid;
  gap: 8px;
  gap-decoration: repeating-linear-gradient(45deg, #f00, #00f);
  gap-decoration-width: 4px;
}

グリッドの行間・列間すべてに斜めストライプが走る。これは従来の疑似要素やJavaScriptによる複雑なDOM操作なしでは実現できなかった表現だ。開発者にとってのメリットは明確:レイアウトと装飾の分離が進み、メンテナンス性が向上する。一方で、どのブラウザが対応するかはまだ限定的。Chrome 120以降、Firefox 125以降で先行実装されているが、Safariは技術プレビューの段階。商用サイトに投入するなら、@supportsでフォールバックを用意する必要がある。

CSSで乱数が使える:random()関数の登場

同じく2026年4-5月のアップデートで、CSSにrandom()関数が加わった。これまでCSSでランダムな値を得るには、JavaScriptで動的にスタイルを生成するか、CSS変数を乱数で埋めるハックが必要だった。random()はCSS値の一部として乱数を生成できる。

.card {
  transform: rotate(random(0deg, 360deg));
  opacity: random(0.5, 1);
}

応用範囲は広い。カードを少しずつ傾けて「手書き風」のカオスを演出する。アニメーションの遅延時間をランダムにして、波打つような動きをCSSだけで実現する。ただし、乱数が再評価されるタイミングに注意が必要。random()はスタイルの再計算ごとに新しい値を生成するため、アニメーション中に値が変わると予期しない動きになる。特定のフレームで固定したいなら、@propertyを使ってカスタムプロパティで保持する。

@property --rot {
  syntax: '';
  initial-value: 0deg;
  inherits: false;
}
:root {
  --rot: random(0deg, 360deg);
}

これで値が固定される。乱数の生成タイミングを制御できる点は、JavaScriptのMath.random()と同等の柔軟性を持つ。CSSだけで完結するランダム表現が可能になった。

CSSとJavaScript、その境界線はどこへ?

Gap Decorationsとrandom()の組み合わせは、CSSの領域を大きく拡張する。かつてJavaScriptに頼っていた「動的な装飾」や「ランダム性」が、CSSの宣言的な記述で実現できるようになった。しかし、これは「CSSで全部やるべき」という単純な話ではない。パフォーマンスの観点で言えば、CSSの乱数生成はJavaScriptより軽量なケースが多いが、複雑なロジックや状態管理は依然としてJavaScriptの領域だ。

CSS-Tricksの記事「The Shifting Line Between CSS States and JavaScript Events」が指摘する通り、CSSが状態(ホバー、フォーカス、スクロール位置など)を直接扱えるようになるにつれ、JavaScriptの役割は「イベント駆動の複雑なインタラクション」に収束しつつある。Gap Decorationsはレイアウトの状態(gapの有無)に依存する装飾であり、random()はスタイル計算の状態に依存する値生成だ。双方とも「CSSの状態」をトリガーに動作する。

実務での判断基準は「変更のトリガーが何か」にある。ユーザーのクリックやドラッグなど複雑なイベントが必要ならJavaScript。要素の出現やレイアウトの変化、単純な乱数ならCSSで十分。この線引きを間違えると、CSSの複雑さが増してメンテナンスが難しくなる。Gap Decorationsを使うなら、gapサイズが可変の場合に表示が崩れないか検証が必要。random()を使うなら、乱数の乱れがアクセシビリティやユーザビリティを損なわないか確認する。

次のステップとして、Safariの対応状況をウォッチしつつ、小規模なプロジェクトから導入するのが現実的。Gap Decorationsは「グリッドの区切り線を簡潔に」、random()は「スプラッシュアニメーションのばらつき」など、限定的なユースケースで試す価値がある。CSSの表現力は確実に進化している。その一歩先を行くなら、これらの新機能を理解し、適切な場所で使う判断力が求められる。

参照

理人と理子

この記事を書いた人

理人と理子

ギフプロのブログを運営している理人(リト)と理子(リコ)です!理は知性を表す漢字でもあるので、AIを連想させる名前にしてもらいました。ブログの内容はAIで作成しているところもありますが、読者の方にとって有意義な情報になるように完全自動化ではなく、人の目も通して作成しています!

ホームヘルプ