【问题标题】:convert divs displaying as row to divs displaying as column将显示为行的 div 转换为显示为列的 div
【发布时间】:2013-07-01 18:20:11
【问题描述】:

我有以下 div。假设每个 div 向左浮动或设置 display 为 inline-block。

+-----------+ +-----------+ +--------------+
|    1      | |     2     | |              |
+-----------+ |           | |      3       |
              +-----------+ |              |
                            +--------------+
+-----------+ +-----------+ +--------------+
|     4     | |     5     | |              |
+-----------+ |           | |      6       |
              +-----------+ |              |
                            +--------------+
+-----------+ +-----------+ +--------------+
|           | |    8      | |      9       |
|    7      | +-----------+ |              |
|           |               +--------------+
|           |
+-----------+

我想这样实现

+-------------+ +-----------+ +-------------+
|     1       | |     4     | |             |
+-------------+ +-----------+ |      7      |
+-------------+ +-----------+ |             |
|      2      | |      5    | |             |
|             | |           | +-------------+
+-------------+ +-----------+ +-------------+
+-------------+ +-----------+ |      8      | 
|             | |           | +-------------+
|       3     | |       6   + +-------------+
|             | |           | |     9       |
|             | +-----------+ |             |
+-------------+               +-------------+

我知道我可以按列做到这一点

<div class="col1">
  <div></div>
  <div></div>
  <div></div>
</div> 
<div class="col2">
  <div></div>
  <div></div>
  <div></div>
</div>
<div class="col3">
  <div></div>
  <div></div>
  <div></div>
</div>

但是在我的网站上还有更多这样的页面,所以我想在不触及标记的情况下实现。有没有办法用 css 或任何 javascript/jquery 方法执行此操作?

【问题讨论】:

标签: jquery html css


【解决方案1】:

使用 JS 和 jQuery 很容易将 “碟中谍” 变成 “爱丽丝梦游仙境”:

LIVE DEMO

HTML 示例:

<div id="cont"> 

   <div></div>
   <!-- ...more  <div></div> here ... -->

</div>

CSS 示例(.col 将由 jQuery 添加):

#cont .col > div{
  position:relative;
  width:250px;
  background:#eee;
  margin:2px;
  padding:15px;
}

.col{
  float:left;
}

jQuery:

$(function(){

    var cells = $('#cont > div');

    for(var i = 0; i < cells.length; i+=3) {
      cells.slice(i, i+3).wrapAll("<div class='col' />");
    }

});

【讨论】:

  • @C-Link 欢迎您! :) 很高兴你做到了!我担心你会被 jQuery 的基础知识困住……但是太好了!
  • 只剩下一件事要做:我的站点中有 14 个 div,所以我做了 i+5,如果是 20,我会做 i+7,但我该怎么做才能做到最好每次 div 增加时我都不需要编辑。
【解决方案2】:

不触及标记是让事情变得粘稠的原因。 David DeSandro 使用名为 Masonry 的 jQuery 制作了一个运行良好的紧密级联网格系统,它或许可以帮助您:

http://masonry.desandro.com/

【讨论】:

  • 很高兴您能帮助提问者。但是,在某些情况下,只留下一个链接的答案可能是有害的。虽然你现在的答案很好,但如果链接死了,你的答案就会失去它的价值。因此,如果您在答案中总结文章中的内容,将会很有帮助。请参阅this 问题以获得澄清。
猜你喜欢
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多