美文网首页
flex下,通过占位元素解决多行space-around的布局问

flex下,通过占位元素解决多行space-around的布局问

作者: novaDev | 来源:发表于2017-10-14 16:39 被阅读0次
<body>
    <div class="container">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
    </div>
</body>
<style>
    .container {
        outline: 1px solid green;width: 500px;height: 500px;
        display: flex;
        flex-wrap:wrap;
        justify-content:space-around;
    }
    .cell {
        width: 120px;height: 120px;outline: 1px solid red;
    }
</style>

可以看到:第二行多出来的cell会被放到该行的最中央,使该行符合justify-content: space-around,但是可能和我们预想的结果不太相同(预想结果应该是该cell靠左对齐),那么我们应该如何解决这个问题呢?

解决方案有两个:

  1. 通过js或者css中的calc()动态的计算cell的margin等属性,算就行了,这里不展开讨论;
  2. 通过插入占位元素解决问题:
    下面我们尝试在container下加入若干宽度与cell相同的占位元素(类名为“em”;为方便演示,这里将占位元素背景色设置为红色,height设置为1px)

修改后的代码和结果如下:

<body>
    <div class="container">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
    </div>
</body>
<style>
    .container {
        outline: 1px solid green;width: 500px;height: 500px;
        display: flex;
        flex-wrap:wrap;
        justify-content:space-around;
    }
    .cell {
        width: 120px;height: 120px;outline: 1px solid red;
    }
    .em {
        width: 120px;height: 1px;background-color: red;
    }
</style>

可以看到:第二行的cell已经被放到了改行的最左侧,实现了我们的需求

空元素的background-color、height都是没有必要的,所以最后我们要将这两个属性去掉:

<body>
    <div class="container">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
        <div class="em"></div>
    </div>
</body>
<style>
    .container {
        outline: 1px solid green;width: 500px;height: 500px;
        display: flex;
        flex-wrap:wrap;
        justify-content:space-around;
    }
    .cell {
        width: 120px;height: 120px;outline: 1px solid red;
    }
    .em {
        width: 120px;
    }
</style>

done!

另外还有一些说明

  • 仅适用于space-around
  • 仅适用于等宽cell
  • 例子中的cross轴没有处理,所以不美观
  • 为什么要插那么多空元素?
    空元素数量可以通过js来计算的,这里偷懒没有算,直接多多益善啦:)

相关文章

  • flex下,通过占位元素解决多行space-around的布局问

    可以看到:第二行多出来的cell会被放到该行的最中央,使该行符合justify-content: space-ar...

  • space-around 和 space-evenly 的区别

    在使用flex布局中遇到的,需要各元素间的间隔相等 首先想到了space-around显然达不到效果,于是想到了s...

  • Flex

    阮一峰-Flex布局 阮一峰-Flex布局实例教程 Flex布局 块级元素 行内元素 注意,设为 Flex 布局...

  • flex布局

    认识flex布局 flex布局(Flexible 布局,弹性布局)开启了flex布局的元素叫flex contai...

  • 如何垂直居中一个元素

    单行内联元素垂直居中 利用line-height与height相同即可 多行内联元素垂直居中 利用flex布局利用...

  • 6Flex 布局

    Flex,(Flexible Box),意为"弹性布局"采用 Flex 布局的元素,为 Flex 容器(flex ...

  • css flex

    css flex布局 采用 Flex 布局的元素,称为 Flex 容器(flex container),简称“容器...

  • flex布局

    兼容使用 块元素使用flex布局 行内元素使用flex布局 Webkit内核的浏览器使用flex布局(Safari...

  • flex布局

    flex 1,flex布局又叫弹性布局,一个元素为flex布局时,子元素的float、clear和vertical...

  • 写给 Android 开发者的 CSS Flexbox 布局学习

    Flexbox 布局的基本概念 通过设置元素的 display 属性值为 flex 即 display:flex ...

网友评论

      本文标题:flex下,通过占位元素解决多行space-around的布局问

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