Como substituir! Importante?

250

Eu criei uma folha de estilos personalizada que substitui o CSS original do meu modelo do Wordpress. No entanto, na minha página de calendário, o CSS original tem a altura de cada célula da tabela definida com a !importantdeclaração:

td {height: 100px !important}

Existe alguma maneira de substituir isso?

user1444027
fonte
3
Você já tentou usar !importanttambém? Se sua planilha CSS for definida após o modelo original, ela deverá funcionar bem.
Petr Janeček
1
Qual folha vem por último, a sua ou a do modelo?
J08691
67
É por isso que !importanté considerado prejudicial.
Spudley
8
A maneira mais poderosa é a seguinte: td [style] {height: 110px! Important; } ele age como se você injetasse o estilo embutido no html porque estava aplicando os estilos ao atributo de estilo real da tag.
DMTintner

Respostas:

352

Substituindo o modificador! Important

  1. Basta adicionar outra regra CSS !importante dar ao seletor uma especificidade mais alta (adicionar uma tag, ID ou classe adicional ao seletor)
  2. adicione uma regra CSS com o mesmo seletor em um ponto posterior ao existente (em um empate, o último definido vence).

Alguns exemplos com uma especificidade mais alta (primeiro é o mais alto / substitui, o terceiro é o mais baixo):

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

Ou adicione o mesmo seletor após o existente:

td {height: 50px !important;}

Aviso Legal:

Quase nunca é uma boa ideia usar !important. Isso é péssimo em engenharia pelos criadores do modelo WordPress. De maneira viral, força os usuários do modelo a adicionar seus próprios !importantmodificadores para substituí-lo e limita as opções para substituí-lo via JavaScript.

Mas é útil saber como substituí-lo, se você precisar.

Matt Coughlin
fonte
7
Sei que isso é um pouco mais antigo, mas você pode adicionar um comentário de que essa é uma maneira extremamente ruim de criar seu CSS (ou indicar por que é aceitável se você discorda)? Eu vi pessoas se referem a esta resposta ... :)
Zenmaster
Ótima resposta. Eu concordo, é uma bagunça. Isso me obriga a invadir o hack deles, depois alguém a invadir o meu hack, etc. No meu caso, eu tenho que lidar com modelos que extraem o CSS de um banco de dados em algum lugar. Eu grep o dump do banco de dados e ele me mostra que vem de um blob json de 1 MB. Não é muito útil para mim encontrar onde alterá-lo, forçando-me a adicionar CSS a um arquivo de código, da maneira que deve ser feito, exceto com esses hacks desagradáveis.
Josh Ribakoff
pode ser uma boa ideia adicionar o identificador de marca, mesmo que isso diminua a velocidade do CSS. Só tive que consertar um onde eu tinha que colocar em div # header.class {style:; } Para que ele tomar ... muito chato
Sparatan117
Existem bons usos para !important. Como uma substituição de estilo no navegador ou no site, de um script Stylish, AdBlock ou uBlock. Ou quando você não tem acesso razoavelmente fácil ao CSS base, que pode ser muito complexo, espalhar-se por muitos arquivos e mudar ao longo do tempo (e também pode ser usado !important). Como qualquer ferramenta, o potencial positivo ou negativo é baseado em como você o usa. As pessoas precisam parar de atacar sempre que coisas assim ou vão para / eval / globals / etc. São mencionados. Pode-se dizer "evitar o WordPress" ou "evitar o CSS" porque o potencial de "bagunçar as coisas" é muito grande.
Beejor
30

A !importantsó deve ser usado quando você tem seletores em sua folha de estilo com conflitantes especificidade .

Mas mesmo quando você tem especificidade conflitante, é melhor criar um seletor mais específico para a exceção. No seu caso, é melhor ter um classcódigo HTML no qual você possa usar para criar um seletor mais específico que não precise da !importantregra.

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

Eu pessoalmente nunca uso !importantem minhas folhas de estilo. Lembre-se de que o C em CSS é para cascata. Usar !importantquebrará isso.

Jasper de Vries
fonte
17
Isso não é verdade. Uma !importantregra na folha de estilo substituirá uma regra normal em uma styletag, por exemplo. No entanto, em algumas situações, parece que uma regra mais específica a substitui. Por exemplo, se você definir um font-size: 24pt !importantsobre body, você ainda pode substituí-lo com um font-size: 12pton p. Isso é porque você não está substituindo o !importantregra, você está substituindo o implícito font-size: inheritno p.
meustrus
23

Isenção de responsabilidade: evite! Importante a todo custo.

Este é um truque sujo, mas você pode substituir um! Importante, sem um! Importante, usando uma animação (loop infinito ou de longa duração) na propriedade em que você está tentando substituir os importantes.

@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>

mariomc
fonte
2
potencialmente sobrecarregar a CPU do usuário
Berry Tsakala 26/01
2
Parece que esse truque não funciona mais. No Firefox 78 e Chrome 83, a caixa ainda está vermelha.
Andy Pan
13

Ok, aqui está uma lição rápida sobre a importância do CSS. Espero que o abaixo ajude!

Antes de tudo, todas as partes dos estilos são nomeadas como ponderação; portanto, quanto mais elementos você tem, relacionados a esse estilo, mais importante é. Por exemplo

#P1 .Page {height:100px;}

é mais importante que:

.Page {height:100px;}

Portanto, ao usar importante, idealmente, isso só deve ser usado quando realmente necessário. Portanto, para substituir a declinação, torne o estilo mais específico, mas também com uma substituição. Ver abaixo:

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

Eu espero que isso ajude!!!

KM123
fonte
dois !importantpodem ser substituídos redefinindo .old-class-name {bla bla bla} como .old-class-name.overrided {bla bla bla} na <style></style>tag acima do componente, é trabalho para mim
Tarek Kalaji
11

Substituir usando JavaScript

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

Trabalhou para mim.

Manish Shrivastava
fonte
Eu pensei que os estilos embutidos sempre substituem a importância dos pais! bandeira.
Joshua Ramirez
3
@JoshuaRamirez Sem eles realmente não substituir uma bandeira importante a menos que você colocar a bandeira importante linha bem!
Cam
1
Se você usar o JS, poderá excluir o elemento completamente, a menos que haja uma possibilidade remota de que você precisará dele novamente. O empilhamento! Importante via JS apenas o traz de volta à pergunta original.
SilverbackNet
@SilverbackNet De acordo com o meu entendimento, substituir o JS é mais preciso e geralmente funciona como o CSS é carregado em sequência e o bloco JS jquery é carregado depois que tudo é carregado. Portanto, substitui as alterações feitas pelo css independentemente das sequências css.
Manish Shrivastava
substituir como este não funciona para atributos de estilo.
user2284570
6

Isso também pode ajudar

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

Isso substituirá qualquer estilo embutido

DiChrist
fonte
0

Em qualquer caso, você pode substituir heightpor max-height.

pasquale
fonte
-5

Gostaria de acrescentar uma resposta que não foi mencionada, pois tentei todas as opções acima sem sucesso. Minha situação específica é que estou usando a interface semântica-ui, que tem !importantatributos incorporados nos elementos (extremamente irritante). Eu tentei de tudo para substituí-lo, apenas no final uma coisa funcionou (usando jquery). É o seguinte:

$('.active').css('cssText', 'border-radius: 0px !important');
IWI
fonte
Isso não funciona, veja a resposta de Manish que usa em attr('style', ...vez disso
Christophe Roussy