Estou procurando uma maneira de inserir uma <style>
tag em uma página HTML com JavaScript.
A melhor maneira que encontrei até agora:
var divNode = document.createElement("div");
divNode.innerHTML = "<br><style>h1 { background: red; }</style>";
document.body.appendChild(divNode);
Isso funciona no Firefox, Opera e Internet Explorer, mas não no Google Chrome. Também é um pouco feio com a <br>
frente do IE.
Alguém sabe como criar uma <style>
tag que
É melhor
Funciona com o Chrome?
Ou talvez
Isso é algo fora do padrão que devo evitar
Três navegadores de trabalho são ótimos e quem usa o Chrome?
javascript
html
css
Ameena sana
fonte
fonte
document.head
é suportado em todos os principais navegadores.document.querySelector("head")
? É evento suportado pelo IE8 pela fontequerySelector()
; hoje, eu provavelmente iriadocument.head
, disponível desde IE9 #style.styleSheet.cssText
. Antes de ser anexado,style.styleSheet
era nulo.Aqui está um script que adiciona métodos
createStyleSheet()
e estilo do IEaddRule()
a navegadores que não os possuem:Você pode adicionar arquivos externos via
e criar regras dinamicamente via
fonte
Suponho que você queira inserir uma
style
tag versus umalink
tag (referenciando um CSS externo), e é isso que o exemplo a seguir faz:Além disso, notei na sua pergunta que você está usando
innerHTML
. Essa é, na verdade, uma maneira não padrão de inserir dados em uma página. A melhor prática é criar um nó de texto e anexá-lo a outro nó do elemento.Com relação à sua pergunta final, você ouvirá algumas pessoas dizerem que seu trabalho deve funcionar em todos os navegadores. Tudo depende do seu público. Se ninguém do seu público estiver usando o Chrome, não se preocupe; no entanto, se você deseja atingir o maior público possível, é melhor oferecer suporte a todos os principais navegadores de categoria A
fonte
styleNode.styleSheet.cssText = ...
<style>
as tags devem estar localizadas no<head>
elemento e cada tag adicionada deve ser adicionada na parte inferior da<head>
tag.Usando insertAdjacentHTML para injetar uma marca de estilo na marca de cabeçalho do documento :
DOM nativo:
jQuery :
fonte
Um exemplo que funciona e é compatível com todos os navegadores:
fonte
style
não temrel
ouhref
atributo - que você quis dizerlink
?link
elemento tem a ver com a pergunta? o OP pediustyle
elemento. Esta resposta não tem nada a ver com a questãostyle
é para adicionar estilos embutidos,link
é correto para fontes de folha de estilo e isso tem a vantagem de evitar problemas entre navegadores.Muitas vezes, é necessário substituir as regras existentes, portanto, anexar novos estilos ao HEAD não funciona em todos os casos.
Eu vim com essa função simples que resume tudo as abordagens não válidas de "anexar ao corpo" e é apenas mais conveniente de usar e depurar (IE8 +).
Demonstração: codepen , jsfiddle
fonte
<style>
etiqueta externa<head>
. A tag de estilo não deve aparecer em nenhum outro lugar, mas dentro da<head>
tag. Esse é o padrão html amplamente adotado. Há um atributo de estilo para o estilo embutido e o atributo de estilo pode ser aplicado a qualquer marca dentro da<body>
marca, incluindo a<body>
marca própria.Essa variável de objeto acrescentará uma tag de estilo à tag head com o atributo type e uma regra de transição simples dentro que corresponda a cada id / classe / elemento. Sinta-se à vontade para modificar a propriedade do conteúdo e injetar quantas regras você precisar. Apenas certifique-se de que as regras CSS dentro do conteúdo permaneçam em uma linha (ou 'escape' a cada nova linha, se você preferir).
fonte
Aqui está uma variante para adicionar dinamicamente uma classe
fonte
Tudo bem, mas para que styleNode.cssText funcione no IE6 com o nó criado por javascipt, é necessário anexar o nó ao documento antes de definir o cssText;
mais informações em http://msdn.microsoft.com/en-us/library/ms533698%28VS.85%29.aspx
fonte
Esta função irá injetar css sempre que você chamar a função
appendStyle
assim:appendStyle('css you want to inject')
Isso funciona injetando um
style
nó na cabeça do documento. Essa é uma técnica semelhante à que é comumente usada para carregar lentamente o JavaScript. Funciona de forma consistente na maioria dos navegadores modernos.Você também pode carregar preguiçosamente arquivos CSS externos usando o seguinte snippet:
fonte
Você escreveu:
Por que não isso?
A partir de agora, você pode anexar regras CSS facilmente ao código HTML:
... ou diretamente para o DOM:
Espero que isso funcione em qualquer lugar, exceto nos navegadores arcaicos.
Definitivamente funciona no Chrome no ano de 2019.
fonte
De longe, a solução mais direta. Tudo o que você precisa fazer é digitar o mesmo que normalmente declararia
style
tags, entre os backticksfonte
Se o problema que você está enfrentando é injetar uma string de CSS em uma página, é mais fácil fazer isso com o
<link>
elemento do que com o<style>
elemento.O seguinte adiciona
p { color: green; }
regra à página.Você pode criar isso em JavaScript simplesmente codificando URL sua sequência de CSS e adicionando a ela o
HREF
atributo Muito mais simples do que todas as peculiaridades dos<style>
elementos ou acessar diretamente as folhas de estilo.Isso funcionará no IE 5.5 para cima
fonte
http://jonraasch.com/blog/javascript-style-node
fonte