I have a table where a cell can contain a number of icons, as well as text. If icons are present, they appear to the left of the text. There are a couple of possible alignme
As stated in the flexbox specification:
Prior to alignment via
justify-content
andalign-self
, any positive free space is distributed toauto
margins in that dimension.
In other words, auto
margins have precedence over justify-content
.
In your example, Chrome appears to be in compliance with the spec. (Firefox, as well.)
But IE11 – in cases where the parent has justify-content
– is ignoring margin-right: auto
on the flex item. This appears to be a bug.
When justify-content
is removed, auto
margins work.
One workaround would be to remove justify-content
entirely and rely solely on auto
margins:
- Only an icon is present: The icon should be centered
.icon { margin: 0 auto; }
.flexbox {
display: flex;
flex-direction: row;
border: 2px solid black;
width: 300px;
height: 17px;
}
.icon {
height: 17px;
width: 17px;
background-color: red;
}
.icon {
margin: 0 auto;
}
<div class="flexbox">
<div class="icon"></div>
</div>
- Only text is present: The text should be aligned left
.text { margin-right: auto; }
.flexbox {
display: flex;
flex-direction: row;
border: 2px solid black;
width: 300px;
height: 17px;
}
.icon {
height: 17px;
width: 17px;
background-color: red;
}
.text {
margin-right: auto;
}
<div class="flexbox">
<div class="text">asdf</div>
</div>
- Both icons and text are present: Both the icon and text should be aligned left
.text { margin-right: auto; }
.flexbox {
display: flex;
flex-direction: row;
border: 2px solid black;
width: 300px;
height: 17px;
}
.icon {
height: 17px;
width: 17px;
background-color: red;
}
.text {
margin-right: auto;
}
<div class="flexbox">
<div class="icon"></div>
<div class="text">asdf</div>
</div>
This work around of removing justify-content doesn't work for me. If you look at this example in IE11 you will see: Codepen example
.wrapper {
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto;
width: 200px;
height: 200px;
background-color: white;
}
.item {
margin: auto;
width: 50px;
height: 50px;
background-color: red;
}