近々ブラウザに導入される 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 を使用します。

推薦する

インストールされていないバージョンの MySQL を使用する手順とパスワードを忘れた場合の解決策

最初のステップは、圧縮されたパッケージを対応するディスクに解凍することです。 2 番目の手順は、cm...

nacos が mysql に接続できない場合の解決策

理由nacos の pom が依存する mysql バージョンが、mysql バージョンと一致してい...

Linux で Grafana をインストールし、InfluxDB モニタリングを追加する方法

Grafana をインストールします。公式 Web サイトでは、直接インストールできる Ubuntu...

「いいね!」機能では MySQL と Redis のどちらを使用すればよいでしょうか?

目次1. 初心者が陥りがちな間違い2. Iteratorのremove()メソッドを使用する3. f...

独自のサーバーを素早く構築する方法の詳細なチュートリアル(Java 環境)

1. サーバーの購入1. 私はAlibaba Cloudのサーバーを選択しました。学生向けで月額9...

WeChatミニプログラムのすべてのページがログインされていることを確認する方法

目次現状解決さらなる解決策やっと現状WeChat ミニプログラムには、ホームページ、個人ページ、いく...

HTML でのアンカーポイントの適用

アンカーポイントの設定<a name="トップ"></a>...

Linux の高並列性とパフォーマンス最適化の落とし穴の紹介

目次序文Linux アプリケーション実行中に開いているファイルが多すぎる問題の分析と解決Linux ...

役に立つメタ設定方法(必読)

<meta name="viewport" content="...

...

Visual Studio Codeを使用してMySqlデータベースに接続し、クエリを実行します。

Visual Studio Code は、Microsoft が開発した強力なテキスト エディター...

Reactの原理の説明

目次1. setState() の説明1.1 データの更新1.2 推奨構文1.3 2番目のパラメータ...

ウェブ音楽プレーヤーを実現する js

この記事では、参考までに簡単なHTMLと音楽プレーヤーの制作コードを紹介します。具体的な内容は以下の...

MySQL 8.0.15 のインストールと設定のグラフィックチュートリアルと Linux でのパスワード変更

このブログは、MySQL8.0.15 を正常にインストールしたことを思い出すために書きました。以前は...

VueはWebSocketを使用してチャット機能をシミュレートします

この効果は、2つのブラウザが互いにシミュレートしていることを示しています 1. シミュレートされたノ...