Como posso substituir estilos inline com CSS externo?

99

Tenho uma marcação que usa estilos embutidos, mas não tenho acesso para alterar essa marcação. Como faço para substituir estilos embutidos em um documento usando apenas CSS? Não quero usar jQuery ou 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 */
}
Sr. estrangeiro
fonte
2
Por que usar estilos embutidos se você deseja substituí-los?
Sinister Beard
36
@BFDatabaseAdmin Ele pode não conseguir acessar a marcação onde os estilos embutidos são declarados.
TylerH

Respostas:

176

A única maneira de substituir o estilo embutido é usando a !importantpalavra-chave ao lado da regra CSS. A seguir está um exemplo disso.

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>

Anotações importantes:

  • O uso !importantnão é considerado uma boa prática . Portanto, você deve evitar o !importantestilo embutido.

  • Adicionar a !importantpalavra-chave a qualquer regra CSS permite que a regra preceda forçosamente todas as outras regras CSS para esse elemento.

  • Ele até substitui os estilos embutidos da marcação.

  • A única maneira de substituir é usando outra !importantregra , declarada com maior especificidade CSS no CSS ou especificidade CSS igual posteriormente no código.

  • Deve ler - Especificidade CSS por MDN 🔗

Rohit Agrawal
fonte
1
bem, esse estilo depende dele, na verdade, não é necessário que ele esteja usando apenas para substituir o css inline
Rohit Agrawal
1
eu sei, mas estou dizendo o mesmo! importante só aumentará a pontuação para uma propriedade específica, ele pode estar usando outras propriedades (não para substituir) em algum bloco
Rohit Agrawal
Por que é importante uma má prática?
Sinister Beard
1
@BFDatabaseAdmin porque você não pode substituir isso mais tarde se precisar de algum caso especial
Rohit Agrawal
1
@BFWebAdmin o problema é que às vezes você não tem escolha. por exemplo, o "emblema" do novo recaptcha invisível pode ser estilizado, mas tem estilos parcialmente embutidos, então você deve substituí-los como este ou por js e preferir uma solução CSS pura.
My1
26

inline-stylesem um documento têm a prioridade mais alta, então, por exemplo, diga se você deseja alterar a cor de um divelemento para blue, mas você tem um inline stylecom uma colorpropriedade definida parared

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

Então, devo usar jQuery / Javascript? - A resposta é NÃO

Podemos usar o element-attrseletor CSS com !important, observe, !importanté importante aqui, caso contrário, não substituirá os estilos embutidos.

<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: A utilização !importantsó vai funcionar aqui, mas eu usei div[style]para selecionar especificamente divtendo style atributo

Sr. estrangeiro
fonte
2
Portanto, devo usar estilos embutidos? - A resposta é NÃO :-)
PeeHaa
"Então, devo usar jQuery / Javascript? - A resposta é NÃO" Por quê? Se estou trabalhando em um ambiente (como o Sharepoint) onde estilos embutidos são adicionados a elementos por uma entidade incontrolável, por que não usaria o Jquery para remover os estilos embutidos ofensivos para que o tema externo de meu site apareça? Parece uma solução mais precursora do que detonar! Importante em uma característica que posso querer substituir em uma instância específica mais tarde.
Neberu
2
@Neberu - Porque JS pode ser bloqueado / desligado no navegador. Usando !importantnão pode AFAIK.
Tony
1
também js é imo ruim em geral, quero dizer, você abre arquivos executáveis ​​enviados por você de uma pessoa desconhecida? Acho que não, mas um navegador faz isso com cada clique
My1
11

Você pode facilmente substituir o estilo embutido, exceto o !importantestilo embutido

tão

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

mas se você tem

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

agora será redapenas .. e você não pode substituí-lo

IE mata fique longe disso
fonte
1
Como isso é diferente das respostas que foram adicionadas meses antes?
Sinister Beard
4
@BFDatabaseAdmin Esta resposta descreve o comportamento quando o estilo inline tem !important, um ponto não coberto por nenhuma das outras respostas. Esta pode não ser uma resposta totalmente independente, mas é diferente das outras respostas fornecidas.
grg
mas, novamente, usar um estilo embutido com important é realmente um exagero, pois, por padrão, tem a prioridade mais alta de qualquer maneira.
My1
6
<div style="background: red;">
    The inline styles for this div should make it red.
</div>

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

Abaixo está o link para mais detalhes: http://css-tricks.com/override-inline-styles-with-css/

jroi_web
fonte
5
Como isso é diferente das respostas que foram adicionadas meses antes?
Sinister Beard
1
talvez não haja diferença se você já sabia a resposta ... mas para alguns novatos, espero que possa ajudá-los..especialmente o link onde está mais detalhado ... de qualquer forma, obrigado por comentar.
jroi_web
1

usado !importantna propriedade CSS

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

div {
        color: blue !important;
    }
Vishal Vaghasiya
fonte