CSS
Tutorial CSS: Pseudo-clases y pseudo-elementos
CSS pseudo clases: definición y ejemplos. Domina la definición y uso de pseudo clases en CSS mediante ejemplos prácticos y detallados.
Aprende CSS GRATIS y certifícate¿Qué son las pseudo-clases y para qué sirven?
Las pseudo-clases son una característica de CSS que permiten aplicar estilos específicos a elementos en función de su estado o posición dentro del árbol DOM, sin necesidad de agregar clases adicionales en el HTML. Estas pseudo-clases proporcionan una manera de seleccionar elementos en situaciones más complejas y contextuales que los selectores regulares.
Las pseudo-clases se indican con un carácter de dos puntos (:
) seguido del nombre de la pseudo-clase. Se usan comúnmente para manejar interacciones del usuario, como efectos de hover
, focus
, y active
, así como para seleccionar elementos en base a su estructura o estado en el DOM.
Ejemplo básico de pseudo-clases
Aplicación de estilos diferenciados para los estados de hover
y focus
de un botón:
button {
background-color: #4CAF50; /* Color de fondo por defecto */
color: white; /* Color de texto por defecto */
}
button:hover {
background-color: #45a049; /* Cambio de color cuando el puntero está sobre el botón */
}
button:focus {
outline: none; /* Quitar el borde por defecto al enfocar */
box-shadow: 0 0 10px #719ECE; /* Añadir sombra azulada */
}
En este ejemplo, se aplican diferentes estilos al botón cuando el usuario coloca el cursor sobre el botón (:hover
) o cuando el botón obtiene el foco (:focus
).
Selección basada en estados
Otra utilidad de las pseudo-clases es aplicar estilos según el estado de un elemento de formulario. Por ejemplo, cambiar el borde de los campos de formulario cuando están en un estado inválido:
input:invalid {
border: 2px solid red; /* Bordes rojos para campos inválidos */
}
input:valid {
border: 2px solid green; /* Bordes verdes para campos válidos */
}
En este escenario, los estilos cambian dependiendo de la validez del input
, lo cual es fundamental en formularios para indicar visualmente al usuario que hay un error o que el campo es correcto.
Ventajas de usar pseudo-clases
- Simplificación de la estructura HTML al evitar clases adicionales.
- Manejo dinámico de estilos que responden a interacciones del usuario sin JavaScript.
- Seleccionar elementos sin una clase específica o id, aprovechando la relación y posición en el DOM.
Las pseudo-clases mejoran significativamente la flexibilidad y capacidad del desarrollador para aplicar estilos CSS de una manera más precisa y contextual, sin sobrecargar el HTML con clases y IDs adicionales. Esto facilita tanto la gestión de estilos como la mantenibilidad del código.
Pseudo-clases dinámicas y pseudo-clases de estado
Las pseudo-clases dinámicas y pseudo-clases de estado permiten aplicar estilos a los elementos en respuesta a eventos del usuario o cambios de estado en el DOM. Esto facilita la creación de interfaces de usuario interactivas y responsivas sin necesidad de JavaScript.
:hover
La pseudo-clase :hover
aplica estilos a un elemento cuando el usuario coloca el puntero sobre él. Es muy utilizada para mejorar la interactividad en los enlaces y botones.
a:hover {
color: #ff4500; /* Cambia el color del texto al pasar el ratón por encima */
text-decoration: underline; /* Añade subrayado */
}
:active
La pseudo-clase :active
selecciona un elemento mientras está siendo activado por el usuario, como cuando se presiona un botón del ratón.
button:active {
background-color: #005f5f; /* Cambia el color de fondo del botón cuando es presionado */
transform: translateY(2px); /* Añade un efecto visual de pulsación */
}
:focus
La pseudo-clase :focus
aplica estilos a un elemento cuando este ha recibido el foco, por ejemplo, cuando se hace clic en un campo de entrada o se navega a él usando el teclado.
input:focus {
outline: 2px solid #0066cc; /* Bordes destacados cuando el input está enfocado */
}
:focus-within
La pseudo-clase :focus-within
aplica estilos a un elemento si este o alguno de sus descendientes tiene el foco. Es útil para resaltar contenedores o formularios completos.
form:focus-within {
border: 2px solid #ff4500; /* Resalta el borde del formulario cuando un campo interno tiene el foco */
}
:visited
La pseudo-clase :visited
permite cambiar los estilos de enlaces que han sido visitados. No soporta todas las propiedades CSS por razones de privacidad.
a:visited {
color: #551a8b; /* Cambia el color del enlace después de haberlo visitado */
}
:link
La pseudo-clase :link
se aplica a todos aquellos enlaces (a
) que no han sido visitados por el usuario.
a:link {
color: #0000ee; /* Estilo de los enlaces no visitados */
}
:disabled
La pseudo-clase :disabled
se aplica a elementos de formulario que están deshabilitados y no interactivos.
input:disabled {
background-color: #e9e9e9; /* Fondo gris para inputs deshabilitados */
color: #a0a0a0; /* Texto gris para inputs deshabilitados */
}
:enabled
La pseudo-clase :enabled
selecciona los elementos de formulario que son interactivos.
input:enabled {
border: 1px solid #000000; /* Bordes estándar para inputs habilitados */
}
:checked
, :unchecked
, :indeterminate
Estas pseudo-clases se usan conjuntamente con los elementos de formularios, particularmente checkbox
y radio
.
input:checked {
background-color: #00ff00; /* Fondo verde para elementos seleccionados */
}
input:indeterminate {
background-color: #ffff00; /* Fondo amarillo para elementos en estado indeterminado */
}
:valid
y :invalid
Permiten aplicar estilos a los elementos de formulario basado en la validación de sus valores.
input:valid {
border: 2px solid #00cc00; /* Bordes verdes para campos válidos */
}
input:invalid {
border: 2px solid #cc0000; /* Bordes rojos para campos inválidos */
}
Estas pseudo-clases dinamizan y flexibilizan la interacción y el feedback visual en las interfaces web, haciendo los elementos reactivos a las acciones y estados del usuario de manera eficiente y sin necesitar JavaScript.
Pseudo-clases estructurales y otras pseudo-clases
Las pseudo-clases estructurales permiten aplicar estilos CSS en función de la posición de un elemento dentro de la estructura del DOM. Estas pseudo-clases son fundamentales para diseñar layouts y aplicar estilos específicos a elementos basándonos en su ubicación relativa a otros.
:first-child
, :last-child
, :nth-child()
y :nth-last-child()
:first-child
Selecciona el primer hijo de su padre.
p:first-child {
font-weight: bold; /* Aplica negrita al primer párrafo hijo del contenedor */
}
:last-child
Selecciona el último hijo de su padre.
p:last-child {
color: blue; /* Cambia el color del último párrafo a azul */
}
:nth-child()
Selecciona el hijo que ocupa la posición dada. Acepta fórmulas (como 2n
para seleccionar cada segundo hijo).
/* Selecciona cada tercer párrafo */
p:nth-child(3n) {
background-color: lightgrey;
}
:nth-last-child()
Funciona similar a :nth-child()
, pero empieza a contar desde el final del padre.
/* Selecciona el segundo hijo desde el final */
li:nth-last-child(2) {
font-style: italic;
}
:first-of-type
, :last-of-type
, :nth-of-type()
y :nth-last-of-type()
:first-of-type
Selecciona el primer elemento de su tipo entre los hijos de su padre.
/* Selecciona el primer párrafo de su tipo */
div p:first-of-type {
text-decoration: underline;
}
:last-of-type
Selecciona el último elemento de su tipo entre los hijos de su padre.
/* Selecciona el último párrafo de su tipo */
div p:last-of-type {
letter-spacing: 1px;
}
:nth-of-type()
Selecciona el enésimo elemento de su tipo entre los hijos de su padre.
/* Selecciona cada cuarto párrafo de su tipo */
p:nth-of-type(4n) {
margin-left: 10px;
}
:nth-last-of-type()
Selecciona el enésimo elemento de su tipo, comenzando desde el último.
/* Selecciona el tercer párrafo desde el final de su tipo */
p:nth-last-of-type(3) {
border-bottom: 2px solid black;
}
:only-child
, :only-of-type
:only-child
Selecciona un elemento que es el único hijo de su padre.
/* Selecciona lista de elementos que sean los únicos hijos de su contenedor */
ul:only-child {
border: 2px solid red;
}
:only-of-type
Selecciona un elemento que es el único de su tipo entre los hijos de su padre.
/* Se aplica a los únicos párrafos dentro de sus contenedores */
p:only-of-type {
padding: 5px;
background-color: #f0f0f0;
}
:empty
La pseudo-clase :empty
selecciona elementos que no tienen hijos, incluyendo texto o nodos de comentarios.
/* Aplica un fondo gris a los elementos vacíos */
div:empty {
background-color: #e0e0e0;
}
:not()
La pseudo-clase :not()
selecciona todos los elementos que no coinciden con una lista de selectores.
/* Aplica estilo a todos los párrafos que no tienen clase 'intro' */
p:not(.intro) {
color: #333;
}
:root
y :lang()
:root
Selecciona el elemento raíz del documento. Normalmente, es el elemento <html>
.
/* Definición de variables de CSS en el elemento raíz */
:root {
--primary-color: #3498db;
--secondary-color: #2ecc71;
}
:lang()
Selecciona elementos basados en su atributo de idioma.
/* Selecciona párrafos en inglés */
p:lang(en) {
font-style: italic;
}
Estas pseudo-clases estructurales y otras pseudo-clases permiten un control detallado y contextual sobre el estilo de los elementos en CSS, mejorando la capacidad de diseño y la flexibilidad sin modificar la estructura HTML.
¿Qué son los pseudo-elementos y para qué sirven?
Los pseudo-elementos en CSS permiten aplicar estilos a partes específicas de un elemento de una manera que no es posible utilizando solo selectores de clase o id. Los pseudo-elementos se escriben con la sintaxis de dos puntos dobles (::
) antes del nombre del pseudo-elemento. Tipos comunes de pseudo-elementos incluyen ::before
, ::after
, ::first-line
y ::first-letter
.
Aplicación de pseudo-elementos
::before
y ::after
::before
y ::after
permiten insertar contenido antes o después del contenido real de un elemento, respectivamente. Este contenido es generado solo visualmente y no afecta al DOM.
Ejemplo de uso para insertar un icono y un punto después de un enlace:
a::before {
content: "🔗 "; /* Inserta un icono antes del enlace */
}
a::after {
content: " (enlace)";
font-size: 0.8em; /* Define el tamaño del texto insertado */
color: #888; /* Color gris */
}
::first-line
y ::first-letter
::first-line
permite aplicar estilos específicos a la primera línea de un bloque de texto. ::first-letter
hace lo mismo con la primera letra.
Ejemplo de uso para estilizar la primera línea y la primera letra de un párrafo:
p::first-line {
font-weight: bold; /* Texto en negrita */
color: #ff4500; /* Color naranja */
}
p::first-letter {
font-size: 200%; /* Tamaño doble al estándar */
color: #0073e6; /* Color azul */
float: left; /* Flota la primera letra a la izquierda */
margin-right: 0.1em; /* Margen a la derecha */
}
Ventajas y usos avanzados
Los pseudo-elementos simplifican la inserción de contenido decorativo sin requerir cambios en el HTML. Son particularmente útiles para:
- Decoraciones de texto: Añadir iconos, comillas estilizadas, y otros detalles visuales sin alterar el contenido.
- Estilos de contenido específico: Aplicar estilos solo a partes del contenido, como la primera línea o letra, optimizando la presentación.
- Flexibilidad y limpieza: Mantener el HTML limpio y semántico, sin inyectar elementos adicionales solo para aplicar estilos.
Ejemplo de utilización avanzada con ::after
para un efecto de aclaración:
button:hover::after {
content: "✓"; /* Agrega un checkmark */
color: green; /* Color verde */
margin-left: 5px; /* Espaciado respecto al botón */
}
Mediante el uso de pseudo-elementos, CSS ofrece una mayor capacidad de diseño, permitiendo a los desarrolladores aplicar estilos complejos y contextuales que se adaptan a diversas necesidades visuales y de interacción, sin comprometer la estructura del documento.
Pseudo-elementos comunes
Los pseudo-elementos en CSS permiten a los desarrolladores aplicar estilos a partes específicas de un elemento, mediante la adición de contenido generado y el estilizado de porciones del texto. Aquí se describen los pseudo-elementos más comunes: ::before
, ::after
, ::first-line
, y ::first-letter
.
El formato para utilizar un pseudo-elemento consiste en dos puntos dobles (::
) seguidos del nombre del pseudo-elemento. Esta sintaxis ayuda a distinguirlos de las pseudo-clases.
::before
y ::after
::before
y ::after
son dos de los pseudo-elementos más utilizados, permitiendo insertar contenido antes y después del contenido de un elemento, respectivamente. Este contenido generado no afecta al DOM y solo se muestra visualmente.
Ejemplo de uso:
/* Inserta contenido antes del elemento */
.elemento::before {
content: "🌟"; /* Se muestra una estrella antes del contenido del elemento */
display: inline-block; /* Asegura que el contenido insertado se comporte correctamente en línea */
margin-right: 5px; /* Añade espacio entre la estrella y el contenido original */
}
/* Inserta contenido después del elemento */
.elemento::after {
content: "⭐"; /* Se muestra una estrella después del contenido del elemento */
display: inline-block; /* Asegura que el contenido insertado se comporte correctamente en línea */
margin-left: 5px; /* Añade espacio entre el contenido original y la estrella insertada */
}
::first-line
::first-line
aplica estilos exclusivamente a la primera línea de un bloque de contenido. Es útil para destacar la primera línea de un párrafo sin necesidad de envolverla en un contenedor adicional.
Ejemplo de uso:
p::first-line {
font-weight: bold; /* Se aplica negrita a la primera línea */
color: #2c3e50; /* Se cambia el color de la primera línea */
text-transform: uppercase; /* Convierte la primera línea a mayúsculas */
}
::first-letter
::first-letter
permite estilizar la primera letra de un elemento de bloque. Comúnmente se utiliza para generar efectos de capitulares, muy comunes en periódicos y revistas.
Ejemplo de uso:
p::first-letter {
font-size: 200%; /* Doble del tamaño de la letra base */
font-weight: bold; /* Negrita */
color: #e74c3c; /* Color rojo para la primera letra */
float: left; /* Flotación a la izquierda */
margin-right: 5px; /* Espaciado respecto al resto del texto */
}
Consideraciones avanzadas
El poder de los pseudo-elementos se aprovecha mejor cuando se combinan con otras propiedades de CSS para mejorar la experiencia de usuario y la presentación visual sin modificar el HTML.
Un ejemplo avanzado es el uso de ::after
para crear mensajes de feedback visual:
/* Añade un mensaje de validación después del input */
input:valid::after {
content: "✔️"; /* Checkmark indicativo de campo válido */
color: #27ae60; /* Color verde */
margin-left: 10px; /* Espaciado entre el input y el checkmark */
}
/* Añade un mensaje de error después del input */
input:invalid::after {
content: "✖️"; /* Cruz indicativa de campo inválido */
color: #e74c3c; /* Color rojo */
margin-left: 10px; /* Espaciado entre el input y la cruz */
}
Los pseudo-elementos permiten a los desarrolladores añadir detalles visuales y funcionales de forma elegante y eficiente, manteniendo el HTML limpio y semántico. La capacidad de insertar contenido antes y después de los elementos, y de estilizar selectivamente porciones del texto, proporciona flexibilidad y control en el diseño web.
Pseudo-elementos modernos
Los pseudo-elementos modernos en CSS extienden las capacidades de estilizado al permitir seleccionar y aplicar estilos a partes específicas de problemas visuales o estructurales que no se abordaban con los pseudo-elementos tradicionales. Estos pseudo-elementos avanzados permiten a los desarrolladores implementar diseños más complejos y detallados sin cambiar la estructura del HTML.
::marker
El pseudo-elemento ::marker
permite aplicar estilos a los marcadores de lista (li
), como puntos, números o cualquier otro símbolo que se utilice como marcador.
Ejemplo de uso:
/* Cambia el color y el tamaño de los marcadores de lista */
li::marker {
color: #ff4500; /* Color naranja */
font-size: 1.5em; /* Tamaño de fuente más grande */
}
::selection
El pseudo-elemento ::selection
permite aplicar estilos a la parte del documento que ha sido seleccionada por el usuario, como el texto resaltado con el ratón o mediante el teclado.
Ejemplo de uso:
/* Cambia el fondo y el color del texto seleccionado */
::selection {
background: #639; /* Fondo morado */
color: white; /* Texto blanco */
}
/* Selección más específica dentro de párrafos */
p::selection {
background: #ff4500; /* Fondo naranja */
color: black; /* Texto negro */
}
::backdrop
El pseudo-elemento ::backdrop
se utiliza en contextos de elementos que presentan contenido en diálogos modales completos (<dialog>
), permitiendo aplicar estilos al fondo que aparece detrás del contenido modal.
Ejemplo de uso:
/* Estilo para el fondo de un diálogo modal */
dialog::backdrop {
background-color: rgba(0, 0, 0, 0.8); /* Fondo negro semi-transparente */
}
::part
y ::theme
Los pseudo-elementos ::part
y ::theme
están diseñados para su uso con componentes web y permiten aplicar estilos a partes específicas de un Shadow DOM, rompiendo el encapsulamiento y permitiendo el estilo desde fuera del componente.
Ejemplo de uso:
/* En el componente web */
<my-component part="header"></my-component>
/* En el CSS global del documento */
my-component::part(header) {
background-color: #ff4500; /* Fondo naranja para la parte 'header' */
color: white; /* Texto en blanco */
}
::before
y ::after
con counter()
La combinación de los pseudo-elementos ::before
y ::after
con la función counter()
permite implementar contadores CSS avanzados para listas numeradas o procesos paso a paso.
Ejemplo de uso:
/* Define y resetea un contador */
ol {
counter-reset: section;
}
/* Incrementa el contador y añade contenido antes de cada li */
ol li::before {
counter-increment: section;
content: "Sección " counter(section) ": ";
font-weight: bold; /* Negrita */
color: #0073e6; /* Color azul */
}
Consideraciones avanzadas
La aplicación combinada de estos pseudo-elementos modernos permite a los desarrolladores crear interfaces de usuario avanzadas y detalladas sin comprometer la estructura semántica del HTML, y sin necesidad de implementar soluciones de JavaScript adicionales. Mantener la separación de estilo y estructura no solo mejora la mantenibilidad del código, sino que también asegura una mejor rendimiento y accesibilidad.
Ejercicios de esta lección Pseudo-clases y pseudo-elementos
Evalúa tus conocimientos de esta lección Pseudo-clases y pseudo-elementos con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Modelo de caja
Propiedad 'display'
Modelo de caja
Propiedades de posicionamiento
Sombras en texto y cajas
Variables en CSS
Grid en diseños de cuadrícula
Propiedades de texto
Animaciones y transiciones
Introducción a CSS
Selectores avanzados
Flexbox en diseños modernos
Sintaxis básica
Sintaxis
Estilos de fuente
Sintaxis avanzada
Herencia y cascada
Selectores básicos
Diseño responsive con media queries
Pseudo-clases y pseudo-elementos
Flexbox en diseños modernos
Elementos 'float' y 'clear'
Propiedades de texto
Propiedades de fondo
Metodologías BEM, SMACSS, OOCSS
Selectores básicos
Todas las lecciones de CSS
Accede a todas las lecciones de CSS y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Css
Introducción Y Entorno
Sintaxis
Sintaxis De Selectores Y Propiedades
Selectores Básicos
Sintaxis De Selectores Y Propiedades
Herencia Y Cascada
Sintaxis De Selectores Y Propiedades
Pseudo-clases Y Pseudo-elementos
Sintaxis De Selectores Y Propiedades
Estilos De Fuente
Estilización De Texto Y Fondo
Propiedades De Texto
Estilización De Texto Y Fondo
Sombras En Texto Y Cajas
Estilización De Texto Y Fondo
Propiedades De Fondo
Estilización De Texto Y Fondo
Modelo De Caja
Modelo Caja Y Posicionamiento
Propiedades De Posicionamiento
Modelo Caja Y Posicionamiento
Propiedad 'Display'
Modelo Caja Y Posicionamiento
Elementos 'Float' Y 'Clear'
Modelo Caja Y Posicionamiento
Flexbox Para Crear Layouts Y Estructuras
Flexbox Y Grid
Css Grid Para Crear Layouts Y Estructuras
Flexbox Y Grid
Animaciones Y Transiciones
Técnicas Modernas Y Metodologías
Variables En Css
Técnicas Modernas Y Metodologías
Diseño Responsive Con Media Queries
Técnicas Modernas Y Metodologías
Metodologías De Escritura En Css
Técnicas Modernas Y Metodologías
Introducción A Tailwind Css
Introducción Y Entorno
Instalación De Tailwind Css
Introducción Y Entorno
Fundamentos Del Sistema De Utility-first
Fundamentos
Fundamentos Del Diseño Responsive
Fundamentos
Tipografía Y Fuentes En Tailwind Css
Clases De Utilidad
Clases De Tamaño De Tailwind Css
Clases De Utilidad
Utilidades De Espaciado Y Alineación De Tailwind Css
Clases De Utilidad
Clases De Colores Y Fondo De Tailwind Css
Clases De Utilidad
Clases De Bordes De Tailwind Css
Clases De Utilidad
Hover, Focus Y Estado De Tailwind Css
Clases De Utilidad
Transiciones Y Animaciones De Tailwind Css
Clases De Utilidad
Contenedores Y Columnas En Tailwind Css
Layout
Flexbox En Tailwind Css
Layout
Grid En Tailwind Css
Layout
Evaluación Test Tailwind Css
Evaluación
Evaluación Código Tailwind Css
Evaluación
Certificados de superación de CSS
Supera todos los ejercicios de programación del curso de CSS y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender qué son las pseudo-clases y cómo se utilizan.
- Aplicar estilos basados en el estado o posición de los elementos.
- Usar pseudo-elementos para añadir contenido antes o después de los elementos.
- Conocer las pseudo-clases dinámicas y estructurales.
- Implementar pseudo-elementos modernos y sus aplicaciones avanzadas.