CSS ラップ: 2023 年

CSS ラップヘッダー

CSS ラップ: 2023 年

効果がありました。2023 年は CSS にとって大きな年でした。

#Interop2023 から、CSS や UI の領域に多数の新しい要素が登場し、かつてはウェブ プラットフォームで不可能だと考えられていた機能を実現しています。現在では、すべての最新のブラウザがコンテナクエリ、サブグリッド、:has() セレクタのほか、多数の新しい色空間と関数をサポートしています。Chrome では、CSS のみのスクロールドリブン アニメーションがサポートされており、ビュー遷移を使用してウェブビュー間をスムーズにアニメーション化できます。さらに、CSS のネストスコープ スタイルなど、デベロッパー エクスペリエンスを向上させるための新しいプリミティブが数多く導入されています。

今年はどんな 1 年になりますか?そして、ブラウザ デベロッパーとウェブ コミュニティの皆様の多大な努力を称え、称えるとともに、このマイルストーンの年の締めくくりとしたいと思います。

アーキテクチャ基盤

まず、コア CSS の言語と機能の更新について説明します。これらは、スタイルを作成して整理する方法の基礎となり、デベロッパーが大きなパワーを発揮する機能です。

三角関数

対応ブラウザ

  • 111
  • 111
  • 108
  • 15.4

ソース

Chrome 111 では、三角関数 sin()cos()tan()asin()acos()atan()atan2() のサポートが追加され、すべての主要なエンジンでご利用いただけるようになりました。これらの関数は、アニメーションやレイアウトの目的に非常に役立ちます。たとえば、選択した中心を中心とした円上に要素を配置しやすくなりました。

三角関数のデモ

詳しくは、CSS の三角関数をご覧ください。

複雑な nth-* 選択

対応ブラウザ

  • 111
  • 111
  • 113
  • 9

:nth-child() 疑似クラスセレクタを使用すると、インデックスで DOM 内の要素を選択できます。An+B マイクロ構文を使用すると、選択する要素を細かく制御できます。

デフォルトでは、:nth-*() 疑似はすべての子要素を考慮します。Chrome 111 以降では、必要に応じてセレクタリストを :nth-child():nth-last-child() に渡すことができます。これにより、An+B が処理を行う前に、子のリストを事前にフィルタリングできます。

次のデモでは、of .small を使用して事前に小さい人形を除外することで、3n+1 ロジックを小さな人形にのみ適用しています。プルダウンを使用して、使用するセレクタを動的に変更します。

複雑な n 番目の* 選択のデモ

複雑な n-* 選択について学習する。

範囲

対応ブラウザ

  • 118
  • 118
  • x
  • 17.4

Chrome 118 では、@scope のサポートが追加されました。これは、ドキュメントの特定のサブツリーと一致するスコープ セレクタを可能にする @ ルールです。スコープ指定のスタイル設定を使用すると、選択する要素を細かく指定でき、過度に限定されたセレクタを記述したり、セレクタを DOM 構造に緊密に結合したりする必要がなくなります。

スコープ サブツリーは、スコープ ルート(上限)とオプションのスコープ上限(下限)によって定義されます。

@scope (.card) { … } /* scoping root */
@scope (.card) to (.card__content) { … } /* scoping root + scoping limit*/

スコープ ブロック内に配置されたスタイルルールは、切り分けられたサブツリー内の要素のみを対象とします。たとえば、次のスコープ設定スタイルのルールは、.card 要素と、[data-component] セレクタに一致したネストされたコンポーネントとの間にある <img> 要素のみをターゲットにします。

@scope (.card) to ([data-component]) {
  img { … }
}

次のデモでは、適用範囲の制限により、カルーセル コンポーネントの <img> 要素が一致しません。

スコープのデモのスクリーンショット

@scope デモの参照スクリーンショット

スコープのライブデモ

CSS @scope のデモ

@scope について詳しくは、@scope を使用してセレクタのリーチを制限する方法をご覧ください。この記事では、:scope セレクタ、特異性の処理方法、Prelude のないスコープ、@scope によってカスケードが受ける影響について説明します。

ネスト

対応ブラウザ

  • 120
  • 120
  • 117
  • 17.2

ソース

ネストする前に、すべてのセレクタを互いに個別に明示的に宣言する必要がありました。その結果、繰り返しの作業、スタイルシートの一括処理、作成作業の分散につながります。関連するスタイルルールをグループにまとめて、セレクタの続きを作成できるようになりました。

dl {
  /* dt styles */
  
  dt {
    /* dl dt styles */
  }

  dd {
    /* dl dd styles */
  }
}

/* same as */
dt {
  /* dt styles */
}

dl dt {
  /* dl dt styles */
}

dl dd {
  /* dl dd styles */
}

準備課程のスクリーンキャスト

Nesting のライブデモ

緩和されたネスト セレクタを変更して、レースの勝者を決定します

ネストすると、スタイルシートの軽量化、セレクタの繰り返しのオーバーヘッドの削減、コンポーネントのスタイルの一元化が可能です。この構文は当初、さまざまな場所で & を使用する必要があった制限付きでリリースされましたが、その後、ネストの緩和された構文の更新により解除されました。

詳しくは、ネストをご覧ください。

サブグリッド

対応ブラウザ

  • 117
  • 117
  • 71
  • 16

ソース

CSS subgrid を使用すると、子レイアウト間の配置を改善して、より複雑なグリッドを作成できます。これにより、グリッドの行または列の値として subgrid を使用することで、別のグリッド内にあるグリッドが外側のグリッドの行と列を独自のものとして採用できるようになります。

Subgrid スクリーンキャスト

Subgrid のライブデモ

ヘッダー、本文、フッターは、兄弟姉妹の動的なサイズに合わせて調整されます。

Subgrid は、兄弟を互いの動的コンテンツに合わせて配置する場合に特に便利です。これにより、コピーライター、UX ライター、翻訳者は、レイアウトに「適合する」プロジェクト コピーを作成する必要がなくなります。サブグリッドを使用すると、コンテンツに合わせてレイアウトを調整できます。

サブグリッドの詳細をご確認ください。

タイポグラフィ

2023 年には、ウェブ タイポグラフィにいくつかの重要な変更が加えられました。段階的な拡張として特に優れているのは、text-wrap プロパティです。このプロパティを使用すると、追加のスクリプトを必要とせずに、ブラウザで構成するタイポグラフィ レイアウトを調整できます。予測可能なタイポグラフィを使用すれば、線を長めにする必要はありません。

頭文字

対応ブラウザ

  • 110
  • 110
  • x
  • 9

ソース

Chrome 110 で年初にリリースされた initial-letter プロパティは、頭文字の配置に関するスタイルを設定する、小規模ながら強力な CSS 機能です。文字は、ドロップした状態と盛り上がった状態のどちらでも配置できます。このプロパティには 2 つの引数を指定できます。1 つ目は、対応する段落に文字を落とす深さを指定します。2 つ目は、文字を上に移動させる度合いです。次のデモのように、両方を組み合わせて実行することもできます。

イニシャルのスクリーンショット

最初のレターデモのスクリーンショット

頭文字のデモ

::first-letter 疑似要素の initial-letter の値を変更して、シフトを監視します。

詳しくは、初期文字をご覧ください。

text-wrap: バランスとプリティ

開発者にとって、見出しや段落の最終的なサイズやフォントサイズ、さらには言語もわかりません。テキストの折り返しを効果的かつ美しく処理するために必要な変数はすべてブラウザにあります。ブラウザはフォントサイズ、言語、割り当て領域など、すべての要素を把握しているため、高度で高品質のテキスト レイアウトの処理に最適です。

そこで役立つのが、balancepretty という 2 つの新しいテキストの折り返し手法です。balance の値は調和のとれたテキスト ブロックを作成し、pretty の値は孤立を防ぎ、ハイフネーションを健全にすることを目指します。従来、これらのタスクはいずれも手作業で行われていましたが、ブラウザに作業を渡して、どの翻訳言語でも処理できるようにするのは素晴らしいことです。

テキストの折り返しスクリーンキャスト

テキストの折り返しのライブデモ

次のデモでは、スライダーをドラッグすることで比較できます。balancepretty が見出しと段落に及ぼす効果を比較できます。デモを別の言語に翻訳してみましょう。

詳しくは、テキストの折り返し: 残高をご覧ください。

2023 年は、ウェブ プラットフォームにとって色彩の年でした。ダイナミック カラーテーマ設定を可能にする新しい色空間と関数により、ユーザーが満足する鮮やかで色鮮やかなテーマを作成でき、カスタマイズも可能です。

HD 色空間(色レベル 4)

対応ブラウザ

  • 111
  • 111
  • 113
  • 15

ソース

対応ブラウザ

  • 111
  • 111
  • 113
  • 15

ソース

ハードウェアからソフトウェア、CSS、点滅ライトに至るまで、コンピュータが人間の目と同じくらい良い色を表現するには、多くの労力を要します。2023 年には、新しい色、より多くの色、新しい色空間、色関数、新機能が加わります。

CSS と色で次の操作を行えるようになりました。 - ユーザーの画面ハードウェアが広色域 HDR 色に対応しているかどうかを確認します。 - ユーザーのブラウザが Oklch や Display P3 などのカラー構文を認識できるかどうかを確認します。 - Oklab、Oklch、HWB、Display P3、Rec.2020、XYZ などで HDR 色を指定します。 - HDR カラーでグラデーションを作成する、 - 代替色空間でグラデーションを補間する。 - color-mix() を使用して色を混在させます。 - 相対色構文を使用して色のバリエーションを作成します。

カラー 4 スクリーンキャスト

色 4 のデモ

以下のデモでは、スライダーをドラッグすることで、「balance」と「pretty」が見出しと段落に及ぼす効果を比較できます。デモを別の言語に翻訳してみましょう。

詳しくは、色 4 と色空間をご覧ください。

color-mix 関数

対応ブラウザ

  • 111
  • 111
  • 113
  • 16.2

ソース

色の組み合わせは古典的なタスクですが、2023 年の CSS でも実行できます。色に白や黒を混ぜるだけでなく、透明度も調整でき、これらすべてを任意の色空間で行うことができます。ベーシック カラー機能と高度なカラー機能でもあります。

color-mix() スクリーンキャスト

color-mix() デモ

デモでは、カラー選択ツール、色空間、組み合わせの中で各色をどの程度優先させるかによって、2 つの色を選択できます。

color-mix() は、勾配からのある時点と考えることができます。グラデーションには、青から白に変化するために必要なステップがすべて表示されるのに対し、color-mix() では 1 つのステップだけが表示されます。色空間を考慮し、色空間を組み合わせることで結果がどのように異なるかを理解すると、作業はさらに高度になります。

詳細については、color-mix() をご覧ください。

相対色の構文

相対色構文(RCS)は、色のバリエーションを作成するための color-mix() を補完するものです。color-mix() よりやや強力ですが、色を扱うための方法も異なります。color-mix() では、色を明るくするために白を混ぜる場合があります。この場合、RCS は明度チャンネルへの正確なアクセスと、チャンネル上で calc() を使用して明度をプログラムで調整または増強する機能を提供します。

RCS スクリーンキャスト

RCS のライブデモ

色やシーンを変えたり、それぞれが相対色の構文を使用して、基本色とは異なるバリエーションを作成します。

RCS では、色に対して相対的および絶対的な操作を行うことができます。相対変化とは、彩度または明度の現在の値を取得し、calc() で変更するものです。絶対的な変更とは、不透明度を 50% に設定するなど、チャンネルの値をまったく新しい値に置き換えるものです。この構文は、テーマ設定やジャストインタイム バリアントなどに意味のあるツールを提供します。

詳しくは、相対色構文をご覧ください。

レスポンシブ デザイン

レスポンシブ デザインは 2023 年に進化しました。この画期的な年には、レスポンシブ ウェブ エクスペリエンスの構築方法を根本的に変える新機能がリリースされ、コンポーネント ベースのレスポンシブ デザインの新しいモデルが登場しました。コンテナクエリと :has() を組み合わせると、親のサイズと子の存在または状態に基づいてレスポンシブかつ論理的なスタイル設定を行うコンポーネントがサポートされます。つまり、最終的にページレベルのレイアウトとコンポーネント レベルのレイアウトを分離して、コンポーネントをどこでも使用するためのロジックを一度記述することが可能になります。

コンテナクエリのサイズ設定

対応ブラウザ

  • 105
  • 105
  • 110
  • 16

ソース

コンテナクエリでは、ビューポートのグローバル サイズ情報を使用して CSS スタイルを適用するのではなく、ページ内の親要素のクエリをサポートしています。つまり、複数のレイアウトや複数のビューでコンポーネントのスタイルを動的に設定できます。今年のバレンタイン デー(2 月 14 日)以降、すべての最新ブラウザでコンテナ サイズが安定しました。

この機能を使用するには、まずクエリ対象の要素に包含を設定してから、メディアクエリと同様に @container を使用してサイズ パラメータを指定します。コンテナクエリとともに、コンテナクエリのサイズを取得できます。次のデモでは、コンテナクエリのサイズ cqi(インライン コンテナのサイズを表す)を使用してカードヘッダーのサイズを調整しています。

@container スクリーンキャスト

@container デモ

コンテナクエリの使用方法について学習する。

コンテナクエリのスタイルを設定する

対応ブラウザ

  • 111
  • 111
  • x
  • x

ソース

スタイルクエリの一部は Chrome 111 で導入されました。現在、スタイルクエリでは、@container style() を使用するときに親要素のカスタム プロパティの値をクエリできます。たとえば、カスタム プロパティ値が存在する場合や、@container style(--rain: true) などの特定の値に設定されているかどうかを照会します。

スタイルクエリのスクリーンショット

スタイル コンテナのクエリと天気カードのデモのスクリーンショット

スタイルクエリのデモ

色やシーンを変えたり、それぞれが相対色の構文を使用して、基本色とは異なるバリエーションを作成します。

これは CSS でクラス名を使用するのと似ていますが、スタイルクエリにはいくつかの利点があります。1 つ目は、スタイルクエリを使用すると、疑似状態に応じて CSS の値を必要に応じて更新できることです。また、実装の今後のバージョンでは、値の範囲をクエリして、適用されているスタイル(style(60 <= --weather <= 70) など)を決定したり、プロパティと値のペア(style(font-style: italic) など)に基づいてスタイルを決定したりできるようになります。

詳しくは、スタイルクエリの使用方法をご覧ください。

:has() セレクタ

対応ブラウザ

  • 105
  • 105
  • 121
  • 15.4

ソース

約 20 年にわたり、デベロッパーは CSS に「親セレクタ」を求めていました。Chrome 105 では、:has() セレクタを使用してこれが可能になりました。たとえば、.card:has(img.hero) を使用すると、ヒーロー画像を子として持つ .card 要素が選択されます。

:has() デモのスクリーンショット

:has() デモの参照スクリーンショット

:has() ライブデモ

CSS :has() のデモ: 画像なし/画像付きのカード

:has() は相対セレクタ リストを引数として受け取るため、親要素よりもはるかに多くの要素を選択できます。さまざまな CSS コンビネータを使用すると、DOM ツリーの上方に移動するだけでなく、横方向に選択することも可能です。たとえば、li:has(+ li:hover) は、現在カーソルを合わせている <li> 要素の前の <li> 要素を選択します。

:has() スクリーンキャスト

:has() デモ

CSS :has() デモ: ホルダー

詳しくは、CSS の :has() セレクタをご覧ください。

メディアクエリを更新する

対応ブラウザ

  • 113
  • 113
  • 102
  • 17

ソース

update メディアクエリを使用すると、UI をデバイスのリフレッシュ レートに適応させることができます。この機能は、さまざまなデバイスの機能に関連する fastslow、または none の値をレポートできます。

設計するデバイスのほとんどは、高速リフレッシュ レートを搭載する傾向があります。パソコンとほとんどのモバイル デバイスが対象です。電子書籍リーダーや低電力決済システムなどのデバイスでは、リフレッシュ レートが遅くなることがあります。デバイスがアニメーションや頻繁な更新を処理できないことがわかれば、バッテリー使用量を節約したり、ビューの更新を失敗させたりできます。

スクリーンキャストを更新

デモの更新

更新速度の値を(無線オプションを選択して)シミュレートし、それがダッキングにどのように影響するかを確認します。

@media(更新)の詳細をご確認ください。

メディアクエリのスクリプト作成

対応ブラウザ

  • 120
  • 120
  • 113
  • 17

ソース

スクリプト メディアクエリを使用して、JavaScript が使用可能かどうかを確認できます。これは段階的なエンハンスメントに最適です。このメディアクエリ以前は、JavaScript が利用可能かどうかを検出する方法として、HTML に nojs クラスを配置し、それを JavaScript で削除していました。JavaScript を検出してそれに応じて調整する方法が CSS で利用できるようになったため、これらのスクリプトは削除できます。

Chrome DevTools を使用して、テストするページで JavaScript を有効または無効にする方法については、こちらをご覧ください。

脚本のスクリーンキャスト

スクリプティングのデモ

ウェブサイトでテーマを切り替える場合、JavaScript を使用できないため、スクリプト メディアクエリを使用すると、システム設定に対して切り替えが機能しやすくなります。または、スイッチ コンポーネントを検討してください。JavaScript が使用可能な場合は、単にオンとオフを切り替えるのではなく、ジェスチャーでスイッチを切ることができます。スクリプトが使用可能な場合は UX をアップグレードし、スクリプトが無効になっている場合は有意義な基盤エクスペリエンスを実現する絶好の機会です。

スクリプトの詳細を確認する。

透明性の低いメディアクエリ

対応ブラウザ

  • 118
  • 118
  • x

ソース

不透明でないインターフェースは、頭痛の原因となったり、さまざまな目の不自由な人が目が見えづらくなったりすることがあります。そのため、Windows、macOS、iOS には、UI の透明度を下げる、または削除するシステム設定があります。この prefers-reduced-transparency のメディアクエリは、他の好みのメディアクエリとも併用できます。そのため、ユーザーに合わせて調整しながら、創造力を発揮できます。

透明性の低下に関するスクリーンキャスト

透明性の低減のデモ

場合によっては、他のコンテンツに重なるコンテンツがない代替レイアウトを提供できます。あるいは、色の不透明度を調整して、不透明にしたり、ほぼ不透明にしたりできます。以下のブログ投稿では、ユーザーの好みに合わせて、示唆に富んだデモを多数紹介しています。このメディアクエリが役に立つ場面についてご興味がある方は、ぜひ一度ご覧ください。

詳しくは、@media(prefers-reduced-transparency)をご覧ください。

操作

インタラクションはデジタル エクスペリエンスの基礎です。ユーザーは、自分が何をクリックしたか、仮想空間内のどの位置にいるかについてフィードバックを得ることができます。今年は多くの魅力的な機能がリリースされ、インタラクションの作成と実装が容易になり、スムーズなユーザー ジャーニーとより洗練されたウェブ エクスペリエンスが実現しました。

切り替え効果を表示する

対応ブラウザ

  • 111
  • 111
  • x
  • x

ソース

ビュー遷移は、ページのユーザー エクスペリエンスに大きく影響します。View Transitions API を使用すると、Single Page Application の 2 つのページ状態の間に視覚的な遷移を作成できます。たとえば、ページ全体の遷移や、ページ上の新しいアイテムの追加や削除といった小さな遷移などが該当します。

View Transitions API の中核となるのは、document.startViewTranstion 関数です。DOM を新しい状態に更新する関数を渡すと、API がすべての処理を行います。これは、前後のスナップショットを取得し、2 つのスナップショット間を移動することで実現されます。CSS を使用すると、キャプチャする対象を制御できます。また、必要に応じてスナップショットのアニメーション化方法をカスタマイズできます。

VT スクリーンキャスト

VT デモ

遷移のデモを見る

Chrome 111 でリリースされたシングルページ アプリケーション用の View Transitions API。詳細については、ビュー遷移をご覧ください。

線形イージング関数

対応ブラウザ

  • 113
  • 113
  • 112
  • 17.2

この関数名に騙されないようにしてください。linear() 関数(linear キーワードと混同しないでください)を使用すると、精度が落ちますが、複雑なイージング関数を簡単な方法で作成できます。

Chrome 113 でリリースされた linear() より前は、CSS でバウンス効果やばね効果を作成することは不可能でした。linear() を使用すると、これらのイージングを一連のポイントに単純化してから、ポイント間で線形補間することで、これらのイージングを近似できます。

いくつかのドットを追加したバウンスのイージング カーブのグラフ
青で示された元の反射曲線は、緑色で示されたキーポイントによって単純化されています。linear() 関数はこれらの点を使用し、それらの点間を線形補間します。

リニアイージングのスクリーンキャスト

リニアイージングのデモ

CSS linear() のデモ

詳しくは、linear() をご覧ください。linear() 曲線を作成するには、線形イージング ジェネレータを使用します。

スクロール終了

対応ブラウザ

  • 114
  • 114
  • 109
  • x

ソース

多くのインターフェースにはスクロール操作が含まれており、場合によっては、現在のスクロール位置に関連する情報を同期したり、現在の状態に基づいてデータを取得したりする必要があります。scrollend イベントが発生する前は、不正確なタイムアウト メソッドを使用する必要がありましたが、これはユーザーの指が画面に触れたままでも発生する可能性があります。scrollend イベントにより、ユーザーが操作の途中であるかどうかを判断するスクロール終了イベントをタイミングよく処理できます。

Scrollend スクリーンキャスト

スクロールエンドのデモ

JavaScript ではスクロール中の画面上に指が置かれていることをトラッキングできず、単に情報が得られないだけであるため、これはブラウザが所有できることが重要でした。不正確なスクロール終了試行コードの部分を削除して、ブラウザが所有する高精度イベントに置き換えることができるようになりました。

詳しくはスクロールをご覧ください。

スクロールドリブン アニメーション

対応ブラウザ

  • 115
  • 115
  • x

ソース

スクロールドリブン アニメーションは、Chrome 115 で利用できる便利な機能です。これらを使用すると、既存の CSS アニメーションまたは Web Animations API で作成したアニメーションを、スクローラーのスクロール オフセットと結合できます。上下にスクロールするか、水平スクローラーで左右にスクロールすると、リンクされたアニメーションが直接反応して前後にスクラブされます。

次のデモに示すように、ScrollTimeline を使用すると、スクローラーの全体的な進行状況を追跡できます。ページの最後までスクロールすると、テキストが 1 文字ずつ表示されます。

SDA スクリーンキャスト

SDA のデモ

CSS のスクロールドリブン アニメーションのデモ: スクロール タイムライン

ViewTimeline を使用すると、スクロールポートを横切る要素を追跡できます。これは、IntersectionObserver が要素をトラッキングする方法と同様です。次のデモでは、各画像がスクロールポートに入ってから中央に来るまで表示されます。

SDA デモのスクリーンキャスト

SDA ライブデモ

CSS のスクロールドリブン アニメーションのデモ: タイムラインの表示

スクロールドリブン アニメーションは CSS アニメーションや Web Animations API と連携するため、これらの API のメリットをすべて活用できます。これには、これらのアニメーションをメインスレッド外で実行させる機能が含まれます。数行のコードを追加するだけで、スクロールによって動作する滑らかなアニメーションをメインスレッドから実行できるようになりました。

スクロールドリブン アニメーションについて詳しくは、こちらの記事で詳細をご確認いただくか、Scroll-driven-animations.style にアクセスしてください。多くのデモが含まれています。

遅延タイムラインの接続

対応ブラウザ

  • 116
  • 116
  • x
  • x

ソース

CSS を通じてスクロールドリブン アニメーションを適用する場合、制御スクローラーを見つけるためのルックアップ メカニズムが常に DOM ツリーをたどり、スクロールの祖先のみに制限されます。しかし、アニメーション化する必要がある要素は、スクローラーの子ではなく、まったく別のサブツリーにある要素であることがほとんどです。

アニメーション要素で祖先以外の名前付きスクロール タイムラインを検出できるようにするには、共有の親で timeline-scope プロパティを使用します。これにより、その名前で定義された scroll-timeline または view-timeline がアタッチされ、スコープが広がります。これにより、共有された親の子はすべて、その名前のタイムラインを使用できるようになります。

共有の親でタイムライン スコープが使用されている DOM サブツリーの可視化
共有の親で timeline-scope を宣言すると、スクローラーで宣言された scroll-timeline を、それを animation-timeline として使用する要素で見つけることができる

デモのスクリーンキャスト

ライブデモ

CSS のスクロールドリブン アニメーションのデモ: 遅延タイムラインの接続

timeline-scope の詳細をご覧ください。

離散プロパティ アニメーション

2023 年には、display: none との間のアニメーションなど、個別のアニメーションをアニメーション化する機能も追加されました。Chrome 116 以降では、キーフレーム ルールで displaycontent-visibility を使用できます。また、0% のポイントではなく、50% のポイントで任意の離散プロパティを遷移させることもできます。そのためには、allow-discrete キーワードを使用した transition-behavior プロパティで指定するか、省略形として transition プロパティで使用します。

個別のアニメーション。スクリーンキャスト

個別のアニメーション。デモ

詳しくは、離散アニメーションの移行をご覧ください。

@starting-style

対応ブラウザ

  • 117
  • 117
  • x
  • x

ソース

@starting-style CSS ルールは、display: none との間でアニメーション化する新しいウェブ機能を基盤として構築されています。このルールでは、要素がページ上で開かれる前にブラウザが参照できる「before-open」スタイルを要素に設定できます。これは、入力時のアニメーションや、ポップオーバーやダイアログなどの要素でのアニメーションに非常に便利です。また、要素を作成するときにアニメーションを適用したい場合にも便利です。次の例では、popover 属性(次のセクションを参照)をアニメーション化して、ビューポートの外側からビューに入り、最上位レイヤにスムーズに移動します。

@starting-style スクリーンキャスト

@starting-style デモ

@starting-style とその他のエントリ アニメーションの詳細を確認する。

オーバーレイ

対応ブラウザ

  • 117
  • 117
  • x
  • x

ソース

遷移に新しい CSS の overlay プロパティを追加すると、最上位レイヤのスタイルを持つ要素(popoverdialog など)を、最上位レイヤからスムーズにアニメーション化できるようになります。オーバーレイを遷移しない場合、要素はすぐに切り取られて変換され、隠れた状態に戻り、遷移が発生することはありません。同様に、overlay は、::backdrop を最上位のレイヤ要素に追加した際に滑らかにアニメーション化できるようにします。

オーバーレイ スクリーンキャスト

オーバーレイのライブデモ

詳細については、オーバーレイとその他の終了アニメーションをご覧ください。

コンポーネント

2023 年は、スタイルと HTML コンポーネントが交わる大きな 1 年でした。popover のランディングなど、アンカーの位置設定やプルダウンのスタイル設定に関して多くの作業が行われました。これらのコンポーネントを使用すると、追加のライブラリを使用したり、毎回独自の状態管理システムをゼロから構築したりすることなく、一般的な UI パターンを簡単に構築できます。

ポップオーバー

対応ブラウザ

  • 114
  • 114
  • 17

ソース

Popover API を使用すると、ページの他の部分の上に配置される要素を作成できます。たとえば、メニュー、選択、ツールチップなどです。シンプルなポップオーバーを作成するには、ポップアップする要素に popover 属性と id を追加し、popovertarget="my-popover" を使用してその id 属性を呼び出しボタンに接続します。Popover API では、以下がサポートされます。

  • 最上位レイヤへのプロモーション。ポップオーバーはページの他の部分の上にある別のレイヤに表示されるため、Z-Index をいじる必要はありません。
  • ライトを閉じる機能。ポップオーバー領域の外側をクリックすると、ポップオーバーが閉じてフォーカスが戻ります。
  • デフォルトのフォーカス管理。ポップオーバーを開くと、次のタブ停止がポップオーバー内にあります。
  • ユーザー補助機能のキーボード バインディング。esc キーを押すか、2 回切り替えると、ポップオーバーが閉じてフォーカスが戻ります。
  • ユーザー補助コンポーネント バインディング。ポップオーバー要素を意味的にポップオーバー トリガーに接続する。

ポップオーバーのスクリーンキャスト

ポップオーバーのライブデモ

セレクト ルール

HTML のもう一つの小さな変更点は、今年 Chrome と Safari に実装されたことです。水平ルール要素(<hr> タグ)を <select> 要素に追加して、コンテンツを視覚的に分ける機能です。これまでは、<hr> タグを SELECT タグに入れてもレンダリングされませんでした。今年は Safari と Chrome の両方でこの機能がサポートされ、<select> 要素内のコンテンツをより適切に分離できるようになりました。

スクリーンショットを選択

Chrome のライトモードとダークモードの「時間を選択」のスクリーンショット

[ライブデモ] を選択

SELECT で HR を使用する方法の詳細を確認する

:ユーザー有効な疑似クラスと無効な疑似クラス

対応ブラウザ

  • 119
  • 119
  • 88
  • 16.5

ソース

今年はすべてのブラウザで安定版になりました。:user-valid:user-invalid:valid 疑似クラスと :invalid 疑似クラスと同様に動作しますが、ユーザーが入力をかなり操作した後にのみ、フォーム コントロールに一致します。必須の空のフォーム コントロールは、ユーザーがページにアクセスし始めていない場合でも、:invalid に一致します。ユーザーが入力を変更して無効な状態のままにするまで、同じコントロールは :user-invalid に一致しません。

これらの新しいセレクタを使用すると、ユーザーが変更した入力を追跡するためにステートフル コードを記述する必要がなくなります。

:user-* スクリーンキャスト

:user-* ライブデモ

詳しくは、user-* フォーム検証の疑似要素の使用方法をご覧ください。

限定アコーディオン

対応ブラウザ

  • 120
  • 120
  • x
  • 17.2

ウェブでよく見られる UI パターンは、アコーディオン コンポーネントです。このパターンを実装するには、いくつかの <details> 要素を結合し、視覚的にグループ化して、互いに属していることを示します。

Chrome 120 では、<details> 要素の name 属性がサポートされるようになりました。この属性を使用すると、同じ name 値を持つ複数の <details> 要素がセマンティック グループを形成します。一度に開くことができる要素は、グループ内の 1 つまでです。グループから <details> 個の要素の 1 つを開くと、前に開いた要素が自動的に閉じます。このタイプのアコーディオンは、排他的アコーディオンと呼ばれます。

限定アコーディオン デモ

排他的アコーディオンに含まれる <details> 要素は、必ずしも兄弟である必要はありません。ドキュメント内に散らばってもかまいません。

CSS は、ここ数年、特に 2023 年の間に、このような復活を遂げました。CSS を初めて使用する場合や基礎を復習したい場合は、無料の CSS 学習コースと、web.dev にある他の無料コースをご覧ください。

楽しいホリデー シーズンをお過ごしください。これらの素晴らしい新しい CSS と UI の機能を、ぜひご自身の仕事に取り入れてみてください。

⇾ Chrome UI DevRel チーム