Flexbox auto margins don't work with justify-content: center in IE

后端 未结 2 1054
故里飘歌
故里飘歌 2021-01-17 13:35

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

相关标签:
2条回答
  • 2021-01-17 14:27

    As stated in the flexbox specification:

    Prior to alignment via justify-content and align-self, any positive free space is distributed to auto 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:

    1. 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>

    1. 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>

    1. 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>

    0 讨论(0)
  • 2021-01-17 14:36

    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;
    }
    
    0 讨论(0)
提交回复
热议问题