javascript - 一堆 div 向左浮动,排列成不同高度的列,如果不设置高度,它们不会创建漂亮的网格

标签 javascript jquery html css

我正在尝试创建一个类似网格的系统,其中包含内容向左浮动的 div。问题是每个 div 的高度不是静态的,因为每个 div 的内容都不同。由于高度不同.. 如果一排中的一个比另一个高,事情就会变得不正常。

是否有某种 css 方式或 js(首选 javascript)方式来解决这个问题。我真的想避免在 div 上设置过大的高度来让它们对齐。

您可以在此处查看示例:http://www.foreclosurejournalinc.com/index.php?option=com_hotproperty&view=type&id=1

最佳答案

首先 - 在这种情况下使用表是不正确的:表结构定义了同一行中的数据与同一列中的数据之间的关系。由于第二列与第一列是同一类型的数据,因此这里没有表关系。

您不应该使用表格,因为您是在标记中定义布局,所以您只能有两列。例如,如果客户决定他们想要三列,或者你想为移动 View 或打印样式表显示单列列表,你需要更改标记(或者甚至有几组用于不同目的的标记)。

灵活的标记

好的 - 让我们看看您的标记。目前,您几乎已经得到了一个表结构,因为您将每一行都包装在一个 DIV 中。同样,这意味着您不能同时拥有单列或 3 或 4 列。

更灵活的解决方案是将数据标记为列表。因为它是排序的,所以有序列表是正确的选择:

<ol id="list_properties">

  <li class="property">
    <h3 class="propertyTitle"><a href="#">08-CA-001731</a></h3>
    <dl class="details">
      <dt>Plantiff</dt>
      <dd>Bob's Mortgages</dd>
      <dt>Defendant</dt>
      <dd>Harry Skinflint</dd>
    </dl>
  </li>

  <li class="property">
    <h3 class="propertyTitle"><a href="#">08-CA-001731</a></h3>
    <dl class="details">
      <dt>Plantiff</dt>
      <dd>Bob's Mortgages</dd>
      <dt>Defendant</dt>
      <dd>Harry Skinflint</dd>
    </dl>
  </li>

</ol>

你会得到一个 <li class="property"> “网格”中的每个元素。我也为细节建议了一些更好的标记 - 如果您愿意,请自行使用。

现在完成它:遗憾的是,如果不使用 Javascript 进行一些最终调整,就无法以跨浏览器的方式完成此操作。也就是说,JS 是不引人注目的,所以它实际上只是在最后起到了一点润色的作用。

基本样式

您的基本样式将如下所示:

#list_properties {
  list-style:none;
  margin:0;
  padding:0;
  width:960px;
  float:left;
}

#list_properties li.property{
  width:430px;
  float:left;
  margin:0 50px 50px 0;
  min-height:16em; /* For FF, Safari, Opera, IE8 */
  _height:16em; /* For IE6 */
  *height:16em; /* For IE7 */
}

重新创建列 - 在这个阶段,如果所有框的高度都小于 16em,这将是您所需要的。

Javascript 润色

为了确保一切都坚如磐石,我会使用 jQuery 的等高插件:http://www.cssnewbie.com/equalheights-jquery-plugin/基本上,您将容器 (#list_properties) 传递给它,它会扫描每个子项 (li.property),并将每个子项的高度设置为最高项的高度。

因此,例如,一个元素具有额外信息并且需要 18em 的高度,所有其他元素也都设置为 18em。

链接的站点有启动它的文档,但是一旦你准备好 jquery 和插件,你只需要做:

$(function(){
  $('#list_properties').equalHeights();
});

以这种方式设置后,只需更改 li.property 的宽度即可修改列中的元素数。

最后的想法...

我只是在想,无论如何,按列显示此列表有什么好处?毕竟,用户可以对列表进行排序——单列列表不是更容易浏览吗?我假设用户会寻找特定的元素,而不是半随机地浏览。

关于javascript - 一堆 div 向左浮动,排列成不同高度的列,如果不设置高度,它们不会创建漂亮的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540643/

相关文章:

html - 文本溢出 : ellipsis fighting with direction: rtl

html - 切换标签以便它们跳转到页面顶部

javascript - 从网页浏览器检查 Android 应用程序是否已安装

javascript - 如何用 JavaScript 计算 Linux 上的可用磁盘空间?

javascript - 使用 Jquery 检索输入值

javascript - 在移动设备上按下汉堡包图标时覆盖内容的问题

javascript - 如何在 "return false"上设置超时?

javascript - 运行webpack部署配置时如何解决 'window is not defined'?

JavaScript/jQuery – 在输入字段的末尾添加一个字符

javascript - D3可折叠树,节点合并问题