Accede a todo EDteam con un único pago¡Sube a premium con -50%!

Como controlar los saltos de línea con CSS

Aunque el método normal para saltar de línea es la etiqueta con css podemos crear efectos más interesantes.

Diseño web
3 minutos
Hace 6 años
Como controlar los saltos de línea con CSS

Estos días estuve en una maratón conmigo mismo creando el sitio web del EDcamp Lima 2018 y me surgieron muchos retos (que me planteé yo mismo pues yo diseñé el mockup ?) y uno de ellos fue controlar los saltos de línea con css, pues mi mockup era así:

Horarios EDcamp - desktop

Y en móvil necesitaba que los horarios de las charlas se muestren en una sola línea.

Horarios EDcamp - movil

Hice lo que haría todo mundo, incluí una etiqueta <br> entre la hora de inicio y final.

1<p class="talk__hour"> 2 3:55pm <br> 4:20pm 3</p> 4

Funciona, pero ¿cómo hago para que en móvil el salto de línea desaparezca y el horario de inicio y final se pongan uno al lado del otro? La solución rápida, pero muy fea, es encerrar los horarios en etiquetas y luego utilizar el css de toda la vida.

1<p class="talk__hour"> 2 <span class="talk__hour-start">3:55pm</span> 3 <span class="talk__hour-end">4:20pm</span> 4</p> 5
1@media screen and (min-width: 1024px) { 2 .talk__hour-start, 3 .talk__hour-end { 4 display: block 5 } 6} 7

Repito, funciona, pero es una solución fea. Te cuento como lo resolví al final.

Método 1. Controlar la etiqueta <br> con CSS

Puesto que <br> es una etiqueta más de HTML está en el DOM y podemos manipularla (al menos esa fue mi lógica). En mis pruebas solo me funcionó display: none y display:block mientras que variaciones como display:inline-block u otras no funcionaban. Menos aun usar pseudoelementos para imprimir alguna información en texto (yo necesitaba agregar un guión para separar las dos horas). Pero si solo quieres anular un salto de línea con <br> en cierto tamaño de pantalla esta es tu solución.

1@media screen and (max-width: 1024px) { 2 .talk__hour br { 3 display: none; 4 } 5} 6

Método 2. Usar una etiqueta <span> para controlar los saltos de línea

Aunque la etiqueta <span> no está pensada para saltos de línea, con un poco de creatividad resulta más práctica que <br> pues podemos controlarla completamente (incluso agregar pseudoelementos). Mi código HTML quedó así:

1<p class="talk__hour"> 2 3:55pm <span>-</span> 4:20pm 3</p> 4

El código anterior imprime ambos horarios en una sola línea (span es inline por defecto). Además imprime el guion intermedio ? Crear luego un salto de línea es muy sencillo:

1@media screen and (min-width: 1024px){ 2 .talk__hour span { 3 font-size: 0; 4 display: block; 5 } 6} 7

La línea 3 evita que se vea el guion y la línea 4 fuerza el salto de línea. Hermoso.

Podemos ir más allá y hacerlo reutilizable.

1@mixin br { 2 font-size: 0; 3 display: block; 4} 5 6$breakpoints: ( 7 s: 0, 8 m: 640, 9 l: 1024px, 10 xl: 1440px 11); 12 13@each $bp, $size in $breakpoints { 14 .#{$bp}-br { 15 display: inline; 16 @media screen and (min-width: map-get($breakpoints,$bp)) { 17 @include br; 18 } 19 } 20} 21

Y mi código HTML quedaría así:

1<p class="talk__hour"> 2 3:55pm <span class="l-br">-</span> 4:20pm 3</p> 4

El código CSS resultante luego de compilar Sass es el siguiente:

1.s-br { 2 display: inline; 3} 4 5@media screen and (min-width: 0) { 6 .s-br { 7 font-size: 0; 8 display: block; 9 } 10} 11 12.m-br { 13 display: inline; 14} 15 16@media screen and (min-width: 640) { 17 .m-br { 18 font-size: 0; 19 display: block; 20 } 21} 22 23.l-br { 24 display: inline; 25} 26 27@media screen and (min-width: 1024px) { 28 .l-br { 29 font-size: 0; 30 display: block; 31 } 32} 33 34.xl-br { 35 display: inline; 36} 37 38@media screen and (min-width: 1440px) { 39 .xl-br { 40 font-size: 0; 41 display: block; 42 } 43} 44

¿Qué hay de la etiqueta <wbr>?

La especificación de HTML incluye la etiqueta <wbr> (self closing) que significa 'Oportunidad de salto de línea'. Significa que podemos dividir una palabra realmente larga (por ejemplo una url) indicandole al navegador donde cortarla cuando no entre en su contenedor. Obviamente no funciona para nuestro caso.

Si quieres saber más trucos de Responsive Web Design, tenemos un curso en EDteam: https://ed.team/cursos/rwd

Tambien puedes leer este post en inglés.

Comentarios de los usuarios

Pregunta a ChatEDT