tipos - ¿Es posible alterar una hoja de estilo CSS usando JavaScript?(NO el estilo de un objeto, sino la propia hoja de estilo)
tipos de hojas de estilo (3)
¿Es posible alterar una hoja de estilo CSS usando JavaScript?
NO estoy hablando de
document.getElementById(''id'').style._____=''.....'';
Estoy hablando de alterar:
#id {
param: value;
}
además de hacer algo sucio (que aún no hemos probado por cierto), como crear un nuevo objeto en la cabeza, internalHTML una etiqueta de estilo allí, etc. Aunque esto, aunque funcionara, plantearía algunos problemas como el estilo el bloque ya está definido en otra parte, y no estoy seguro de cuándo / si el navegador incluso analizaría un bloque de estilo creado dinámicamente.
A partir de 2011
Sí, puedes, pero enfrentarás problemas de compatibilidad entre navegadores:
http://www.quirksmode.org/dom/changess.html
A partir de 2016
La compatibilidad con el navegador ha mejorado mucho (todos los navegadores son compatibles, incluido IE9 +).
El método
insertRule()
permite la adición dinámica de reglas a una hoja de estilo.Con
deleteRule()
, puede eliminar las reglas existentes de una hoja de estilo.Se puede acceder a las reglas dentro de una hoja de estilo a través de los atributos
cssRules
de una hoja de estilo.
Cuando quiero agregar un montón de estilos a un objeto mediante programación, me resulta más fácil agregar una clase al objeto mediante programación (esta clase tiene estilos asociados a él en tu CSS). Puede controlar el orden de precedencia en su CSS para que los nuevos estilos de la nueva clase puedan anular las cosas que tenía anteriormente. En general, esto es mucho más fácil que modificar una hoja de estilo directamente y funciona perfectamente en todos los navegadores.
Podemos usar una combinación de insertRule() y insertRule() para poder hacer esto hasta IE9:
function changeStylesheetRule(stylesheet, selector, property, value) {
// Make the strings lowercase
selector = selector.toLowerCase();
property = property.toLowerCase();
value = value.toLowerCase();
// Change it if it exists
for(var i = 0; i < s.cssRules.length; i++) {
var rule = s.cssRules[i];
if(rule.selectorText === selector) {
rule.style[property] = value;
return;
}
}
// Add it if it does not
stylesheet.insertRule(selector + " { " + property + ": " + value + "; }", 0);
}
// Used like so:
changeStylesheetRule(s, "body", "color", "rebeccapurple");