美文网首页
flex布局-均匀分布下换行导致的间隔不一致(适配不同手机屏幕)

flex布局-均匀分布下换行导致的间隔不一致(适配不同手机屏幕)

作者: 陌盍 | 来源:发表于2018-11-14 11:33 被阅读0次

    一、背景:

    最近做一个H5小需求,要求按图中布局,红线框内粉色部分要一致,图片间隔均分,同时适配各个手机,以及list数量不定。


    需求.png

    二、问题:

    拿到这个需求,首先想到的是用flex布局,然后就出现了下图的问题,利用 justify-content: space-between; flex-wrap: wrap; 样式做到了两侧粉色部分留白是保持一致了,图片之间间隔均分也做到了,但是当超出一行排列时,换行后的list直接均分了整条宽度,导致和上行list间隔不一致

    flex均分引发的换行间隔不一致.png

    三、解决:

    1. 首先分析需要考虑的两个潜在要求:一是因为要适配各个手机屏幕,也就是 ul宽度不固定;二是list数量不一致,导致的 每行排列多少个list不固定,即 各个list间隔不固定
    2. 接下来,就是思考这两个问题的解决。宽度不固定可以联想到 @media进行响应式布局,因此结合 flex布局@media响应式布局,实现的效果如下:
      各个手机屏幕下list的排列.gif

    四、代码:

    • index.html:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>flex布局</title>
        <link rel="stylesheet" href="./index.css">
    </head>
    <body>
        <div class="container">
            <ul>
                <li><div><img src="./images/test.jpg" alt="testImage"><p>test</p></div></li>
                <li><div><img src="./images/test.jpg" alt="testImage"><p>test</p></div></li>
                <li><div><img src="./images/test.jpg" alt="testImage"><p>test</p></div></li>
                <li><div><img src="./images/test.jpg" alt="testImage"><p>test</p></div></li>
                <li><div><img src="./images/test.jpg" alt="testImage"><p>test</p></div></li>
                <li><div><img src="./images/test.jpg" alt="testImage"><p>test</p></div></li>
            </ul>
        </div>
    </body>
    </html>
    
    • index.css:
    * {
        padding: 0;
        margin: 0;
        list-style: none;
        text-align: center;
    }
    .container > ul {
        display: flex;
        flex-wrap: wrap;
        margin: 1rem;
        background-color: #f3e9eb;
        border-radius: 0.8rem;
    }
    .container > ul li {
        width: 25%;
        display: flex;
        justify-content: center;
    }
    @media screen and (max-width: 320px) {
        .container ul > li {
            width: 33%;
        }
    }
    @media screen and (min-width: 768px) {
        .container ul > li {
            width: 14%;
        }
    }
    .container > ul li > div {
        margin: 0.5rem;
    }
    

    自己在做这个需求时, li 是动态渲染进来的,因为数量不一致,这个简单demo就简单粗暴的写了几个,图片可自行修改,此例中仅供参考。

    至此, 适配各个手机的flex布局(考虑换行情况)的demo就完成了。

    相关文章

      网友评论

          本文标题:flex布局-均匀分布下换行导致的间隔不一致(适配不同手机屏幕)

          本文链接:https://www.haomeiwen.com/subject/poudfqtx.html