【问题标题】:CSS display:table for filling height. Different in Chrome/Safari vs Firefox/OperaCSS display:table 用于填充高度。 Chrome/Safari 与 Firefox/Opera 的不同
【发布时间】:2013-04-12 23:48:48
【问题描述】:

使用 display:tabledisplay:table-row CSS 属性,我希望我的内容能够填充 div 的剩余可用高度。如果内容超过可用高度,我希望显示一个滚动条。

这是小提琴:http://jsfiddle.net/3HYJx/2/

Google Chrome 和 Safari 中显示的行为是我想要实现的。但是,Firefox 和 Opera 的显示方式不同。还没试过 IE,但担心最坏的情况。

为什么这种行为如此不同?甚至更好:如何在每个浏览器中实现我想要的(如 Chrome 所示)?

非常感谢。


Chrome 和 Safari:

Firefox 和 Opera:

【问题讨论】:

  • 我认为您的示例中不需要 display: table/table-row。为什么不直接使用divoverflow 属性?
  • ExP:感谢您调查我的问题。我不能这样做的原因是没有设置“标题”组件的大小。这就是为什么使用特定的top-offset 将“内容”div 设置为position:absolute 也不起作用的原因。经过一番研究,display:table 成功了,只不过它只能在基于 Webkit 的浏览器中运行。
  • 这个破解不了,肯定有答案,希望知道是什么。
  • 我的意思是,你总是可以使用 jQuery 来解决它,但这并不那么优雅。
  • 两张图#wrapper的整体高度也不一样,是不是很困扰?

标签: css google-chrome firefox


【解决方案1】:

使用表格显示属性,您可以通过在滚动部分的文本周围再包裹两个元素来克服 firefox 问题,因此您拥有三个:

  • 外层是一个table-row 容器,填充了表格的其余部分
  • 在其中我们有一个相对定位的容器,其中heightwidth 设置为100%,并设置垂直滚动overflow-y:scroll;
  • 最里面的容器是绝对heightwidth 也设置为 100%

所以在这里我只是快速地在你的内容段落周围添加了两个 div 容器(你可能会根据你的需要找到一组更合适的容器,但这只是为了说明):

<div id="wrapper">
    <h2 id="date">Date</h2>
    <h1 id="title">A title ...</h1>
    <div id="contentbox-outer">
        <div id="contentbox-inner">
            <p id="content">The content ...</p>
        </div>
    </div>
</div>

而且你的整个 CSS 必须被修改。您的原始选择器,稍作修改:

#wrapper {
    position:absolute;
    display: table;
    table-layout:fixed;
    background-color:black;
    padding:10px;
    width: 250px;
    height:350px;
    border-spacing:20px;
}

#date {
    display: table-row;
    font-weight: normal;
    font-size: 25px;
    background-color:yellow;
}

#title {
    display: table-row;
    font-weight: normal;
    font-size: 40px;
    line-height:90%;
    background-color:blue;
}

请注意,table-rowtable 元素现在采用了表格的特定样式,例如设置表格行之间间距的 ​​border-spacing 属性,您现在可以将其与表格的 padding 属性结合使用你想要的样子。

添加容器的样式将是这样的(第一个仍然基于您的样式,最后两个是附加的 - 内部的):

#contentbox-outer {
    display: table-row;
    font-size: 12pt;
    width: 100%;
    height:90% !important;
    text-align: justify;
    background-color:red;
    overflow-y: scroll;
}
#contentbox-inner {
    position:relative;
    height:100%;
    width:100%;
    overflow-y:scroll;
}
#content {
    position:absolute;
    height:100%;
    width:100%
}

我还更新了您的小提琴以进行快速检查: http://jsfiddle.net/3HYJx/7/

编辑: 这适用于 Firefox、Chrome、Safari 等浏览器,但不适用于 Opera,因为 height: 100% 不会在严格模式下呈现在文档中。因此,通过更多研究,我发现您可以让它在 quirks 模式 下工作,这里是 test html - 上面的代码,但在 quirks 模式文档中.感谢您给我一个学习的理由,很高兴知道 =)

【讨论】:

  • 这似乎适用于 Chrome 和 Firefox,非常感谢。不过,Opera 似乎仍然没有得到它。
  • 也可以在 Safari 中使用,我可以多想一些对 Opera 有用的东西。
  • 看了一圈后,我发现这篇文章 [ruzee.com/blog/2006/05/cells-with-100-height-in-html-tables] 说在 Opera 中的表格中hight:100% 在严格模式下不能正确呈现,但在怪癖模式下就像一个魅力。将其添加到答案中。
  • 太好了,确实有效!非常感谢您调查并花时间回答我的其他问题!
【解决方案2】:

工作小提琴: http://jsfiddle.net/3HYJx/3/

问题是你在#content上设置的height:90% !important;

您在#wrapper#date#title 上设置了固定高度。

如果你在#content 上设置了一个固定高度(因为你有其他所有东西的高度都是固定的,所以这不会是一个问题)你也会在 FireFox 中得到预期的结果。

【讨论】:

  • 我认为这不能解决@Aegonis 的问题。我的理解是#title 上的固定高度不正确,你应该假设一个流体高度,这意味着#content 也应该有一个流体高度来填充剩余的垂直空间。
  • @Godwin 所说的确实如此。在#title 上设置固定高度允许#wrapper 随着#title 变大而扩展。
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 2012-03-24
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多