【问题标题】:How to create dynamic horizontal layout in pure HTML/CSS no JS?如何在没有 JS 的纯 HTML/CSS 中创建动态水平布局?
【发布时间】:2010-12-18 08:07:32
【问题描述】:

看看这个例子: http://jsbin.com/ixiju4/2/edit

我有一个 wrapper,它定义了高度,里面有两个容器:topbottom。 顶部容器的高度没有固定(在示例中它设置为 100 像素,但这只是为了演示)。我想要的是动态设置底部容器以填充包装器的其余部分。

在这个演示中,我使用了 JS:

$(function() {
  var top = $('#top');
  var bottom = $('#bottom');
  bottom.height(bottom.parent().height()-top.outerHeight());
});

你认为有一种方法可以在纯 HTML/CSS 中实现吗?无论如何,我什至可以使用表格。我一直在考虑解决方案一段时间,但没有找到任何跨浏览器兼容的解决方案。 感谢您的帮助。

更新 1: 我在定义这个问题时犯了一个错误 top 没有固定的高度 - 它是由它的内容定义的。 http://jsbin.com/ixiju4/6

更新 2: 好的。这是我真正想要的: http://jsbin.com/ixiju4/8

【问题讨论】:

  • 在您更新之后,我仍然相信下面的解决方案会起作用。如果您愿意,您可以设置一个 min-height CSS 属性,以便在您的动态内容生成出现问题时至少保留一个空间:)

标签: javascript html css layout


【解决方案1】:

有一个非常简单的纯 CSS 解决方案:

#wrapper {
    position: absolute;
    width: 100%;
    height: 100%;
  }
  #top {
    height: 100px;
    width: 100%;
    background-color: #00f4f7;

  }
   #bottom {
    background-color: #00f400;
    width: 100%;
    height: 100%
  }

更新 2 继您对问题的上一轮编辑之后,我相应地更新了 CSS,即:

#wrapper {
    position: absolute;
    width: 100%;
    height: 100%;
    overflow: hidden;
  }

  #top {
    background-color: #00f4f7;   
  }

  #bottom {
    background-color: #00f400;
    height: 100%;
    padding: 10px;
  }

  #inner {
    height: 100%;
    background-color: #f0f400;
    margin-bottom: 10px;
  }

【讨论】:

  • 如果你在 #wrapper 上加上一个 overflow: hidden 就更好了。
  • 呵呵,谢谢 - 我希望我一直都有这样清晰的时刻 :)
  • 我怀疑这个解决方案是否有意义:jsbin.com/ixiju4/11 #bottom 将是 #wrapper 的 100% 高度,它必须是 #wrapper.height - #top.height
  • 根据您提出的问题,它运行良好。但是,您在上面所做的评论似乎表明标准已更改。也许改写您希望 HTML/CSS 执行的操作 - 您已经多次编辑问题,只说“这就是您想要的”。
【解决方案2】:

好吧,如果你可以使用表格:

<table style="height:400px">
  <tr>
    <td style="height:100px">Fixed to arbitrary value</td>
  </tr>
  <tr>
    <td style="height:auto">Dynamically filling</td>
  </tr>
</table>

http://jsbin.com/ixiju4/3

免责声明:尊敬的 Google 员工,如果您找到了这个答案:不要在家里这样做!样式表是邪恶的。使用display: tabledisplay: table-row 在除IE 之外的所有内容中都可以达到相同的效果

编辑 2: 好的,为了完整性:

#wrapper { display: table; }

#top, #bottom { display: table-row; }

如前所述,在 IE http://jsbin.com/ixiju4/5

编辑 3:我真的是瞎了。是的,Tiny Giant Studios 以显而易见的方式回答了这个问题。你应该接受他的回答。 (为了完整起见,我离开了。)

【讨论】:

  • 请,请,请:不惜一切代价避免使用表格进行布局 - 表格用于表格数据,仅此而已。此外,使用 style 属性 - 这也不好。
  • @jgradim:冷静下来。据我所知,OP 似乎急需,明确表示他可以使用表格进行样式设置,并且您无法提供更好的解决方案(CSS3 网格不计算在内)。
  • 我的呼吁不是对答案的批评——而是对作者的呼吁。如有误解请见谅:)
  • 好的,那我们就达成共识了。对于表格样式,我能想到的唯一借口是 IE6 的电子邮件模板和 Intranet 应用程序,截止日期很紧。
猜你喜欢
  • 2012-03-28
  • 2013-05-15
  • 2013-03-23
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 2018-10-04
  • 2023-02-06
相关资源
最近更新 更多