Necesito crear una clase de hoja de estilo CSS dinámicamente en JavaScript y asignarla a algunos elementos HTML como - div, table, span, tr, etc. y a algunos controles como asp: Textbox, Dropdownlist y datalist.
¿Es posible?
Sería bueno con una muestra.
javascript
css
stylesheet
Himadri
fuente
fuente
Respuestas:
Aunque no estoy seguro de por qué desea crear clases CSS con JavaScript, aquí hay una opción:
fuente
Encontró una mejor solución, que funciona en todos los navegadores.
Utiliza document.styleSheet para agregar o reemplazar reglas. La respuesta aceptada es breve y útil, pero esto funciona en IE8 y menos también.
La función se usa de la siguiente manera.
fuente
var styleSheetLength = styleSheet.cssRules ? styleSheet.cssRules.length : 0
y sustituir su uso sobre la implementación de la función.Respuesta corta, esto es compatible "en todos los navegadores" (específicamente, IE8 / 7):
Y este bit final aplica la clase a un elemento:
Aquí también hay una pequeña página de prueba: https://gist.github.com/shadybones/9816763
La clave es el hecho de que los elementos de estilo tienen una propiedad "styleSheet" / "sheet" que puede usar para agregar / eliminar reglas.
fuente
Hay un complemento jQuery ligero que permite generar declaraciones CSS: jQuery-injectCSS
De hecho, utiliza JSS (CSS descrito por JSON), pero es bastante fácil de manejar para generar hojas de estilo CSS dinámicas.
fuente
YUI tiene, con mucho, la mejor utilidad de hoja de estilo que he visto. Os animo a echarle un vistazo, pero he aquí una muestra:
Obviamente, hay otras formas mucho más simples de cambiar los estilos sobre la marcha, como las sugeridas aquí. Si tienen sentido para su problema, podrían ser mejores, pero definitivamente hay razones por las cuales modificar CSS es una mejor solución. El caso más obvio es cuando necesita modificar una gran cantidad de elementos. El otro caso importante es si necesita que sus cambios de estilo involucren a la cascada. Usar el dom para modificar un elemento siempre tendrá una prioridad más alta. Es el enfoque de mazo y es equivalente a usar el atributo de estilo directamente en el elemento html. Ese no es siempre el efecto deseado.
fuente
A partir de IE 9. Ahora puede cargar un archivo de texto y establecer una propiedad style.innerHTML. Entonces, esencialmente ahora puede cargar un archivo css a través de ajax (y obtener la devolución de llamada) y luego simplemente establecer el texto dentro de una etiqueta de estilo como esta.
Esto funciona en otros navegadores, no estoy seguro de qué tan atrás. Pero mientras no necesite soportar IE8, funcionaría.
y luego puede hacer que extraiga un archivo externo como myCss.css
fuente
Aquí está la solución de Vishwanath ligeramente reescrita con comentarios:
fuente
Un proyecto interesante que podría ayudarlo en su tarea es JSS .
La biblioteca JSS le permite inyectar en la sección DOM / head usando la
.attach()
función.Repl versión en línea para evaluación.
Más información sobre JSS .
Un ejemplo:
fuente
Usando el cierre de google:
puedes usar el módulo ccsom:
El código javascript intenta ser un navegador cruzado al colocar el nodo CSS en el encabezado del documento.
fuente
https://jsfiddle.net/xk6Ut/256/
Una opción para crear y actualizar dinámicamente la clase CSS en JavaScript:
clase CSS
.....
...
fuente
Revisé las respuestas y falta lo más obvio y directo: utilícelo
document.write()
para escribir una porción de CSS que necesita.Aquí hay un ejemplo (verlo en codepen: http://codepen.io/ssh33/pen/zGjWga ):
fuente
fuente
Aquí está mi solución modular:
Básicamente, en cualquier parte de su código, haga:,
addNewStyle('body', 'color: ' + color1);
dondecolor1
se define la variable.Cuando desea "publicar" el archivo CSS actual, simplemente lo hace
submitNewStyle()
,y luego puede agregar más CSS más adelante.
Si desea agregarlo con "consultas de medios", tiene la opción.
Después de "agregar nuevos estilos" simplemente usa
submitNewStyleWithMedia('min-width: 1280px');
.Fue bastante útil para mi caso de uso, ya que estaba cambiando el CSS del sitio web público (no el mío) de acuerdo con la hora actual. Presento un archivo CSS antes de usar scripts "activos", y el resto después (hace que el sitio se vea un poco como debería antes de acceder a los elementos
querySelector
).fuente
En beneficio de los buscadores; Si está utilizando jQuery, puede hacer lo siguiente:
Obviamente, puedes cambiar el CSS interno a lo que quieras.
Aprecio que algunas personas prefieran JavaScript puro, pero funciona y ha sido bastante robusto para escribir / sobrescribir estilos dinámicamente.
fuente
Estaba buscando algunas de las respuestas aquí, y no pude encontrar nada que agregue automáticamente una nueva hoja de estilo si no hay ninguna, y si no, simplemente modifica una existente que ya contiene el estilo necesario, así que hice una nueva función ( debería funcionar en todos los navegadores, aunque no se haya probado, usa addRule y además de eso solo JavaScript nativo básico, avíseme si funciona):
luego solo agregue estas 2 funciones auxiliares dentro de la función anterior o en cualquier otro lugar:
(tenga en cuenta que en ambos uso un bucle for en lugar de .filter, ya que las clases de lista de estilo / regla CSS solo tienen una propiedad de longitud y ningún método .filter).
Entonces para llamarlo:
Avíseme si funciona para su navegador o si produce un error.
fuente