2012-08-09 12 views
19

Si hay una regla CSS que usa !important, ¿hay alguna forma de eliminar la regla !important para poder realizar más cambios de estilo en sentido descendente con JS o jQuery?¿Puedo usar jquery para eliminar/negar css! Regla importante?

theirs.css

div.stubborn { display: none !important; } 

mine.js

$('.stubborn').fadeIn(); // won't work because of !important flag 

Por desgracia, no tienen control sobre el estilo de la aplicación de la regla !important así que necesito un trabajo en torno.

Respuesta

15

Por desgracia, no se puede anular !important sin utilizar !important como/estilo interna en linea por debajo de la theirs.css incluido.

Puede definir un estilo !important y agregarlo a .stubborn luego ajustar la opacidad ..Véase más adelante,

CSS:

div.hidden_block_el { 
    display: block !important; 
    opacity: 0; 
} 

JS:

$('.stubborn') 
    .addClass('hidden_block_el') 
    .animate({opacity: 1}); 

DEMO:http://jsfiddle.net/jjWJT/1/

enfoque alternativo (en línea),

$('.stubborn') 
    .attr('style', 'display: block !important; opacity: 0;') 
    .animate({opacity: 1}); 

DEMO:http://jsfiddle.net/jjWJT/

+9

1 Por desgracia, esta es una del tipo de un solo truco necesita emplear cuando hay una explosión en la "importante! "fábrica –

+1

buena lectura http://stackoverflow.com/questions/3706819/what-are-the-implications-of-using-important-in-css http://coding.smashingmagazine.com/2010/11/02/the-important-css-declaration-how-and-when-to-use-it/ –

+0

+1 I second _inline_ approach, especialmente en mi caso usando jQuery Mobile. – Omar

0

puede agregar un nuevo estilo css con el importante añadido a la misma que anulará el estilo original

Esto es de otra respuesta en javascript:

function addNewStyle(newStyle) { 
var styleElement = document.getElementById('styles_js'); 
if (!styleElement) { 
    styleElement = document.createElement('style'); 
    styleElement.type = 'text/css'; 
    styleElement.id = 'styles_js'; 
    document.getElementsByTagName('head')[0].appendChild(styleElement); 
} 
styleElement.appendChild(document.createTextNode(newStyle)); 
} 

addNewStyle('td.EvenRow a {display:inline !important;}') 

esta respuesta es here

También creo que puede agregar un estilo como este

 .css({ 'display' : 'block !important' }); 

en jQuery

1

Debe crear una nueva clase para aplicar el fundido.

CSS:

div.stubborn { display: none !important; } 
div.stubborn.fade-ready { display: block !important; opacity: 0; } 

JS:

$('.stubborn').addClass('fade-ready').animate({opacity: 1}); //to show 
$('.stubborn').fadeOut(function() {$(this).removeClass('fade-ready');}); //to hide 

DEMO HERE

3

Sólo tiene que añadir una etiqueta a cualquier style="" imágenes con este tema, es de esperar que todos ellos tienen algún tipo de definición de clase para los que es fácil hacerlo.

$('div.stubborn').attr('style', 'display: inline !important;');​ 

jsFiddle DEMO

0

He intentado varios métodos, pero los mejores resultados que he obtenido añadiendo el estilo CSS en una clase separada, luego retirar con jQuery (¡importante!):

CSS :

.important-css-here { display: block !important;} 

En jQuery:

$("#selector").addClass("important-css-here"); 

entonces, cuando necesito:

$("#selector").removeClass("important-css-here"); 

trabajo como un encanto ;-)

Cuestiones relacionadas