Block e inline: el flujo por defecto
Antes de aprender Flexbox o Grid, necesitás entender cómo el navegador dispone los elementos por defecto: el flujo normal. En el flujo normal hay dos tipos de caja: block e inline.
Elementos block
Un elemento block ocupa todo el ancho disponible de su contenedor y genera un salto de línea antes y después. Dos elementos block no pueden estar lado a lado: siempre se apilan.
<p>Café del día: Espresso</p>
<p>Precio: $4,50</p>
<!-- Aunque haya espacio al costado, los dos párrafos se apilan -->
Las características clave de un elemento block:
- Ancho: por defecto 100% del padre (no de la pantalla — del contenedor donde vive).
- Alto: lo determina el contenido (salvo que declares
height). widthyheightfuncionan: podés controlarlos con CSS.margin-topymargin-bottomfuncionan: crean espacio vertical real.
Elementos inline
Un elemento inline no genera saltos de línea: fluye dentro de la línea de texto como las palabras de un párrafo. Si hay espacio, el siguiente inline se pone al costado.
<p>
Probá nuestro
<strong>Cold Brew</strong>
o el <em>Flat White</em> — el mejor de la cuadra.
</p>
<!-- strong y em fluyen dentro del párrafo sin romper la línea -->
Las características clave de un elemento inline:
widthyheightse ignoran: el ancho y el alto los determina el contenido, no el CSS.margin-topymargin-bottomno desplazan el flujo: los márgenes verticales se renderizan pero no mueven las líneas vecinas.margin-leftymargin-rightsí funcionan.
Dato fino —
<img>es la excepción:<img>es inline por defecto, pero aceptawidthyheightporque es un replaced element (su contenido lo provee el navegador, no el HTML). No hace falta cambiarlo ainline-blockpara ponerle dimensiones.
Elementos block y inline comunes
Elementos block por defecto:
| Elemento | Uso semántico |
|---|---|
<div> | Contenedor genérico |
<p> | Párrafo |
<h1> a <h6> | Encabezados |
<section>, <article>, <header>, <footer>, <main>, <nav>, <aside> | Secciones semánticas |
<ul>, <ol> | Listas |
<li> | Ítem de lista (display: list-item por defecto) |
<blockquote>, <pre>, <figure> | Bloques de contenido especiales |
<form>, <table> | Formularios y tablas |
Elementos inline por defecto:
| Elemento | Uso semántico |
|---|---|
<span> | Contenedor genérico inline |
<a> | Hipervínculo |
<strong>, <em> | Énfasis semántico |
<small>, <mark>, <abbr>, <code>, <time> | Texto con semántica específica |
<img> | Imagen (inline replaced — acepta width/height) |
<input>, <button> | Controles de formulario |
Cambiar el display con CSS
Podés cambiar el tipo de caja de cualquier elemento con la propiedad display:
/* los li son list-item por defecto: se apilan */
/* para una barra de navegación en línea: */
li {
display: inline;
}
<nav>
<ul>
<li>Inicio</li>
<li>Menú</li>
<li>Contacto</li>
</ul>
</nav>
<!-- Ahora los tres li están en la misma línea -->
Importante:
displaycambia la representación visual de la caja, no lo que el elemento ES. Un<li>condisplay: inlinesigue siendo un ítem de lista para lectores de pantalla y motores de búsqueda. La semántica la da el HTML, no el CSS.
Tu turno: en el sandbox, convertí los li y el p.desc en inline y verificá con “Comprobar”.
Nota sobre el motor: el UA default de
<li>eslist-item(noinline). Si no escribís nada, el primer check falla conactual: "list-item"— eso es exactamente lo que queremos que veas. La propiedadwidthen un elementoinlineno es validable automáticamente:getComputedStyledevuelve el ancho real del contenido en px (impredicible), no el valor declarado. Por eso el bonus es solo para observar visualmente.
Cambiar el display de elementos a inline
El HTML de Café Aroma tiene un menú de navegación con ítems (`<li>`) y un párrafo de descripción (`<p class="desc">`). Por defecto, ambos son **block**: se apilan verticalmente y ocupan el ancho completo. En este ejercicio vas a cambiarlos a **inline** para que fluyan en la misma línea: 1. **Convertí los `<li>` en inline:** escribí `li { display: inline; }`. Fijate en el preview que los ítems del menú pasan de estar apilados a estar en la misma línea. 2. **Convertí el párrafo en inline:** escribí `p.desc { display: inline; }`. Fijate que el párrafo deja de ocupar el ancho completo y fluye junto con el texto anterior. **Bonus (no validado, solo para observar):** intentá ponerle `width: 200px` a los `li` con `display: inline`. ¿Funciona? Los elementos inline ignoran `width` y `height` — el ancho lo determina el contenido, no vos.
Preview
En la referencia
En esta página