重要なオーバーライド方法は?


250

Wordpressテンプレートの元のCSSを上書きするカスタムスタイルシートを作成しました。しかし、私のカレンダーページでは、元のCSSには次の!important宣言で設定された各テーブルセルの高さがあります。

td {height: 100px !important}

これを上書きできる方法はありますか?


3
も試してみ!importantましたか?CSSシートが元のテンプレートの後に定義されている場合、それはうまく機能するはずです。
PetrJaneček12年

1
最後のシートはあなたのものですか、それともテンプレートですか?
j08691

67
これが!important有害と見なされるのはこのためです。
Spudley

8
最も強力な方法は次のとおりです。td[style] {height:110px!important; }。タグの実際のスタイル属性にスタイルを適用しているので、HTMLにインラインでスタイルを挿入したかのように機能します。
DMTintner 2013年

回答:


351

重要な修飾子のオーバーライド

  1. を使用して別のCSSルールを追加し!important、セレクターに高い特異性を与える(セレクターにタグ、ID、またはクラスを追加する)
  2. 既存のセレクターよりも後の時点で同じセレクターを使用してCSSルールを追加します(同点では、最後に定義されたものが優先されます)。

より高い特異性を持ついくつかの例(最初が最も高い/オーバーライド、3番目が最も低い):

table td    {height: 50px !important;}
.myTable td {height: 50px !important;}
#myTable td {height: 50px !important;}

または、既存のセレクターの後に同じセレクターを追加します。

td {height: 50px !important;}

免責事項:

を使用することはほとんど決して良い考えではありません!important。これは、WordPressテンプレートの作成者による悪いエンジニアリングです。バイラルスタイルで、テンプレートのユーザーは独自のテンプレートを追加する必要があります!important修飾子をてオーバーライドするし、JavaScriptを介してオーバーライドするためのオプションを制限します。

ただし、必要に応じてオーバーライドする方法を知っておくと便利です。


7
これは少し古い回答ですが、CSSを作成するための非常に悪い方法であるというコメントを追加できますか?私は人々がこの回答を参照するのを見てきました... :)
ZenMaster

すばらしい答えです。私は同意します、それは混乱です。それは私に彼らのハックをハックするように強制し、次に誰かが私のハックをハックするなどを強制します。私の場合、データベースからCSSをどこかからプルするテンプレートを扱わなければなりません。DBダンプをgrepすると、1MBのjson blobからのものであることがわかります。これらの厄介なハックを除いて、どこを変更するかを見つけ、CSSをコードファイルに追加するように強制し、その方法を実行するには、あまり役に立ちません。
Josh Ribakoff 2013年


CSSの速度が低下する場合でも、タグ識別子を追加することをお勧めします。div#header.class {style:; それを取るために...非常に迷惑な
Sparatan117

の良い使い方があります!important。Stylish、AdBlock、またはuBlockスクリプトからのブラウザー全体またはサイト全体のスタイルのオーバーライドと同様です。または、非常に複雑で、多くのファイルに広がり、時間とともに変化する(そしてを使用することもある!important)ベースCSSに簡単にアクセスできない場合。他のツールと同様に、正または負のポテンシャルは、その使用方法に基づいています。人々はこのようなことやgoto / eval / globals / etcのようなときはいつでも類人猿を止める必要がある 言及されています。「混乱を招く」可能性が非常に大きいため、「WordPressを回避」または「CSSを回避」と言うこともできます。
Beejor

30

!importantあなたは矛盾であなたのスタイルシートのセレクタがある場合にのみ使用すべきである特異性を

ただし、特定性が競合している場合でも、例外に対してより具体的なセレクターを作成することをお勧めします。あなたの場合class!importantルールを必要としないより具体的なセレクターを作成するために使用できるをHTMLに含める方が良いでしょう。

td.a-semantic-class-name { height: 100px; }

!importantは自分のスタイルシートで使用することはありません。CSSのCはカスケード用であることを忘れないでください。を使用!importantすると、これが壊れます。


17
本当じゃない。!importantスタイルシート内のルールは通常ルールを上書きしますstyle、例えば、タグ。ただし、状況によっては、より具体的なルールがオーバーライドするように見えることがあります。あなたが設定されている場合たとえば、font-size: 24pt !importantbody、あなたはまだでそれをオーバーライドすることができますfont-size: 12ptp。これは、!importantルールを上書きするのではなく、暗黙のfont-size: inheritonを上書きするためですp
meustrus 14年

23

免責事項:重要なことは絶対に避けてください。

これはダーティでダーティなハックですが、重要性をオーバーライドしようとしているプロパティで(無限ループまたは非常に長時間続く)アニメーションを使用することで、!importantなしで!importantをオーバーライドできます。

@keyframes forceYellow {
  from {
    background-color: yellow;
  }
  to {
    background-color: yellow;
  }
}

div {
  width: 100px;
  height: 100px;
  margin: 0 auto;
  background: red !important;
  animation: 1s linear infinite forceYellow;
}
<div></div>


2
ユーザーのCPUに負担がかかる可能性がある
Berry Tsakala

2
このトリックはもう機能しないようです。Firefox 78とChrome 83では、ボックスはまだ赤色です。
アンディパン

13

では、CSSの重要性について簡単に説明します。以下がお役に立てば幸いです!

まず、スタイルのすべての部分は重み付けとして名前が付けられているため、そのスタイルに関連する要素が多いほど、重要度が高くなります。例えば

#P1 .Page {height:100px;}

よりも重要です:

.Page {height:100px;}

したがって、重要な場合、理想的には、これは本当に本当に必要なときにのみ使用する必要があります。したがって、declerationをオーバーライドするには、スタイルをより具体的にしますが、オーバーライドも行います。下記参照:

td {width:100px !important;}
table tr td .override {width:150px !important;}

これが役に立てば幸いです!!!


二つの!important再定義することによってオーバーライドすることができるを.oldクラス名{かくかくしかじか}として.OLDクラス-name.overrided {かくかくしかじか}における<style></style>成分上記タグ、私のためにそれの作品
タレクKalaji

11

JavaScriptを使用して上書き

$('.mytable td').attr('style', 'display: none !important');

私のために働いた。


インラインスタイルは常に親の重要性をオーバーライドすると思いました!国旗。
ジョシュアラミレス

3
@JoshuaRamirezいいえ、重要なフラグもインラインで配置しない限り、実際には重要なフラグを上書きしません
Cam

1
JSを使用する場合は、要素が完全に削除される可能性があります。ただし、リモートで再び必要になる可能性がある場合は除きます。JSを介して!importingをスタックすると、元の質問に戻るだけです。
SilverbackNet

@SilverbackNet私の理解によると、JSを使用したオーバーライドはより正確であり、通常、CSSが順番にロードされ、すべてがロードされた後にJS jqueryブロックがロードされます。したがって、CSSシーケンスとは関係なく、CSSによって行われた変更をオーバーライドします。
Manish Shrivastava 2016

このようなオーバーライドは、スタイル属性には機能しません。
user2284570

6

これも役立ちます

td[style] {height: 50px !important;}

これはすべてのインラインスタイルをオーバーライドします



-5

上記のすべてを試してみたが役に立たなかったので、ここでは言及されていない答えを追加したいと思います。私の特定の状況は、!important要素に属性が組み込まれている(非常に迷惑な)semantic-uiを使用している場合です。私はそれをオーバーライドするためにすべてを試しましたが、結局のところ(jqueryを使用して)1つのことを行いました。以下のとおりです。

$('.active').css('cssText', 'border-radius: 0px !important');

これは機能しません。attr('style', ...代わりに使用するManishの回答を参照してください
Christophe Roussy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.