近々ブラウザに導入される CSS :is() と :where() の簡単な分析

近々ブラウザに導入される CSS :is() と :where() の簡単な分析

Safari (Technology Preview 106) および Firefox (バージョン 78) のプレビュー バージョンでは、新しい CSS :is()および:where()疑似クラスがサポートされるようになりました。 Chrome の実装はまだ遅れています。

重複を減らすには:is() を使用する

:is()疑似クラスを使用して、セレクター リストから重複を削除できます。

/* 前に */
.embed .save-button:hover,
.添付ファイル .保存ボタン:hover {
  不透明度: 1;
}

/* 後 */
:is(.embed, .attachment) .save-button:hover {
  不透明度: 1;
}

この機能は主に、処理されていない標準 CSS コードで役立ちます。 Sass または同様の CSS プリプロセッサを使用する場合は、ネストを使用することをお勧めします。

注: ブラウザは:is()に似ていますがより制限的な、非標準の:-webkit-any()および:-moz-any()疑似クラスもサポートしています。 WebKit は 2015 年に:-webkit-any()を非推奨にし、Mozilla は Firefox のユーザー エージェント スタイルシートを更新して : :-moz-any() :is()を使用するようになりました。

詳細度を低く保つには:where() を使用する

:where()疑似クラスは:is()と同じ構文と機能を持ちます。これらの唯一の違いは:where()セレクター全体の詳細度が上がらないことです (つまり、CSS ルールの詳細度が高いほど、そのスタイルはより優先されます)。

:where()疑似クラスもその引数もセレクターの詳細度には寄与せず、セレクターの詳細度は常に 0 になります。

この機能は、簡単に上書きできるスタイルに役立ちます。たとえば、基本スタイルシート sanitize.css には、 <svg fill>属性がない場合にデフォルトの塗りつぶし色を設定する次のスタイル ルールが含まれています。

svg:not([塗りつぶし]) {
  塗りつぶし: 現在の色;
}

詳細度が高い (B=1、C=1) ため、Web サイトは単一のクラス セレクター (B=1) でこの宣言を上書きすることはできず!importantを追加するか、セレクターの詳細度を人為的に高める必要があります (例: .share- icon.share-icon )。

.share-icon {
  fill: blue; /* 詳細度が低いため適用できません*/
}

CSS ライブラリと基本スタイルシートでは、属性セレクターを:where()でラップしてセレクター全体の詳細度を低く (C=1) 保つことで、この問題を回避できます。

/* サニタイズ.css */
svg:where(:not([fill])) {
  塗りつぶし: 現在の色;
}

/* 著者スタイルシート */
.share-icon {
  fill: blue; /* 詳細度が高いため適用可能*/
}

要約する

CSS :is() と :where() がブラウザーに導入されることに関するこの記事はこれで終わりです。CSS :is() と :where() ブラウザーに関するその他のコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  MySQL データベースでは、datetime、bigint、timestamp を使用して時間の選択を表します。時間を保存するのに最も効率的なのはどれですか?

>>:  JavaScript を使用せずに HTML の a タグを無効にするには、純粋な CSS を使用します。

推薦する

Element PlusはAffixを実装します

目次1. コンポーネントの紹介2. ソースコード分析2.1 テンプレート2.2 スクリプト2.3 実...

Docker Swarmの概念と使用法の詳細な説明

Docker Swarm は、Docker によって開発されたコンテナ クラスター管理サービスです。...

jQueryカルーセル機能を実装する方法

この記事では、jQueryカルーセル機能の実装コードを参考までに共有します。具体的な内容は次のとおり...

Presto をインストールし、Docker で Hive を接続する詳細なプロセス

1. はじめにPresto は、ギガバイトからペタバイトに及ぶデータ ソースに対してインタラクティブ...

Vue3 ドラッグ可能な左パネルと右パネルの分割コンポーネントの実装

目次コンポーネントの分解左パネル右パネル入力パラメータの分解小道具スロット具体的な実装ドラッグする方...

CentOS 起動時にカーネルモジュール overlayfs 操作を自動的にロードする

CentOS でカーネル モジュールを自動的にロードするには、/etc/sysconfig/modu...

JavaScriptは検証コードと検証のランダム生成を実装します

この記事では、検証コードのランダム生成と検証を実現するためのJavaScriptの具体的なコードを参...

Jmeterはデータベースプロセスダイアグラムに接続します

1. MySQL jdbc ドライバー (mysql-connector-java-5.1.28.j...

jsを使用して簡単な抽選機能を実現する

この記事では、参考までに、簡単な抽選機能を実装するためのjsの具体的なコードを共有します。具体的な内...

Nginx は動的と静的の分離を実装します 例の説明

ウェブサイトの解析を高速化するために、動的ページと静的ページを異なるサーバーで解析して、解析速度を向...

Windows で mysql5.7.21 をインストールするための詳細なチュートリアル

この記事では、参考までにMySQL 5.7.21のインストールチュートリアルを紹介します。具体的な内...

MySQLが日付フィールドインデックスを使用しない理由の要約

目次背景探検する要約する背景テーブルでは、dataTime フィールドは varchar 型に設定さ...

Linux コマンドラインターミナルで画面を分割するための 2 つのツール

ターミナル分割画面ツールは2つあります: screen と tmux 1. 画面分割を使用する(上下...