Cosas como a:link
o div::after
...
La información sobre la diferencia parece escasa.
css
css-selectors
pseudo-class
pseudo-element
tybro0103
fuente
fuente
Respuestas:
La recomendación del selector de CSS 3 es bastante clara sobre ambos, pero intentaré mostrar las diferencias de todos modos.
Pseudoclases
Descripción oficial
Fuente
¿Qué significa esto?
La naturaleza importante de las pseudoclases se establece en la primera frase: "el concepto de pseudoclases permite [...] la selección " . Permite al autor de una hoja de estilo diferenciar entre elementos según la información que "se encuentra fuera del árbol del documento" , por ejemplo, el estado actual de un enlace (
:active
,:visited
). Esos no se guardan en ningún lugar del DOM y no existe una interfaz DOM para acceder a estas opciones.Por otro lado,
:target
se puede acceder a través de la manipulación DOM (se puede usarwindow.location.hash
para encontrar el objeto con JavaScript), pero esto "no se puede expresar usando los otros selectores simples" .Entonces, básicamente, una pseudoclase refinará el conjunto de elementos seleccionados como cualquier otro selector simple en una secuencia de selectores simples . Tenga en cuenta que todos los selectores simples en una secuencia de selectores simples se evaluarán al mismo tiempo. Para obtener una lista completa de pseudoclase, consulte la recomendación del selector CSS3.
Ejemplo
El siguiente ejemplo coloreará todas las filas pares en gris (
#ccc
), todas las filas desiguales que no se pueden dividir entre 5 blancas y cada dos filas magenta.Pseudo-elementos
Descripción oficial
Fuente
¿Qué significa esto?
La parte más importante aquí es que "los pseudoelementos permiten a los autores hacer referencia a [..] información que de otro modo sería inaccesible " y que "también pueden proporcionar a los autores una forma de hacer referencia a contenido que no existe en el documento fuente (por ejemplo, el
::before
y los::after
pseudoelementos dan acceso al contenido generado). ". La mayor diferencia es que en realidad crean un nuevo elemento virtual en el que se pueden aplicar reglas e incluso selectores de pseudoclase. No filtran elementos, básicamente filtran contenido (::first-line
,::first-letter
) y lo envuelven en un contenedor virtual, que el autor puede diseñar como quiera (bueno, casi).Por ejemplo, el
::first-line
pseudoelemento no se puede reconstruir con JavaScript, ya que depende en gran medida de la fuente utilizada actualmente, el tamaño de la fuente, el ancho de los elementos, los elementos flotantes (y probablemente la hora del día). Bueno, eso no es del todo cierto: aún se pueden calcular todos esos valores y extraer la primera línea, sin embargo, hacerlo es una actividad muy engorrosa.Supongo que la mayor diferencia es que "sólo puede aparecer un pseudoelemento por selector" . La nota dice que esto podría estar sujeto a cambios, pero a partir de 2012 no creo que veamos ningún comportamiento diferente en el futuro ( todavía está en CSS4 ).
Ejemplo
El siguiente ejemplo agregará una etiqueta de idioma a cada cita en una página determinada usando la pseudoclase
:lang
y el pseudo-elemento::after
:TL; DR
Las pseudoclases actúan como selectores simples en una secuencia de selectores y, por lo tanto, clasifican los elementos según características no presentacionales, los pseudoelementos crean nuevos elementos virtuales.
Referencias
W3C
fuente
:not(.someclass):nth-child(even)
no significa filtrar elementos que no tienen.someclass
, y entre los elementos restantes filtrar las ocurrencias pares. En su lugar, representa cualquier elemento que sea a la vez:not(.someclass)
y:nth-child(even)
de su padre al mismo tiempo. Se pueden encontrar explicaciones más detalladas en esta respuesta y en esta respuesta .Una pseudoclase filtra elementos existentes.
a:link
significa todos los<a>
s que son:link
.Un pseudo-elemento es un nuevo elemento falso.
div::after
significa elementos no existentes después de<div>
s.::selection
es otro ejemplo de un pseudo-elemento.No se refiere a todos los elementos seleccionados; significa el rango de contenido que se selecciona, que puede abarcar porciones de varios elementos.
fuente
div::after
es un hijo dediv
, ocurre después de su contenido en lugar del elemento en sí.Breve descripción que me ayudó a comprender la diferencia:
fuente
De los documentos de Sitepoint:
fuente
A continuación se muestra la respuesta simple:
Usamos pseudo-clase cuando necesitamos aplicar CSS en función del estado de un elemento. Como:
:hover
):focus
). etc.Usamos pseudo-elemento cuando necesitamos aplicar CSS a las partes específicas de un elemento o un contenido recién insertado . Como:
::first-letter
)::before
,::after
)A continuación se muestra el ejemplo de ambos:
fuente
Una respuesta conceptual:
Un pseudoelemento se refiere a cosas que son parte del documento, pero que aún no lo sabe. Por ejemplo, la primera letra. Antes solo tenías mensajes de texto. Ahora tiene una primera letra a la que puede apuntar. Es un concepto nuevo, pero siempre fue parte del documento. Esto también incluye cosas como
::before
; si bien no hay contenido real allí, el concepto de algo antes que otra cosa siempre estuvo allí, ahora lo está especificando.Una pseudoclase es el estado de algo en el DOM. Al igual que una clase es una etiqueta que se asocia con un elemento, una pseudoclase es una clase que se asocia mediante el navegador o DOM o lo que sea, generalmente como respuesta a un cambio de estado. Cuando un usuario visita un enlace, ese enlace puede adoptar el estado de "visitado". Puede imaginarse el navegador aplicando la clase 'visitado' al elemento Anchor.
:visited
entonces sería cómo seleccionar para esa pseudo-clase.fuente
Pseudoclase
Una pseudoclase es una forma de seleccionar ciertas partes de un documento HTML, basada en principio no en el árbol del documento HTML en sí y sus elementos o en características como nombre, atributos o contenido, sino en otras condiciones fantasmas como la codificación del idioma o el estado dinámico. de un elemento.
La pseudoclase original definió estados dinámicos de un elemento que se ingresan y salen con el tiempo, o mediante la intervención del usuario. CSS2 amplió este concepto para incluir componentes de documentos conceptuales virtuales o partes inferidas del árbol de documentos, por ejemplo, primer hijo. Las pseudoclases operan como si se añadieran clases fantasmas a varios elementos.
RESTRICCIONES: A diferencia de los pseudo-elementos, las pseudo-clases pueden aparecer en cualquier lugar de la cadena de selección.
Ejemplo de código de pseudoclase:
Una página que muestra una representación del código de pseudoclase anterior
Pseudo-elementos
Los PSEUDO-ELEMENTS se utilizan para abordar subpartes de elementos. Le permiten establecer el estilo de una parte del contenido de un elemento más allá de lo especificado en los documentos. En otras palabras, permiten definir elementos lógicos que no están realmente en el árbol de elementos del documento. Los elementos lógicos permiten abordar la estructura semántica implícita en los selectores de CSS.
RESTRICCIONES: Los pseudo-elementos solo se pueden aplicar a contextos externos y de nivel de documento, no a estilos en línea. Los pseudoelementos están restringidos en cuanto a dónde pueden aparecer en una regla. Solo pueden aparecer al final de una cadena de selectores (después del asunto del selector). Deben ir después de cualquier nombre de clase o ID que se encuentre en el selector. Solo se puede especificar un pseudoelemento por selector. Para abordar múltiples pseudoelementos en una estructura de un solo elemento, se deben realizar múltiples declaraciones de selector / declaración de estilo.
Los pseudoelementos se pueden utilizar para efectos tipográficos comunes, como mayúsculas iniciales y mayúsculas. También pueden abordar el contenido generado que no está en el documento de origen (con el "antes" y el "después"). A continuación, se muestra una hoja de estilo de ejemplo de algunos pseudo-elementos con propiedades y valores agregados.
/ * La siguiente regla selecciona la primera letra de un encabezado 1 y establece la fuente en 2em, cursiva, con fondo verde. Primera letra selecciona la primera letra / carácter representado para un elemento a nivel de bloque. * /
Fuentes: Enlace
fuente
En resumen, de Pseudo-classes en MDN:
Y, de Pseudo-elementos en MDN:
fuente