CSSの優先度を理解する2つの方法

CSSの優先度を理解する2つの方法

方法1: 値を追加する

公式の説明を見るには MDN にアクセスしてください。

優先度はどのように計算されますか?

詳細度は、特定の CSS 宣言に割り当てられる重みであり、一致するセレクター内の各セレクター タイプの値によって決定されます。

優先度が複数の CSS 宣言のいずれかの優先度と等しい場合、CSS 内の最後の宣言が要素に適用されます。

優先順位は、同じ要素に対して複数の宣言がある場合にのみ重要になります。要素に直接作用するすべてのCSSルールは常に

over) 要素が祖先要素から継承するルール。

上記の説明から非常に重要なメッセージが得られます。重量

セレクターの優先順位の関係をもう一度見てみましょう: ID セレクター > クラス セレクター = 属性セレクター = 疑似クラス セレクター > タグ セレクター = 疑似要素セレクター。

真実が明らかになりそうだ。

異なるタイプのセレクターに重み値を設定し、セレクターの数に応じてそれらを合計するだけで、優先順位を簡単に取得できます。次に例を示します。

IDセレクタの重みは1000に設定されている

クラスセレクタ、属性セレクタ、疑似クラスセレクタの重みは100に設定されます。

タグセレクタと疑似要素セレクタの重み値は10に設定されます

次の CSS の重みをすぐに計算し、正しい判断を下すことができます。

//重み値 1110
#アプリ.メニュー.項目{}
//重み値 210
.menu.menu .item{}
//重み値 30
.item.item.item{}

しかし。 。 。注意深く見れば、低優先度セレクターが十分にある限り (例: .item...x200 {} )、低優先度の重み値が高優先度の重み値を超える可能性がありますが、実際の効果は依然として高優先度のスタイルに基づいています。このようなことが起こると、現在の重量計算方法では説明できない可能性があります。

もちろん、これはセレクターの最大数を制限し、セレクターの重み値を増やすことで説明できますが、これは実装するのに良い方法ではないと常に感じています。

方法2: ビットストレージ

重みの値は unsigned int 変数に格納されていると仮定すると、変数のビット位置は合計 32 ビット (4 バイト) になります。次のように、上位ビットからバイトごとに展開します。

バイト1: 00000000

バイト2: 00000000

バイト3: 00000000

バイト4: 00000000

バイトとセレクターに対応:

バイト1: 00000000

バイト2: 00000000; IDセレクタ

バイト 3: 00000000; クラス セレクタ、属性セレクタ、疑似クラス セレクタ

バイト 4: 00000000; タグ セレクタ、疑似要素セレクタ

同じタイプのセレクターの数が直接追加され、指定されたバイトに入力されます。

例1:

#app .menu .item{}

取得された重み値ビットは次のとおりです。

結果は65793です

例2:

.menu.menu .item{}

取得された重み値ビットは次のとおりです。

結果は513です

例3:

.item.item.item{}

取得された重み値ビットは次のとおりです。

結果は3です

上記の例では、平均記憶容量は 8 ビットしかないため、セレクターの上限は 255 です。もちろん、ビット位置を増やしてセレクターの最大値を増やすこともできます。

要約する

CSS の優先度を理解するには 2 つの方法があります。どちらがより適していると思いますか?

興味のある方は編集者にメッセージを残してご意見をお聞かせください。

<<:  XAML でボタンを円として再描画する方法

>>:  ウェブサイトのビジュアルデザインパスはユーザーの習慣に合わせる必要がある

推薦する

MySQL チュートリアル データ定義言語 DDL の例 詳細な説明

目次1. SQL言語の基本機能の紹介2. データ定義言語の目的3. データベースの作成と破棄4. デ...

Linux カーネルの copy_{to, from}_user() に関する考察

目次1. copy_{to,from}_user() とは何か1. copy_{to,from}_u...

JS で CSS 変数を使用する方法

JS で CSS 変数を使用する方法:export キーワードを使用して、js オブジェクトを le...

Vue での this.$set の動的データバインディングのケーススタディ

インターネット上の this.$set の説明はわかりにくいと感じます。単一データ、オブジェクト、配...

デザイン理論:テキスト表現とユーザビリティ

<br />テキストデザインでは、通常、テキストのレイアウト、つまりテキストをより美しく...

実用的なウェブオンラインツール12選

1.ファビコン.cc ico アイコンの Web サイトをオンラインで作成するには、画像をアップロー...

CSS3でよく使われるスタイルの詳しい解説[基本的なテキストとフォントのスタイル]

概要: Web ページをより美しく見せるために、ここでは CSS3 でよく使用されるスタイルをいくつ...

今日、私は非常に奇妙なクリックの問題に遭遇し、自分で解決しました

...こんな感じで、今日はポップアップウィンドウを作ろうと思ったのですが、バックエンド PHP によ...

Docker を使用して nginx で tomcat クラスターを構築する方法 (画像とテキスト付き)

まず、Tomcatフォルダを作成します。Dockerの設定を容易にするために、ルートディレクトリに直...

Dockerはコンテナを通じてイメージを生成し、詳細にDockerCommitを送信します

目次ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを...

ルート権限なしでログインするためのDockerソリューション

docker コマンドを初めて使用する場合、権限の問題を確認するメッセージが表示されます。 unix...

Vue でコミュニケーションを実装する 8 つの方法

目次1. コンポーネント通信1. Props 親コンポーネント ---> 子コンポーネント通信...

Vue ルーター vue-router 詳細説明ガイド

中国語ドキュメント: https://router.vuejs.org/zh/ Vue Router...

mysql5.7 の新しい json フィールド タイプの使用例の分析

この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...