====== 15. Sistema de diseño: Layout ====== En los temas de CSS vimos flex y grid. En este tema vamos a ver cómo se usan en nuestro sistema de diseño con bloques de layout de BEM (prefijo ''l-''). ===== Bloque de layout con flex ===== Un bloque de layout con flex sería así:
Item1
Item2
Item3
Item4
Item5
.l-flex { display: flex; } .l-flex--direction-row { flex-direction: row; } .l-flex--justify-content-center { justify-content: center; } .l-flex__area--grow2 { flex-grow: 2; } El padre es el bloque ''l-flex'' y cada hijo es un área ''l-flex__area''. Un área puede contener a su vez otro bloque de layout:
Item2
Item3
Item4
Item5
===== Bloques de layout con grid ===== ==== Bloque de Layout por columnas ==== Ejemplo de Layout con BEM por columnas. .l-columns { display: grid; grid-template-columns: repeat(1, 1fr); } .l-columns--2 { grid-template-columns: repeat(2, 1fr); } .l-columns--3 { grid-template-columns: repeat(3, 1fr); } .l-columns--4 { grid-template-columns: repeat(4, 1fr); }

Column A

Column B

Column C

Column D

Column E

Column F

==== span ==== Para que un área ocupe dos columnas se usa el modificador ''l-columns__area--span2'' (ver ''span'' en [[clase:daw:diw:css-flex-grid#span|CSS: Flex y Grid]]). .l-columns { display: grid; } .l-columns--4 { grid-template-columns: repeat(4, 1fr); } .l-columns__area--span2 { grid-column: span 2; }
===== Reglas de Layout ===== Para hacer una clase de Layout hay que seguir las siguientes reglas: * Siempre con dos elementos. * El ''div'' principal, al que llamaremos "padre" * Los ''div'' hijos que llamaremos "áreas" (Es para seguir la nomenclatura de grid) * El CSS solo debe tener cosas para modificar la posición (y a veces tamaño) de las Áreas pero no cambiar ni sus colores, fuentes, etc. * Puede ser optativo poner en las areas la clase del elemento si no tiene utilidad. * Las clases CSS de los elementos que son area se llamará ''__area'' o ''__area-YYYY''. .l-extremo { display: flex; } .l-extremo__area-izquierda { margin-right: auto; } .l-extremo__area-derecha { margin-left: auto; }
Pulsar Izquierda
Pulsar Derecha
* En un área se podría poner un componente ya que sus propiedades CSS no van a //chocar//.
Pulsar Izquierda
Pulsar Derecha
===== Mejorando el layout con SASS ===== Los bloques de layout con el selector padre ''&'': .l-flex { display: flex; &--direction-row { flex-direction: row; } &--justify-content-center { justify-content: center; } &__area { &--grow2 { flex-grow: 2; } } } .l-extremo { display: flex; &__area-izquierda { margin-right: auto; } &__area-derecha { margin-left: auto; } } Y en ''l-columns'' los modificadores de 1 a 12 columnas se generan con un bucle en vez de escribirlos uno a uno: .l-columns { display: grid; grid-template-columns: repeat(1, 1fr); @for $i from 1 through 12 { &--#{$i} { grid-template-columns: repeat($i, 1fr); } } &__area { &--span2 { grid-column: span 2; } } } ===== Ejercicios ===== ==== Ejercicio 1 ==== Crea los componentes que necesites para que funcione lo siguiente: CABECERA IZQUIERDA CUERPO DERECHA PIE