Est-il possible d'importer des feuilles de style CSS dans une page html en utilisant Javascript? Si tel est le cas, comment cela peut-il se faire?
PS le javascript sera hébergé sur mon site, mais je veux que les utilisateurs puissent mettre la <head>
balise de leur site web, et il devrait pouvoir importer un fichier css hébergé sur mon serveur dans la page web actuelle. (le fichier css et le fichier javascript seront hébergés sur mon serveur).
javascript
html
css
dhtml
Cliquez Upvote
la source
la source
Réponses:
Voici la façon de faire "à l'ancienne", qui, espérons-le, fonctionne sur tous les navigateurs. En théorie, vous utiliseriez
setAttribute
malheureusement IE6 qui ne le prend pas en charge de manière cohérente.Cet exemple vérifie si le CSS a déjà été ajouté, il ne l'ajoute qu'une seule fois.
Mettez ce code dans un fichier javascript, demandez à l'utilisateur final d'inclure simplement le javascript et assurez-vous que le chemin CSS est absolu afin qu'il soit chargé à partir de vos serveurs.
VanillaJS
Voici un exemple qui utilise du JavaScript simple pour injecter un lien CSS dans l'
head
élément en fonction de la partie du nom de fichier de l'URL:Insérez le code juste avant la
head
balise de fermeture et le CSS sera chargé avant le rendu de la page. L'utilisation d'un.js
fichier JavaScript ( ) externe provoquera l'apparition d'un Flash de contenu non stylisé ( FOUC ).la source
link.onload = function(){ ... }
avant d'ajouterSi vous utilisez jquery:
la source
$('head').append('<link rel="stylesheet" type="text/css" href="https://dl.dropboxusercontent.com/s/ep1nzckmvgjq7jr/remove_transitions_from_page.css">');
Je suppose que quelque chose comme ce script ferait:
Ce fichier JS contient l'instruction suivante:
L'adresse du javascript et du css devrait être absolue pour faire référence à votre site.
De nombreuses techniques d'importation CSS sont abordées dans cet article «Dites non aux hacks CSS avec des techniques de branchement» .
Mais l'article "Utilisation de JavaScript pour ajouter dynamiquement des feuilles de style CSS Portlet" mentionne également la possibilité CreateStyleSheet (méthode propriétaire pour IE):
la source
document.createStyleSheet()
aux navigateurs qui ne l'ont pas: stackoverflow.com/questions/524696/…document.write
n'est pas recommandé car il écrase tout le corps de votre site Web.<style>
élément au lieu de supposer que c'est le premier enfant de<head>
via("head")[0]
?var style = document.getElementsByTagName("style")[0];
Element.insertAdjacentHTML a une très bonne prise en charge du navigateur et peut ajouter une feuille de style sur une seule ligne.
la source
Si vous voulez savoir (ou attendre) que le style lui-même soit chargé, cela fonctionne:
la source
Je sais que c'est un fil assez ancien, mais voici mes 5 cents.
Il existe une autre façon de procéder en fonction de vos besoins.
J'ai un cas où je veux qu'un fichier CSS ne soit actif que pendant un certain temps. Comme la commutation CSS. Activez le CSS puis, après un autre événement, désactivez-le.
Au lieu de charger le css dynamiquement puis de le supprimer, vous pouvez ajouter une classe / un id devant tous les éléments du nouveau css, puis changer simplement cette classe / id du nœud de base de votre css (comme la balise body).
Avec cette solution, vous auriez initialement plus de fichiers css chargés, mais vous avez une manière plus dynamique de changer de disposition css.
la source
Dans un navigateur moderne, vous pouvez utiliser
promise
comme ça. Créez une fonction de chargeur avec une promesse:Alors, évidemment, vous voulez que quelque chose soit fait après le chargement du CSS. Vous pouvez appeler la fonction qui doit s'exécuter après le chargement de CSS comme ceci:
Liens utiles si vous souhaitez comprendre en détail comment cela fonctionne:
Documents officiels sur les promesses
Guide utile des promesses
Une superbe vidéo d'introduction sur les promesses
la source
Utilisez ce code:
la source
Il existe un plugin jquery général qui charge la synchronisation des fichiers css et JS et asych à la demande. Il garde également la trace de ce qui a déjà été chargé :) voir: http://code.google.com/p/rloader/
la source
Voici un moyen avec la méthode de création d'élément de jQuery (ma préférence) et avec le rappel
onLoad
:la source
La bibliothèque YUI est peut-être celle que vous recherchez. Il prend également en charge le chargement entre domaines.
Si vous utilisez jquery, ce plugin fait la même chose.
la source
Vous pouvez utiliser pour cette bibliothèque YUI ou utiliser cet article pour implémenter
la source
Ci-dessous un code complet utilisant pour charger JS et / ou CSS
la source
Je voudrais partager une autre façon de charger non seulement css mais tous les actifs (js, css, images) et gérer l' événement onload pour le tas de fichiers. Ça l'est
async-assets-loader
. Voir l'exemple ci-dessous:Selon les async-actifs-chargeur docs
la source
J'utilise thymeleaf et cela fonctionne très bien. Merci
la source
th:href
attribut côté client? Il ne sera pas traité par Thymeleaf, il semble donc redondant ici.