ホームページ ウェブフロントエンド CSSチュートリアル :is()、:where()、:has() 疑似クラスを使用して CSS の作成を減らす

:is()、:where()、:has() 疑似クラスを使用して CSS の作成を減らす

Sep 12, 2024 pm 02:16 PM

CSS は長年にわたって大きく進化してきました。作業を楽にする多くの新しい強力なツールが導入されています。これらのツールの中から、今日は3つをピックアップしました。 :is()、:has()、:where() 疑似クラスがコードを簡素化し、読みやすくし、繰り返しを減らすのにどのように役立つかを見ていきます。

この記事では、:is()、:where()、:has() 疑似クラスの内容、方法、および理由を説明します。これらの疑似クラスを使用して、より最適化されたコードを作成することで Web サイトをデザインする方法がわかります。これは、ソフトウェア開発の優れた実践となる可能性があります。

疑似クラスについて説明するので、基本的な概要を一文で説明します。 CSS の擬似クラスは、特定の条件または状態に基づいて要素に適用されるルールです。疑似クラスの詳細については、このリンクをクリックしてください。

私たちはどのような問題を解決しているのでしょうか?

CSS (カスケード スタイルシート) を使用して Web サイトをデザインするとき、誰もが直面するのがコードの繰り返しです。

例:

.card .title, .card .body-content, .card .footer-action {
 ...
}
ログイン後にコピー

この例では、子セレクターごとに繰り返される .card セレクターがあります。しかし同時に、同じスタイルが適用されていることもわかります。

これは、各セレクターをカンマで区切ることにより、CSS でグループ セレクターが通常どのように機能するかです。このコードは正常に動作しますが、ここでの懸念は、繰り返しが発生してうまく整理されないことを避けることです。

ここで直面するもう 1 つの問題は、CSS の特異性の問題です。このようなコードを繰り返し使用しすぎると、どのようなスタイルがどこでどのような条件で使用されているかを忘れてしまうことがあります。ここで、これらの疑似クラスが重要な役割を果たします。

各疑似クラスを 1 つずつ見て、その目的を理解しましょう。

:is() 擬似クラスの説明

:is() 擬似クラスを使用すると、同じコードを繰り返さずに、共通のスタイルを共有する複数の要素を選択できます。セレクターを 1 つのブロックに結合して簡素化し、冗長性を削減します。引数としてセレクターのリストを受け取り、そのリスト内のセレクターのいずれかに一致するすべての要素にスタイルを適用します。

.card :is(.title, .body-content, .footer-action) {
 ...
}
ログイン後にコピー

上記の例を使用しました。:is() 疑似クラスでグループ化することで、CSS コードの繰り返しをいかに簡単に減らすことができるかがわかります。コードをクリーンかつ効率的に保ちます。

上記の例は、.title、.body-content、および .footer-action を :is() 疑似クラスへの引数として提供することを示しています。 :is() の前に、親コンテナー .card は、子のスタイルを他のコードから分離するように定義されます。これは、:is() がそのリストに一致するすべての引数に同じスタイルを適用する方法です。

:is() 疑似クラスは、すべての主要なブラウザで広く使用されています。caniuse.com からの以下の画像は、ブラウザのさまざまなバージョンの詳細な概要を示しています。

Write less CSS using :is(), :where(), and :has() pseudo-classes

...

:where() 疑似クラスの説明

:where() 疑似クラスは :is() に非常に似ています。複数のセレクターをグループ化して、コード内の繰り返しを減らすことができます。セレクターを引数として受け取ります。 :is() と :where() 擬似クラスの主な違いは、:where() には特異性がまったくないことです。これは、CSS セレクターに余分な重みを追加せずに要素をスタイルしたい場合に便利であることを意味します。

:where() 擬似クラスで定義されたスタイルは簡単にオーバーライドできます。これは、:where() がセレクターに特別な詳細性を追加せず、:where() 疑似クラス内のスタイルがセレクター自体の詳細性に基づいていることを意味します。

:where() 疑似クラスを使用する 1 つの良い使用例は、複数の要素の基本スタイルを定義することですが、そのスタイルが、後でオーバーライドされる可能性があるより具体的なルールに影響を与えたくない場合です。

このように:where() を使用すると、競合時にどのルールが優先されるべきかについて CSS が意見を持ちすぎずにスタイルを適用できます。

/* Applying a default style */
:where(h1, p, a) {
  color: red; 
  font-size: 20px;
}

/* More specific style */
a {
  color: blue;
  font-size: 16px;
}
ログイン後にコピー

上記の例では、h1、p、および a タグが、基本スタイル用の :where() 疑似クラスへの引数として提供されています。その後、スタイルを備えたスタンドアロン タグとして使用されるタグは、:where() で定義されたスタイルを簡単にオーバーライドできます。

:is() と同様に、:where() もほぼすべての主要なブラウザでサポートされています。サポートされているブラウザのバージョンを確認するには、caniuse.com から以下の画像を参照してください:

Write less CSS using :is(), :where(), and :has() pseudo-classes

:has() 擬似クラスの説明

:has() は親セレクターです。これは、親要素に含まれる子に基づいて親要素を選択できることを意味します。 CSS では以前はこの種の動作が許可されていなかったため、これは非常に大きな問題です。 :has() は条件付きのニーズを満たすため、CSS の if ステートメントであるとも言えます。

img が含まれている場合にのみ div のスタイルを設定したいとします。これは従来の CSS では不可能でしたが、:has() によって可能になりました。

<!-- Card with Image -->
<div class="card">
      <img src="https://placeholderjs.com/300x300" />
      <h1>Card With Image</h1>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque, accusantium.</p>
</div>

<!-- Card without Image -->
<div class="card">
      <h1>Card With Image</h1>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque, accusantium.</p>
      <a href="#">Call to Action</a>
    </div>
ログイン後にコピー
.card:has(a) {
  background-color: #e6e6e6;
}

.card:has(img) {
  background-color: #979759;
}
ログイン後にコピー

Write less CSS using :is(), :where(), and :has() pseudo-classes

In this example, you see I have created two div elements with the same .card class, in CSS by using :has() pseudo-class. By using the same .card with :has() pseudo-class, two conditions are given with different styling that you can able to see in the image output.

:has() is also supported in almost all major browsers. See an image below from caniuse.com to check supported browser versions:

Write less CSS using :is(), :where(), and :has() pseudo-classes

Conclusion

As new features are introduced in CSS, the more power it gains, and allows writing code more readable, efficient, and optimized code. You have learned :is(), :where() and :has() pseudo-classes in this article, and you see how useful they are. These pseudo-classes make our job much easier, they can be easily maintained, and the code is optimized.

This article is to show you how powerful these features are, and we’re one step closer of using these features in our project. I highly suggest you use features like these to increase your productivity.

This post is originally posted at programmingly.dev. Read full article by following this link: write less CSS by using :is(), :where(), :has() pseudo-classes

以上が:is()、:where()、:has() 疑似クラスを使用して CSS の作成を減らすの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

静的フォームプロバイダーの比較 静的フォームプロバイダーの比較 Apr 16, 2025 am 11:20 AM

ここでは、「静的フォームプロバイダー」という用語を埋めてみましょう。あなたはあなたのHTMLを持ってきます

SASSをより速くするための概念の証明 SASSをより速くするための概念の証明 Apr 16, 2025 am 10:38 AM

新しいプロジェクトの開始時に、SASSコンピレーションは瞬く間に起こります。これは、特にbrowsersyncとペアになっている場合は素晴らしい気分です。

毎週のプラットフォームニュース:HTMLロード属性、主なARIA仕様、およびIFRAMEからShadowDOMへの移動 毎週のプラットフォームニュース:HTMLロード属性、主なARIA仕様、およびIFRAMEからShadowDOMへの移動 Apr 17, 2025 am 10:55 AM

今週のプラットフォームニュースのラウンドアップで、Chromeは、Web開発者のロード、アクセシビリティ仕様、およびBBCの動きのための新しい属性を導入します

HTMLダイアログ要素を使用したいくつかの実践 HTMLダイアログ要素を使用したいくつかの実践 Apr 16, 2025 am 11:33 AM

これは私が初めてHTML要素を見ていることです。私はしばらくの間それを知っていましたが、まだスピンしていませんでした。かなりクールです

ペーパーフォーム ペーパーフォーム Apr 16, 2025 am 11:24 AM

購入またはビルドは、テクノロジーの古典的な議論です。自分で物を構築することは、あなたのクレジットカードの請求書にはラインアイテムがないため、安価に感じるかもしれませんが

毎週のプラットフォームニュース:テキスト間隔のブックマークレット、トップレベルの待望、新しいアンプロードインジケーター 毎週のプラットフォームニュース:テキスト間隔のブックマークレット、トップレベルの待望、新しいアンプロードインジケーター Apr 17, 2025 am 11:26 AM

今週のラウンドアップ、タイポグラフィを検査するための便利なブックマークレットである。

「ポッドキャストにサブスクライブ」リンクはどこにすべきですか? 「ポッドキャストにサブスクライブ」リンクはどこにすべきですか? Apr 16, 2025 pm 12:04 PM

しばらくの間、iTunesはポッドキャストの大きな犬だったので、「ポッドキャストにサブスクライブ」をリンクした場合:

独自の非JavaScriptベースの分析をホストするためのオプション 独自の非JavaScriptベースの分析をホストするためのオプション Apr 15, 2025 am 11:09 AM

サイトの訪問者と使用データを追跡するのに役立つ分析プラットフォームがたくさんあります。おそらく、特にGoogleアナリティクスが広く使用されています

See all articles