2015: aprender layout en CSS de forma minuciosa
(book.mixu.net)- Es un material de aprendizaje por capítulos diseñado para que lectores que ya usaron layouts en CSS entiendan el algoritmo de layout hasta sus reglas detalladas
- Reexplica
inline,block,z-indexy el modelo de caja no como simples formas de uso, sino en términos de reglas de decisión como el contexto de formato y el contexto de apilamiento - En el flujo normal, la posición relativa de los elementos de bloque e inline no se define solo con
display, sino que también influyen los elementos hermanos y el contexto - El cálculo del tamaño del modelo de caja y de
margin: autocambia según el método de posicionamiento, así que es difícil memorizarlo como una sola regla - Recorre flujo normal, float, posicionamiento absoluto, margin collapsing, overflow,
z-index, pseudoelementos y Flexbox, para luego llegar a problemas prácticos de layout como centrado y frameworks de grillas
Entender el layout de CSS como reglas
- Este material presenta el layout de CSS no como una colección de tips, sino como un sistema basado en reglas, y explica cada una siguiendo los capítulos paso a paso
- Como sugiere la expresión “pedantic”, adopta un enfoque que presta atención incluso a detalles que parecen menores y a reglas formales
- No está dirigido a quien aprende CSS por primera vez, sino a quien ya usa CSS pero quiere entender con más rigor cómo funciona el layout
- Como los sitios web suelen evolucionar de forma gradual, es fácil aprender layout solo con pequeños tips y trucos, y en ese proceso pasar por alto el algoritmo de layout en sí
- Trata los conceptos principales en orden y ofrece ejemplos de aplicación para comprobar cada concepto
Estructura por capítulos
- Chapter 1: Box positioning in CSS trata sobre cómo se acomodan entre sí las cajas que generan los elementos HTML
- Los tres principales métodos de posicionamiento en CSS: flujo normal, float y posicionamiento absoluto
- En el flujo normal: anonymous box generation, formatting context, line box y alineación dentro de la line box
- Orden de los float, clearfix e interacción entre float y la altura del contenedor padre
- Chapter 2: Box sizing in CSS trata el modelo de caja y las diferencias según el método de posicionamiento
- El cálculo de
height,widthymarginusa mecanismos distintos entre sí - Para entender cómo se calculan, hay que ver juntos el método de posicionamiento actual y el mecanismo de cálculo
- El cálculo de
- Chapter 3: Additional properties that influence positioning organiza propiedades y mecanismos adicionales que afectan la disposición de las cajas
- margin collapsing, negative margins, overflow
max-width,max-height,min-width,min-height- contexto de apilamiento y
z-index - El efecto de los pseudoelementos sobre el layout
- La propiedad
box-sizingde CSS3
- Chapter 4: Flexbox explica el modo de layout Flexbox de CSS 3
- Chapter 5: CSS layout - tricks and layout techniques aplica lo visto en los capítulos anteriores a problemas reales
- Centrado horizontal y vertical
- Cómo funcionan los frameworks de grillas en CSS
- Layouts de varias columnas
- Errores comunes y trucos de layout
- El reference index puede usarse para buscar un concepto o propiedad específica y saltar al capítulo y sección relacionados
1 comentarios
Opiniones de Hacker News
Lo primero que habría que decir al explicar layouts en CSS es que existen cuatro sistemas de layout distintos:
table, el más antiguo, que todavía se usa en correos;float, para imágenes dentro del texto;flexbox, el más usado hoy; ygrid, la alternativa moderna atableEl posicionamiento
absoluteyfixedtambién puede usarse como un hack para esquivar el layoutabsoluteyfixedno son hacks ni “esquivan” el layoutAmbos son dos de las cinco opciones de posicionamiento que determinan cómo se ubica y se comporta un elemento dentro del flujo del documento o dentro de un contenedor específico: https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layou...
flexboxygridLa propiedad
floattambién puede usarse junto con Grid. Falta el sistema de layout más simple y básico, el flujo normal: https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layou...tablees el sistema de layout CSS más antiguo y todavía se usa en correos” no es del todo exactoEl marcado real de tablas HTML fue una de las formas más antiguas de colocar partes de una página web lado a lado, y también se usa en correos, pero eso es un tema aparte de CSS
En CSS existen
display: tabley valores relacionados, pero, si mal no recuerdo, en los IE antiguos era más difícil de usar quefloaty su uso era limitado. En la web moderna casi nunca he visto que se use mucho, quizá porque los requisitos de marcado alrededor son demasiado estrictos. Por ejemplo, no hay forma de cambiar el orden, y si se necesitan varias filas hay que poner dentro del HTML los elementos que cumplan ese rolflex, y antes de escribir CSS conviene traer reglas decss-resethechas por otra personaPorque cambian comportamientos antiguos de compatibilidad hacia atrás por valores predeterminados más razonables. Ej.: https://www.joshwcomeau.com/css/custom-css-reset/#our-finish...
tableno es el sistema de layout CSS más antiguo. Ese es el layout de flujo, que, extrañamente, ni siquiera aparece en esta listaLa explicación de que
float“se usa para colocar cajas en los bordes izquierdo y derecho de una caja contenedora” no es precisaSe puede hacer eso con
float, pero desde que aparecieronflexboxygridya no se usa así. Como el elemento sale del flujo normal, para quien está aprendiendo CSS es una forma confusa de construir layoutsfloates más una herramienta de composición tipográfica que una herramienta de layout. Si el texto se presenta como pedantic, debería ser más meticulosoBásicamente se hicieron como una especie de Microsoft Word para archivos en la computadora de otra persona, por eso la mayoría de las propiedades iniciales, como
float, eran para composición de layoutltrortl, hacia la derecha o la izquierda del elemento anteriorSi no queda espacio, bajan por debajo de los elementos anteriores. Si un elemento tiene
display: block, ocupa todo el espacio horizontal, así que todos los elementos posteriores flotan debajo de él. Por eso se llamafloat, y es la forma en que se calcula la posición de los elementosAl usar
float:left|right, se fuerza a ese elemento a flotar primero hacia la izquierda o la derecha antes que otros elementos dentro del mismo contenedor. Por supuesto, si el contenedor usaflexogrid, ya no se comporta de esta manerafloaty su flujo especial, y explica cómo reutilizar y aplicar con cuidado ese comportamiento para otros finesSobre todo considerando que, en el momento en que se escribió, no existían layouts con
flexbox/grid, me parece una explicación meticulosa suficienteflexboxsimplifica el proceso con esta herramientaReduce la necesidad de preocuparse por varias propiedades: https://flexboxcss.com
floatEn especial cuando la nota tiene que alinearse con el punto de referencia en medio de un párrafo
Este tipo de artículo se siente abrumador incluso si es anterior a CSS Grid. Con la llegada de CSS Grid, el layout en CSS se volvió más complejo, y aunque llevo 10 años haciendo desarrollo web, sigo sintiendo que CSS no tiene fondo
Su forma de funcionar, los casos límite raros, el funcionamiento interno y la enorme cantidad de funcionalidades; además, hace poco escribí un artículo relacionado
Antes de poder ponerme al día con todos los detalles de Grid Layouting, aparecieron subgrid y container queries. Varias de las propiedades nuevas son tan específicas que dudo si alguna vez las usaré (
hanging-punctuation,font-palette, cosas así)Hay al menos tres propiedades relacionadas solo con la separación silábica de párrafos, y uno podría no saber que la propiedad
filtertambién admite un tipo de filtros completamente distinto que usa SVG. También se puede ajustar el algoritmo de escalado de imágenes, yborder-radiusincluso admite esquinas elípticasEsto podría decirse de cualquier tecnología, pero CSS es distinto. Hace demasiadas cosas de demasiadas maneras, y cambia demasiado, demasiado rápido: https://shubhamjain.co/2024/02/19/css-impossible-thats-okay/
Llevo más tiempo trabajando con CSS, pero ni siquiera intento memorizar si es
align-itemsojustify-content, así que no lo recuerdo. En cuanto uso flexbox, abro https://css-tricks.com/snippets/css/a-guide-to-flexbox/Grid lo recuerdo todavía menos. Aun así, después de quejarme un par de veces y decir WTF, puedo crear lo que quiero con bastante facilidad, así que no siento que no tenga fondo. He oído mucho ese tipo de comentarios sobre CSS, pero en la mayoría de los casos siento que es bastante fácil crear el layout que quiero sin mucho esfuerzo. Simplemente no memorizo CSS como memorizo JS
Ambos están bien documentados y son relativamente intuitivos; en particular, grid tiene pocos comportamientos raros
Hoy en día no hace falta saber demasiado sobre flow layout, y se pueden omitir por completo los layouts con float y table. Basta con usarlos para su propósito original: imágenes flotantes dentro de contenido de texto y tablas reales
Cuando hice mi primer trabajo real de frontend y cobré dólares, estaba generando DHTML directamente desde perl. Incluso escribir esa sigla quedó tan lejos de la caché de memoria muscular que mis dedos se traban
Sé de frontend como un niño de seis años que sabe cálculo, así que ahora siento que ya no hay forma de ponerme al día
Aunque uso CSS plano y normalmente tampoco tengo una hoja de estilos global, lo cual ayuda bastante
Desarrollo muchas apps de UI y uso principalmente Angular, pero últimamente simplemente uso frameworks como Bootstrap o Foundation
La enorme cantidad de opciones de layout en CSS puro, especialmente en diseño responsive, es abrumadora y da dolor de cabeza. Intenté usar CSS puro, pero al final terminé usando mucho boilerplate y creando algo parecido a un mini framework
Si no estás creando un sitio web de diseñador a medida, personalmente no veo necesidad de reinventar la rueda todo el tiempo
CSS no necesariamente es reinventar la rueda; permite hacer más fáciles y potentes los layouts difíciles o tareas que antes requerían JS
Bootstrap también está bien, pero para resolver problemas de layout avanzados termino inspeccionando mucho los elementos para ver qué estilos se aplican realmente. Al menos esa fue mi experiencia, y por eso personalmente apostaría por CSS
La nueva función que espero es la regla
@scope, que parece que hará mucho más fácil crear estilos con scopehttps://open-props.style/
https://developer.mozilla.org/en-US/docs/Web/CSS/@scope
¿Este artículo se escribió antes de CSS Grid y CSS columns?
También hay un artículo sobre z-index: https://philipwalton.com/articles/what-no-one-told-you-about...
Al ver que en el capítulo 3 trata margin collapsing y negative margins, este artículo prioriza entender técnicas de layout antiguas
Tiene valor cuando se trabaja con codebases legacy, pero en proyectos nuevos es mejor evitarlas
¿Cuál es la mejor forma de aprender CSS a fondo? La documentación oficial se siente un poco rara en cuanto a qué sigue vigente y qué no
Si uno piensa que en neerlandés current se traduce como
actueely actual comodaadwerkelijk, se entiende perfectamente. Si confunde a un hablante nativo, incluso puede servir de ayudaPuede que esto aplique a cierto estilo de aprendizaje, pero al manipular estilos y layouts en la práctica, realmente se te queda la parte práctica de cómo funcionan
Al usar CSS, mi objetivo es escribir lo menos posible. No porque odie CSS; al contrario, creo que tiene una mala reputación injusta, sino porque así se puede aprender a dar estilo a layouts de forma más efectiva sin acumular demasiadas declaraciones
El mejor recurso para los fundamentos de CSS fue https://web.dev/learn/css, e incluye flexbox y grid
Como guía de diseño, recomiendo Refactoring UI. Tiene muchos consejos accionables que les faltan a libros como The UX Book
En mi proyecto uso TailwindCSS, de los autores de Refactoring UI, y componentes de Daisy UI, así que en la práctica no escribo CSS crudo. Al principio TailwindCSS se siente como una regresión a CSS inline, pero simplemente es mejor que las alternativas. Recomiendo probarlo
[1] https://drafts.csswg.org/
[2] https://developer.mozilla.org/en-US/docs/Web/CSS
La primera no es un material de aprendizaje para nuevos desarrolladores web. La segunda tampoco es oficial ni una documentación autoritativa, pero normalmente tiene información sobre soporte Baseline y tablas de compatibilidad de navegadores
marginypaddingTambién conviene aprender cómo funciona la cascada de estilos, y así entender por qué se usan SCSS y el desarrollo por componentes para hacer que uno casi no tenga que preocuparse por eso
También aprende media queries y cómo apuntar a distintos tamaños de pantalla. Sobre todo, no hay que avergonzarse de buscar en la web “cómo hacer x en CSS”. La especificación es enorme y hay mucho que memorizar, así que si no lo usas con frecuencia durante mucho tiempo, no puedes recordarlo todo