Propiedad 'display' - parte 1

Intermedio
CSS
CSS
Actualizado: 24/04/2026

Diagrama del tema

Comportamiento de elementos block vs inline

En CSS, cada elemento HTML tiene un comportamiento predeterminado que determina cómo se muestra y fluye en la página. Esta característica viene definida por la propiedad display, que establece si un elemento se comporta como block o como inline, entre otros valores posibles.

Elementos de tipo block

Los elementos de tipo block son aquellos que ocupan todo el ancho disponible de su contenedor y generan un salto de línea antes y después de ellos. Esto significa que siempre comienzan en una nueva línea y ningún otro elemento puede situarse a sus lados.

Algunos elementos HTML que son block por defecto:

  • <div>
  • <p>
  • <h1> a <h6>
  • <section>
  • <article>
  • <ul> y <ol>

Veamos un ejemplo básico de cómo se comportan:

<div>Este es un elemento block</div>
<div>Este es otro elemento block</div>
div {
  background-color: #e0f7fa;
  border: 1px solid #00838f;
  padding: 10px;
}

En este caso, cada <div> ocupará una línea completa, uno debajo del otro, independientemente de su contenido.

Elementos de tipo inline

Los elementos inline ocupan solo el espacio necesario para su contenido y no generan saltos de línea. Esto permite que varios elementos inline puedan colocarse uno junto a otro en la misma línea.

Elementos HTML que son inline por defecto:

  • <span>
  • <a>
  • <strong>
  • <em>
  • <img>
  • <button>

Veamos cómo se comportan:

<span>Este es un elemento inline</span>
<span>Este es otro elemento inline</span>
span {
  background-color: #fff9c4;
  border: 1px solid #fbc02d;
  padding: 5px;
}

Ambos elementos <span> aparecerán uno al lado del otro en la misma línea.

Diferencias clave en el comportamiento

Para entender mejor las diferencias entre elementos block e inline, veamos una comparación directa:

  • Flujo del documento:

  • Block: Siempre comienza en una nueva línea

  • Inline: Fluye dentro del texto, sin romper el flujo

  • Ancho por defecto:

  • Block: Ocupa el 100% del ancho disponible

  • Inline: Solo ocupa el espacio necesario para su contenido

  • Apilamiento:

  • Block: Se apilan verticalmente

  • Inline: Se colocan horizontalmente, uno al lado del otro

Podemos ver estas diferencias en acción con el siguiente ejemplo:

<div>Este es un elemento block</div>
<span>Este es un elemento inline</span>
<span>Este es otro elemento inline</span>
<div>Este es otro elemento block</div>
div {
  background-color: #e0f7fa;
  border: 1px solid #00838f;
  padding: 10px;
}

span {
  background-color: #fff9c4;
  border: 1px solid #fbc02d;
  padding: 5px;
}

Cambiando el comportamiento predeterminado

Podemos modificar el comportamiento natural de cualquier elemento usando la propiedad display:

/* Convertir un elemento block en inline */
div.inline-style {
  display: inline;
}

/* Convertir un elemento inline en block */
span.block-style {
  display: block;
}

Este ejemplo muestra cómo cambiar el comportamiento predeterminado:

<div>Elemento block normal</div>
<div class="inline-style">Elemento block convertido a inline</div>
<div class="inline-style">Otro elemento block convertido a inline</div>

<span>Elemento inline normal</span>
<span class="block-style">Elemento inline convertido a block</span>
<span>Otro elemento inline normal</span>
div {
  background-color: #e0f7fa;
  border: 1px solid #00838f;
  padding: 10px;
}

span {
  background-color: #fff9c4;
  border: 1px solid #fbc02d;
  padding: 5px;
}

.inline-style {
  display: inline;
}

.block-style {
  display: block;
}

Comportamiento en el contexto de flujo

El contexto de flujo es otro aspecto importante a considerar. Los elementos block crean su propio contexto de flujo, mientras que los elementos inline participan en el contexto de flujo de su contenedor.

Esto afecta a cómo interactúan con otros elementos:

<p>Este párrafo contiene <span>un elemento inline</span> que se adapta al flujo del texto.</p>
<div>Este div es un elemento block que rompe el flujo.</div>
p {
  background-color: #f1f8e9;
  padding: 10px;
}

span {
  background-color: #fff9c4;
  border: 1px solid #fbc02d;
  padding: 2px;
}

div {
  background-color: #e0f7fa;
  border: 1px solid #00838f;
  padding: 10px;
}

Comportamiento con respecto al espacio en blanco

Otra diferencia importante es cómo manejan el espacio en blanco en el HTML:

  • Los elementos inline respetan los espacios en blanco entre ellos en el código HTML
  • Los elementos block ignoran los espacios en blanco entre ellos
<span>Primer span</span>    <span>Segundo span</span>

<div>Primer div</div>
    
<div>Segundo div</div>

En este ejemplo, los espacios entre los elementos <span> se mostrarán en la página, mientras que los espacios entre los elementos <div> no afectarán a su visualización.

Anidación de elementos

La forma en que se anidan los elementos también sigue reglas específicas:

  • Un elemento block puede contener otros elementos block o inline
  • Un elemento inline debería contener solo otros elementos inline (aunque técnicamente puede contener elementos block, esto puede causar problemas de renderizado)
<!-- Anidación correcta -->
<div>
  <p>Este es un párrafo (block) dentro de un div (block)</p>
  <span>Este es un span (inline) dentro de un div (block)</span>
</div>

<!-- Anidación que puede causar problemas -->
<span>
  <div>Este es un div (block) dentro de un span (inline)</div>
</span>

Entender el comportamiento de los elementos block e inline es fundamental para crear diseños web efectivos y predecibles. Estos conceptos básicos son la base sobre la que se construyen técnicas más avanzadas de diseño con CSS.

Propiedades dimensionales en elementos block e inline

Cuando trabajamos con CSS, la forma en que podemos controlar las dimensiones de los elementos varía significativamente dependiendo de si son elementos block o inline. Estas diferencias son fundamentales para entender cómo crear diseños web efectivos.

Dimensiones en elementos block

Los elementos block aceptan todas las propiedades dimensionales y se pueden configurar con valores específicos. Las propiedades principales son:

  • width: Define el ancho del elemento
  • height: Define la altura del elemento
  • min-width/max-width: Establece límites mínimos y máximos para el ancho
  • min-height/max-height: Establece límites mínimos y máximos para la altura
.box {
  width: 300px;
  height: 200px;
  min-width: 100px;
  max-width: 500px;
  background-color: #e0f7fa;
  border: 2px solid #0097a7;
}

En este ejemplo, el elemento .box tendrá un ancho de 300px y una altura de 200px, con límites establecidos para que nunca sea más estrecho que 100px ni más ancho que 500px.

Dimensiones en elementos inline

A diferencia de los elementos block, los elementos inline tienen un comportamiento muy distinto respecto a las propiedades dimensionales:

  • Las propiedades width y height no tienen efecto en elementos inline
  • Las propiedades margin-top y margin-bottom no afectan a la altura ocupada
  • Las propiedades padding-top y padding-bottom se aplican visualmente pero no afectan al espacio que ocupa el elemento en el flujo del documento

Veamos un ejemplo que ilustra estas limitaciones:

<span class="inline-element">Este es un elemento inline con dimensiones</span>
.inline-element {
  width: 300px;      /* No tendrá efecto */
  height: 100px;     /* No tendrá efecto */
  margin: 20px;      /* Solo se aplicarán los márgenes horizontales */
  padding: 20px;     /* El padding se aplica visualmente pero no afecta al flujo */
  background-color: #fff9c4;
  border: 1px solid #fbc02d;
}

En este caso, aunque hemos definido un ancho y una altura específicos, el elemento <span> seguirá ocupando solo el espacio necesario para su contenido.

Comparación visual de comportamiento dimensional

Para entender mejor estas diferencias, veamos una comparación directa:

<div class="block-element">Elemento block</div>
<span class="inline-element">Elemento inline</span>
.block-element, .inline-element {
  width: 200px;
  height: 100px;
  margin: 20px;
  padding: 15px;
  background-color: #e8f5e9;
  border: 2px solid #66bb6a;
}

En este ejemplo:

  • El div respetará todas las dimensiones especificadas
  • El span ignorará el width, height y los márgenes verticales

Comportamiento con padding y margin

El padding (relleno interno) y el margin (margen externo) también se comportan de manera diferente:

/* Elemento block */
.block-box {
  width: 200px;
  padding: 20px;
  margin: 30px;
  background-color: #e3f2fd;
  border: 1px solid #2196f3;
}

/* Elemento inline */
.inline-text {
  padding: 20px;
  margin: 30px;  /* Solo se aplicarán los márgenes horizontales */
  background-color: #f3e5f5;
  border: 1px solid #9c27b0;
}

En elementos block, el ancho total ocupado será:

  • 200px (width) + 40px (padding izquierdo y derecho) + 2px (bordes) = 242px

Mientras que en elementos inline, el ancho dependerá del contenido, pero se respetarán los paddings horizontales y verticales (aunque estos últimos no afectan al flujo).

Uso de box-sizing para controlar el cálculo de dimensiones

La propiedad box-sizing afecta cómo se calculan las dimensiones finales de un elemento:

.content-box {
  box-sizing: content-box; /* Valor por defecto */
  width: 200px;
  padding: 20px;
  border: 5px solid #ff9800;
}

.border-box {
  box-sizing: border-box;
  width: 200px;
  padding: 20px;
  border: 5px solid #ff5722;
}

Con content-box (valor predeterminado):

  • Ancho total = 200px (width) + 40px (padding) + 10px (border) = 250px

Con border-box:

  • Ancho total = 200px (incluye padding y border)

Esta propiedad es especialmente útil para elementos block, ya que facilita el cálculo de dimensiones en diseños complejos.

Dimensiones porcentuales

Los elementos block también pueden usar dimensiones relativas como porcentajes:

.responsive-block {
  width: 50%;         /* 50% del ancho del contenedor */
  max-width: 600px;   /* Nunca más ancho que 600px */
  height: 300px;
  background-color: #fce4ec;
  border: 1px solid #ec407a;
}

Los porcentajes se calculan respecto al contenedor padre, lo que permite crear diseños más flexibles y adaptables.

Dimensiones automáticas

Los elementos block también pueden tener dimensiones automáticas:

.auto-width {
  width: auto;      /* Ocupará todo el ancho disponible (comportamiento predeterminado) */
  height: 100px;
  background-color: #f1f8e9;
  border: 1px solid #7cb342;
}

.auto-height {
  width: 200px;
  height: auto;     /* Se ajustará al contenido (comportamiento predeterminado) */
  background-color: #fffde7;
  border: 1px solid #fdd835;
}

El valor auto es especialmente útil cuando queremos que un elemento se ajuste a su contenido o al espacio disponible.

Dimensiones intrínsecas

CSS moderno ofrece propiedades para trabajar con dimensiones intrínsecas (basadas en el contenido):

.fit-content {
  width: fit-content;  /* Se ajusta al contenido, pero no más ancho que el contenedor */
  max-width: 100%;
  background-color: #e8eaf6;
  border: 1px solid #3f51b5;
}

.min-content {
  width: min-content;  /* Tan estrecho como sea posible sin romper el contenido */
  background-color: #fff3e0;
  border: 1px solid #ff9800;
}

.max-content {
  width: max-content;  /* Tan ancho como necesite el contenido sin saltos de línea */
  background-color: #e0f2f1;
  border: 1px solid #009688;
}

Estas propiedades son útiles para crear diseños que se adapten al contenido de manera inteligente.

Consideraciones prácticas

Al trabajar con dimensiones en CSS, es importante recordar:

  • Para elementos que necesitan dimensiones específicas, usa elementos block o cambia el display a inline-block o block
  • Si necesitas aplicar dimensiones a un elemento inline sin cambiar su comportamiento de flujo, considera usar display: inline-block
  • Utiliza box-sizing: border-box para facilitar el cálculo de dimensiones en diseños complejos
  • Combina dimensiones fijas y flexibles para crear diseños adaptables

Entender estas diferencias dimensionales entre elementos block e inline es esencial para crear diseños web coherentes y predecibles, especialmente cuando se trabaja con diseños responsivos.

Funcionamiento de inline-block y sus casos de uso

La propiedad display: inline-block representa un híbrido entre los comportamientos de elementos block e inline, combinando características de ambos mundos. Este valor de display es extremadamente útil cuando necesitamos aprovechar ventajas de ambos tipos de elementos.

Características principales de inline-block

Un elemento con display: inline-block se comporta de la siguiente manera:

  • Fluye como inline: Se coloca en línea con otros elementos, sin forzar saltos de línea
  • Acepta dimensiones como block: Permite establecer width, height, margin y padding en todas direcciones
  • Respeta el box model completo: A diferencia de los elementos inline puros
.inline-block-element {
  display: inline-block;
  width: 150px;
  height: 100px;
  margin: 10px;
  padding: 15px;
  background-color: #e1f5fe;
  border: 2px solid #03a9f4;
}

Veamos un ejemplo práctico:

<div class="container">
  <div class="inline-block-element">Elemento 1</div>
  <div class="inline-block-element">Elemento 2</div>
  <div class="inline-block-element">Elemento 3</div>
</div>
.container {
  background-color: #f5f5f5;
  padding: 20px;
}

.inline-block-element {
  display: inline-block;
  width: 150px;
  height: 100px;
  margin: 10px;
  padding: 15px;
  background-color: #e1f5fe;
  border: 2px solid #03a9f4;
  vertical-align: top; /* Importante para alineación */
}

En este ejemplo, los tres elementos se colocarán uno al lado del otro (comportamiento inline) mientras mantienen sus dimensiones específicas (comportamiento block).

Diferencias clave con inline y block

Para entender mejor el valor de inline-block, comparemos los tres tipos de display:

  • Block:

  • Ocupa todo el ancho disponible

  • Genera saltos de línea antes y después

  • Acepta todas las propiedades dimensionales

  • Inline:

  • Ocupa solo el espacio necesario para su contenido

  • No genera saltos de línea

  • Ignora width, height y márgenes verticales

  • Inline-block:

  • Ocupa solo el espacio necesario (como inline)

  • No genera saltos de línea (como inline)

  • Acepta todas las propiedades dimensionales (como block)

Espacios en blanco entre elementos inline-block

Un aspecto importante a considerar cuando trabajamos con inline-block es el espacio en blanco que se genera entre elementos:

<div class="container">
  <div class="inline-block-box">Uno</div>
  <div class="inline-block-box">Dos</div>
  <div class="inline-block-box">Tres</div>
</div>
.inline-block-box {
  display: inline-block;
  width: 100px;
  height: 100px;
  background-color: #bbdefb;
  border: 1px solid #1976d2;
  text-align: center;
  line-height: 100px;
}

En este ejemplo, aparecerán pequeños espacios entre los elementos debido a que el HTML interpreta los espacios en blanco y saltos de línea entre las etiquetas. Existen varias técnicas para eliminar estos espacios:

  • Eliminar espacios en el HTML:
<div class="container">
  <div class="inline-block-box">Uno</div><div class="inline-block-box">Dos</div><div class="inline-block-box">Tres</div>
</div>
  • Usar comentarios HTML:
<div class="container">
  <div class="inline-block-box">Uno</div><!--
  --><div class="inline-block-box">Dos</div><!--
  --><div class="inline-block-box">Tres</div>
</div>
  • Solución con CSS:
.container {
  font-size: 0; /* Elimina espacios entre elementos */
}

.inline-block-box {
  display: inline-block;
  width: 100px;
  height: 100px;
  font-size: 16px; /* Restaura el tamaño de fuente para el contenido */
  background-color: #bbdefb;
  border: 1px solid #1976d2;
}

Alineación vertical con inline-block

Una ventaja importante de inline-block es el control sobre la alineación vertical mediante la propiedad vertical-align:

.top-aligned {
  display: inline-block;
  vertical-align: top;
}

.middle-aligned {
  display: inline-block;
  vertical-align: middle;
}

.bottom-aligned {
  display: inline-block;
  vertical-align: bottom;
}

Esto es especialmente útil cuando tenemos elementos de diferentes alturas que necesitan alinearse de forma específica:

<div class="container">
  <div class="inline-block-box tall">Alto</div>
  <div class="inline-block-box short">Bajo</div>
  <div class="inline-block-box medium">Medio</div>
</div>
.container {
  background-color: #f5f5f5;
  padding: 20px;
}

.inline-block-box {
  display: inline-block;
  width: 100px;
  background-color: #bbdefb;
  border: 1px solid #1976d2;
  text-align: center;
  vertical-align: middle; /* Alineación vertical */
}

.tall { height: 150px; line-height: 150px; }
.medium { height: 100px; line-height: 100px; }
.short { height: 50px; line-height: 50px; }

Casos de uso prácticos para inline-block

El valor inline-block es particularmente útil en varios escenarios comunes:

1. Creación de menús de navegación horizontales

<nav>
  <ul class="menu">
    <li><a href="#">Inicio</a></li>
    <li><a href="#">Productos</a></li>
    <li><a href="#">Servicios</a></li>
    <li><a href="#">Contacto</a></li>
  </ul>
</nav>
.menu {
  list-style: none;
  padding: 0;
  margin: 0;
  background-color: #f8f9fa;
}

.menu li {
  display: inline-block;
}

.menu a {
  display: inline-block;
  padding: 10px 15px;
  text-decoration: none;
  color: #495057;
  transition: background-color 0.3s;
}

.menu a:hover {
  background-color: #e9ecef;
}

2. Creación de grids simples

<div class="simple-grid">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
  <div class="grid-item">4</div>
  <div class="grid-item">5</div>
  <div class="grid-item">6</div>
</div>
.simple-grid {
  text-align: center;
}

.grid-item {
  display: inline-block;
  width: 150px;
  height: 150px;
  margin: 10px;
  background-color: #dcedc8;
  border: 1px solid #8bc34a;
  line-height: 150px;
  font-size: 24px;
}

3. Botones con iconos alineados

<button class="icon-button">
  <span class="icon"></span>
  <span class="text">Buscar</span>
</button>
.icon-button {
  background-color: #4caf50;
  border: none;
  color: white;
  padding: 10px 15px;
  border-radius: 4px;
  cursor: pointer;
}

.icon, .text {
  display: inline-block;
  vertical-align: middle;
}

.icon {
  margin-right: 5px;
}

4. Formularios con campos alineados

<form class="aligned-form">
  <div class="form-row">
    <label for="name">Nombre:</label>
    <input type="text" id="name">
  </div>
  <div class="form-row">
    <label for="email">Email:</label>
    <input type="email" id="email">
  </div>
</form>
.form-row {
  margin-bottom: 10px;
}

.form-row label {
  display: inline-block;
  width: 100px;
  text-align: right;
  padding-right: 10px;
}

.form-row input {
  display: inline-block;
  width: 250px;
  padding: 5px;
}

Consideraciones de rendimiento

Aunque inline-block es muy útil, hay algunos aspectos a considerar:

  • Para layouts complejos, Flexbox o Grid pueden ofrecer más control y menos problemas
  • Los espacios en blanco entre elementos pueden ser problemáticos y requerir soluciones adicionales
  • El rendimiento puede verse afectado en layouts muy complejos con muchos elementos inline-block

Compatibilidad con navegadores

La propiedad display: inline-block tiene excelente soporte en todos los navegadores modernos. En versiones antiguas de Internet Explorer (IE 6-7), se requería algún hack, pero esto ya no es relevante en la actualidad.

Cuándo usar inline-block vs. otras alternativas

  • Usa inline-block cuando:

  • Necesites elementos en línea con dimensiones específicas

  • Quieras crear layouts simples sin la complejidad de Flexbox o Grid

  • Necesites alineación vertical precisa entre elementos

  • Estés creando componentes de interfaz como botones, menús o tarjetas en línea

  • Considera alternativas cuando:

  • Necesites layouts complejos y responsivos (usa Flexbox o Grid)

  • Tengas problemas con los espacios en blanco entre elementos

  • Requieras más control sobre la distribución del espacio

inline-block sigue siendo una herramienta valiosa en el arsenal de CSS, especialmente para componentes de interfaz y layouts simples donde su comportamiento híbrido ofrece la flexibilidad perfecta entre elementos block e inline.

Fuentes y referencias

Documentación oficial y recursos externos para profundizar en CSS

Documentación oficial de CSS
Alan Sastre - Autor del tutorial

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, CSS es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.

Más tutoriales de CSS

Explora más contenido relacionado con CSS y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección

Comprender la diferencia entre elementos block e inline y su comportamiento predeterminado. Aprender cómo afectan las propiedades dimensionales a elementos block, inline e inline-block. Conocer el valor 'inline-block' y sus casos de uso prácticos en diseño web.