Saltar al contenido

CSS, de a poco

Curso de CSS

Display

Lección 02 de 37 · 3 min

Cada caja tiene un tipo de display. Ese tipo decide si la caja arranca en una línea nueva o fluye con el texto, y si respeta el tamaño que le pedís.

Tres valores

La propiedad display define cómo se acomoda una caja respecto de las demás. Estos son los tres valores básicos:

  1. BloqueblockArranca en una línea nueva y, sin width, ocupa todo el ancho. Respeta width, height y los márgenes.
  2. En líneainlineFluye dentro de la línea de texto, como una palabra más. Su tamaño lo pone el contenido.
  3. Bloque en líneainline-blockFluye en la línea como inline, pero por dentro es un bloque: respeta width, height y los márgenes.

Elegí un valor y mirá cómo se acomodan las tres etiquetas dentro del párrafo. Las tres piden 64 × 40px; el contorno naranja es la caja que les da el navegador.

display
64 × 40px cada una
ancho real: 64px
ingrediente.css
.ingrediente {
display: inline-block;
width: 64px;
height: 40px;
padding: 8px;
margin: 8px;
}
ingrediente.html
<span class="inline-block w-16 h-10 p-2 m-2">palta</span>
<span class="inline-block w-16 h-10 p-2 m-2">tomate</span>
<span class="inline-block w-16 h-10 p-2 m-2">arroz</span>

Qué ignora inline

Una caja inline se mide por su contenido: ignora width y height, el margen de arriba y de abajo no se aplica, y el padding vertical se pinta pero no empuja las líneas vecinas: se les superpone.

Una caja con padding vertical en medio de un párrafo. Con inline el padding se pinta encima de las líneas vecinas, que no se mueven; con inline-block la línea se agranda y empuja a las demás.

Cada elemento HTML trae un display por defecto. div, p y h1 son block; span, a y strong son inline. img también es inline, pero como es un elemento reemplazado sí respeta width y height.

Si un elemento inline necesita tamaño o margen vertical, pasalo a inline-block:

etiqueta.css
.etiqueta {
display: inline-block;
padding: 4px 8px;
margin-block: 8px; /* ahora sí separa las líneas */
}

Ocultar una caja

Hay dos formas de ocultar una caja, y no hacen lo mismo. Con display: none la caja deja de existir para el layout y el resto cierra el hueco. Con visibility: hidden es invisible, pero conserva su lugar.

Tres etiquetas con la del medio oculta. Con display: none quedan dos, una al lado de la otra; con visibility: hidden queda un hueco del mismo tamaño entre las dos.

En los dos casos la caja no se puede enfocar y los lectores de pantalla la saltean. El atributo hidden de HTML aplica display: none por defecto.

En realidad display describe dos cosas: cómo se acomoda la caja afuera y cómo acomoda a sus hijos adentro. Por eso CSS también acepta una sintaxis de dos valores:

styles.css
display: block; /* = block flow */
display: inline; /* = inline flow */
display: inline-block; /* = inline flow-root */

La forma de una palabra sigue siendo la más usada. Flex y grid, que vienen más adelante, cambian el valor de adentro.

En Tailwind

Cada valor de display es una clase con el mismo nombre, salvo display: none, que se llama hidden. Las etiquetas de la demo quedan como inline-block w-16 h-10 p-2 m-2.

CSSTailwind
display: blockblock
display: inlineinline
display: inline-blockinline-block
display: flow-rootflow-root
display: nonehidden
visibility: hiddeninvisible
display según el anchohidden md:block
menu.html
<nav class="hidden md:block">…</nav>
<span class="inline-block px-2 py-1 my-2">etiqueta</span>
<div class="flow-root">…</div>