Cómo anular importante?

250

He creado una hoja de estilo personalizada que anula el CSS original para mi plantilla de Wordpress. Sin embargo, en mi página de calendario, el CSS original tiene la altura de cada conjunto de celdas de tabla con la !importantdeclaración:

td {height: 100px !important}

¿Hay alguna forma de anular esto?

usuario1444027
fuente
3
¿Has intentado usar !importanttambién? Si su hoja CSS se define después de la plantilla original, debería funcionar bien.
Petr Janeček
1
¿Qué hoja es la última, la suya o la de la plantilla?
j08691
67
Por eso !importantse considera dañino.
Spudley
8
La forma más poderosa es así: td [style] {height: 110px! Important; }. actúa como si inyectara el estilo en línea en el html porque está aplicando los estilos al atributo de estilo real de la etiqueta.
DMTintner

Respuestas:

352

Anular el modificador! Important

  1. Simplemente agregue otra regla CSS con !important, y dele al selector una mayor especificidad (agregando una etiqueta, id o clase adicional al selector)
  2. agregue una regla CSS con el mismo selector en un punto posterior que el existente (en un empate, el último definido gana).

Algunos ejemplos con una especificidad más alta (el primero es el más alto / anula, el tercero es el más bajo):

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

O agregue el mismo selector después del existente:

td {height: 50px !important;}

Descargo de responsabilidad:

Casi nunca es una buena idea usar !important. Esta es una mala ingeniería por parte de los creadores de la plantilla de WordPress. De manera viral, obliga a los usuarios de la plantilla a agregar sus propios!important modificadores para anularla, y limita las opciones para anularla a través de JavaScript.

Pero es útil saber cómo anularlo, si a veces tiene que hacerlo.

Matt Coughlin
fuente
77
Sé que esto está un poco en el lado anterior de las respuestas, pero ¿podría agregar un comentario de que esta es una forma extremadamente mala de crear su CSS (o indicar por qué es aceptable si no está de acuerdo)? He visto a personas referirse a esta respuesta ... :)
ZenMaster
Gran respuesta. Estoy de acuerdo, es un desastre. Me obliga a hackear su hack, luego a alguien a hackear mi hack, etc. En mi caso, tengo que lidiar con plantillas que extraen su CSS de una base de datos en alguna parte. Aprovecho el volcado de DB y me muestra que proviene de un blob json de 1 MB. No es muy útil para mí encontrar dónde cambiarlo, obligándome a agregar CSS a un archivo de código, de la forma en que debería hacerse, excepto con estos trucos desagradables.
Josh Ribakoff
puede ser una buena idea agregar el identificador de etiqueta también aunque ralentice el css. Solo tenía que arreglar uno donde tenía que poner en div # header.class {style:; } para que tome ... muy molesto
Sparatan117
Hay buenos usos para !important. Al igual que una anulación de estilo en todo el navegador o sitio de un script Elegante, AdBlock o uBlock. O cuando no tiene un acceso razonablemente fácil al CSS base, que puede ser muy complejo, extenderse a través de muchos archivos y cambiar con el tiempo (y también puede usarse !important). Como cualquier herramienta, el potencial positivo o negativo se basa en cómo lo usa. La gente necesita dejar de hacerse mono cuando cosas como esta o goto / eval / globals / etc. son mencionados. También podría decir "evitar WordPress" o "evitar CSS" porque el potencial para "estropear las cosas" es demasiado grande.
Beejor
30

El !importantsólo se debe utilizar cuando se tiene selectores en su hoja de estilo con conflicto especificidad .

Pero incluso cuando tiene una especificidad conflictiva, es mejor crear un selector más específico para la excepción. En su caso, es mejor tener un classHTML en el que pueda usar para crear un selector más específico que no necesite la !importantregla.

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

Yo personalmente nunca uso !importanten mis hojas de estilo. Recuerde que la C en CSS es para la conexión en cascada. Usar !importantlo romperá.

Jasper de Vries
fuente
17
Esto no es verdad. Una !importantregla en la hoja de estilo anulará una regla normal en una styleetiqueta, por ejemplo. Sin embargo, en algunas situaciones parecerá que una regla más específica lo anula. Por ejemplo, si configura un font-size: 24pt !importantencendido body, aún puede anularlo con un font-size: 12ptencendido p. Esto se debe a que no están anulando los !importantregla, está sustituyendo la implícita font-size: inheriten p.
meustrus
23

Descargo de responsabilidad: evitar! Importante a toda costa.

Este es un truco sucio, sucio, pero puede anular un! Importante, sin un importante, mediante el uso de una animación (infinitamente en bucle o muy duradera) en la propiedad en la que está tratando de anular los importes 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
fuente
2
potencialmente
agotar
2
Parece que este truco ya no funciona. En Firefox 78 y Chrome 83, el cuadro sigue siendo de color rojo.
Andy Pan
13

Bien, aquí hay una lección rápida sobre la importancia de CSS. ¡Espero que lo siguiente ayude!

En primer lugar, cada parte del nombre de los estilos como una ponderación, por lo que cuantos más elementos tenga relacionados con ese estilo, más importante será. Por ejemplo

#P1 .Page {height:100px;}

es más importante que:

.Page {height:100px;}

Entonces, cuando se usa importante, idealmente esto solo se debe usar, cuando realmente se necesita. Entonces, para anular la declinación, haga que el estilo sea más específico, pero también con una anulación. Vea abajo:

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

¡¡¡Espero que esto ayude!!!

KM123
fuente
dos !importantpueden anularse redefiniendo .old-class-name {bla bla bla} como .old-class-name.overrided {bla bla bla} en la <style></style>etiqueta sobre el componente, es trabajo para mí
Tarek Kalaji
11

Anular usando JavaScript

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

Trabajó para mi.

Shrivastava Manish
fuente
¡Pensé que los estilos en línea siempre anulan la importancia de un padre! bandera.
Joshua Ramirez
3
@JoshuaRamirez No, en realidad no anulan una bandera importante a menos que pongas la bandera importante en línea también
Cam
1
Si va a usar JS, también podría eliminar el elemento por completo, a menos que exista una posibilidad remota de que lo necesite nuevamente. Stacking! Importante a través de JS solo te lleva de vuelta a la pregunta original.
SilverbackNet
@SilverbackNet Según lo que entiendo, la anulación usando JS es más precisa y generalmente funciona como cargas de CSS en secuencia y JS jquery bloquea cargas después de que todo se carga. Por lo tanto, anula los cambios realizados por css independientemente de las secuencias de css.
Manish Shrivastava
anular así no funciona para los atributos de estilo.
user2284570
6

Esto también puede ayudar

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

Esto anulará cualquier estilo en línea

DiChrist
fuente
0

En cualquier caso, puede anular heightcon max-height.

pasquale
fuente
-5

Me gustaría agregar una respuesta a esto que no se ha mencionado, ya que he intentado todo lo anterior en vano. Mi situación específica es que estoy usando semántica-ui, que ha incorporado !importantatributos en elementos (extremadamente molesto). Intenté todo para anularlo, solo que al final funcionó una cosa (usando jquery). Es como sigue:

$('.active').css('cssText', 'border-radius: 0px !important');
IWI
fuente
Esto no funciona, vea la respuesta de Manish que usa en su attr('style', ...lugar
Christophe Roussy