Coisas como a:link
ou div::after
...
Informações sobre a diferença parecem escassas.
css
css-selectors
pseudo-class
pseudo-element
tybro0103
fonte
fonte
Respostas:
A recomendação do seletor CSS 3 é bastante clara sobre ambos, mas tentarei mostrar as diferenças de qualquer maneira.
Pseudo-classes
Descrição oficial
Fonte
O que isto significa?
A natureza importante das pseudo-classes é afirmada na primeira frase: "o conceito de pseudo-classe [...] permite a seleção " . Ele permite que o autor de uma folha de estilo diferencie os elementos com base nas informações que "estão fora da árvore do documento" , por exemplo, o status atual de um link (
:active
,:visited
). Eles não são salvos em nenhum lugar no DOM e não existe uma interface DOM para acessar essas opções.Por outro lado,
:target
pode ser acessado via manipulação DOM (você pode usarwindow.location.hash
para encontrar o objeto com JavaScript), mas isso "não pode ser expresso usando os outros seletores simples" .Então, basicamente, uma pseudo-classe irá refinar o conjunto de elementos selecionados como qualquer outro seletor simples em uma sequência de seletores simples . Observe que todos os seletores simples em uma sequência de seletores simples serão avaliados ao mesmo tempo. Para uma lista completa de pseudo-classes, verifique a recomendação do seletor CSS3.
Exemplo
O exemplo a seguir irá colorir todas as linhas pares de cinza (
#ccc
), todas as linhas irregulares que não são divisíveis por 5 de branco e todas as outras linhas de magenta.Pseudo-elementos
Descrição oficial
Fonte
O que isto significa?
A parte mais importante aqui é que "pseudo-elementos permitem que os autores se refiram a [..] informações de outra forma inacessíveis " e que "também podem fornecer aos autores uma maneira de se referir a conteúdo que não existe no documento de origem (por exemplo, o
::before
e os::after
pseudo-elementos dão acesso ao conteúdo gerado). ". A maior diferença é que eles realmente criam um novo elemento virtual no qual as regras e até mesmo os seletores de pseudoclasse podem ser aplicados. Eles não filtram elementos, eles basicamente filtram conteúdo (::first-line
,::first-letter
) e o envolvem em um contêiner virtual, que o autor pode estilizar como quiser (bem, quase).Por exemplo, o
::first-line
pseudo-elemento não pode ser reconstruído com JavaScript, pois depende muito da fonte usada atualmente, do tamanho das fontes, da largura dos elementos, dos elementos flutuantes (e provavelmente da hora do dia). Bem, isso não é totalmente verdade: ainda se pode calcular todos esses valores e extrair a primeira linha, no entanto, fazer isso é uma atividade muito complicada.Acho que a maior diferença é que "apenas um pseudo-elemento pode aparecer por seletor" . A nota diz que isso pode estar sujeito a alterações, mas a partir de 2012 não acredito que vejamos nenhum comportamento diferente no futuro ( ainda está no CSS4 ).
Exemplo
O exemplo a seguir adicionará uma tag de idioma a cada citação em uma determinada página usando a pseudoclasse
:lang
e o pseudoelemento::after
:TL; DR
As pseudo-classes atuam como seletores simples em uma sequência de seletores e, assim, classificam os elementos em características não-apresentacionais, os pseudo-elementos criam novos elementos virtuais.
Referências
W3C
fonte
:not(.someclass):nth-child(even)
não significa filtrar os elementos que não possuem.someclass
, e entre os elementos restantes filtrar as ocorrências pares. Em vez disso, representa qualquer elemento que é tanto:not(.someclass)
e:nth-child(even)
de seu pai, ao mesmo tempo. Explicações mais detalhadas podem ser encontradas nesta e nesta resposta .Uma pseudoclasse filtra os elementos existentes.
a:link
significa todos os<a>
que são:link
.Um pseudoelemento é um novo elemento falso.
div::after
significa elementos não existentes após<div>
s.::selection
é outro exemplo de um pseudoelemento.Isso não significa todos os elementos selecionados; significa o intervalo de conteúdo selecionado, que pode abranger porções de vários elementos.
fonte
div::after
seja filho dediv
, ocorrendo depois de seu conteúdo e não do próprio elemento.Breve descrição que me ajudou a entender a diferença:
fonte
Dos documentos do Sitepoint:
fonte
Uma resposta conceitual:
Um pseudoelemento se refere a coisas que fazem parte do documento, mas você simplesmente não sabe ainda. Por exemplo, a primeira letra. Antes você só tinha texto. Agora você tem uma primeira letra que pode ser direcionada. É um conceito novo, mas sempre fez parte do documento. Isso também inclui coisas como
::before
; embora não haja conteúdo real lá, o conceito de algo antes de algo sempre esteve lá - agora você o está especificando.Uma pseudoclasse é o estado de algo no DOM. Assim como uma classe é uma tag que você associa a um elemento, uma pseudoclasse é uma classe que é associada pelo navegador ou DOM ou qualquer outro, geralmente como uma resposta a uma mudança de estado. Quando um usuário visita um link - esse link pode assumir o estado de 'visitado'. Você pode imaginar o navegador aplicando a classe 'visitada' ao elemento Âncora.
:visited
seria então como você seleciona para aquela pseudoclasse.fonte
Abaixo está a resposta simples:
Usamos a pseudoclasse quando precisamos aplicar css com base no estado de um elemento. Tal como:
:hover
):focus
). etc.Usamos o pseudoelemento quando precisamos aplicar css às partes específicas de um elemento ou a um conteúdo recém- inserido . Tal como:
::first-letter
)::before
,::after
)Abaixo está o exemplo de ambos:
fonte
Pseudo-classe
Uma pseudoclasse é uma forma de selecionar certas partes de um documento HTML, com base, em princípio, não na própria árvore do documento HTML e seus elementos ou em características como nome, atributos ou conteúdo, mas em outras condições fantasmas, como codificação de linguagem ou estado dinâmico de um elemento.
A pseudoclasse original definiu os estados dinâmicos de um elemento que são inseridos e encerrados ao longo do tempo ou por meio da intervenção do usuário. CSS2 expandiu este conceito para incluir componentes de documentos conceituais virtuais ou partes inferidas da árvore de documentos, por exemplo, primeiro filho. As pseudo classes operam como se classes fantasmas fossem adicionadas a vários elementos.
RESTRIÇÕES: Ao contrário dos pseudo-elementos, as pseudo-classes podem aparecer em qualquer lugar na cadeia do seletor.
Exemplo de código de pseudoclasse:
Uma página que demonstra uma renderização do código da pseudoclasse acima
Pseudo-elementos
PSEUDO-ELEMENTS são usados para endereçar subpartes de elementos. Eles permitem que você defina o estilo de uma parte do conteúdo de um elemento além do que está especificado nos documentos. Em outras palavras, eles permitem a definição de elementos lógicos que não estão realmente na árvore de elementos do documento. Os elementos lógicos permitem que a estrutura semântica implícita seja tratada nos seletores CSS.
RESTRIÇÕES: os pseudoelementos só podem ser aplicados a contextos externos e de nível de documento - não a estilos in-line. Os pseudoelementos são restritos quanto ao local em que podem aparecer em uma regra. Eles só podem aparecer no final de uma cadeia de seletores (após o assunto do seletor). Eles devem vir depois de qualquer classe ou nome de ID encontrado no seletor. Apenas um pseudoelemento pode ser especificado por seletor. Para endereçar vários pseudoelementos em uma estrutura de elemento único, várias instruções de seletor / declaração de estilo devem ser feitas.
Pseudoelementos podem ser usados para efeitos tipográficos comuns, como capitulações iniciais e capitulares. Eles também podem abordar o conteúdo gerado que não está no documento de origem (com "antes" e "depois"). Segue-se um exemplo de folha de estilo de alguns pseudoelementos com propriedades e valores adicionados.
/ * A regra a seguir seleciona a primeira letra de um título 1 e define a fonte como 2em, cursiva, com fundo verde. A primeira letra seleciona a primeira letra / caractere renderizado para um elemento de nível de bloco. * /
Fontes: Link
fonte
Em resumo, das Pseudo-classes no MDN:
E, a partir de Pseudo-elementos no MDN:
fonte