Eu preciso criar uma classe de folha de estilo CSS dinamicamente em JavaScript e atribuí-la a alguns elementos HTML como - div, table, span, tr, etc e a alguns controles como asp: Textbox, Dropdownlist e datalist.
É possível?
Seria bom com uma amostra.
javascript
css
stylesheet
Himadri
fonte
fonte
Respostas:
Embora eu não saiba por que você deseja criar classes CSS com JavaScript, aqui está uma opção:
fonte
Encontrou uma solução melhor, que funciona em todos os navegadores.
Usa document.styleSheet para adicionar ou substituir regras. A resposta aceita é curta e prática, mas também funciona no IE8 e menos.
A função é usada da seguinte maneira.
fonte
var styleSheetLength = styleSheet.cssRules ? styleSheet.cssRules.length : 0
e substituir seu uso pela implementação da função.Resposta curta, isso é compatível "em todos os navegadores" (especificamente, IE8 / 7):
E este bit final aplica a classe a um elemento:
Aqui está uma pequena página de teste também: https://gist.github.com/shadybones/9816763
O ponto principal é o fato de que os elementos de estilo têm uma propriedade "styleSheet" / "sheet" na qual você pode usar para adicionar / remover regras.
fonte
Existe um plugin jQuery leve que permite gerar declarações CSS: jQuery-injectCSS
De fato, ele usa JSS (CSS descrito por JSON), mas é bastante fácil de manusear para gerar folhas de estilo css dinâmicas.
fonte
YUI tem de longe o melhor utilitário de folha de estilo que eu já vi por aí. Convido você a conferir, mas aqui está uma amostra:
Obviamente, existem outras maneiras muito mais simples de mudar de estilo rapidamente, como as sugeridas aqui. Se eles fazem sentido para o seu problema, eles podem ser os melhores, mas definitivamente existem razões pelas quais modificar o css é uma solução melhor. O caso mais óbvio é quando você precisa modificar um grande número de elementos. O outro caso importante é se você precisa que suas mudanças de estilo envolvam a cascata. Usar o dom para modificar um elemento sempre terá uma prioridade mais alta. É a abordagem da marreta e é equivalente a usar o atributo style diretamente no elemento html. Esse nem sempre é o efeito desejado.
fonte
A partir do IE 9. Agora você pode carregar um arquivo de texto e definir uma propriedade style.innerHTML. Portanto, agora você pode carregar um arquivo css através do ajax (e obter o retorno de chamada) e apenas definir o texto dentro de uma tag de estilo como esta.
Isso funciona em outros navegadores, não sei ao certo quanto tempo atrás. Mas desde que você não precise dar suporte ao IE8, ele funcionaria.
e então você pode puxar um arquivo externo como o myCss.css
fonte
Aqui está a solução de Vishwanath ligeiramente reescrita com comentários:
fonte
Um projeto interessante que pode ajudá-lo em sua tarefa é o JSS .
A biblioteca JSS permite injetar na seção DOM / head usando a
.attach()
funçãoSubstitua a versão online para avaliação.
Mais informações sobre JSS .
Um exemplo:
fonte
Usando o fechamento do google:
você pode simplesmente usar o módulo ccsom:
O código javascript tenta ser entre navegadores ao colocar o nó css no cabeçalho do documento.
fonte
https://jsfiddle.net/xk6Ut/256/
Uma opção para criar e atualizar dinamicamente a classe CSS em JavaScript:
classe CSS
.....
...
fonte
Observou as respostas e o mais óbvio e direto está faltando: use
document.write()
para escrever um pedaço de CSS necessário.Aqui está um exemplo (veja no codepen: http://codepen.io/ssh33/pen/zGjWga ):
fonte
fonte
Aqui está minha solução modular:
Você basicamente em qualquer lugar do seu código do:,
addNewStyle('body', 'color: ' + color1);
wherecolor1
é a variável definida.Quando você deseja "postar" o arquivo CSS atual, basta fazê -lo e
submitNewStyle()
, emseguida, ainda pode adicionar mais CSS posteriormente.
Se você deseja adicioná-lo com "consultas de mídia", tem a opção
Após "adicionar novos estilos", você simplesmente usa
submitNewStyleWithMedia('min-width: 1280px');
.Foi bastante útil para o meu caso de uso, pois eu estava alterando o CSS do site público (não o meu) de acordo com o horário atual. Eu envio um arquivo CSS antes de usar scripts "ativos" e o restante depois (faz o site parecer mais ou menos antes de acessar os elementos
querySelector
).fonte
Para o benefício dos pesquisadores; se você estiver usando jQuery, poderá fazer o seguinte:
Obviamente, você pode alterar o css interno para o que quiser.
Entendo que algumas pessoas preferem JavaScript puro, mas funciona e tem sido bastante robusto para escrever / substituir estilos dinamicamente.
fonte
Eu estava examinando algumas das respostas aqui e não consegui encontrar nada que adicionasse automaticamente uma nova folha de estilo, se não houver, e se não simplesmente modificasse uma existente que já contivesse o estilo necessário, criei uma nova função ( deve funcionar em todos os navegadores, embora não testados, use addRule e, além disso, apenas o JavaScript nativo básico, deixe-me saber se funciona):
basta adicionar estas 2 funções auxiliares dentro da função acima ou em qualquer outro lugar:
(observe que, nos dois, eu uso um loop for em vez de .filter, pois as classes de lista de regras / estilo CSS têm apenas uma propriedade length e nenhum método .filter.)
Então, para chamá-lo:
Deixe-me saber se ele funciona no seu navegador ou se apresenta um erro.
fonte