CSS如何实现这样的布局?

图片描述

想要这样的效果

  • 每个div宽度固定,高度不固定;

  • div换行时,上下两个div紧贴在一起;
    请各位指教,先谢谢大家。。。

阅读 3.3k
4 个回答

可以用flex-box


#container { 
  padding: 0;
  margin: 0;
  display: flex;
  flex-flow: column wrap;
  height: 4em;
  width: 3.6em;
}

.same_width {
  background-color:#E91E63; 
  width: 1em; 
  margin: 0.1em; 
}

#a {height:1em}
#b {height:2em}
#c {height:3em}
#d {height:4em}
#e {height:2em}
#f {height:1em}
#g {height:2em}
<div id="container">
  <div id="a" class="same_width">
  </div>
  <div id="b" class="same_width">
  </div>
  <div id="c" class="same_width">
  </div>
  <div id="d" class="same_width">
  </div>
  <div id="e" class="same_width">
  </div>
  <div id="f" class="same_width">
  </div>
  <div id="g" class="same_width">
  </div>
</div>

效果:

clipboard.png

纯css貌似做不到...
用js的实现方法有几种,

  1. 用css+div写4列, 然后用js按顺序先将每列填充1个, 从第五个开始, 计算出高度最小的列, 往里面填充第五个, 按第五个的规则, 一直循环到最后一个

  2. 用绝对定位, 用js计算每个的top和left

<!doctype html>
<html>

<head>
    <meta charset="utf-8" />
    <title>1</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        li {
            width: 20%;
            float: left;
        }

        li + li {
            border-left: 1px solid red;
        }

        p { margin-bottom: 10px; text-align: center;}
    </style>
</head>

<body>
    <ul id="list">
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <script>
        var list = document.querySelector('#list').querySelectorAll('li');
        for (var i = 0; i <= 50; i++) {
            var j = i % 4;
            list[j].insertAdjacentHTML('beforeEnd', '<p>' + i + '</p>');
        }
    </script>
</body>

</html>

建议采用插件写吧,快捷,方便,网上有很多瀑布流的插件,你去看看。

这是瀑布流布局,纯css实现起来很困难,应该要配合js实现,建议谷歌瀑布流,即可找到答案。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题