Você não pode estilizar uma pseudo-classe apenas em um elemento específico, da mesma maneira que não pode ter uma pseudo-classe em um atributo inline style = "..." (como não há seletor).
Você pode fazer isso alterando a folha de estilo, por exemplo, adicionando a regra:
#elid:hover { background: red; }
supondo que cada elemento que você deseja afetar tenha um ID exclusivo para permitir a seleção.
Em teoria, o documento que você deseja é http://www.w3.org/TR/DOM-Level-2-Style/Overview.html, o que significa que você pode (com uma folha de estilo incorporada ou vinculada pré-existente) usando sintaxe como:
document.styleSheets[0].insertRule('#elid:hover { background-color: red; }', 0);
document.styleSheets[0].cssRules[0].style.backgroundColor= 'red';
O IE, é claro, requer sua própria sintaxe:
document.styleSheets[0].addRule('#elid:hover', 'background-color: red', 0);
document.styleSheets[0].rules[0].style.backgroundColor= 'red';
É provável que navegadores antigos e secundários não ofereçam suporte a nenhuma sintaxe. A manipulação dinâmica de folhas de estilo raramente é feita porque é muito chato acertar, raramente necessário e historicamente problemático.
function sameOrigin(url) { var loc = window.location, a = document.createElement('a'); a.href = url; return a.hostname === loc.hostname && a.port === loc.port && a.protocol === loc.protocol; }
Criei uma pequena biblioteca para isso, pois acho que existem casos de uso válidos para manipular folhas de estilo em JS. Razões para ser:
fonte
Uma função para lidar com o material entre navegadores:
fonte
Basta colocar o css em uma string de modelo.
Em seguida, crie um elemento de estilo e coloque a sequência na marca de estilo e anexe-a ao documento.
A especificidade cuidará do resto. Em seguida, você pode remover e adicionar tags de estilo dinamicamente. Essa é uma alternativa simples para bibliotecas e bagunça com a matriz de folhas de estilo no DOM. Feliz codificação!
fonte
insertAdjacentElement
requer 2 argumentos nos principais navegadores (Chrome, Firefox, Edge), o primeiro dos quais estabelece a posição em relação ao elemento de referência ( veja aqui ). Esta é uma mudança recente? (Adicionado 'beforeend' na resposta).Meu truque é usar um seletor de atributos. Os atributos são mais fáceis de configurar pelo javascript.
css
javascript
html
fonte
Existe outra alternativa. Em vez de manipular diretamente as pseudo-classes, crie classes reais que modelem as mesmas coisas, como uma classe "pairar" ou uma classe "visitada". Estilize as aulas com o "." Usual sintaxe e, em seguida, você pode usar JavaScript para adicionar ou remover classes de um elemento quando o evento apropriado for acionado.
fonte
:before
&:after
são pseudo-elementos, não classes.Em vez de definir diretamente regras de pseudo-classe com javascript, você pode definir as regras de maneira diferente em arquivos CSS diferentes e usar o Javascript para desativar uma folha de estilo e ativar outra. Um método é descrito em A List Apart (qv. Para mais detalhes).
Configure os arquivos CSS como,
E então alterne entre eles usando javascript:
fonte
Como já foi dito, isso não é algo compatível com os navegadores.
Se você não está criando os estilos dinamicamente (ou seja, retirando-os de um banco de dados ou algo assim), você pode contornar isso adicionando uma classe ao corpo da página.
O CSS seria algo como:
E o javascript para alterar isso seria algo como:
fonte
element.classList.add
não é bem suportado? Eu continuo vendo pessoas fazendoelement.className +=
.Ativar e desativar as folhas de estilo é a maneira de fazê-lo. Aqui está uma biblioteca para criar folhas de estilo dinamicamente, para que você possa definir estilos rapidamente:
http://www.4pmp.com/2009/11/dynamic-css-pseudo-class-styles-with-jquery/
fonte
No jquery, você pode facilmente definir pseudo classes suspensas.
fonte
aqui está uma solução que inclui duas funções: addCSSclass adiciona uma nova classe css ao documento e toggleClass a ativa
O exemplo mostra como adicionar uma barra de rolagem personalizada a uma div
fonte
Se você usa o REACT, existe algo chamado rádio . É tão útil aqui:
fonte