HTML 字段集内容在 100% 高度溢出 (Chrome)

Posted

技术标签:

【中文标题】HTML 字段集内容在 100% 高度溢出 (Chrome)【英文标题】:HTML Fieldset content overflows at 100% height (Chrome) 【发布时间】:2013-02-13 12:02:26 【问题描述】:

Chrome 中的 html fieldset 元素有问题。

我想要一个固定高度的fieldset,并在其中有一个可滚动的div。在我输入legend 之前,一切看起来都很好——当我这样做时,divfieldset 的底部溢出。我还检查了 Firefox,但它并没有这样做(即完全符合我的预期)。

还有人看到这个吗?是 Chrome 的错误吗?有人知道这是否有破解方法吗?

<!DOCTYPE HTML>
<html>
    <head>
        <title>a</title>
        <style>
            fieldset 
                height: 80px;
            
            fieldset div 
                height: 100%;
                overflow-y: scroll;
            
        </style>
    </head>
    <body>
        <fieldset>
            <legend>Test</legend>
            <div>
                Foo!<br/>
                Foo!<br/>
                Foo!<br/>
                Foo!<br/>
                Foo!<br/>
                Foo!<br/>
            </div>
        </fieldset>
    </body>
</html>

【问题讨论】:

对我来说在 chrome 中看起来不错。顺便说一句,&lt;br /&gt; @DanielB:Doh,当然是!抱歉,来晚了,我迟钝了;我会编辑它。但这并没有改变我的问题。在 Ubuntu 上的 Chrome 11.0.696.57 上测试。我会考虑做一个筛选。 测试这个fiddle我用的是Win Chrome 11.0.696.65 首先,jsfiddle 移除了默认的fieldset 样式,所以你至少必须添加border: 1px solid black,才能注意到效果。它可能适用于 Win 版本,但在我的 Ubuntu 上,我得到的结果与上面的屏幕截图中的几乎相同(模边距,被 jsfiddle 的重置脚本剥离)。 我有 Windows 7 和 Chrome 11.0.696.68,它看起来与屏幕截图相似,所以我想这不是它发布的平台的错。 【参考方案1】:

我可以通过将padding-bottom 添加到仅适用于 Chrome 的字段集来使其正常工作。这平衡了一些额外的高度%。很好的是,即使在调整大小时它也能正常工作(相对一致)。

if (navigator.userAgent.toLowerCase().indexOf('chrome'))  // Replace this with your preferred way of checking userAgent
    $('fieldset').css('padding-bottom', '4%'); // Exact percent may vary

作为说明,我发现这至少在 IE8 - IE11 中也是一个问题,因此可以将修复程序应用于 IE。

【讨论】:

【参考方案2】:

如果您不需要使用legend 元素,另一种解决方案是使用h1 并适当地设置样式。这在 Chrome 和 FF 中都适用于我。

<!DOCTYPE HTML>
<html>
<head>
    <title>a</title>
    <style>
        fieldset 
            height: 80px;
        
            h1 
                margin:0;
                margin-top:-1em;
                font-size:1em;
                background:white;
                width:33px;
               
        fieldset div 
            height: 100%;
            overflow-y: scroll;
        

    </style>
</head>
<body>
    <fieldset>
        <h1>Test</h1>
        <div>
            Foo!<br/>
            Foo!<br/>
            Foo!<br/>
            Foo!<br/>
            Foo!<br/>
            Foo!<br/>
        </div>
    </fieldset>
</body>

【讨论】:

是的,这个 hack 似乎正是我想要的。谢谢! (实际上,我更喜欢 legend 正常工作,但不能拥有一切 :)) 再想一想 - 仍然没有做我想做的一切。必须为 h1 指定宽度是个问题。【参考方案3】:

我看到了溢出。

看起来fieldset div 应用了太多高度。试试

fieldset div 
            height: 85%;
            overflow-y: scroll;
        

在 Chrome 中为我工作。

当然,如果没有图例的代码,我不确定是否还有其他问题。

【讨论】:

当然,降低高度会起作用,但是如果我调整 fieldset 的大小,它不会做我想要的(即总是填充 fieldset 的整个内部区域)。此外,height: 100% 至少可以在 Firefox 上正确呈现,因此它会与85% 分崩离析。因此,我不能接受这个答案。 我在 Firefox 3.6.6 中检查过,同样的问题发生在 100%...div 溢出了fieldset。但是,Chrome 和 FF 对我来说都是 85%。 85%“工作”,只是没有做我想做的事。这有点像告诉机械师,当您的车速超过 20 公里/小时时,您的发动机罩就会弹出,而他告诉您解决方案就是开得非常慢。 明白了。请参阅下面的另一个解决方案。

以上是关于HTML 字段集内容在 100% 高度溢出 (Chrome)的主要内容,如果未能解决你的问题,请参考以下文章

最大高度的孩子:100% 溢出父母

高度为 100% 的 CSS 网格子元素溢出父元素

什么是“溢出:滚动\9”或“高度:100%\9”? [复制]

CSS - 绝对在固定范围内,滚动溢出和 100% 高度

如何css宽度设置为包含内容,高度设置为100%?

使弹性项目具有 100% 的高度和溢出:滚动 [重复]