Come posso sovrascrivere gli stili in linea con CSS esterni?


99

Ho un markup che utilizza stili inline, ma non ho accesso per modificare questo markup. Come si sostituiscono gli stili in linea in un documento utilizzando solo CSS? Non voglio usare jQuery o 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
Perché usare gli stili in linea se vuoi sovrascriverli?
Barba

36
@BFDatabaseAdmin Potrebbe non essere in grado di accedere al markup in cui vengono dichiarati gli stili inline.
TylerH

Risposte:


176

L'unico modo per sovrascrivere lo stile in linea è usare la !importantparola chiave accanto alla regola CSS. Di seguito è riportato un esempio.

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>

Note importanti:

  • L'utilizzo !importantnon è considerato una buona pratica . Quindi, dovresti evitare sia lo !importantstile in linea.

  • L'aggiunta della !importantparola chiave a qualsiasi regola CSS consente alla regola di precedere con forza tutte le altre regole CSS per quell'elemento.

  • Sostituisce anche gli stili in linea dal markup.

  • L'unico modo per eseguire l'override è utilizzare un'altra !importantregola , dichiarata con specificità CSS maggiore nel CSS o specificità CSS uguale più avanti nel codice.

  • Da leggere - Specificità CSS di MDN 🔗


1
beh, quello stile dipende da lui in realtà non è necessario che stia usando solo per sovrascrivere il CSS in linea
Rohit Agrawal

1
lo so, ma lo stesso sto dicendo! importante aumenterà solo il punteggio per una proprietà specifica, potrebbe utilizzare altre proprietà (non per l'override) in alcuni blocchi
Rohit Agrawal

Perché è importante una cattiva pratica?
Barba

1
@BFDatabaseAdmin perché non puoi sovrascriverlo in seguito se hai bisogno di un caso speciale
Rohit Agrawal

1
@BFWebAdmin il problema è che a volte non hai scelta. per esempio il "badge" del nuovo recaptcha invisibile può essere stilizzato ma ha stili parzialmente inline, quindi devi sovrascriverli in questo modo o da js e preferisci una soluzione CSS pura.
mio 1

27

inline-stylesin un documento hanno la priorità più alta, quindi ad esempio dì se vuoi cambiare il colore di un divelemento in blue, ma hai una inline stylecon una colorproprietà impostata sured

<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 */
}

Quindi, dovrei usare jQuery / Javascript? - La risposta è NO

Possiamo usare element-attrCSS Selector con !important, nota, !importantè importante qui, altrimenti non supererà gli stili inline ..

<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;
}

Demo

Nota: L'uso !importantSOLO funzionerà qui, ma ho usato div[style]selettore per selezionare in modo specifico divcon style l'attributo


2
Quindi, dovrei usare gli stili in linea? - La risposta è NO :-)
PeeHaa

"Allora, dovrei usare jQuery / Javascript? - La risposta è NO" Perché? Se lavoro in un ambiente (come Sharepoint) in cui gli stili inline vengono aggiunti agli elementi da un'entità incontrollabile, perché non dovrei usare Jquery per rimuovere gli stili inline offensivi in ​​modo che il tema esterno del mio sito venga mostrato? Sembra una soluzione più precisa rispetto all'esplosione! Importante su un tratto che potrei voler sovrascrivere in un'istanza specifica in seguito.
Neberu

2
@Neberu - Perché JS può essere bloccato / disattivato nel browser. L'utilizzo !importantnon può AFAIK.
Tony

1
anche js è male in generale, intendo che apri file eseguibili inviati da te da una persona sconosciuta? Immagino di no, ma un browser lo fa ad ogni clic
My1

11

Puoi facilmente sovrascrivere lo stile inline tranne lo !importantstile inline

così

<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 */
}

ma se lo hai

<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 */
}

ora sarà redsolo .. e non puoi sovrascriverlo


1
In che modo questo è diverso dalle risposte che sono state aggiunte mesi prima?
Barba

4
@BFDatabaseAdmin Questa risposta descrive il comportamento quando lo stile inline ha !important, un punto non coperto da nessuna delle altre risposte. Questa potrebbe non essere una risposta completamente autonoma, ma è diversa dalle altre risposte fornite.
grg

ma poi di nuovo usare uno stile inline con important è davvero eccessivo poiché per impostazione predefinita ha comunque la priorità più alta.
mio 1

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

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

Di seguito è riportato il collegamento per maggiori dettagli: http://css-tricks.com/override-inline-styles-with-css/


5
In che modo questo è diverso dalle risposte che sono state aggiunte mesi prima?
Barba

1
forse non c'è differenza se conoscessi già la risposta ... ma per alcuni neofiti, spero possa aiutarli..specialmente il link dove è più dettagliato ... comunque grazie per il commento.
jroi_web

1

utilizzato !importantnella proprietà CSS

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

div {
        color: blue !important;
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.