Flexbox question about content center rationale
Me and flexbox are trying to get to know each other better, but we can't see the eyes at the moment. The reason for this is because I am trying to fold three elements on one line and two on the second line. But for some reason, the elements in the second row are centered rather than starting from the left side of the main axis, making their way to the right. Which gives the site a weird look, because the alignment of the elements aren't.
My test site where all the code is available www.mnrb.dk/mdg
What is my purpose (photography)
What my code looks like (small block)
.flex-wrapper {
width: 100%;
height: 100%;
-webkit-display: flex;
display: flex;
-webkit-flex-flow: row;
flex-flow: row;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
/*Works in conjunction with flex-wrap to remove unwanted vertical "air" between the items on the cross axis*/
-webkit-align-content: flex-start;
align-content: flex-start;
/*Move items on the main (horizontal) axis
justify content is by default set to flex-start*/
-webkit-justify-content: flex-start;
justify-content: flex-start;
/*Move items on the cross (vertical) axis
By default align items is set to stretch, which stretch the item 100% either horrizontal or vertical
depending on the flex being a row or column.*/
-webkit-align-items: stretch;
align-items: stretch;
}
.flex-wrapper > div {
max-width: 400px;
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
margin-top: 5px;
}
<div class="flex-wrapper">
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 1</h2>
</header>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lobortis et lectus eget faucibus. Nunc lobortis scelerisque leo vel tincidunt. Cras magna ante, commodo ac sem pellentesque, tempus egestas mi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Praesent egestas placerat ipsum at molestie. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac erat dignissim, imperdiet urna vel, rutrum tortor. Mauris facilisis ex eget massa molestie, sed ultricies urna efficitur. </p>
</article>
</div>
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 2</h2>
</header>
<p>Suspendisse aliquet ligula nisi, eget viverra libero porttitor vestibulum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam massa sem, placerat in fermentum et, auctor varius diam. Phasellus sed sollicitudin sem, eget porta urna. Phasellus lacus diam, imperdiet non dapibus porttitor, gravida vitae odio. Pellentesque sit amet risus at risus molestie rutrum sed sit amet mauris. Donec at tortor vulputate, tempus dolor id, rutrum nulla. Vivamus cursus orci vel purus ornare blandit. </p>
</article>
</div>
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 3</h2>
</header>
<p>Suspendisse aliquet ligula nisi, eget viverra libero porttitor vestibulum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam massa sem, placerat in fermentum et, auctor varius diam. Phasellus sed sollicitudin sem, eget porta urna. Phasellus lacus diam, imperdiet non dapibus porttitor, gravida vitae odio. Pellentesque sit amet risus at risus molestie rutrum sed sit amet mauris. Donec at tortor vulputate, tempus dolor id, rutrum nulla. Vivamus cursus orci vel purus ornare blandit. </p>
</article>
</div>
<!--TEST-->
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 4</h2>
</header>
<p>Suspendisse aliquet ligula nisi, eget viverra libero porttitor vestibulum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam massa sem, placerat in fermentum et, auctor varius diam. Phasellus sed sollicitudin sem, eget porta urna. Phasellus lacus diam, imperdiet non dapibus porttitor, gravida vitae odio. Pellentesque sit amet risus at risus molestie rutrum sed sit amet mauris. Donec at tortor vulputate, tempus dolor id, rutrum nulla. Vivamus cursus orci vel purus ornare blandit. </p>
</article>
</div>
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 4</h2>
</header>
<p>Suspendisse aliquet ligula nisi, eget viverra libero porttitor vestibulum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam massa sem, placerat in fermentum et, auctor varius diam. Phasellus sed sollicitudin sem, eget porta urna. Phasellus lacus diam, imperdiet non dapibus porttitor, gravida vitae odio. Pellentesque sit amet risus at risus molestie rutrum sed sit amet mauris. Donec at tortor vulputate, tempus dolor id, rutrum nulla. Vivamus cursus orci vel purus ornare blandit. </p>
</article>
</div>
</div>
Hopefully someone will tell me what I am doing wrong / send me in the right direction.
source to share
Just change:
justify-content: flex-start;
for image justify-content: space-between;
.flex-wrapper {
width: 100%;
height: 100%;
-webkit-display: flex;
display: flex;
-webkit-flex-flow: row;
flex-flow: row;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
/*Works in conjunction with flex-wrap to remove unwanted vertical "air" between the items on the cross axis*/
-webkit-align-content: flex-start;
align-content: flex-start;
/*Move items on the main (horizontal) axis
justify content is by default set to flex-start*/
-webkit-justify-content: flex-start;
justify-content: space-between;
/*Move items on the cross (vertical) axis
By default align items is set to stretch, which stretch the item 100% either horrizontal or vertical
depending on the flex being a row or column.*/
-webkit-align-items: stretch;
align-items: stretch;
}
.flex-wrapper > div {
max-width: 400px;
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
margin-top: 5px;
}
<div class="flex-wrapper">
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 1</h2>
</header>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lobortis et lectus eget faucibus. Nunc lobortis scelerisque leo vel tincidunt. Cras magna ante, commodo ac sem pellentesque, tempus egestas mi. Interdum et malesuada fames ac ante
ipsum primis in faucibus. Praesent egestas placerat ipsum at molestie. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac erat dignissim, imperdiet urna vel, rutrum tortor. Mauris facilisis ex eget massa molestie, sed ultricies urna
efficitur.</p>
</article>
</div>
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 2</h2>
</header>
<p>Suspendisse aliquet ligula nisi, eget viverra libero porttitor vestibulum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam massa sem, placerat in fermentum et, auctor varius diam. Phasellus sed
sollicitudin sem, eget porta urna. Phasellus lacus diam, imperdiet non dapibus porttitor, gravida vitae odio. Pellentesque sit amet risus at risus molestie rutrum sed sit amet mauris. Donec at tortor vulputate, tempus dolor id, rutrum nulla. Vivamus
cursus orci vel purus ornare blandit.</p>
</article>
</div>
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 3</h2>
</header>
<p>Suspendisse aliquet ligula nisi, eget viverra libero porttitor vestibulum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam massa sem, placerat in fermentum et, auctor varius diam. Phasellus sed
sollicitudin sem, eget porta urna. Phasellus lacus diam, imperdiet non dapibus porttitor, gravida vitae odio. Pellentesque sit amet risus at risus molestie rutrum sed sit amet mauris. Donec at tortor vulputate, tempus dolor id, rutrum nulla. Vivamus
cursus orci vel purus ornare blandit.</p>
</article>
</div>
<!--TEST-->
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 4</h2>
</header>
<p>Suspendisse aliquet ligula nisi, eget viverra libero porttitor vestibulum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam massa sem, placerat in fermentum et, auctor varius diam. Phasellus sed
sollicitudin sem, eget porta urna. Phasellus lacus diam, imperdiet non dapibus porttitor, gravida vitae odio. Pellentesque sit amet risus at risus molestie rutrum sed sit amet mauris. Donec at tortor vulputate, tempus dolor id, rutrum nulla. Vivamus
cursus orci vel purus ornare blandit.</p>
</article>
</div>
<div>
<article>
<header>
<time datetime="2014-12-07"></time>
<h2>Title 4</h2>
</header>
<p>Suspendisse aliquet ligula nisi, eget viverra libero porttitor vestibulum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam massa sem, placerat in fermentum et, auctor varius diam. Phasellus sed
sollicitudin sem, eget porta urna. Phasellus lacus diam, imperdiet non dapibus porttitor, gravida vitae odio. Pellentesque sit amet risus at risus molestie rutrum sed sit amet mauris. Donec at tortor vulputate, tempus dolor id, rutrum nulla. Vivamus
cursus orci vel purus ornare blandit.</p>
</article>
</div>
</div>
source to share
Try this SCSS combination. It left the last elements of the line to align with justify-content: space-between, but I think it might help you.
@mixin last-row-flexbox($num-columns, $width-items){
$filled-space: $width-items * $num-columns;
$margin: calc((100% - #{$filled-space}) / (#{$num-columns} - 1));
$num-cols-1 : $num-columns - 1;
&:nth-child(#{$num-columns}n+1):nth-last-child(-n+#{$num-cols-1}) ~ & {
margin-left: $margin;
}
@for $i from 1 through $num-columns - 2 {
$index: $num-columns - $i;
&:nth-child(#{$num-columns}n+#{$index}):last-child{
margin-right: auto;
}
}
}
This is the codepen link: http://codepen.io/diana_aceves/pen/KVGNZg
You just need to set the width of the items in percentage and the number of columns.
Hope this helps you.
source to share