Errores comunes en JavaScript y cómo solucionarlos (guía práctica con ejemplos)
Jairo
Flexbox es un sistema de maquetación unidimensional pensado para distribuir y alinear elementos en una fila o una columna. Lo uso cuando necesito alinear, repartir espacio y responder a diferentes anchos sin pelearme con float o con posiciones absolutas. En mi experiencia, fue el salto que me permitió “domar” el layout: pasé de ajustar píxeles a colocar bloques que se adaptan a lo que el cliente pide.
Cuándo sí:
Cuándo no (o mejor usa Grid):
En mi caso, entender este mapa mental me quitó el 80% de los dolores: si algo “no se alinea”, casi siempre estaba atacando el eje equivocado.
<section class="flex-demo"> <div>A</div><div>B</div><div>C</div> </section>
.flex-demo{ display:flex; /* activa flex */ border:1px solid #ddd; padding:8px; gap:8px; } .flex-demo > div{ background:#f5f5f5; padding:12px; border-radius:8px; }
Con solo esto, los hijos se alinean en una fila y respetan su contenido. Para cambiar a columna:
.flex-demo{ display:flex; flex-direction:column; }
Desde que gap funciona en Flexbox, olvidé los “márgenes mágicos”.
.flex-demo{ display:flex; gap:12px; }
Cuando empecé con Flexbox, gap me ayudó a dejar de “romper” el header en móviles: sin márgenes encadenados, los saltos de línea fueron más previsibles.
<div class="center"> <button>¡Hola!</button> </div>
.center{ display:flex; align-items:center; /* eje cruzado */ justify-content:center; /* eje principal */ min-height:240px; background:#111; color:#fff; border-radius:12px; }
Mis páginas empezaron a “respirar” cuando separé responsabilidades: justify-content para repartir, align-items para alinear.
.menu{ display:flex; justify-content:space-between; align-items:center; }
.botones{ display:flex; justify-content:flex-end; gap:8px; }
.lista{ display:flex; flex-direction:column; gap:6px; }
.nav{ display:flex; gap:12px; }
@media (max-width: 640px){
.nav{ flex-direction:column; align-items:stretch; }
}
Cuando cambié flex-direction según el breakpoint, la navegación dejó de desbordarse en móviles; el cliente notó que el menú “por fin” se veía ordenado.
.grid-wrap{
display:flex; flex-wrap:wrap; gap:12px;
}
.grid-wrap > article{
flex:1 1 240px; /* grow | shrink | basis */
min-width:220px; /* evita mini-tarjetas demasiado estrechas */
}
.cards{
display:flex; gap:12px; align-items:stretch;
}
.cards > .card{
flex:1 1 280px; display:flex; flex-direction:column;
}
.card .body{ flex:1; }
.hero{ display:flex; gap:20px; }
.hero__texto{ order:1; }
.hero__imagen{ order:2; }
@media (max-width:768px){
.hero{ flex-direction:column; }
.hero__texto{ order:2; }
.hero__imagen{ order:1; }
}
Con order resolví un hero donde la foto debía ir arriba en móvil: no toqué el HTML y el cambio fue inmediato.
<body class="page"> <header>Header</header> <main class="page__main">Contenido</main> <footer>Footer</footer> </body>
.page{ min-height:100vh; display:flex; flex-direction:column; } .page__main{ flex:1; }
Listo: el footer se queda abajo aunque haya poco contenido.
<section class="cards-wrap"> <article class="card">A</article> <article class="card">B</article> <article class="card">C</article> <article class="card">D</article> </section>
.cards-wrap{ display:flex; flex-wrap:wrap; gap:16px; } .cards-wrap .card{ flex:1 1 calc(25% - 16px); min-width:220px; }
Se adaptará de 4→3→2→1 según espacio disponible.
<nav class="navbar">
<a>Logo</a>
<ul class="navlinks">
<li>Docs</li><li>Blog</li><li>Contacto</li>
</ul>
<button class="cta">Empezar</button>
</nav>
.navbar{ display:flex; align-items:center; justify-content:space-between; gap:12px; }
.navlinks{ display:flex; gap:12px; list-style:none; margin:0; padding:0; }
@media (max-width:700px){
.navbar{ flex-direction:column; align-items:stretch; }
.navlinks{ justify-content:space-between; }
.cta{ align-self:flex-end; }
}
En mis proyectos, esta combinación dio “pixel-perfection” sin perder rapidez: Grid arma, Flexbox afina.
Errores típicos:
Checklist (copiar/pegar en tu cabeza):
Flexbox simplifica la alineación, el reparto de espacio y la adaptación responsive del día a día. En mi experiencia, fue la pieza que hizo que mis layouts dejaran de “pelearse” con los cambios de contenido y pantalla. Empieza con display:flex, controla ejes con cabeza, y apóyate en wrap + min-width para interfaces robustas. Con las recetas de arriba tienes una base sólida para menús, cards, footers y héroes modernos.
No hay comentarios aún. ¡Sé el primero en comentar!
🍪 Utilizamos cookies para mejorar tu experiencia de navegación, analizar el tráfico del sitio y personalizar el contenido. Al continuar navegando, aceptas nuestro uso de cookies. Más información