{"id":1453,"date":"2024-08-02T06:37:07","date_gmt":"2024-08-02T04:37:07","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=1453"},"modified":"2024-08-02T06:37:07","modified_gmt":"2024-08-02T04:37:07","slug":"23-flexbox-css","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/css3\/css3-avanzado\/23-flexbox-css\/","title":{"rendered":"23. Flexbox CSS"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">M\u00f3dulo de dise\u00f1o CSS Flexbox<\/h2>\n\n\n\n<p>Antes del m\u00f3dulo <strong>Flexbox Layout<\/strong>, hab\u00eda cuatro modos de dise\u00f1o:<\/p>\n\n\n\n<!--more-->\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Block<\/strong>, por secciones en una p\u00e1gina web<\/li>\n\n\n\n<li><strong>Inline<\/strong> por texto<\/li>\n\n\n\n<li><strong>Table<\/strong>, Tabla, para datos de tablas bidimensionales<\/li>\n\n\n\n<li>Posicionado, para la posici\u00f3n expl\u00edcita de un elemento<\/li>\n<\/ul>\n\n\n\n<p>El m\u00f3dulo de dise\u00f1o de caja flexible (<strong>Flexbox<\/strong>)facilita el dise\u00f1o de una estructura de dise\u00f1o Responsive flexible sin usar <strong><em>float<\/em> <\/strong>o <strong><em>position<\/em><\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Elementos Flexbox<\/h2>\n\n\n\n<p>Para comenzar a usar el modelo <strong>Flexbox<\/strong>, primero debe definir un contenedor flexible.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"115\" src=\"https:\/\/blog.sutilweb.eu\/wp-content\/uploads\/2024\/08\/Flexbox-CSS-1024x115.png\" alt=\"\" class=\"wp-image-1455\" srcset=\"https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/08\/Flexbox-CSS-1024x115.png 1024w, https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/08\/Flexbox-CSS-300x34.png 300w, https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/08\/Flexbox-CSS-768x86.png 768w, https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/08\/Flexbox-CSS.png 1135w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>El elemento de arriba representa un contendor flex (el \u00e1rea azul) con 3 elementos flexibles. Veamos un ejm con ello.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;!DOCTYPE html><br>&lt;html lang=\"es\"><br>  &lt;head><br>    &lt;meta charset=\"UTF-8\" \/><br>    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/><br>    &lt;title>Modelo Flex&lt;\/title><br>    &lt;style><br>      .flex-container {<br>        display: flex;<br>        background-color: DodgerBlue;<br>      }<br><br>      .flex-container > div {<br>        background-color: #f1f1f1;<br>        margin: 10px;<br>        padding: 20px;<br>        font-size: 30px;<br>      }<br>    &lt;\/style><br>  &lt;\/head><br>  &lt;body><br>    &lt;h1>Crear un contenedor Flex&lt;\/h1><br>    &lt;div class=\"flex-container\"><br>      &lt;div>1&lt;\/div><br>      &lt;div>2&lt;\/div><br>      &lt;div>3&lt;\/div><br>    &lt;\/div><br>    &lt;p><br>      Un dise\u00f1o flexible debe tener un elemento principal con la propiedad<br>      &lt;em>display&lt;\/em> establecida en &lt;em>flex&lt;\/em>.<br>    &lt;\/p><br>    &lt;p>&lt;\/p><br>  &lt;\/body><br>&lt;\/html><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Elemento padre (contenedor)<\/h2>\n\n\n\n<p>Como especificamos m\u00e1s arriba, este es un contenedor flexible (el \u00e1rea azul) con tres elementos flexibles. El contenedor flexible se vuelve flexible al establecer la propiedad de visualizaci\u00f3n en <strong><em>flex<\/em><\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n}<\/pre>\n\n\n\n<p>Las propiedades del contenedor flex son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em>flex-direction<\/em><\/strong><\/li>\n\n\n\n<li><strong><em>flex-wrap<\/em><\/strong><\/li>\n\n\n\n<li><strong><em>flex-flow<\/em><\/strong><\/li>\n\n\n\n<li><strong><em>justify-content<\/em><\/strong><\/li>\n\n\n\n<li><strong><em>align-items<\/em><\/strong><\/li>\n\n\n\n<li><strong><em>align-content<\/em><\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">La propiedad flex-direction<\/h2>\n\n\n\n<p>Dicha propiedad define en que direcci\u00f3n el contenedor quiere apilar los items.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; flex-direction:&nbsp;column;\n}<\/pre>\n\n\n\n<p>El valor <strong><em>column-reverse<\/em><\/strong> apila los elementos flexibles verticalmente (pero de abajo hacia arriba).<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; flex-direction:&nbsp;column-reverse;\n}<\/pre>\n\n\n\n<p>El valor row apila los elementos flexibles horizontalmente (de izquierda a derecha):<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; flex-direction:&nbsp;row;\n}<\/pre>\n\n\n\n<p>El valor row-reverse apila los elementos flexibles horizontalmente (pero de derecha a izquierda).<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; flex-direction:&nbsp;row-reverse;\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">La propiedad flex-wrap<\/h2>\n\n\n\n<p>La propiedad <strong><em>flex-wrap<\/em><\/strong> especifica si los elementos flexibles deben ajustarse o no. Los ejemplos a continuaci\u00f3n tienen 12 elementos flexibles, para demostrar mejor la propiedad <strong><em>flex-wrap<\/em><\/strong>.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;!DOCTYPE html><br>&lt;html><br>  &lt;head><br>    &lt;style><br>      .flex-container {<br>        display: flex;<br>        flex-wrap: wrap;<br>        background-color: DodgerBlue;<br>      }<br><br>      .flex-container > div {<br>        background-color: #f1f1f1;<br>        width: 100px;<br>        margin: 10px;<br>        text-align: center;<br>        line-height: 75px;<br>        font-size: 30px;<br>      }<br>    &lt;\/style><br>  &lt;\/head><br>  &lt;body><br>    &lt;h1>La propiedad flex-wrap&lt;\/h1><br><br>    &lt;p><br>      La propiedad flex-wrap: wrap;\" especifica que los elementos flexibles se<br>      ajustar\u00e1n si es necesario:<br>    &lt;\/p><br><br>    &lt;div class=\"flex-container\"><br>      &lt;div>1&lt;\/div><br>      &lt;div>2&lt;\/div><br>      &lt;div>3&lt;\/div><br>      &lt;div>4&lt;\/div><br>      &lt;div>5&lt;\/div><br>      &lt;div>6&lt;\/div><br>      &lt;div>7&lt;\/div><br>      &lt;div>8&lt;\/div><br>      &lt;div>9&lt;\/div><br>      &lt;div>10&lt;\/div><br>      &lt;div>11&lt;\/div><br>      &lt;div>12&lt;\/div><br>    &lt;\/div><br><br>    &lt;p>Try resizing the browser window.&lt;\/p><br>  &lt;\/body><br>&lt;\/html><\/pre>\n\n\n\n<p>El valor <strong><em>nowrap<\/em> <\/strong>especifica que los elementos flexibles no se ajustar\u00e1n (esto es predeterminado).<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; flex-wrap:&nbsp;nowrap;\n}<\/pre>\n\n\n\n<p>El valor <strong><em>wrap-reverse<\/em><\/strong> especifica que los art\u00edculos flexibles se ajustar\u00e1n si es necesario, en orden inverso.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; flex-wrap:&nbsp;wrap-reverse;\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">La propiedad flex-flow<\/h2>\n\n\n\n<p>La propiedad <strong><em>flex-flow<\/em><\/strong> es una propiedad abreviada para establecer las propiedades de direcci\u00f3n flexible y envoltura flexible.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; flex-flow:&nbsp;row wrap;\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">La propiedad justify-content<\/h2>\n\n\n\n<p>Esta propiedad es usada para alinear los items flex.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; justify-content:&nbsp;center;\n}<\/pre>\n\n\n\n<p>El valor <strong><em>flex-start<\/em><\/strong> alinea los elementos flexibles al comienzo del contenedor (esto es el valor predeterminado).<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; justify-content:&nbsp;flex-start;\n}<\/pre>\n\n\n\n<p>El valor <strong><em>flex-end<\/em><\/strong> alinea los elementos flexibles al final del contenedor.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; justify-content:&nbsp;flex-end;\n}<\/pre>\n\n\n\n<p>El valor <strong><em>space-around<\/em><\/strong> muestra los elementos flexibles con espacio antes, entre y despu\u00e9s de las l\u00edneas.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; justify-content:&nbsp;space-around;\n}<\/pre>\n\n\n\n<p>El valor <strong><em>space-between<\/em><\/strong> muestra los elementos flexibles con espacio entre l\u00edneas.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; justify-content:&nbsp;space-between;\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">La propiedad align-items<\/h2>\n\n\n\n<p>La propiedad <strong><em>align-items<\/em><\/strong> se utiliza para alinear los elementos flexibles. En estos ejemplos, usamos un contenedor de 200 p\u00edxeles de alto para demostrar mejor la propiedad align-items.<\/p>\n\n\n\n<p>El valor <strong><em>center<\/em> <\/strong>alinea los elementos flexibles en el medio del contenedor:<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.flex-container&nbsp;{\n&nbsp; display:&nbsp;flex;\n&nbsp; height:&nbsp;200px;\n&nbsp; align-items:&nbsp;center;\n}<\/pre>\n\n\n\n<p>El valor <strong><em>flex-start<\/em> <\/strong>alinea los elementos flexibles en la parte superior del contenedor, mientras que el valor <strong><em>flex-end<\/em><\/strong> alinea los elementos flexibles en la parte inferior. El valor <strong><em>stretch<\/em> <\/strong>estira los elementos flexibles para llenar el contenedor (esto es predeterminado). El valor <strong><em>baseline<\/em> <\/strong>alinea los elementos flexibles tal como se alinean sus l\u00edneas de base.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La propiedad align-content<\/h2>\n\n\n\n<p>La propiedad <strong><em>align-content<\/em><\/strong> se utiliza para alinear las l\u00edneas flexibles. En estos ejemplos, usamos un contenedor de 600 p\u00edxeles de alto, con la propiedad <strong><em>flex-wrap<\/em><\/strong> establecida en <strong><em>wrap<\/em><\/strong>, para demostrar mejor la propiedad <strong><em>align-content<\/em><\/strong>.<\/p>\n\n\n\n<p>El valor <strong><em>space-between<\/em><\/strong> muestra las l\u00edneas flexibles con el mismo espacio entre ellas. El valor <strong><em>space-around<\/em><\/strong> muestra las l\u00edneas flexibles con espacio antes, entre y despu\u00e9s de ellas.&nbsp; El valor <strong><em>stretch<\/em> <\/strong>estira las l\u00edneas flexibles para ocupar el espacio restante (esto es predeterminado). Las pantallas de valor <strong><em>center<\/em> <\/strong>muestran las l\u00edneas flexibles en el medio del contenedor. El valor <strong><em>flex-start<\/em><\/strong> muestra las l\u00edneas flexibles al comienzo del contenedor. El valor de <strong><em>flex-end<\/em><\/strong> muestra las l\u00edneas flexibles al final del contenedor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Centrado perfecto<\/h2>\n\n\n\n<p>En el siguiente ejemplo resolveremos un problema de estilo muy com\u00fan: el centrado perfecto.<\/p>\n\n\n\n<p>SOLUCI\u00d3N: establece las propiedades de <strong><em>justify-content<\/em><\/strong> y <strong><em>align-items<\/em><\/strong> en el centro, y el elemento flexible estar\u00e1 perfectamente centrado.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;!DOCTYPE html><br>&lt;html><br>  &lt;head><br>    &lt;style><br>      .flex-container {<br>        display: flex;<br>        justify-content: center;<br>        align-items: center;<br>        height: 300px;<br>        background-color: DodgerBlue;<br>      }<br><br>      .flex-container > div {<br>        background-color: #f1f1f1;<br>        color: white;<br>        width: 100px;<br>        height: 100px;<br>      }<br>    &lt;\/style><br>  &lt;\/head><br>  &lt;body><br>    &lt;h1>Perfect Centering&lt;\/h1><br><br>    &lt;p><br>      Un contenedor flexible con las propiedades justify-content y align-items<br>      establecido en &lt;em>center&lt;\/em> alinear\u00e1 los elementos en el centro (en<br>      ambos ejes).<br>    &lt;\/p><br><br>    &lt;div class=\"flex-container\"><br>      &lt;div>&lt;\/div><br>    &lt;\/div><br>  &lt;\/body><br>&lt;\/html><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Resumen<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Propiedad<\/th><th>Descripci\u00f3n<\/th><\/tr><tr><td><strong><em>align-content<\/em><\/strong><\/td><td>Modifica el comportamiento de la propiedad flex-wrap. Es similar a alinear elementos, pero en lugar de alinear elementos flexibles, alinea l\u00edneas flexibles<\/td><\/tr><tr><td><strong><em>align-items<\/em><\/strong><\/td><td>Alinea verticalmente los elementos flexibles cuando los elementos no utilizan todo el espacio disponible en el eje transversal<\/td><\/tr><tr><td><strong><em>display<\/em><\/strong><\/td><td>Especifica el tipo de cuadro utilizado para un elemento HTML<\/td><\/tr><tr><td><strong><em>flex-direction<\/em><\/strong><\/td><td>Especifica la direcci\u00f3n de los elementos flexibles dentro de un contenedor flexible<\/td><\/tr><tr><td><strong><em>flex-flow<\/em><\/strong><\/td><td>Una propiedad abreviada para flex-flow y flex-wrap<\/td><\/tr><tr><td><strong><em>flex-wrap<\/em><\/strong><\/td><td>Especifica si los elementos flexibles deben envolverse o no, si no hay suficiente espacio para ellos en una l\u00ednea flexible<\/td><\/tr><tr><td><strong><em>justify-content<\/em><\/strong><\/td><td>Alinea horizontalmente los elementos flexibles cuando los elementos no utilizan todo el espacio disponible en el eje principal<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>M\u00f3dulo de dise\u00f1o CSS Flexbox Antes del m\u00f3dulo Flexbox Layout, hab\u00eda cuatro modos de dise\u00f1o:<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1367,"menu_order":22,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1453","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"M\u00f3dulo de dise\u00f1o CSS Flexbox Antes del m\u00f3dulo Flexbox Layout, hab\u00eda cuatro modos de dise\u00f1o:","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1453"}],"version-history":[{"count":2,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1453\/revisions"}],"predecessor-version":[{"id":1456,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1453\/revisions\/1456"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1367"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}