tutorial support react framework bootstrap css html5 css3 flexbox grid-system

css - support - flexbox grid tutorial



CSS Flex Box: ¿Cómo alinear verticalmente los "elementos flexibles" a la mitad sin perder la altura del elemento flexible? (4)

Actualmente mis elementos "flexibles" se ven así (alineados verticalmente: arriba) ...

_____________________________________ 1 _____________________________________ 2 _____________________________________ 3 _____________________________________ 4 _____________________________________



Mi objetivo es hacer que se vean así (alineados verticalmente: en el medio) ...

_____________________________________ 1 _____________________________________ 2 _____________________________________ 3 _____________________________________ 4 _____________________________________


Mis requisitos:

  • El contenedor flexible debe permanecer al 100% de altura
  • Los elementos flexibles deben permanecer al 25% en altura (equivalentes al 100%, que es su valor predeterminado de todos modos).
  • Los elementos flexibles deben estar centrados verticalmente.
  • Esto debe ser receptivo y ser lo suficientemente inteligente como para permanecer en el medio por dispositivo (por lo tanto, no debe haber altura de línea / relleno)

http://jsfiddle.net/oneeezy/p4XtA/

HTML

<!-- Flex Box --> <section> <!-- Flex Items --> <div>1</div> <div>2</div> <div>3</div> <div>4</div> </section>

CSS

/* Flex Box */ section { padding: 1em; background: black; display: flex; flex-flow: column; height: 100%; justify-content: space-around; } /* Flex Items */ div { border-top: 1px solid #ccc; background: #f2f2f2; height: 25%; } div:first-child { border-top: 1px solid transparent; } div:hover { background: white; }


Esta es la manera flexible de resolver su problema:

HTML

<div style="height:300px;"> <!-- Just to test/change the height of <section> element --> <!-- Flex Box --> <section> <!-- Flex Items --> <div>1</div> <div>2</div> <div>3</div> <div>4</div> </section> </div>

CSS

/* Flex Box */ section { padding: 1em; background: black; display: flex; flex-flow: column; height:100%; justify-content: space-around; } /* Flex Items */ /* Child selector(>) is used to select <div> elements inside <section> element*/ section > div { border-top: 1px solid #ccc; background: #f2f2f2; height: 25%; /* Added code */ display: flex; /* Gives inner div flex display */ align-items: center; /* Centers the div in the cross axis */ /**************/ } section > div:first-child { border-top: 1px solid transparent; } section > div:hover { background: white; }


Para alinear verticalmente el contenido de flexbox child, deberá aplicar algunas otras técnicas.

Creo que habrá contenido allí, envuelto en una etiqueta. Luego, puedes usar flex y configurar child en margin:auto; MANIFESTACIÓN

CSS actualizado:

/* Flex Box */ section { padding: 1em; background: black; display: flex; flex-flow: column; height: 100%; justify-content: space-around; } /* Flex Items */ div { border-top: 1px solid #ccc; background: #f2f2f2; height: 25%; display:flex;/* be a flexbox too */ } div:first-child { border-top: 1px solid transparent; } div:hover { background: white; } p { /* or any child of flex box used */ margin:auto;/* here center/middle align */ }

Estructura HTML:

<!-- Flex Box --> <section> <!-- Flex Items , Flex Box themselves --> <div> <p style="width:100%;/* to fill entire width*/">1</p> <!-- Flex Items --> </div> <div> <p>2</p><!-- Flex Items --> </div> <div> <p>3</p><!-- Flex Items --> </div> <div> <p>4</p><!-- Flex Items --> </div> </section>

Tal vez una alternativa con display:table , puede ser útil: DEMO 2

/* fall back IE8 ie */ html, body, section { -moz-box-sizing:border-box; box-sizing:border-box; height:100%; width:100%; } section { display:table; } section > div { display:table-cell; vertical-align:middle; } /* Flex Box */ section { padding: 1em; background: black; display: flex; flex-flow: column; height: 100%; justify-content: space-around; } /* Flex Items */ section > div { border-top: 1px solid #ccc; background: #f2f2f2; height: 25%; display:flex; } section > div:first-child { border-top: 1px solid transparent; } section > div:hover { background: white; } p { margin:auto; }


Su problema no está realmente relacionado con el llamado flex-box, de hecho, lo que quiere alinear es el contenido del div (no el div ), así que simplemente use algún truco para alinearlo normalmente. Este es uno de los trucos:

div:before { content:''''; height:100%; display:inline-block; vertical-align:middle; }

Manifestación.


Tal vez estoy malinterpretando, pero no puedes hacer lo siguiente:

HTML (Delgado)

.container .item 1 .item 2 .item 3 .item 4

CSS

.container { display:flex; flex-direction: column; height: 100vh; } .item { flex-grow: 1; display:flex; align-items:center; border-bottom:2px solid #e8e288; }

Aquí hay un Codepen