Image stretching in flexbox in Safari

前端 未结 5 2023
别那么骄傲
别那么骄傲 2020-12-14 00:31

This is only an issue in Safari and looks like a Safari bug to me. Here is a fiddle with a simplified version of the issue.

When an image is in a nested flexbox elem

相关标签:
5条回答
  • 2020-12-14 01:09

    See my demo for a working example, add flex-direction: column; to fix this issue.

    .container {
      display: flex;
      flex-direction: column;
    }
    
    .container section:first-child {
      display: flex;
      flex-direction: column;
      margin-bottom: 25px;
    }
    
    .container img {
      width: 125px;
      height: auto;
    }
    <div class="container">
      <section>
        <img src="https://via.placeholder.com/250">
      </section>
      <section>
        <img src="https://via.placeholder.com/150">
      </section>
    </div>

    0 讨论(0)
  • 2020-12-14 01:17

    Simply Apply

    height: 100% !important

    or like img { height: 100% !important; }

    0 讨论(0)
  • 2020-12-14 01:19

    if parent <img/> tag has display:flex; add align-items: center;

    <div style="display:flex;align-items: center;">
        <img "img.jpg"/>
    </div>
    
    0 讨论(0)
  • 2020-12-14 01:20

    Adding height: intrinsic; works for me to fix the stretched height in safari. Add it to the image itself. Not the wrapper. You will still need height: auto for the other browsers.

    0 讨论(0)
  • 2020-12-14 01:25

    It certainly appears to be a bug.

    The default setting for the align-items property is stretch. Most major browsers handle this sensibly, stretching the image within the confines of the container.

    For whatever reason, Safari stretches the image to its natural height, taking the container along for the ride.


    flex-direction: row

    To fix the problem, override the stretch default value with flex-start in the align-items property.

    .container {
      display: flex;
      flex-direction: column;
    }
    .container section:first-child {
      display: flex;
      align-items: flex-start; /* new */
      margin-bottom: 25px;
    }
    .container img {
      width: 125px;
      height: auto;
    }
    <div class="container">
      <section>
        <img src="http://i.imgur.com/60PVLis.png">
      </section>
      <section>
        <img src="http://i.imgur.com/60PVLis.png">
      </section>
    </div>

    jsFiddle demo


    flex-direction: column

    Switching the direction of the flex container to column also fixes the problem. This works because align-items now applies to width and you've defined a width on the image.

    If you reverse the image dimensions from

    .container img {
       width: 125px;
       height: auto;
    }
    

    to

    .container img {
       width: auto;
       height: 125px;
    }
    

    ... you'll have the same problem in Safari as in flex-direction: row, and need align-items: flex-start for the correction.

    .container {
      display: flex;
      flex-direction: column;
    }
    
    .container section:first-child {
      display: flex;
      /* align-items: flex-start; */
      margin-bottom: 25px;
    }
    
    .container img {
      width: auto;
      height: 125px;
    }
    <div class="container">
      <section>
        <img src="http://i.imgur.com/60PVLis.png">
      </section>
      <section>
        <img src="http://i.imgur.com/60PVLis.png">
      </section>
    </div>

    jsFiddle demo

    0 讨论(0)
提交回复
热议问题