CSS スタイルの優先順位とカスケード順序に関する議論

CSS スタイルの優先順位とカスケード順序に関する議論
一般的に
[重要なフラグ1つ] > [特別なフラグ4つ] > 宣言順
!important > [ id > クラス > タグ ]
!important を使用すると、優先順位を最も高く、次にスタイル オブジェクト、次に id > class > タグの順に変更できます。また、宣言順で同じレベルのスタイルの後に表示されるスタイルは、優先順位が高くなります。

この奇妙なものを見てみましょう!重要

コードをコピー
コードは次のとおりです。

<スタイル タイプ="text/css">
div{背景: 赤 !重要; 背景: 青}
</スタイル>

IE6 を除き、他のブラウザでは背景が赤で表示されます。これはまさに !important の役割であり、つまり、私がここにいる限り、私が最も重要です。私に代わるものは何もありません。何が見えても、私たちはみんな同じです! 「重要」という英語の単語を追加しますか?とても鮮やかで適切です。 IE6 ではここで青い背景が表示されます。IE6 が !important をサポートしていないわけではなく、スタイル宣言の順序に従って以前のものを上書きします。このとき、!important を認識しなくなり、まったく認識しなくなります。これは最も人気のある IE6 ハックの 1 つです。次のように記述すると、背景は正常に赤で表示されます。

コードをコピー
コードは次のとおりです。

<スタイル タイプ="text/css">
div{背景: 青; 背景: 赤 !重要; }
</スタイル>

4ビットの特殊フラグ[0.0.0.0]を見てみましょう
左から右へ、位置が +1 されるたびに、前の段落は次の段落に対して議論の余地のない圧倒的な優位性を持ちます。後ろの桁の値がどれだけ大きくても、前の桁の値である 1 を超えることはできません。
1. インラインスタイル [1.0.0.0]
回答: <span id="demo" style="color:red"></span>
B: JS によって制御されるインライン スタイル オブジェクトもあります (document.getElementById("demo").style.color="red";)。
両者は同じレベルに属しますが、一般的に言えば、JS によって制御されるインライン スタイルの方が優先順位が高くなります。これは宣言の順序に関係しており、本質とは関係ありません。DOM 操作は、DOM ツリーが読み込まれた後に実行されることが多いためです。
2. IDセレクター[0.1.0.0]
3. クラス、属性、疑似クラスセレクター [0.0.1.0]
4. 要素タグ、疑似要素セレクター [0.0.0.1]
CSS セレクターの詳細については、W3C または CSS マニュアルを参照してください。ここでは詳細には触れません。
擬似クラスセレクターに注意してください
LVHA 疑似クラスでは、スタイルは LVHA の優先順位に従って右から左に上書きされ、順序が異なると効果が異なります。
a:link - デフォルトのリンクスタイル
a:visited - 訪問済みリンクのスタイル
a:hover - マウスホバースタイル
a:active - マウスクリックスタイル 最後に、JS が !important でインラインスタイルを制御する現象について書いてみます。
通常のデモ1を見てみましょう:

コードをコピー
コードは次のとおりです。

<スタイル タイプ="text/css">
div{背景: 赤 !重要; 高さ: 20px;}
#demo1{ 背景: 緑;}
.demo1{ 背景:青;}
</スタイル>


コードをコピー
コードは次のとおりです。

<div class="demo1" id="demo1" style="background: yellow"></div>


コードをコピー
コードは次のとおりです。

<script type="text/javascript">
document.getElementById("demo1").style.background="黒";
</スクリプト>

最後に、背景が赤で表示されますが、これは問題にならないはずです。!important は、どこに配置されていても優先度を変更しますが、後続の JS コードでは優先度は変更されません。
--------------------------------------------------------------------------------
別のデモ2 :

コードをコピー
コードは次のとおりです。

<スタイル タイプ="text/css">
div{背景: 赤 !重要; 高さ: 200px;}
#demo2{ 背景: 緑;}
.demo2{ 背景: 青;}
</スタイル>


コードをコピー
コードは次のとおりです。

<div class="demo2" id="demo2" style="background: yellow !important"></div>


コードをコピー
コードは次のとおりです。

<script type="text/javascript">
document.getElementById("demo2").style.background="黒";
</スクリプト>

IE6,7では赤く表示される
FF2+は黄色で表示される
Opera9+は赤く表示される
Safariは黄色で表示される
--------------------------------------------------------------------------------
デモ3:

コードをコピー
コードは次のとおりです。

<スタイル タイプ="text/css">
div{背景: 赤 !重要; 高さ: 200px;}
#demo3{ 背景: 緑;}
.demo3{ 背景: 青;}
</スタイル>


コードをコピー
コードは次のとおりです。

<div class="demo3" id="demo3" style="background: yellow !important"> </div>


コードをコピー
コードは次のとおりです。

<script type="text/javascript">
document.getElementById("demo3").style.background="黒 !重要";
</スクリプト>

IE6,7では赤く表示される
FF2+は黄色で表示される
Opera9+は黒く表示される
Safariは黒く表示される
--------------------------------------------------------------------------------
上記の2つの例を説明してください
JS によって制御されるスタイル オブジェクトは、実際にはインライン スタイルであり、これは正しいです。

ただし、JS コントロール スタイル オブジェクト属性値に追加された !important に対して、3 つのブラウザーは異なる結果を返します。
IE: JS は、スタイル オブジェクト属性値を制御して、インライン スタイル属性値を完全に上書きします。Element.style.property="value !important" はサポートされていないため、エラー メッセージが表示されます: 無効なパラメーターです。
FF2+: Element.style.property="value !important" は完全にはサポートされていません。!important は無効であり、エラーは報告されません。インライン スタイル属性値に !important がない場合、完全に上書きされます。!important がある場合、インライン スタイル属性は最高の優先順位を持ち、JS 制御のスタイルの影響を受けません。
Opera9+: JS は、スタイル オブジェクト属性値を制御してインライン スタイル属性値を完全に上書きし、Element.style.property="value !important" をサポートします。
Safari: Element.style.property="value !important" をサポートします。インライン スタイル属性値に !important がない場合、完全に上書きされます。!important がある場合、インライン スタイル属性は最高の優先順位を持ち、JS 制御のスタイルの影響を受けません。

CSS スタイルの優先順位は、スタイルシートに出現する順序に基づきますか、それとも要素内でクラスまたは ID 値が宣言される順序に基づきますか?
以前は、クラス内で後で宣言された値の優先度が高いと考えていましたが、実際にはスタイルシートに表示される順序によって異なります。
コード:

コードをコピー
コードは次のとおりです。

<スタイル タイプ="text/css">
div{ 高さ: 200px; 幅: 200px; 背景: 赤; }
.b{ 背景: 緑; }
.a{ 背景: 青;}
</スタイル>
</head>
<本文>
<div class="ab" 2style="background:pink;">
</div>
</本文>

div のスタイルには青色のスタイル カラーが表示されます。
フロントエンド業界のあらゆる技術を学び、北京周辺のすべての都市を訪問します。それから私は生まれ育った場所に戻ります。なぜなら故郷とは親戚がいる場所だからです。

<<:  MySQLの自動増分主キーの実装の詳細な説明

>>:  CSS で text-align と margin: 0 auto を使用して中央に配置する例コード

推薦する

ドッカー専用倉庫港湾建設プロセス

1. 準備1.1 港ダウンロードハーバーダウンロードアドレス:リンクリンクの説明を追加し、必要なバー...

最新のmysql-5.7.21のインストールと設定方法

1. ダウンロードしたMySQLの圧縮パッケージをインストールディレクトリに解凍します。 2. 新し...

jsを使用してカルーセル効果を実現する

今日は、参考までに、jsを使用してカルーセルマップの効果を実現する方法についてお話ししましょう。具体...

順序再構築に関する簡単な説明: MySQL シャーディング

目次1. 目的2. 環境整備1. 基本情報2. データベース環境の準備3. データベースを構築し、サ...

Windows システム mysql5.7.18 インストール グラフィック チュートリアル

Windows システム向け MySQL インストール チュートリアルダウンロード1. https:...

MySQL MHA の高可用性構成とフェイルオーバーの詳細な導入手順

目次1. MHAの紹介1. MHAとは何ですか? 2. MHAの構成3. MHAの特徴2. MySQ...

HTML 要素に注釈を付けるときにクラスと ID のどちらが優れているかを分析する

Web ページには、非常に複雑な HTML 構造があります。CSS を使用して関連するスタイルを定義...

SQLは、隣接する2行のデータに対して加算、減算、乗算、除算の演算を実行します。

SQL は、データを特定の順序で並べ替え、特定のフィールドでグループ化した後、隣接する 2 つのデ...

Vue3 非同期データ読み込みコンポーネントサスペンスの使い方

目次序文コンポーネントの作成要約する序文Vue3 には多くの注目すべき機能が追加されましたが、サスペ...

MySQL InnoDB ストレージ エンジンの詳細

序文MySQL では、InnoDB はストレージ エンジン レイヤーに属し、プラグインとしてデータベ...

HTTP サーバーとクライアントのやり取りをシミュレートする Node.js+postman

目次1. NodeがHTTPサーバーを構築する2. HTTPサーバーがリクエストを取得する1. Po...

ドラッグアンドドロップによる並べ替えの詳細を実現する js

目次1. はじめに2. 実装3. HTML ドラッグ アンド ドロップ API を使用しないのはなぜ...

MySQL インデックス プッシュダウンを 5 分で理解する

目次インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックスプッ...

クールなページング効果を実現するネイティブJS

この記事では、次のような効果を持つ JS ページング効果の例を紹介します。クールだと思いませんか? ...

MySQLステートメントの記述と実行順序を理解するだけです

MySQL ステートメントの書き込み順序と実行順序には大きな違いがあります。書き順、mysql の一...