CSS3 Flex and Bootstrap - html

Using this example, http://www.bootply.com/126437/, I am trying to make my Bootstrap layout columns equal height, as well as still be fully responsive.
I am trying to get my head around how the CSS is working in the example but still haven't cracked it. With my own SASS, the layout looks fine on a large screen, but until I add "auto" to my flex, the columns aren't responsive on a small screen.
Any help would be appreciate to get this working on all size screens!
HAML/Bootstrap:
%section.row.row-flex.row-flex-wrap
.col-xs-12.col-sm-12.col-md-8.col-lg-8.column-flex
.flex-col
= field('block_2')
.col-xs-12.col-sm-12.col-md-4.col-lg-4.column-flex.one-column
.row
.col-xs-12.col-sm-6.col-md-12.col-lg-12
.events-image-block
= field('block_3')
.col-xs-12.col-sm-6.col-md-12.col-lg-12
= field('block_4')
%section.row.row-flex.row-flex-wrap
.col-xs-12.col-sm-6.col-md-4.col-lg-4.column-flex.one-column
.flex-col
= field('block_5')
.col-xs-12.col-sm-6.col-md-4.col-lg-4.column-flex.one-column
.flex-col
= field('block_6')
.col-xs-12.col-sm-12.col-md-4.col-lg-4.column-flex.one-column
.flex-col
= field('block_7')
SASS:
section.row-flex {
display: -webkit-flex;
display: -webkit-box;
display: -ms-flexbox;
display: -moz-box;
display: flex;
webkit-flex: 1;
-ms-flex: 1;
flex: 1;
&.row-flex-wrap {
-webkit-flex-flow: row wrap;
align-content: flex-start;
webkit-flex: 0;
-ms-flex: 0;
flex: 0;
}
& > .column-flex {
display: -webkit-flex;
display: -webkit-box;
display: -ms-flexbox;
display: -moz-box;
display: flex;
margin: -.2px;
&.one-column {
webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
}
.flex-col,
.flex-col > div {
flex-flow: column nowrap;
display: -webkit-flex;
display: flex;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
}
.flex-grow {
display: flex;
-webkit-flex: 2;
-ms-flex: 2;
flex: 2;
}
}

Related

Flexbox, flex-direction: column, image and IE11 bug. Can this be solved?

I have a containing <ul> that is display: flex horizontal. Each <li> is 25% width and also display: flex to get them all equal heights.
Each <li> contains an anchor that is display: flex column, to align the elements within correctly, including the main image container and image. In every browser, including IE10 this is absolutely fine, no issues. However, in IE11 this is where the problems start.
IE11 calculates the image container height as the actual height of the source image, and not the height of the image when rendered. This ends up rendering the <li> much, much taller than it should be.
How the layout looks in every self-respecting browser:
How the layout looks in IE11:
Check out the live example
I know this could be solved by explicitly defining the image height, but I don't want to do that. I could also solve it with JS, but again, I shouldn't have to. Am I missing something with this, as it doesn't appear to be listed on Flexbugs.
* {
box-sizing: border-box;
}
img {
display: block;
width: 100%;
}
.promotions-list {
background-color: #eaeaea;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
padding: .5rem 1rem;
width: 960px;
}
.promotions-list__item {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
padding: 1rem;
width: 25%;
}
.promotions-list__link {
background-color: white;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 1;
-webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
overflow: hidden;
padding: 1em;
position: relative;
width: 100%;
}
.promotions-list .image-container {
display: block;
height: auto;
}
.promotions-list .image-container img {
display: block;
margin: 0 auto;
max-width: 40%;
}
<ul class="promotions-list">
<li class="promotions-list__item has-image">
<a href="/promotion/358/the-new-l5000-mono-laser-range-from-brother" class="promotions-list__link" title="Link to The NEW L5000 Mono Laser Range from Brother details">
<span class="promotions-list__item__header">
<span class="image-container">
<img src="//cdn.2020prosoftware.com/installations/1/promotions/358/original/NewModel2016.png">
</span>
<span class="list__item__title">The NEW L5000 Mono Laser Range from Brother</span>
</span>
<span class="promotions-list__item__body">
<span class="description">The NEW standard in reliability! Introducing new, improved printers from Brother, the market leader…</span>
</span>
</a>
</li>
</ul>
This appears to be fixed by setting flex: 0 0 auto on .promotions-list__item__header.
* {
box-sizing: border-box;
}
img {
display: block;
width: 100%;
}
.promotions-list {
background-color: #eaeaea;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
padding: .5rem 1rem;
width: 960px;
}
.promotions-list__item {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
padding: 1rem;
width: 25%;
}
.promotions-list__link {
background-color: white;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 1;
-webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
overflow: hidden;
padding: 1em;
position: relative;
width: 100%;
}
.promotions-list .image-container {
display: block;
height: auto;
}
.promotions-list .image-container img {
display: block;
margin: 0 auto;
max-width: 40%;
}
/* Added */
.promotions-list__item__header {
flex: 0 0 auto;
}
<ul class="promotions-list">
<li class="promotions-list__item has-image">
<a href="/promotion/358/the-new-l5000-mono-laser-range-from-brother" class="promotions-list__link" title="Link to The NEW L5000 Mono Laser Range from Brother details">
<span class="promotions-list__item__header">
<span class="image-container">
<img src="//cdn.2020prosoftware.com/installations/1/promotions/358/original/NewModel2016.png">
</span>
<span class="list__item__title">The NEW L5000 Mono Laser Range from Brother</span>
</span>
<span class="promotions-list__item__body">
<span class="description">The NEW standard in reliability! Introducing new, improved printers from Brother, the market leader…</span>
</span>
</a>
</li>
</ul>

Flexbox two rows same width with overflow

I'm trying to create a "simple" information bar that should be displayed inline.
The bar consist of two divs, where the first contains all the required info (and is always visible) and the second shows information messages when they apply.
I have created a pen to demonstrate here.
My problem is that the content of the upper div is not always the same width and in some cases it overflows (which is a valid behavior based on my requirements since I always want it to be in one line). Thus when the screen gets shrinked enough the upper div overflows but the below keeps a width same as the screen width and does not follow the upper div's width.
What I want to achieve is make the below div have the same width as the upper even when the upper one overflows. Any ideas anyone?
Adding code here as well for reference:
HTML:
<h2> Shrink me to see than warning div is not the same width as the other one</h2>
<div id="TaskTimeBar">
<div id='main-wrapper'>
<div class="task-time-bar-content">
<div id="time-cell">
<div class='time-container'>
<i class="fa fa-clock-o"></i>21:12
</div>
</div>
<div id="active-task-bar-main-content">
<div><i class="fa fa-link"></i> #28125</div>
<div><i class="fa fa-info"></i> This can be a long text...</div>
<div><i class="fa fa-user"></i> Yo mama</div>
</div>
<div id="active-task-bar-buttons">
<div class="active-bar-button-wrapper">
<button>Stop</button>
</div>
<div class="active-bar-button-wrapper">
<button>Switch To #28192</button>
</div>
</div>
</div>
</div>
<div class="active-task-bar-information">This is an information message</div>
</div>
CSS:
#TaskTimeBar {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-direction: normal;
-webkit-box-orient: vertical;
-webkit-flex-direction: column;
-moz-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-flex-wrap: wrap;
-moz-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
#main-wrapper {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
}
.task-time-bar-content {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
padding: 5px;
}
#time-cell {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
font-weight: bold;
font-size: 22px;
}
.time-container {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
-moz-justify-content: center;
justify-content: center;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
}
.time-container i {
padding-right: 5px;
}
#active-task-bar-main-content {
padding: 0 10px;
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-pack: space-around;
-ms-flex-pack: space-around;
-webkit-justify-content: space-around;
-moz-justify-content: space-around;
justify-content: space-around;
}
#active-task-bar-main-content div {
padding: 0 10px;
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
}
#active-task-bar-buttons {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
padding: 0 10px;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
-webkit-box-pack: end;
-ms-flex-pack: end;
-webkit-justify-content: flex-end;
-moz-justify-content: flex-end;
justify-content: flex-end;
}
.active-bar-button-wrapper {
line-height: 28px;
margin-right: 5px;
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
}
.active-task-bar-information {
background-color: #ffa500;
color: #f3ebf8;
border: thin solid #808080;
border-top: none;
text-align: center;
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
-moz-justify-content: center;
justify-content: center;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
}
Edit:
Let me explain a little bit more based on the div's ids as asked in the comments.
I hava a #TaskTimeBar that contains two divs inside, #main-wrapper and #active-task-bar-information. Requirements are as follows:
#main-wrapper should always be in one line
#active-task-bar-information should always have the same width as #main-wrapper and be underneath it.
The problem is that when the screen becomes small the contents of #main-wrapper overflow and exceed the screen width but #active-task-bar-information does not follow. If you play around with the window width in the linked pen you will see the effect.
Just to make sure I got this right:
main-wrapper never actually wraps it's content, therefore it overflows.
active-task-bar-information content actually wraps and never exceeds the viewport.
main-wrapper's behavior is correct.
active-task-bar-information's behavior is not correct. It should behave as it's sibling #main-wrapper.
Going by these criterions I think I got it. Try this:
html { box-sizing: border-box; font: 16px/1.5 Consolas; }
body { width: 100%; min-width: 60em; height: auto; }
*, *:before, *:after { box-sizing: inherit; margin: 0; padding: 0; border: 0; }
#TaskTimeBar {
display: -webkit-inline-box;
display: -webkit-inline-flex;
display: -moz-inline-box;
display: -moz-inline-flex;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-direction: normal;
-webkit-box-orient: vertical;
-webkit-flex-direction: column;
-moz-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-flex-wrap: nowrap;
-moz-flex-wrap: nowrap;
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
-webkit-box-pack: stretch;
-ms-flex-pack: stretch;
-webkit-justify-content: stretch;
-moz-justify-content: stretch;
justify-content: stretch;
}
#main-wrapper {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
}
.task-time-bar-content {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
padding: 5px;
}
#time-cell {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
font-weight: bold;
font-size: 22px;
}
.time-container {
display: -webkit-inline-box;
display: -webkit-inline-flex;
display: -moz-inline-box;
display: -moz-inline-flex;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
-moz-justify-content: center;
justify-content: center;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
}
.time-container i {
padding-right: 5px;
}
#active-task-bar-main-content {
padding: 0 10px;
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-pack: space-around;
-ms-flex-pack: space-around;
-webkit-justify-content: space-around;
-moz-justify-content: space-around;
justify-content: space-around;
}
#active-task-bar-main-content div {
padding: 0 10px;
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
}
#active-task-bar-buttons {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
padding: 0 10px;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
-webkit-box-pack: end;
-ms-flex-pack: end;
-webkit-justify-content: flex-end;
-moz-justify-content: flex-end;
justify-content: flex-end;
}
.active-bar-button-wrapper {
line-height: 28px;
margin-right: 5px;
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-shrink: 0;
-moz-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
}
.active-task-bar-information {
background-color: #ffa500;
color: #f3ebf8;
border: thin solid #808080;
border-top: none;
text-align: center;
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
-moz-justify-content: center;
justify-content: center;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-moz-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
}
To get more accurate results I reset everything to border-box sizing, zeroed all margins, paddings, and borders. That's optional.
I changed how the parent flexbox (TaskTimeBar) contents are kept since main-wrapper and active-task-bar-information are siblings. The changes are as follows:
#TaskTimeBar {...
.....
-webkit-flex-wrap: nowrap;
-moz-flex-wrap: nowrap;
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
-webkit-box-pack: stretch;
-ms-flex-pack: stretch;
-webkit-justify-content: stretch;
-moz-justify-content: stretch;
justify-content: stretch;
}
TaskTimeBar (the parent) stretches it's children (main-wrapper and active-task-bar-information), past the viewport due to the justify property stretch and the flex-wrap property nowrap. As a side note, active-task-bar-information was always 2px shorter than main-wrapper until I did that reset and now they measure the same width in any sized viewport (as far as I'm able to determine).
Hopefully I understood your question properly and gave you appropriate advice.
EDIT: While I was fulfilling a request for a [demo][1], I added inline-flex to all three divs. Details are provided with the demo. Below are screenshots illustrating the 2 divs equal widths.
In this fiddle I've taken #zer00ne's code, and tried to simplify the situation, by keeping only the outer div a flex-box, instead of managing a hierarchy of flex-boxes. I've kept the inner divs in line with display: inline and white-space: nowrap. Is seems to achieve the desired result.

CSS: Full width flex column doesn't stack on top of each other on webkit

I have two divs in a container like this:
<div class="container">
<div class="div-a"> Hello </div>
<div class="div-b"> Lorem </div>
</div>
And I have set the container to display:flex and flex-direction to column.
I aim to align the 2 divs on top of each other. This works fine on Firefox but not on WebKit (Chrome/Safari). On WebKit, the columns align next to each other instead.
Here is a jsFiddle so you can see.
My CSS is:
.container {
width:100%;
float:left;
flex-direction: column;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
.div-a {
background:lightgreen;
order:2;
width:100%;
float:left;
}
.div-b {
background:lightblue;
order:1;
width:100%;
float:left;
}
Why is this not working on WebKit?
In order to get flex to work across browsers (especially Safari desktop and iOS ), you need to prefix all the related properties. Visit here for browser support details.
Example of flex-direction: column;
.container {
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-direction: column;
-webkit-flex-direction: column;
flex-direction: column;
}
.a {
background: lightgreen;
-ms-flex-order: 2;
-webkit-order: 2;
order: 2;
}
.b {
background: lightblue;
-ms-flex-order: 1;
-webkit-order: 1;
order: 1;
}
<div class="container">
<div class="a">A</div>
<div class="b">B</div>
</div>
Example of flex-direction: row;
.container {
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-direction: row;
-webkit-flex-direction: row;
flex-direction: row;
}
.a, .b {
-ms-flex: 1;
-webkit-flex: 1;
flex: 1;
}
.a {
background: lightgreen;
-ms-flex-order: 2;
-webkit-order: 2;
order: 2;
}
.b {
background: lightblue;
-ms-flex-order: 1;
-webkit-order: 1;
order: 1;
}
<div class="container">
<div class="a">A</div>
<div class="b">B</div>
</div>

Flexbox height 100% in chrome

I have a problem in chrome which does not happen in Firefox.
<div class="container">
<div class="flex-1"></div>
<div class="flex-2">
<div class="flex-2-child"></div>
<div class="flex-3-child"></div>
</div>
</div>
.container {
height: 200px;
width: 500px;
display: -moz-box;
display: -webkit-flexbox;
display: -ms-flexbox;
display: -webkit-flex;
display: -moz-flex;
display: flex;
-webkit-flex-direction: row;
-moz-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
}
.flex-1 {
width: 100px;
background-color: blue;
}
.flex-2 {
position: relative;
-moz-box-flex: 1;
-webkit-flex: 1;
-moz-flex: 1;
-ms-flex: 1;
flex: 1;
background-color: red;
}
.flex-2-child {
height: 100%;
width: 100%;
background-color: green;
}
.flex-3-child {
height: 100%;
width: 100%;
background-color: steelblue;
}
http://jsfiddle.net/michaelch/TfB9c/2/
If you check this fiddle in firefox and in chrome, you will see there is a big difference.
flex-2-child and flex-3-child have no height in chrome, but have the behavior which i think is right which both have a 100% height relative to their parent.
Do you know how to have the correct behavior in chrome?
Thanks in advance.
Michael
You will get the same result in Chrome as you do in Firefox if you add height: 100%; to your .flex-2 class.
.flex-2 {
position: relative;
-moz-box-flex: 1;
-webkit-flex: 1;
-moz-flex: 1;
-ms-flex: 1;
flex: 1;
background-color: red;
height: 100%; // Add this!
}
If a child's height is defined by a percentage of their parent's height, then the parent's height should be defined.

Flexbox items order in column

Live link here http://soloveich.com/pr6/blog/
Trying to put date with comments number and post preview in column on mobile screen. Also, bring the date with comments to first place when on mobile screen.
Weridly, it works perfectly on resolution emulators, but nothing happens on phones (iphones and old sgs.)
Html
<div class="postpreview">
<div class="psto"></div>
<div class="datencomments"></div>
</div>
Plus whatever insides
css
.postpreview {
display: flex;
display: -webkit-flex;
display: -moz-flex;
flex-direction:row;
-webkit-flex-direction:row;
-moz-direction:row;
}
.psto {
flex:5;
-webkit-flex:5;
-moz-flex:5;
}
.datencomments {
flex:2;
-webkit-flex:2;
-moz-flex:2;
vertical-align: top !important;
margin-top: 15px;
}
#media screen and (max-width: 380px) {
.postpreview {
display: flex;
display: -webkit-flex;
display: -moz-flex;
flex-direction:column;
-webkit-flex-direction:column;
-moz-direction:column;
}
}
Can't figure out if it's my css (why would it work in emulator then?) or problem with mobile browsers
The majority of mobile browsers only support the old 2009 Flexbox properties. Your code should look like this:
.postpreview {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
.psto {
-webkit-box-flex: 5;
-moz-box-flex: 5;
-webkit-flex: 5;
-ms-flex: 5;
flex: 5;
}
.datencomments {
-webkit-box-flex: 2;
-moz-box-flex: 2;
-webkit-flex: 2;
-ms-flex: 2;
flex: 2;
vertical-align: top !important;
margin-top: 15px;
}
#media screen and (max-width: 380px) {
.postpreview {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-webkit-box-direction: normal;
-moz-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
}
Also note that the default flex-direction is row, so there's no need to specify it unless you're overwriting a previous flex-direction setting.