Existe alguma maneira de selecionar / manipular pseudoelementos CSS como ::before
e ::after
(e a versão antiga com um ponto e vírgula) usando o jQuery?
Por exemplo, minha folha de estilo tem a seguinte regra:
.span::after{ content:'foo' }
Como posso mudar 'foo' para 'bar' usando o jQuery?
javascript
jquery
css
jquery-selectors
pseudo-element
JBradwell
fonte
fonte
Respostas:
Você também pode passar o conteúdo para o pseudo elemento com um atributo de dados e, em seguida, usar o jQuery para manipular isso:
Em HTML:
No jQuery:
Em CSS:
Se você deseja impedir que o 'outro texto' apareça, você pode combinar isso com a solução da seucolega da seguinte maneira:
Em HTML:
No jQuery:
Em CSS:
fonte
attr
função contra acontent
propriedade? Eu estou surpreso que eu nunca ouvi falar disso ...attr()
, pena que não pude usá-lo com outras propriedades que nãocontent
. Demoattr()
além do CSS2, enquanto no próprio CSS2attr()
foi definido apenas para acontent
propriedade.:before
, ele suportaattr()
CSSVocê acha que essa seria uma pergunta simples de responder, com tudo o mais que o jQuery pode fazer. Infelizmente, o problema se resume a um problema técnico: regras de css: after e: before não fazem parte do DOM e , portanto, não podem ser alteradas usando os métodos DOM do jQuery.
Não são maneiras de manipular esses elementos usando JavaScript e / ou CSS soluções alternativas; qual você usa depende de seus requisitos exatos.
Vou começar com o que é amplamente considerado a "melhor" abordagem:
1) Adicionar / remover uma classe predeterminada
Nesta abordagem, você já criou uma classe em seu CSS com um estilo
:after
ou:before
estilo diferente . Posicione essa classe "nova" posteriormente na folha de estilo para garantir que ela substitua:Em seguida, você pode adicionar ou remover facilmente essa classe usando jQuery (ou vanilla JavaScript):
Mostrar snippet de código
:before
ou:after
não seja completamente dinâmico2) Adicione novos estilos diretamente à folha de estilo do documento
É possível usar o JavaScript para adicionar estilos diretamente à folha de estilo do documento, incluindo
:after
e:before
estilos. O jQuery não fornece um atalho conveniente, mas felizmente o JS não é tão complicado:Mostrar snippet de código
.addRule()
e os.insertRule()
métodos relacionados são razoavelmente bem suportados hoje.Como variação, você também pode usar o jQuery para adicionar uma folha de estilo totalmente nova ao documento, mas o código necessário não é mais limpo:
Mostrar snippet de código
Se estamos falando de "manipular" os valores, não apenas acrescentar a eles, podemos também ler os existentes
:after
ou:before
estilos que utilizam uma abordagem diferente:Mostrar snippet de código
Podemos substituir
document.querySelector('p')
com$('p')[0]
ao usar jQuery, para o código ligeiramente mais curto.3) Alterar um atributo DOM diferente
Você também pode usar
attr()
em seu CSS para ler um atributo DOM específico. ( Se um navegador suporta:before
, ele também suportaattr()
. ) Ao combinar isso comcontent:
algumas CSS cuidadosamente preparadas, podemos alterar o conteúdo (mas não outras propriedades, como margem ou cor):before
e:after
dinamicamente:JS:
Mostrar snippet de código
Isso pode ser combinado com a segunda técnica se o CSS não puder ser preparado com antecedência:
Mostrar snippet de código
attr
no CSS, só se aplica a cadeias de conteúdo, não a URLs ou cores RGBfonte
Embora eles sejam renderizados pelos navegadores por CSS como se fossem outros elementos DOM reais, os pseudoelementos em si não fazem parte do DOM, porque os pseudoelementos, como o nome indica, não são elementos reais e, portanto, não é possível selecione e manipule-os diretamente com o jQuery (ou qualquer API JavaScript, nesse caso, nem mesmo a API Selectors ). Isso se aplica a quaisquer pseudoelementos cujos estilos você está tentando modificar com um script, e não apenas
::before
e::after
.Você só pode acessar estilos de pseudo-elementos diretamente em tempo de execução, via CSSOM (think
window.getComputedStyle()
), que não é exposto pelo jQuery além.css()
, um método que também não suporta pseudo-elementos.Você sempre pode encontrar outras maneiras de contornar isso, por exemplo:
Aplicando os estilos aos pseudo-elementos de uma ou mais classes arbitrárias e alternando entre as classes (veja a resposta da seucolega para um exemplo rápido) - esta é a maneira idiomática, pois utiliza seletores simples (os quais os pseudo-elementos não são) distinguir entre elementos e estados de elementos, a maneira como eles devem ser usados
Manipular os estilos que estão sendo aplicados aos referidos pseudo-elementos, alterando a folha de estilo do documento, que é muito mais um truque
fonte
Você não pode selecionar pseudo elementos no jQuery porque eles não fazem parte do DOM. Mas você pode adicionar uma classe específica ao elemento pai e controlar seus pseudo elementos no CSS.
EXEMPLO
No jQuery:
Em CSS:
fonte
Também podemos confiar em propriedades personalizadas (também conhecidas como variáveis CSS) para manipular o pseudo-elemento. Podemos ler na especificação que:
Considerando isso, a idéia é definir a propriedade customizada dentro do elemento e o pseudoelemento simplesmente a herdará; assim podemos modificá-lo facilmente.
1) Usando estilo embutido :
2) Usando CSS e classes
3) Usando javascript
4) Usando jQuery
Também pode ser usado com valores complexos:
Você pode perceber que estou considerando a sintaxe
var(--c,value)
ondevalue
está o valor padrão e também chamado de valor de fallback.Da mesma especificação, podemos ler:
E depois:
Se não definirmos a propriedade customizada OU, definimos como
initial
OU ele contém um valor inválido, o valor de fallback será usado. O uso deinitial
pode ser útil caso desejemos redefinir uma propriedade customizada para seu valor padrão.Relacionado
Como armazenar valor herdado dentro de uma propriedade customizada CSS (também conhecida como variáveis CSS)?
Propriedades customizadas de CSS (variáveis) para modelo de caixa
Observe que as variáveis CSS podem não estar disponíveis em todos os navegadores que você considera relevantes (por exemplo, IE 11): https://caniuse.com/#feat=css-variables
fonte
Na linha do que Christian sugere, você também pode fazer:
fonte
Aqui está o caminho para acessar: after e: before propriedades de estilo, definidas em css:
fonte
Se você quiser manipular os elementos sudo :: before ou :: after inteiramente por meio do CSS, poderá fazê-lo JS. Ver abaixo;
Observe como o
<style>
elemento possui um ID, que você pode usar para removê-lo e anexá-lo novamente se o seu estilo mudar dinamicamente.Dessa forma, seu elemento tem o estilo exatamente como você deseja através do CSS, com a ajuda de JS.
fonte
Uma maneira funcional, mas não muito eficiente, é adicionar uma regra ao documento com o novo conteúdo e referenciá-lo com uma classe. dependendo do necessário, a classe pode precisar de um ID exclusivo para cada valor no conteúdo.
fonte
Aqui está o HTML:
O estilo computado em 'antes' foi
content: "VERIFY TO WATCH";
Aqui estão minhas duas linhas de jQuery, que usam a idéia de adicionar uma classe extra para referenciar especificamente esse elemento e, em seguida, anexar uma marca de estilo (com uma marca! Important) para alterar o CSS do valor do conteúdo do elemento sudo:
$("span.play:eq(0)").addClass('G');
$('body').append("<style>.G:before{content:'NewText' !important}</style>");
fonte
Obrigado a todos! eu consegui fazer o que eu queria: D http://jsfiddle.net/Tfc9j/42/ aqui, dê uma olhada
eu queria que a opacidade de uma div externa fosse diferente da opacidade da div interna e que mudasse com um clique em algum lugar;) Obrigado!
fonte
append
, ohtml
melhor uso é evitarVocê pode criar uma propriedade falsa ou usar uma existente e herdá- la na folha de estilo do pseudo-elemento.
Parece que não funciona para a propriedade "content" :(
fonte
Isso não é prático, pois eu não escrevi isso para usos no mundo real, apenas para dar um exemplo do que pode ser alcançado.
atualmente, este add é um / ou anexa um elemento Style que contém os atributos necessários, que terão efeito nos elementos alvo após o Pseudo elemento.
isso pode ser usado como
e
como depois: e antes: pseudoelementos não são acessíveis diretamente através do DOM, atualmente não é possível editar os valores específicos do css livremente.
do meu jeito era apenas um exemplo e não é bom para a prática, você pode modificá-lo, experimentar alguns de seus próprios truques e corrigi-lo para o uso no mundo real.
assim como suas próprias experiências com isso e com outros!
cumprimentos - Adarsh Hegde.
fonte
Estou sempre adicionando minha própria função de utilitários, que se parece com isso.
ou faça uso dos recursos do ES6:
fonte
Por que adicionar classes ou atributos quando você pode simplesmente adicionar um
style
à cabeçafonte
Há muitas respostas aqui, mas nenhuma resposta ajuda a manipular o css
:before
ou:after
, nem mesmo o aceito.Aqui está como eu proponho fazê-lo. Vamos supor que seu HTML seja assim:
E então você está configurando seu: before em CSS e projetando-o como:
Observe também que eu defino o
content
atributo no próprio elemento para que você possa removê-lo facilmente mais tarde. Agora há umbutton
clique no qual você deseja alterar a cor de: before para verde e o tamanho da fonte para 30px. Você pode conseguir isso da seguinte maneira:Defina um css com o estilo necessário em alguma classe
.activeS
:Agora você pode alterar o estilo: before adicionando a classe ao seu: before elemento da seguinte maneira:
Se você deseja apenas obter conteúdo
:before
, isso pode ser feito da seguinte forma:Por fim, se você deseja alterar dinamicamente o
:before
conteúdo pelo jQuery, é possível fazer o seguinte:Clicar no botão "changeBefore" acima mudará o
:before
conteúdo#something
para '22', que é um valor dinâmico.Espero que ajude
fonte
Usei variáveis definidas
:root
dentroCSS
para modificar o pseudo-elemento:after
(o mesmo se aplica a:before
) , em particular para alterar o valor de um estilo definido por e o valor de outro ( ) na demonstração a seguir que gera cores aleatórias usando JavaScript / jQuery:background-color
anchor
.sliding-middle-out:hover:after
content
anchor
#reference
HTML
CSS
JS / jQuery
fonte
attr()
exceto emcontent
, é realmente escasso. Você pode consultar o site caniuse.com.:root
e o suporte a variáveis css é melhor, mas ainda não é tão amplo, pois o suporte é bastante novo. (verifique, também, suporte para ele no caniuse.com)Eu criei um plugin jQuery para adicionar regras css-pseudo, como usar
.css()
para elementos específicos.uso:
fonte
fonte
Você pode usar meu plugin para esse fim.
JQuery:
Os valores devem ser especificados, como na função normal do jQuery.css
Além disso, você também pode obter o valor do parâmetro pseudoelemento, como na função normal do jQuery.css:
JS:
Mostrar snippet de código
GitHub: https://github.com/yuri-spivak/managing-the-properties-of-pseudo-elements/
fonte
Alguém comentou sobre o acréscimo ao elemento head com um elemento de estilo completo e isso não é ruim se você estiver fazendo isso apenas uma vez, mas se precisar redefini-lo mais de uma vez, você terá uma tonelada de elementos de estilo. Portanto, para impedir que eu criei um elemento de estilo em branco na cabeça com um id e substitua oHTML interno assim:
Em seguida, o JavaScript ficaria assim:
Agora, no meu caso, eu precisava disso para definir a altura de um elemento anterior com base na altura de outro e ele será alterado no redimensionamento, portanto, usando isso, eu posso executar
setHeight()
toda vez que a janela for redimensionada e substituirá<style>
corretamente.Espero que ajude alguém que estava preso tentando fazer a mesma coisa.
fonte
Tenho algo diferente para você que é fácil e eficaz.
fonte