clase:daw:diw:1eval:tema06
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| clase:daw:diw:1eval:tema06 [2025/11/07 12:27] – Lorenzo | clase:daw:diw:1eval:tema06 [2026/10/23 23:04] (actual) – Reorganización del módulo: contenido movido a las páginas nuevas de clase:daw:diw claude | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== 6. Flex y Grid ====== | ||
| - | En este tema vamos a explicar principalmente el layout en CSS con //flexbox// y //grid//. | ||
| - | |||
| - | ===== Flexbox ===== | ||
| - | Flex se utiliza para colocar cosas de forma horizontal o vertical. | ||
| - | |||
| - | |||
| - | * [[https:// | ||
| - | * {{css_flexbox_layout_cheatsheet.pdf|Flexbox Layout Cheatsheet. Otra gía rápida de flexbox}} | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | Vamos a explicar flex con el siguiente ejemplo: | ||
| - | <sxh html> | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | |||
| - | <sxh css> | ||
| - | .l-flex { | ||
| - | display: flex; | ||
| - | |||
| - | & | ||
| - | flex-direction: | ||
| - | } | ||
| - | |||
| - | & | ||
| - | justify-content: | ||
| - | } | ||
| - | |||
| - | &__area { | ||
| - | // Si tuvieras más propiedades para el área, las pondrías aquí | ||
| - | & | ||
| - | flex-grow: 2; | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | |||
| - | Como vemos hay dos tipos de elementos, el contenedor y los items que hay centro. El contenedor siempre tendrá la siguiente línea '' | ||
| - | |||
| - | * Veamos otro ejemplo: | ||
| - | |||
| - | <sxh html> | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | </ | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Ahora veremos algunas de las opciones que permite flex. | ||
| - | |||
| - | ==== flex-direction ==== | ||
| - | Para hacer que los item se muestren de forma vertical u horizontal. Sus valores son | ||
| - | |||
| - | * '' | ||
| - | |||
| - | {{: | ||
| - | |||
| - | * '' | ||
| - | |||
| - | {{: | ||
| - | |||
| - | ==== flex-wrap ==== | ||
| - | Para hacer que si no caben en una línea, se pasen a la línea siguiente. | ||
| - | * '' | ||
| - | |||
| - | {{: | ||
| - | |||
| - | ==== justify-content ==== | ||
| - | Es como se distribuye el espacio sobrante en horizontal. Hacía la izquierda, derecha, ocupando todo el espacio, etc, etc. | ||
| - | |||
| - | Alguno de sus posibles valores son: | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | {{: | ||
| - | |||
| - | ==== align-content ==== | ||
| - | Es como se distribuye el espacio sobrante en vertical. Hacía arriba, abajo, ocupando todo el espacio, etc, etc. | ||
| - | |||
| - | Alguno de sus posibles valores son: | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | {{: | ||
| - | |||
| - | ==== align-items ==== | ||
| - | Si los elementos se justifican hacía arriba, abajo, ocupando todo el espacio, etc, etc. | ||
| - | |||
| - | Alguno de sus posibles valores son: | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | {{: | ||
| - | |||
| - | ==== flex-grow ==== | ||
| - | Permite que crezca el item si hay mas espacio. Por defecto el valor es '' | ||
| - | |||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | {{: | ||
| - | |||
| - | |||
| - | <note tip>Se usa entro de los " | ||
| - | |||
| - | En el siguiente ejemplo, '' | ||
| - | <sxh html> | ||
| - | <div style=" | ||
| - | <div style=" | ||
| - | <div style=" | ||
| - | <div style=" | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <note tip> | ||
| - | Si definimos '' | ||
| - | </ | ||
| - | |||
| - | |||
| - | ==== flex-shrink ==== | ||
| - | Indica que un item puede reducir su tamaño en comparación con otros items cuando el contenedor es más pequeño que el tamaño total de los elementos. | ||
| - | |||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | |||
| - | Ejemplo: Si tienes tres elementos en un contenedor y uno tiene flex-shrink: | ||
| - | |||
| - | |||
| - | <note tip>Se usa entro de los " | ||
| - | |||
| - | <note tip> | ||
| - | Solo tiene sentido usar '' | ||
| - | |||
| - | Ya que si '' | ||
| - | </ | ||
| - | |||
| - | ==== flex-basis ==== | ||
| - | Define el tamaño inicial de un item antes de que se aplique el crecimiento o la reducción. Es el tamaño en el que se basa el elemento antes de que el espacio adicional sea distribuido (con '' | ||
| - | |||
| - | <note tip>Se usa entro de los " | ||
| - | |||
| - | Veamos ahora un ejemplo completo de las 3 propiedades: | ||
| - | |||
| - | <sxh python> | ||
| - | < | ||
| - | <html lang=" | ||
| - | < | ||
| - | <meta charset=" | ||
| - | <meta name=" | ||
| - | < | ||
| - | < | ||
| - | .container { | ||
| - | display: flex; | ||
| - | } | ||
| - | .item { | ||
| - | border: 1px solid #FF0000; | ||
| - | } | ||
| - | .item1 { | ||
| - | flex-basis: 300px; | ||
| - | flex-shrink: | ||
| - | } | ||
| - | .item2 { | ||
| - | flex-basis: 300px; | ||
| - | flex-shrink: | ||
| - | } | ||
| - | .item3 { | ||
| - | flex-grow:1 | ||
| - | } | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | |||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | |||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | La explicación es: | ||
| - | * El '' | ||
| - | * El '' | ||
| - | * El '' | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ==== flex ==== | ||
| - | Es poner en una misma linea '' | ||
| - | |||
| - | |||
| - | <note tip>Se usa entro de los " | ||
| - | |||
| - | Mas información en: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | ==== margin y auto ==== | ||
| - | Una utilidad de flexbox es hacer menús pero a veces queremos mover algunos item hacia la derecha.El truco para hacerlo es usar '' | ||
| - | |||
| - | |||
| - | <sxh html> | ||
| - | <div style=" | ||
| - | <div > | ||
| - | <div > | ||
| - | <div > | ||
| - | <div style=" | ||
| - | <div > | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | En el ejemplo, los items 1 , 2 y 3 estarán pegados a la izquierda y los items 4 y 5 estarán pegados a la derecha. | ||
| - | |||
| - | |||
| - | Mas información en: | ||
| - | |||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | <note tip> | ||
| - | {{ : | ||
| - | Para aprender flexbox puede jugar a [[https:// | ||
| - | |||
| - | </ | ||
| - | |||
| - | ===== Grid ===== | ||
| - | Grid permite colocar cosas en dos dimensiones. Como si fuera una rejilla (un grid en inglés). | ||
| - | |||
| - | * Guías completas de Grid: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * {{css_grid_layout_cheatsheet.pdf|}} | ||
| - | * Grid vs FlexBox: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * Mas información: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | <sxh css> | ||
| - | .container { | ||
| - | display: | ||
| - | grid-template-columns: | ||
| - | grid-template-rows: | ||
| - | } | ||
| - | |||
| - | .item { | ||
| - | border:1px solid red; | ||
| - | } | ||
| - | </ | ||
| - | <sxh html> | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | ==== grid-template-columns ==== | ||
| - | Indica el tamaño de cada columna | ||
| - | |||
| - | Las unidades pueden ser: | ||
| - | * Tamaño fijo: Usar px | ||
| - | * auto: Coje el menos tamaño posible | ||
| - | * fr: Es una fracción del espacio libre después de quitar las columnas de tamaño fijo (Las 2 formas anteriores, px y auto) | ||
| - | |||
| - | Ejemplos: | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | |||
| - | ==== repeat ==== | ||
| - | |||
| - | Si hay muchas columnas y todas del mismo tamaño en vez de | ||
| - | <sxh css> | ||
| - | .container { | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | </ | ||
| - | se puede escribir: | ||
| - | <sxh css> | ||
| - | grid-template-columns: | ||
| - | </ | ||
| - | |||
| - | \\ | ||
| - | \\ | ||
| - | |||
| - | o en vez de | ||
| - | |||
| - | <sxh css> | ||
| - | .container { | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | </ | ||
| - | se puede escribir: | ||
| - | <sxh css> | ||
| - | grid-template-columns: | ||
| - | </ | ||
| - | |||
| - | ==== auto-fit ==== | ||
| - | Si el tamaño de las columnas es fijo se puede hacer lo siguiente para no especificar el número de columnas y que sea variable según el ancho de la ventana: | ||
| - | |||
| - | <sxh css> | ||
| - | .container { | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | </ | ||
| - | En ese caso ocupará todas las filas que sea necesario para poder poner ponerlo todo. Es una forma de hacer las cosas responsivas. | ||
| - | |||
| - | \\ | ||
| - | \\ | ||
| - | |||
| - | Por último se puede usar la función '' | ||
| - | |||
| - | <sxh css> | ||
| - | .container { | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Que hará que cada columna ocupe como mínimo 100px y si hay mas espacio crecerá hasta ocupar todo. Pero se crearán tantas filas como sea necesario. Mas información en [[https:// | ||
| - | |||
| - | <note tip> | ||
| - | La función '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | </ | ||
| - | |||
| - | ==== Ejemplo ==== | ||
| - | Veamos ahora un ejemplo de la diferencia entre '' | ||
| - | |||
| - | <sxh css> | ||
| - | .container { | ||
| - | display: | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | .container2 { | ||
| - | display: | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | .container3 { | ||
| - | display: | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | |||
| - | .container4 { | ||
| - | display: | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | |||
| - | .item { | ||
| - | border:1px solid red; | ||
| - | } | ||
| - | .item2 { | ||
| - | border:1px solid green; | ||
| - | } | ||
| - | .item3 { | ||
| - | border:1px solid blue; | ||
| - | } | ||
| - | |||
| - | .item4 { | ||
| - | border:1px solid pink; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <sxh html> | ||
| - | < | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | <br> | ||
| - | < | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | <br> | ||
| - | < | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | |||
| - | </ | ||
| - | |||
| - | ==== grid-template-rows ==== | ||
| - | Es lo mismo que '' | ||
| - | |||
| - | ==== gap ==== | ||
| - | Indica la separación entre cada una de las celdas del grid. | ||
| - | |||
| - | <sxh css> | ||
| - | .container { | ||
| - | gap: 15px 10px; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | {{: | ||
| - | |||
| - | |||
| - | <note important> | ||
| - | La propiedad '' | ||
| - | |||
| - | |||
| - | |||
| - | ==== Bloque de Layout por columnas ==== | ||
| - | Ejemplo de Layout con BEM por columnas. | ||
| - | |||
| - | <sxh css> | ||
| - | .l-columns { | ||
| - | display: grid; | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | |||
| - | .l-columns--2 { | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | .l-columns--3 { | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | .l-columns--4 { | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | |||
| - | |||
| - | |||
| - | </ | ||
| - | |||
| - | <sxh html> | ||
| - | <div class=" | ||
| - | <div> | ||
| - | < | ||
| - | </ | ||
| - | <div > | ||
| - | < | ||
| - | </ | ||
| - | <div> | ||
| - | < | ||
| - | </ | ||
| - | <div> | ||
| - | < | ||
| - | </ | ||
| - | <div> | ||
| - | < | ||
| - | </ | ||
| - | <div> | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | ==== span ==== | ||
| - | Se puede hacer que un elemento ocupe más de una columna con '' | ||
| - | |||
| - | <sxh css> | ||
| - | .l-columns { | ||
| - | display: grid; | ||
| - | |||
| - | &--4 { | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | |||
| - | &__area { | ||
| - | // Si tuvieras más estilos para el área, irían aquí | ||
| - | & | ||
| - | grid-column: | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | <sxh html> | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | * Mas información | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | ==== grid-template-areas ==== | ||
| - | la propiedad '' | ||
| - | |||
| - | <sxh html> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | <meta charset=" | ||
| - | <meta name=" | ||
| - | < | ||
| - | .contenedor { | ||
| - | display: grid; | ||
| - | grid-template-areas: | ||
| - | " | ||
| - | " | ||
| - | "pie pie pie pie pie"; | ||
| - | } | ||
| - | |||
| - | .cabecera { | ||
| - | grid-area: cabecera; | ||
| - | } | ||
| - | |||
| - | .cuerpo { | ||
| - | grid-area: cuerpo; | ||
| - | } | ||
| - | |||
| - | .lateral-izquierdo { | ||
| - | grid-area: lateral-izquierdo; | ||
| - | } | ||
| - | |||
| - | .lateral-derecho { | ||
| - | grid-area: lateral-derecho; | ||
| - | } | ||
| - | |||
| - | .pie { | ||
| - | grid-area: pie; | ||
| - | } | ||
| - | |||
| - | |||
| - | </ | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | </ | ||
| - | |||
| - | Mas información: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | ===== Reglas de Layout ===== | ||
| - | Para hacer una clase de Layout hay que seguir las siguientes reglas: | ||
| - | * Siempre con dos elementos. | ||
| - | * El '' | ||
| - | * Los '' | ||
| - | * 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á ''< | ||
| - | |||
| - | |||
| - | <sxh css> | ||
| - | .l-extremo { | ||
| - | display: | ||
| - | |||
| - | & | ||
| - | margin-right: | ||
| - | } | ||
| - | & | ||
| - | margin-left: | ||
| - | } | ||
| - | } | ||
| - | |||
| - | |||
| - | |||
| - | .l-columns { | ||
| - | display: grid; | ||
| - | grid-template-columns: | ||
| - | |||
| - | @for $i from 1 to 12 { | ||
| - | & | ||
| - | grid-template-columns: | ||
| - | } | ||
| - | } | ||
| - | |||
| - | &__area { | ||
| - | } | ||
| - | } | ||
| - | |||
| - | |||
| - | </ | ||
| - | |||
| - | <sxh html> | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | * En un área se podría poner un componente ya que sus propiedades CSS no van a //chocar//. | ||
| - | |||
| - | <sxh html> | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | |||
| - | Artículos en general sobre Layout | ||
| - | * [[http:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | ===== Ejercicios ===== | ||
| - | |||
| - | ==== Ejercicio 1 ==== | ||
| - | Crea los componentes que necesites para que funcione lo siguiente: | ||
| - | |||
| - | <sxh html> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
clase/daw/diw/1eval/tema06.1762514839.txt.gz · Última modificación: por Lorenzo
