Prefer shrinking over growing in a flex container with flex-flow: row wrap

前端 未结 3 1630
失恋的感觉
失恋的感觉 2021-01-12 02:06

Displaying an image gallery of different sized images and ratio with the following specs:

  1. No blanks (margins) between images.
  2. Respecting the original
相关标签:
3条回答
  • 2021-01-12 02:20

    one way you can solve it is by adding line-height: 0 to the a and setting the height value with px value.

    section {
      display: flex;
      flex-flow: row wrap;
      justify-content: center;
    }
    section a {
      flex: auto;
      line-height: 0;
    }
    section img {
      height: 300px;
      width: 100%;
      object-fit: cover;
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>Controlling flex growability</title>
        <meta name="viewport" content="width=device-width,initial-scale=1">
        <style>
    
        </style>
    </head>
    <body>
        <section>
            <a href="#"><img src="https://placekitten.com/400/195" width="400" height="195" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/256/400" width="256" height="400" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/237" width="400" height="237" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/111" width="400" height="111" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/245" width="400" height="245" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/250/400" width="250" height="400" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/269" width="400" height="269" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/288/400" width="288" height="400" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/234/400" width="234" height="400" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/194/400" width="194" height="400" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/222/400" width="222" height="400" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/192/400" width="192" height="400" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/141" width="400" height="141" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/289" width="400" height="289" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/210/400" width="210" height="400" alt="Kitty"></a>
            <a href="#"><img src="https://placekitten.com/400/187" width="400" height="187" alt="Kitty"></a>
        </section>
    </body>
    </html>

    0 讨论(0)
  • 2021-01-12 02:23

    I modify your starting attempt.

    Main idea is to change img width: 100%; to width: auto; and specify links' height. This will give us images with gaps.

    To remove the gaps we could add to links display: flex; and flex-direction: column;. Almost done.

    Last step is to add to links max-width: 100%;, it will protect from ovelflow if image width will be wider than column in small screen. Such problem we could see in Temani Afif's first solution with 4th image, if we put higher height of links. Edited

    Look into snippet.

    section {
      display: flex;
      flex-flow: row wrap;
      justify-content: center;
    }
    
    section a {
      flex: auto;
      display: flex;
      flex-direction: column;
      height: 166px;
      max-width: 100%;
    }
    
    section img {
      height: 100%;
      width: auto;
      object-fit: cover;
    }
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <title>Controlling flex growability</title>
      <meta name="viewport" content="width=device-width,initial-scale=1">
      <style>
    
      </style>
    </head>
    
    <body>
      <section>
        <a href="#"><img src="https://placekitten.com/400/195" width="400" height="195" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/256/400" width="256" height="400" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/237" width="400" height="237" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/111" width="400" height="111" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/245" width="400" height="245" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/250/400" width="250" height="400" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/269" width="400" height="269" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/288/400" width="288" height="400" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/234/400" width="234" height="400" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/194/400" width="194" height="400" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/222/400" width="222" height="400" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/192/400" width="192" height="400" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/141" width="400" height="141" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/289" width="400" height="289" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/210/400" width="210" height="400" alt="Kitty"></a>
        <a href="#"><img src="https://placekitten.com/400/187" width="400" height="187" alt="Kitty"></a>
      </section>
    </body>
    
    </html>

    0 讨论(0)
  • 2021-01-12 02:34

    Here is an idea where you can consider height to control the size of the rows and the main trick is to rely on min-width:100% for your images in order to fill the space.

    Basically, the a will define the height, the image will follow that height and will compute an auto width to keep the ratio. The width of the image will define the width of the link and then the link will grow to fill the space (creating space inside it). Finally, the min-width:100% you will make the image fill the space created inside the link.

    section {
      display: flex;
      flex-flow: row wrap;
      justify-content: center;
    }
    
    section a {
      flex: auto;
      height: 100px;
    }
    
    section img {
      height: 100%;
      width: auto; /* we need auto to keep the ratio based on the height */
      min-width: 100%; /* we expand the image to fill the gaps */
      max-width:100%;
      object-fit: cover;
    }
    <section>
      <a href="#"><img src="https://placekitten.com/400/195" width="400" height="195" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/256/400" width="256" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/237" width="400" height="237" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/111" width="400" height="111" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/245" width="400" height="245" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/250/400" width="250" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/269" width="400" height="269" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/288/400" width="288" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/234/400" width="234" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/194/400" width="194" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/222/400" width="222" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/192/400" width="192" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/141" width="400" height="141" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/289" width="400" height="289" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/210/400" width="210" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/187" width="400" height="187" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/288/400" width="288" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/234/400" width="234" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/194/400" width="194" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/222/400" width="222" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/192/400" width="192" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/141" width="400" height="141" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/289" width="400" height="289" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/210/400" width="210" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/187" width="400" height="187" alt="Kitty"></a>
    </section>

    If you consider vw unit for the height you will have a static grid that will scale while keeping the same overal structure:

    section {
      display: flex;
      flex-flow: row wrap;
      justify-content: center;
    }
    
    section a {
      flex: auto;
      height: 8vw;
    }
    
    section img {
      height: 100%;
      width: auto;
      min-width: 100%;  
      max-width:100%;
      object-fit: cover;
    }
    <section>
      <a href="#"><img src="https://placekitten.com/400/195" width="400" height="195" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/256/400" width="256" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/237" width="400" height="237" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/111" width="400" height="111" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/245" width="400" height="245" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/250/400" width="250" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/269" width="400" height="269" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/288/400" width="288" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/234/400" width="234" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/194/400" width="194" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/222/400" width="222" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/192/400" width="192" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/141" width="400" height="141" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/289" width="400" height="289" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/210/400" width="210" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/187" width="400" height="187" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/288/400" width="288" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/234/400" width="234" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/194/400" width="194" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/222/400" width="222" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/227" width="400" height="227" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/192/400" width="192" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/141" width="400" height="141" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/289" width="400" height="289" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/255" width="400" height="255" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/210/400" width="210" height="400" alt="Kitty"></a>
      <a href="#"><img src="https://placekitten.com/400/187" width="400" height="187" alt="Kitty"></a>
    </section>

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