Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Issue when centering vertically with flexbox when heights are unknown

My layout has a container flex-container and a child.

HTML:

<div class="flex-container">   <div>text</div> </div> 

The container and the child have an unknown height. And the goal is:

  • If the child has a lower height than the container, it appears centered horizontally and vertically.
  • If the child has a greater height than the container, it adjusts to the top and the bottom and we can do scroll.

Scheme: enter image description here

The fastest way for centering a element with flexbox is the follow:

.flex-container {   display: flex;   align-items: center; /* vertical */   justify-content: center; /* horizontal */    width: 100%;   height: 300px; /* for example purposes */   overflow-y: scroll;   background: #2a4; }  .flex-container > div {   background: #E77E23;   width: 400px; }
<div class="flex-container">   <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure fugit voluptas eius nemo similique aperiam quis ut! Ipsa aspernatur rem nesciunt est sed hic culpa nisi delectus error explicabo reprehenderit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure fugit voluptas eius nemo similique aperiam quis ut! Ipsa aspernatur rem nesciunt est sed hic culpa nisi delectus error explicabo reprehenderit. </div> </div>

Codepen: http://www.codepen.io/ces/pen/slicw

But, if the container's child have a greater height, the child is not shown correctly. The child appears cutted (only the top part).

html,body {   height: 100%;   width: 100%;   padding: 0;   margin: 0; }  .flex-container {   display: flex;   align-items: center; // vertical   justify-content: center; // horizontal      width: 100%;   height: 100px;   overflow-y: scroll;   background: #2a4; }  .flex-container > div {   background: #E77E23;   width: 400px; }
<div class="flex-container">   <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure fugit voluptas eius nemo similique aperiam quis ut! Ipsa aspernatur rem nesciunt est sed hic culpa nisi delectus error explicabo reprehenderit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure fugit voluptas eius nemo similique aperiam quis ut! Ipsa aspernatur rem nesciunt est sed hic culpa nisi delectus error explicabo reprehenderit. </div> </div>

Codepen: http://www.codepen.io/ces/pen/sGtfK

Scheme:

enter image description here

Is there a way for resolve this issue?

like image 750
cespon Avatar asked Jul 02 '14 18:07

cespon


People also ask

How do you center Things vertically in Flex?

Centering Vertically By default flex items will fill vertical space of their parent element. To vertically center our div we can add a single CSS property. By using align-items: center we can vertically center all flex items to the parent container along the cross axis of the flex container.

Can you set height of flexbox?

It can be changed by using the flex-direction property. To use flexbox, we have to set display: flex or inline-flex to flex-container. By default, the height and width of a flex-container are set to auto. But we can define a fixed amount to them.

How do you center a vertical container?

vertical-center by ::before or ::after pseudo elements and also change the default display type of it and the other child, the . container to inline-block . Then use vertical-align: middle; to align the inline elements vertically.


1 Answers

I found the solution:

.flex-container {     display: flex; /* only */     overflow-y: scroll; }  .flex-container > div {     margin: auto; /* horizontal and vertical align */ } 

html, body {     height: 100%;     width: 100%;     padding: 0;     margin: 0; }  .flex-container {     display: flex;     width: 100%;     height: 100px; /* change height to 300px */     overflow-y: scroll;     background: #2a4; }  .flex-container > div {     padding: 1em 1.5em;     margin: auto;     background: #E77E23;     width: 400px; }
<div class="flex-container">   <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure fugit voluptas eius nemo similique aperiam quis ut! Ipsa aspernatur rem nesciunt est sed hic culpa nisi delectus error explicabo reprehenderit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure fugit voluptas eius nemo similique aperiam quis ut! Ipsa aspernatur rem nesciunt est sed hic culpa nisi delectus error explicabo reprehenderit. </div> </div>

Codepen: http://codepen.io/ces/pen/Idklh

like image 154
cespon Avatar answered Sep 22 '22 12:09

cespon