こんにちは、かつコーチです。
CSSでは、近年多くの新しい機能や指定方法が導入され、
より柔軟で効率的なレイアウトやスタイリングが可能になっています。
clamp()
やaspect-ratio
もその一例ですが、それ以外にも、最近追加されたり、
注目されている新しい指定方法や機能がいくつかあります。
以下に、主な新しいCSS機能を紹介します。
CSS新機能一覧
clamp()
- 概要:
clamp()
は、最小値・最適値・最大値の間でCSSプロパティの値を指定できる関数です。これにより、レスポンシブデザインや動的なサイズ調整が簡単になります。
font-size: clamp(1rem, 2.5vw, 3rem);
- 意味: 上記の例では、フォントサイズが
1rem
を下回らず、3rem
を超えない範囲で、画面幅に応じてフォントサイズが動的に変化します。
aspect-ratio
- 概要:
aspect-ratio
は、要素のアスペクト比(縦横比)を指定するためのプロパティです。従来はパディングを使ったトリックが必要でしたが、このプロパティを使えば簡単にアスペクト比を維持できます。
img {
aspect-ratio: 16 / 9;
}
- メリット: 画像や動画、コンテナの縦横比を簡単に固定できるため、レスポンシブなレイアウトや動画のプレースホルダーを管理しやすくなります。
min(), max()
- 概要:
min()
とmax()
は、指定した値のうち、最小または最大の値をCSSプロパティに適用する関数です。これにより、動的なサイズ調整がさらに簡単に行えます。
width: min(50%, 400px);
- 意味: 上記の例では、要素の幅が
50%
以下かつ400px
以下になるように制限されます。
:is() & :where()
- 概要: これらは複数のセレクタをグループ化し、より効率的にスタイルを適用するための疑似クラスです。
is()
は、指定されたセレクタのうち一つでも一致すればスタイルが適用され、where()
は同様の動作をしますが、優先度が低くなります。
:is(h1, h2, h3) {
color: red;
}
- 意味: 上記の例では、
h1
、h2
、h3
すべてに赤色が適用されます。
scroll-snap
- 概要:
scroll-snap
は、スクロール時に要素が自動的にスナップ(揃う)ように設定できる新しいプロパティ群です。これにより、カルーセルやスライダーなどの機能がCSSだけで実現可能です。
scroll-snap-type: x mandatory;
scroll-snap-align: start;
- 意味: 水平方向のスクロールがスナップされ、要素がスライドするような挙動を作り出します。
container queries(コンテナクエリ)
- 概要: これまでは、メディアクエリを使って画面全体の幅に応じてレイアウトを調整していましたが、コンテナクエリを使うことで、特定のコンテナ(親要素)のサイズに応じてスタイルを変更することができます。これにより、ネストされたレイアウトでも柔軟なデザインが可能になります。
@container (min-width: 400px) {
.item {
display: flex;
}
}
- 意味: 親要素が
400px
以上になった場合、.item
にdisplay: flex
が適用されます。
env()関数
- 概要:
env()
は、ブラウザやデバイス固有の環境値をCSSで使えるようにする関数です。特に、モバイルデバイスでの「安全領域」などを考慮したスタイリングに便利です。
padding: env(safe-area-inset-top);
- 意味: これは、iPhoneなどのノッチや角丸ディスプレイでの安全領域を考慮したパディングを適用します。
gridの新しい機能
CSS Gridは強力なレイアウトシステムですが、最近ではさらに柔軟に制御できる機能が追加されました。
subgrid
- 概要: 子要素のグリッド項目が親グリッドの線に従うように設定する機能です。これにより、ネストされたレイアウトでも親と一致したグリッドラインを維持できます。
.grid-item {
display: grid;
grid-template-columns: subgrid;
}
- 意味: この例では、
grid-item
内の要素は親要素のグリッドに従います。
backdrop-filter
- 概要:
backdrop-filter
は、要素の背後にあるコンテンツに対してぼかしや明るさなどのフィルタを適用できるプロパティです。モダンなデザインやグラスモーフィズムを実現するのに役立ちます。
backdrop-filter: blur(10px);
- 意味: この例では、要素の背後のコンテンツが10pxのぼかし効果を受けます。
:focus-visible
- 概要:
:focus-visible
は、ユーザーがキーボードでフォーカスを移動した場合にだけフォーカススタイルを適用する疑似クラスです。これにより、キーボードユーザビリティを向上させつつ、マウスユーザーには不要なフォーカススタイルが表示されません。
button:focus-visible {
outline: 2px solid blue;
}
- 意味: キーボードでボタンにフォーカスが移った場合のみ、青いアウトラインが表示されます。
has()セレクタ(CSS4の一部)
- 概要:
has()
は、親要素が特定の子要素を持っている場合にスタイルを適用できるセレクタです。JavaScriptのような親子要素の依存関係をCSSだけで解決できる機能として注目されています。
div:has(> img) {
border: 1px solid red;
}
- 意味: この例では、
div
内にimg
がある場合、そのdiv
に赤い枠線が表示されます。
まとめ
これらの新しいCSS機能により、デベロッパーは従来の手法よりも直感的かつ効率的に
レスポンシブデザインや動的レイアウトを実現できます。
これらのツールを活用することで、よりモダンでパフォーマンスの高いウェブデザインが可能になります。