Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=63ba461f-dee0-4ebb-b77f-d629fcc12a97

CSS: Cómo introducir cambios de línea en seudoelementos ::before y ::after

Los seudoelementos ::before y ::after de CSS tienen multitud de utilidades: desde colocar un icono delante o detrás de un elemento, hasta simular elementos que no existen  que sustituyen a los que de verdad están ahí (como por ejemplo, sustituir botones de radio por otros elementos más atractivos).

Por poner un ejemplo sencillo, supongamos que tenemos una página con capítulos de un libro y queremos hacer que cada nuevo capítulo (que empieza por un encabezado de tipo h2) lleve encima una frase destacada para que sea fácil identificarlos (y además haga bonito), algo así:

Aspecto de los encabezados con la frase Nuevo capitulo encima, enmarcada e un tono rojizo y con bordes redondeados

Colocar esa especie de etiqueta es sencillo, pues basta con escribir este CSS en la página:

h2::before {
    content: "Nuevo Capítulo";
    white-space: pre;
    font-size: 0.6em;
    padding: 0.2em 0.4em;
    margin-right: 1em;
    border-radius: 0.2em ;
    background-color: #ec2222b0;
    color: white;
}

Básicamente se le coloca automáticamente a todos los encabezados h2 un seudoelemento ::before que irá delante. Quitando la propiedad content, que es la que define el contenido, lo demás son simplemente ajustes estéticos.

Nota: ojo, el uso de seudoelementos como este no es accesible para personas con dificultades de visión, ya que ese contenido no forma parte del DOM y por lo tanto no lo leen los lectores de pantalla, así que si lo que metas ahí va a ser relevante para el contenido, deberías meterlo en el propio HTML, no por CSS. Pero esto es otra batalla que queda para otro día...

El problema es que esto se verá de la siguiente manera:

La imagen muestra la etiqueta delante, pero no encima de los encabezados

Es decir, la etiqueta se verá delante del encabezado, pero no encima.

¿Cómo podemos hacer que se vea por encima? Bueno, en realidad hay muchas formas de hacerlo, pero la que te voy a contar me sirve de excusa para explicarte lo del título del artículo: le vamos a meter un cambio de línea al texto de la propiedad content de modo que se ponga encima del encabezado.

El truco está en utilizar el carácter Unicode para nueva línea, que es U+00A, y que se puede representar "escapeándolo" como \00000A o, de manera más abreviada como simplemente \A. O sea, así:

content: "Nuevo Capítulo\A";

Esto añade una nueva línea al final (obviamente, esto te puede servir para meter cambios de línea donde quieras dentro de content, no solo al final). El problema es que, a pesar de que el cambio de línea estar ahí, no te funcionará y todo seguirá viéndose como antes. ¿Por qué?

El motivo es que los seudoelementos que se añaden a otros elementos del DOM tiene por defecto el valor normal para la propiedad white-space, que regula la manera en la que se gestionan los espacios en blanco, los cuales incluyen los cambios de línea. El valor normal de esta propiedad hace que los cambios de línea se traten como cualquier otro espacio en blanco, o sea, que solo se cambia de línea cuando sea necesario por el espacio disponible, pero no por que lo indiques explícitamente. Por eso no le hacen caso.

Sabiendo esto, la solución es sencilla: establecer el valor de white-space a alguno que sí respete los cambios de línea, por ejemplo pre, pre-wrap o pre-line. De este modo, se cambiará de línea lo que está a continuación (la cabecera) y la etiqueta quedará encima, quedando como se muestra en la primera figura.

El código final es, por tanto, este (las 2 primeras propiedades son las necesarias):

h2::before {
    content: "Nuevo Capítulo\A";
    white-space: pre;
    font-size: 0.6em;
    padding: 0.2em 0.4em;
    margin-right: 1em;
    border-radius: 0.2em ;
    background-color: #ec2222b0;
    color: white;
}

¡Espero que te resulte útil!

Fecha de publicación:
José Manuel Alarcón Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José Manuel Alarcón
Archivado en: Desarrollo Web

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (1) -

Ohhh con que para eso puedo servir, muchas gracias amigo

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.