Jak mogę zastąpić style wbudowane zewnętrznym kodem CSS?


99

Mam znaczniki korzystające ze stylów wbudowanych, ale nie mam dostępu do zmiany tego znacznika. Jak przesłonić style wbudowane w dokumencie, używając tylko CSS? Nie chcę używać jQuery ani JavaScript.

HTML:

<div style="font-size: 18px; color: red;">
    Hello World, How Can I Change The Color To Blue?
</div>

CSS:

div {
   color: blue; 
   /* This Isn't Working */
}

2
Po co używać stylów wbudowanych, jeśli chcesz je zastąpić?
Sinister Beard

36
@BFDatabaseAdmin Może nie mieć dostępu do znaczników, w których zadeklarowano style wbudowane.
TylerH,

Odpowiedzi:


176

Jedynym sposobem na przesłonięcie stylu wbudowanego jest użycie !importantsłowa kluczowego obok reguły CSS. Oto przykład.

div {
        color: blue !important;
       /* Adding !important will give this rule more precedence over inline style */
    }
<div style="font-size: 18px; color: red;">
    Hello, World. How can I change this to blue?
</div>

Ważne notatki:

  • Używanie !importantnie jest uważane za dobrą praktykę . Dlatego należy unikać obu !importanti stylu inline.

  • Dodanie !importantsłowa kluczowego do dowolnej reguły CSS powoduje, że reguła ma pierwszeństwo przed wszystkimi innymi regułami CSS dla tego elementu.

  • Zastępuje nawet style wbudowane ze znaczników.

  • Jedynym sposobem na przesłonięcie jest użycie innej !importantreguły , zadeklarowanej z wyższą specyficznością CSS w CSS lub równą specyficzności CSS w dalszej części kodu.

  • Musi przeczytać - Specyfika CSS autorstwa MDN 🔗


1
cóż, ten styl zależy od niego, właściwie nie jest konieczne, aby używał tylko do nadpisywania wbudowanego css
Rohit Agrawal

1
wiem, ale to samo mówię! ważne tylko podniesie ocenę za konkretną właściwość, może on używać innych właściwości (nie do nadpisywania) w jakimś bloku
Rohit Agrawal

Dlaczego! Ważna zła praktyka?
Sinister Beard

1
@BFDatabaseAdmin, ponieważ nie możesz tego zmienić później, jeśli potrzebujesz specjalnego przypadku
Rohit Agrawal

1
@BFWebAdmin problem polega na tym, że czasami nie masz wyboru. na przykład "odznaka" z nowej niewidzialnej recaptchy może być stylizowana, ale ma częściowo wbudowane style, więc musisz je zastąpić albo w ten sposób, albo za pomocą js i wolisz czyste rozwiązanie CSS.
Mój 1

27

inline-stylesw dokumencie mają najwyższy priorytet, więc na przykład powiedzieć, że jeśli chcesz zmienić kolor z divelementem blue, ale masz inline stylez colorwłasności do zestawured

<div style="font-size: 18px; color: red;">
   Hello World, How Can I Change The Color To Blue?
</div>
div {
   color: blue; 
   /* This Won't Work, As Inline Styles Have Color Red And As 
      Inline Styles Have Highest Priority, We Cannot Over Ride 
      The Color Using An Element Selector */
}

Czy powinienem więc używać jQuery / Javascript? - Odpowiedź brzmi NIE

Możemy użyć element-attrselektora CSS z !important, uwaga, !importantjest tutaj ważne, w przeciwnym razie nie przejdzie przez style wbudowane.

<div style="font-size: 30px; color: red;">
    This is a test to see whether the inline styles can be over ridden with CSS?
</div>
div[style] {
   font-size: 12px !important;
   color: blue !important;
}

Próbny

Uwaga: Używanie !importanttylko będą tu pracować, ale Użyłem div[style]wybieraka specjalnie wybrać divposiadające style atrybut


2
Czy powinienem więc używać stylów wbudowanych? - Odpowiedź
brzmi

„Czy więc powinienem używać jQuery / Javascript? - Odpowiedź brzmi NIE” Dlaczego? Jeśli pracuję w środowisku (takim jak Sharepoint), w którym style wbudowane są dodawane do elementów przez niekontrolowaną jednostkę, dlaczego nie miałbym używać Jquery do usuwania naruszających stylów wbudowanych, aby zewnętrzny motyw mojej witryny był widoczny? Wydaje się, że jest to bardziej precesyjne rozwiązanie niż wysadzanie! Ważne w przypadku cechy, którą mógłbym chcieć zmienić później w konkretnym przypadku.
Neberu

2
@Neberu - Ponieważ JS można zablokować / wyłączyć w przeglądarce. Używanie !importantnie może AFAIK.
Tony,

1
również js jest ogólnie zły, mam na myśli, czy otwierasz pliki wykonywalne wysłane przez ciebie od nieznanej osoby? Chyba nie, ale przeglądarka robi to za każdym kliknięciem
My1

11

Możesz łatwo zastąpić styl wbudowany, z wyjątkiem !importantstylu wbudowanego

więc

<div style="font-size: 18px; color: red;">
    Hello World, How Can I Change The Color To Blue?
</div>

div {
   color: blue !important; 
   /* This will  Work */
}

ale jeśli masz

<div style="font-size: 18px; color: red !important;">
    Hello World, How Can I Change The Color To Blue?
</div>

div {
   color: blue !important; 
   /* This Isn't Working */
}

teraz będzie redtylko… i nie da się tego zmienić


1
Czym różni się to od odpowiedzi, które zostały dodane kilka miesięcy wcześniej?
Sinister Beard,

4
@BFDatabaseAdmin Ta odpowiedź opisuje zachowanie, gdy styl wbudowany ma !important, punkt nie objęty żadną z innych odpowiedzi. Może to nie być całkowicie samodzielna odpowiedź, ale różni się ona od innych udzielonych odpowiedzi.
grg

ale z drugiej strony użycie stylu wbudowanego z ważnym jest naprawdę przesadą, ponieważ i tak domyślnie ma on najwyższy priorytet.
My1,

6
<div style="background: red;">
    The inline styles for this div should make it red.
</div>

div[style] {
   background: yellow !important;
}

Poniżej znajduje się link, aby uzyskać więcej informacji: http://css-tricks.com/override-inline-styles-with-css/


5
Czym różni się to od odpowiedzi, które zostały dodane kilka miesięcy wcześniej?
Sinister Beard,

1
może nie ma różnicy, jeśli już znałeś odpowiedź ... ale dla niektórych początkujących mam nadzieję, że może im to pomóc ... zwłaszcza link, w którym jest bardziej szczegółowy ... w każdym razie dziękuję za komentarz.
jroi_web

1

używane !importantwe właściwości CSS

<div style="color: red;">
    Hello World, How Can I Change The Color To Blue?
</div>

div {
        color: blue !important;
    }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.