¿Es posible importar hojas de estilo CSS en una página html usando Javascript? Si es así, ¿cómo se puede hacer esto?
PD: el javascript estará alojado en mi sitio, pero quiero que los usuarios puedan poner la <head>
etiqueta de su sitio web, y debería poder importar un archivo CSS alojado en mi servidor en la página web actual. (tanto el archivo CSS como el archivo JavaScript se alojarán en mi servidor).
javascript
html
css
dhtml
Haga clic en Upvote
fuente
fuente
Respuestas:
Aquí está la forma de hacerlo de la "vieja escuela", que con suerte funciona en todos los navegadores. En teoría, usaría
setAttribute
desafortunadamente IE6 no lo admite de manera consistente.Este ejemplo verifica si el CSS ya se agregó, por lo que lo agrega solo una vez.
Coloque ese código en un archivo javascript, haga que el usuario final simplemente incluya el javascript y asegúrese de que la ruta CSS sea absoluta para que se cargue desde sus servidores.
VanillaJS
Aquí hay un ejemplo que usa JavaScript simple para inyectar un enlace CSS en el
head
elemento basado en la parte del nombre de archivo de la URL:Inserte el código justo antes de la
head
etiqueta de cierre y el CSS se cargará antes de que se renderice la página. El uso de un.js
archivo externo JavaScript ( ) hará que aparezca un Flash de contenido sin estilo ( FOUC ).fuente
link.onload = function(){ ... }
antes de agregarSi usa jquery:
fuente
$('head').append('<link rel="stylesheet" type="text/css" href="https://dl.dropboxusercontent.com/s/ep1nzckmvgjq7jr/remove_transitions_from_page.css">');
Supongo que algo como este script haría:
Este archivo JS contiene la siguiente declaración:
La dirección de javascript y css necesitaría ser absoluta para que se refieran a su sitio.
Muchas técnicas de importación de CSS se analizan en este artículo "Di no a los hacks de CSS con técnicas de ramificación" .
Pero el artículo "Uso de JavaScript para agregar dinámicamente hojas de estilo CSS de Portlet" también menciona la posibilidad CreateStyleSheet (método patentado para IE):
fuente
document.createStyleSheet()
a los navegadores que no lo tienen: stackoverflow.com/questions/524696/…document.write
no se recomienda porque sobrescribe todo el cuerpo de su sitio web.<style>
elemento en lugar de asumir que es el primer hijo de<head>
via("head")[0]
?var style = document.getElementsByTagName("style")[0];
Element.insertAdarestHTML tiene muy buena compatibilidad con el navegador y puede agregar una hoja de estilo en una línea.
fuente
Si desea saber (o esperar) hasta que el estilo se haya cargado, esto funciona:
fuente
Sé que este es un hilo bastante viejo, pero aquí vienen mis 5 centavos.
Hay otra forma de hacerlo dependiendo de cuáles sean sus necesidades.
Tengo un caso en el que quiero que un archivo CSS esté activo solo por un tiempo. Al igual que el cambio de CSS. Active el CSS y luego, después de otro evento, desactívelo.
En lugar de cargar el css dinámicamente y luego eliminarlo, puede agregar una clase / id delante de todos los elementos en el nuevo css y luego simplemente cambiar esa clase / id del nodo base de su css (como etiqueta de cuerpo).
Con esta solución, tendría más archivos css cargados inicialmente pero tiene una forma más dinámica de cambiar los diseños de css.
fuente
En un navegador moderno puedes usar
promise
así. Cree una función de cargador con una promesa:Entonces, obviamente, desea hacer algo después de que se haya cargado el CSS. Puede llamar a la función que debe ejecutarse después de que CSS se haya cargado así:
Enlaces útiles si desea comprender en profundidad cómo funciona:
Documentos oficiales sobre promesas
Guía útil de promesas
Un gran video introductorio sobre promesas
fuente
Usa este código:
fuente
Hay un complemento general de jquery que carga archivos CSS y JS de sincronización y asych bajo demanda. También mantiene un seguimiento de lo que ya se ha cargado :) ver: http://code.google.com/p/rloader/
fuente
Aquí hay una manera con el método de creación de elementos de jQuery (mi preferencia) y con devolución de llamada
onLoad
:fuente
La biblioteca YUI puede ser lo que estás buscando. También es compatible con la carga de dominios cruzados.
Si usa jquery, este complemento hace lo mismo.
fuente
Puede usar para esta biblioteca YUI o usar este artículo para implementar
fuente
Debajo de un código completo usando para cargar JS y / o CSS
fuente
Me gustaría compartir una forma más para cargar no sólo CSS, pero todos los activos (js, css, imágenes) y el mango onload evento para el montón de archivos. Es
async-assets-loader
. Vea el siguiente ejemplo:De acuerdo con los asincrónicos-activos-loader docs
fuente
Estoy usando tomillo y esto funciona bien. Gracias
fuente
th:href
atributo en el lado del cliente? Thymeleaf no lo procesará, por lo que parece redundante aquí.