[解決済み】CSSで"!important "を使用する意味は?[重複あり]
質問
数ヶ月前からウェブサイトを制作しているのですが、何かを編集しようとするときに、多くの場合
!important
,
例えば
:
div.myDiv {
width: 400px !important;
}
を、期待通りに表示させるために これは悪い習慣なのでしょうか?それとも
!important
コマンドは使ってもいいのでしょうか?これによって、さらに何か好ましくないことが起こる可能性はありますか?
どのように解決するのですか?
そうですね、あなたの例のように
!important
は悪い習慣であり、将来的に望ましくない影響を引き起こす可能性が非常に高いです。だからといって、絶対に使ってはいけないというわけではありませんが。
の何が問題なのでしょうか?
!important
:
特異性 は、CSSがページにどのような影響を与えるかをブラウザが判断する際に働く主要な力の1つです。セレクタがより具体的であればあるほど、そのセレクタはより重要視されます。これは通常、選択された要素の出現頻度と一致します。例えば
button {
color: black;
}
button.highlight {
color: blue;
font-size: 1.5em;
}
button#buyNow {
color: green;
font-size: 2em;
}
このページでは、ボタンはすべて黒色です。ただし、クラス "highlight" を持つボタンは青色です。ただし、IDが "buyNow"のユニークなボタンは、緑色になっています。ルール全体(この場合は色とフォントサイズの両方)の重要性は、セレクタの特異性によって管理されます。
!important
しかし、これはセレクタレベルではなく、プロパティレベルで追加されます。例えば、このようなルールを使った場合。
button.highlight {
color: blue !important;
font-size: 1.5em;
}
であれば、color プロパティは font-size よりも高い重要性を持つことになります。実際、色のほうが
button#buyNow
セレクタで、font-sizeとは対照的に(これはまだ通常のID対クラスの特異性によって支配されています)。
要素
<button class="highlight" id="buyNow">
の場合、font-sizeは
2em
しかし、色
blue
.
これには2つの意味がある。
- セレクタは、その中のすべてのルールの重要性を正確に伝えていません。
-
その
のみ
青色をオーバーライドする方法は
別の
!important
の宣言で、例えばbutton#buyNow
セレクタを使用します。
これは、スタイルシートの保守とデバッグを難しくするだけでなく、雪だるま式に増えていきます。ひとつは
!important
は、それを上書きする別のもの、さらにそれを上書きする別のもの、などなど。1つだけに留まることはほとんどないのです。たとえ1つの
!important
短期的な解決策としては有効ですが、長い目で見ると痛い目を見ることになります。
いつ使ってもいいのか。
- ユーザースタイルシートのスタイルをオーバーライドする。
これは
!important
はそもそも、ウェブサイトのスタイルを上書きする手段をユーザーに提供するために考案されました。これは、スクリーンリーダーや広告ブロックなどのアクセシビリティツールで多く使用されています。
- サードパーティのコードやインラインスタイルをオーバーライドします。
一般的には、これはコード・スモークのケースだと思いますが、どうしても避けられない場合もあります。開発者である以上、自分のコードをできる限りコントロールすることを目指すべきですが、手が縛られ、あるものを使って仕事をしなければならない場合もあります。使用方法
!important
を惜しまないでください。
- ユーティリティクラス
多くのライブラリやフレームワークには、以下のようなユーティリティクラスが付属しています。
.hidden
,
.error
または
.clearfix
. これらは単一の目的を果たすもので、多くの場合、非常に少ない、しかし非常に重要な規則を適用します。(
display: none
に対して
.hidden
クラスなど)。これらは、現在要素にある他のどのようなスタイルもオーバーライドするはずであり、確実に
!important
と言われれば、そうなんですが。
まとめ
を使用しています。
!important
宣言は、CSS の中核的な仕組みのひとつである「特異性」を台無しにする副作用があるため、しばしばバッドプラクティスとみなされます。多くの場合、この宣言の使用は CSS アーキテクチャが貧弱であることを示す可能性があります。
許容できる、あるいは望ましいケースもありますが、使用する前に、それらのケースのいずれかが実際に自分の状況に当てはまるかどうかを再確認してください。
関連
-
[解決済み】Telegramマークダウンの構文。太字 *と* イタリック?(2018年9月)
-
[解決済み] テーブルセルの背景を透明にする方法
-
[解決済み] CSSでテキストや画像の背景を透明にするには?
-
[解決済み] HTMLのid属性に有効な値は何ですか?
-
[解決済み] CSSのdisplayプロパティで遷移する
-
[解決済み] CSSのクラス名/セレクタに使用できる文字は?
-
[解決済み] CSSでdivのアスペクト比を維持する
-
[解決済み] CSSコンテンツによるHTMLエンティティの追加
-
[解決済み] CSSセレクタの"~"(チルダ/スクイグル/ツイドル)はどういう意味ですか?
-
[解決済み] .css()を使って!importantを適用するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】html文書に縦の空白を挿入するには?
-
[解決済み】ローカルの実行ファイルへのハイパーリンクを作成する方法は?
-
[解決済み] Bootstrapのカラムが機能しない
-
[解決済み] CSS - display: none; が機能しない
-
[解決済み] (X)HTMLにおける "PRE "タグの用途は何ですか?
-
[解決済み] will-change' や translateZ() ハックは 'transition: height' のパフォーマンスを向上させるか?
-
[解決済み] ChromeのデベロッパーツールでHTML Bodyにcz-shortcut-listen="true "が表示される?
-
[解決済み] Font Awesome アイコンをプレースホルダーで使用する
-
[解決済み] CSSにおける「!important」の意味とは?
-
[解決済み] テキスト入力欄のCSSセレクタ?