Máster en Diseño Web | Módulo III | Introducción I

Módulo III
Programación Frontend

Pseudo clases & pseudo elementos

Pseudoclasses CSS

Llamamos pseudo clase a un tipo de pseudo-selector que aplica estilos a un estado concreto de los elementos del DOM en lugar de aplicarlos a los propios elementos en sí.

Su sintaxis es el nombre precedido por ":"


elemento:pseudoclase

Pseudoclases :link y :visited

Hacen referencia a un estado concreto de un enlace.


/* Estado enlace no visitado */
a:link {
    color: #c0ffee;
}

/* Estado enlace visitado */
a:visited {
    color: #decaff;
}
        
TIP - :link ha de aplicarse ANTES de :visited para que funcionen correctamente.

Pseudoclases :hover y :active

Hacen referencia a un estado concreto de un enlace.


/* Estado sobre un enlace */
a:hover {
    color: #bada55;
}

/* Estado enlace activo */
a:active {
    color: #1ad1e5;
}
        
TIP - :hover ha de aplicarse ANTES de :active para que funcionen correctamente.

Pseudoclase :first-child

Selecciona el primer hijo de un elemento.


/* Seleccionamos el primer elemento li de cualquier ul del DOM */
li:first-child {
    color: #fe0;
}

/* Seleccionamos el primer elemento li contenido en nav */
nav li:first-child {
    color: #1ad1e5;
}
        

Pseudoclase :last-child

Selecciona el último hijo de un elemento.


/* Seleccionamos el último elemento li de cualquier ul del DOM */
li:last-child {
    color: #fe0;
}

/* Seleccionamos el último elemento li contenido en nav */
nav li:last-child {
    color: #c55;
}
        

Pseudoclase :nth-child()

Selecciona el elemento dado en la expresión.
Mediante even y odd podemos seleccionar pares/i


/* Seleccionamos sólo los LI pares */
li:nth-child(even) {
    color: #fafafa;
}

/* Seleccionamos un LI de cada 3 */
li:nth-child(3n) {
    color: #fafafa;
}

        

Además podemos usar nth-last-child(2) para seleccionar el segundo elemento empezando por el final.

Pseudoclase :not()

:not() es una pseudoclase que admite como argumento a otro selector, el cual excluirá a la hora de aplicar su selección.


<ul>
    <li>Item 1</li>
    <li class="diferente">Item 2</li>
    <li>Item 3</li>
</ul>
        

/* Selecciona todos los LI excepto el de la class .diferente */
li:not(.diferente) { color: red; }
        
  • Item 1
  • Item 2
  • Item 3

Pseudoclase :target

Selecciona el elemento cuyo ID coincide con la URL del site.


/* Aplicamos color cuando la URL sea: http://mysite.com/#exoplanet */
section:exoplanet {
    background-color: #fe0;
}
        

ver ejemplo

Pseudoclase :checked

Selecciona el checkbox cuyo estado es 'checked'.


/* Aplicamos color a la etiqueta cuando el estado es checked */
input[type=checkbox]:checked + label {
  color: #fe0;
  font-style: normal;
}
        

Pseudoclase :focus

Definimos el estilo del estado 'hover' para enlaces y elementos input cuando se navega con el teclado.


/* Aplicamos estilo a un input text cuando su estado es focus */
input[type=text]:focus {
  color: black;
  background: yellow;
}
        

Pseudoclase :required

Definimos el estilo de todos los elementos INPUT que dispongan del atributo required.
De esta forma podemos identificar de forma diferente los campos obligatorios de un formulario.


/* Aplicamos estilo a un input obligatorio de un form */
input[type=text]:required {
  color: black;
  background: red;
}
        

Pseudoclase :optional

Representa todos los elementos INPUT que no tengan el atributo required.


/* Aplicamos estilo a un input obligatorio de un form */
input[type=text]:optional {
  color: black;
  background: lightgrey;
}
        

Pseudoclase :valid

Representa todos los elementos INPUT con contenido validado según hayamos especificado en su tipo.
De esta forma podemos aplicar un estilo diferente cuando el usuario ha introducido un valor que no se corresponde al esperado.


/* Aplicamos estilo para mostrar un input con contenido válido */
input[type=text]:valid {
  color: black;
  background: lightgreen;
}
        

Pseudoclase :invalid

Representa todos los elementos INPUT con contenido inválido según hayamos especificado en su tipo.


/* Aplicamos estilo para mostrar un input con contenido no válido */
input[type=text]:invalid {
  color: black;
  background: red;
}
        

Index of standard pseudo-classes

A día de hoy disponemos de las siguientes pseudoclases.
Es necesario consultar la compatibilidad de cada una en los diferentes navegadores web.

Pseudoelementos CSS

Llamamos pseudo elemento a una abstracción de un elemento en sí que puede no existir en el propio DOM.
También pueden referirse a una parte específica del elemento.


Su sintaxis es el nombre precedido por ::

elemento::pseudoelemento

Pseudoelemento ::before

Insertamos contenido antes de un elemento dado mediante la declaración content.


/* Insertamos un gato antes del párrafo */
h3::before {
    content: "(⊙_◎)";
    color: green;
    font-size: 0.7em;
    padding-right: 20px;
}

        

Say whaaat?

Pseudoelemento ::before

Además de texto podemos definir un alto y ancho y añadir una imagen de fondo
para mostrar gatos imágenes:


/* Insertamos un gato antes del párrafo */
p::before {
    content: "";
    background-image: url(cat-watching.gif);
    float: left; margin: 0 30px 0 50px; height: 250px; width: 400px;
}

        

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Assumenda, accusantium aspernatur reprehenderit in, doloribus nobis nisi quae tempora magni perspiciatis beatae!

Pseudoelemento ::after

Del mismo modo, podemos añadir contenido después de un elemento.


/* Insertamos otro gato después del párrafo */
p::after {
    content: "";
    background-image: url(whitecat.gif);
    position: absolute;
        top: -222px;
        right: -250px;
}

        

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Assumenda, accusantium aspernatur reprehenderit in, doloribus nobis nisi quae tempora magni perspiciatis beatae!

Pseudoelemento ::first-letter

Seleccionan únicamente la primera letra de la primera línea de un bloque.


/* Destacamos sólo la primera letra */
p::first-letter {
    background-color: rgba(255, 255, 255, 0.2);
    color: #D5C70F;
    display: inline-block;
    float: left;
    text-shadow: 2px 2px 2px #000;
}

        

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Assumenda, accusantium aspernatur reprehenderit in, doloribus nobis nisi quae tempora magni perspiciatis beatae!

Pseudoelemento ::first-line

Seleccionan únicamente la primera línea de un elemento de bloque que contenga texto. Sólo tiene efecto en elementos con su propiedad "display" en: block, inline-block, table-cell o table-caption.


/* Destacamos sólo la primera línea */
p::first-line {
    color: #D5C70F;
    font-size: 1.2em;
    line-height: 1.2;
    text-shadow: 2px 2px 2px #000;
}

        

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Assumenda, accusantium aspernatur reprehenderit in, doloribus nobis nisi quae tempora magni perspiciatis beatae!

Pseudoelemento ::selection

Se aplica únicamente a la parte de texto que ha sido seleccionada por el usuario con el mouse mediante pulsar y arrastrar.


/* Texto destacado */
p::selection {
    color: #D5C70F;
    background: transparent;
    text-shadow: 2px 2px 2px #000;
}

        

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Assumenda, accusantium aspernatur reprehenderit in, doloribus nobis nisi quae tempora magni perspiciatis beatae!

Este selector ha sido eliminado de la especificación CSS3 pero de momento los navegadores siguen dándole soporte.

Pseudoelemento ::backdrop

Se aplica únicamente cuando utilizamos la vista de navegador a pantalla completa.
Este pseudoelemento se usa junto a la pseudoclase :fullscreen.


/* Backdrop con un contenido fullscreen */
*:fullscreen::backdrop {
  position:fixed;
  top:0; right:0; bottom:0; left:0;
  background:black;
}
iframe:fullscreen {
  /* Añadimos los estilos del contenido que queremos ver a pantalla completa */
}

        

ver ejemplo

Index of standard pseudo-elements

En Mozilla Developer Network podemos consultar el listado completo de pseudoelementos soportados actualmente.
Es necesario consultar la compatibilidad de cada uno en los diferentes navegadores web.

Ejercicio

Dropdown menú con iconos

Links relacionados