É possível importar folhas de estilo css para uma página html usando Javascript? Se sim, como isso pode ser feito?
PS, o javascript estará hospedado no meu site, mas quero que os usuários possam inserir a <head>
tag do site, e deve poder importar um arquivo css hospedado no meu servidor para a página da web atual. (o arquivo css e o arquivo javascript serão hospedados no meu servidor).
javascript
html
css
dhtml
Click Voto a favor
fonte
fonte
Respostas:
Aqui está a maneira "antiga" de fazer isso, que, esperançosamente, funciona em todos os navegadores. Em teoria, você usaria
setAttribute
infelizmente o IE6 não o suporta consistentemente.Este exemplo verifica se o CSS já foi adicionado e o adiciona apenas uma vez.
Coloque esse código em um arquivo javascript, faça com que o usuário final inclua o javascript e verifique se o caminho CSS é absoluto para que seja carregado nos seus servidores.
VanillaJS
Aqui está um exemplo que usa JavaScript simples para injetar um link CSS no
head
elemento com base na parte do nome do arquivo da URL:Insira o código imediatamente antes da
head
tag de fechamento e o CSS será carregado antes da renderização da página. O uso de um.js
arquivo JavaScript ( ) externo fará com que um Flash de conteúdo não estilizado ( FOUC ) apareça.fonte
link.onload = function(){ ... }
antes de acrescentarSe você usa jquery:
fonte
$('head').append('<link rel="stylesheet" type="text/css" href="https://dl.dropboxusercontent.com/s/ep1nzckmvgjq7jr/remove_transitions_from_page.css">');
Eu acho que algo como este script faria:
Este arquivo JS contém a seguinte instrução:
O endereço do javascript e do css precisaria ser absoluto para se referir ao seu site.
Muitas técnicas de importação de CSS são discutidas neste artigo "Diga não aos hacks de CSS com técnicas de ramificação" .
Mas o artigo "Usando JavaScript para adicionar dinamicamente folhas de estilo CSS do Portlet" menciona também a possibilidade CreateStyleSheet (método proprietário do IE):
fonte
document.createStyleSheet()
aos navegadores que não o possuem: stackoverflow.com/questions/524696/… #document.write
não é recomendado porque substitui todo o corpo do seu site.<style>
elemento em vez de assumir que é o primeiro filho da<head>
via("head")[0]
?var style = document.getElementsByTagName("style")[0];
O Element.insertAdjacentHTML possui um suporte muito bom ao navegador e pode adicionar uma folha de estilo em uma linha.
fonte
Se você deseja saber (ou esperar) até que o próprio estilo seja carregado, isso funciona:
fonte
Eu sei que este é um tópico bastante antigo, mas aqui vem meus 5 centavos.
Há outra maneira de fazer isso, dependendo de quais são suas necessidades.
Eu tenho um caso em que eu quero que um arquivo css fique ativo apenas um tempo. Como troca de CSS. Ative o css e depois de outro evento, desative-o.
Em vez de carregar o css dinamicamente e removê-lo, você pode adicionar um ID de classe / um na frente de todos os elementos no novo css e depois alternar essa classe / ID do nó base do seu css (como tag corporal).
Nesta solução, você teria mais arquivos css carregados inicialmente, mas você tem uma maneira mais dinâmica de alternar layouts de css.
fonte
Em um navegador moderno, você pode usar
promise
assim. Crie uma função loader com uma promessa:Então, obviamente, você deseja fazer algo após o CSS ser carregado. Você pode chamar a função que precisa ser executada após o CSS ser carregado da seguinte maneira:
Links úteis se você quiser entender em profundidade como ele funciona:
Documentos oficiais sobre promessas
Guia útil de promessas
Um ótimo vídeo de introdução sobre promessas
fonte
Use este código:
fonte
Existe um plug-in jquery geral que carrega sincronização de arquivos css e JS e asych sob demanda. Ele também rastreia o que já foi carregado :) consulte: http://code.google.com/p/rloader/
fonte
Aqui está uma maneira com o método de criação de elementos do jQuery (minha preferência) e com retorno de chamada
onLoad
:fonte
A biblioteca YUI pode ser o que você está procurando. Ele também suporta carregamento entre domínios.
Se você usa jquery, este plugin faz a mesma coisa.
fonte
Você pode usar para esta biblioteca YUI ou usar este artigo para implementar
fonte
Abaixo de um código completo usando para carregar JS e / ou CSS
fonte
Gostaria de compartilhar mais uma maneira de carregar não apenas css, mas todos os recursos (js, css, imagens) e manipular o evento onload para o monte de arquivos. É
async-assets-loader
. Veja o exemplo abaixo:De acordo com os assíncronos-ativos-loader docs
fonte
Estou usando thymeleaf e isso é bom trabalho. obrigado
fonte
th:href
atributo no lado do cliente? Não será processado pelo Thymeleaf, por isso parece redundante aqui.