【问题标题】:Chrome box model is wrongwhen div display:table!div display:table 时 Chrome box 模型错误!
【发布时间】:2010-12-06 18:10:40
【问题描述】:

我用简单的说明创建了一个网站,比如说:

<html>
<head>
<style type="text/css">
.a120 {
background-image:url('image/back.jpg');
width:1004px;
border: 1px solid #333333;
 }
</style>
</head>
<body>
<div class="a120">bfahksbdhabdb</div>
</body>
</html>

*back.jpg 为 1004 像素宽。

然后是疯狂的事情:

IE8、FF35、Opera9,它们都显示了div.a120,背景宽度为1004px,与div的宽度相匹配,每边也有1px的边框。

CHROME,至少在开始时向我展示了相同的内容。 我在 div.a120 顶部使用了一个浮动菜单,宽度为 1004px,令人惊讶的是,我意识到 Chrome 对 div.a120 做了这个:

|-1px 边框 -1002px div 宽度- 1px 边框-|

sum=1004px!!!!

这是正常行为还是我错了?

当您使用 table 而不是带有 display: table 的 div 时,行为显然是一个 table,但是当我使用 display:table 时不应该只是一个带有 table vew 的 div 或者它变成了一个表格?

提前致谢。

一个简短的例子(改变橙色面板的宽度,你会看到它是如何覆盖黑色边框的):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>gfgfg fds f sdf sdf sd fsd f sd</title>
</head>

<body style="margin:0">
<div style="width:1004px; display: table;margin: 0 auto; border: 1px solid black">
<div style="width:967px; height:16px;background-color: #666666;border:none"><div style="width: 37px; float: right;margin-right:-37px; background-color:#ff3300">gfgfg<br />
    fds<br />
    f<br />
    sdf<br />
    sdf<br />
    sd<br />
    fsd<br />
    f<br />
    sd<br />
    ffsd<br />
    s<br />
    fsd<br />
    f<br />
    dsf<br />
    d<br />
    fsd<br />
    f</div>
dasdasdas</div>
<div style="width:967px; display:table">dasdasdas<br />
    dgf<br />
    sdf<br />
    <br />
    sdfdf<br />
    s<br />
    sdf<br />
    fds<br />
    fsd<br />
    <br />
    sdf</div>
<div style="width:967px; height:16px;">dasdasdas</div>
</div>

</body>

</html>

【问题讨论】:

  • 为我工作 - 你能发布一个完整的测试用例吗?
  • 您是否尝试使用正确的文档类型?
  • 好的,我要给大家完整的介绍...
  • 两天来我一直在为这个问题而苦恼。我终于发现这可能是没有解决方案的事情。问题是当我应用样式显示:表时。当你有一个
    你知道在每个浏览器中应该出现一个 1004 像素宽度的 div 和一个 1 像素宽度的边界线。当您应用 display: table 时,div 会扩展其高度以与内容保持一致,然后 chrome 会改变它查看 div 的方式。是一个 1002 像素宽度和 1 像素边框的 div。我用更简单的代码替换了原始代码。

标签: google-chrome css


【解决方案1】:

如果你说 display 是一个普通类型,它不应该有一些继承的混合融合,它应该拾取该类型的显示属性;在您的情况下,表格与 div 的边框宽度包含属性。

Chrome 中表格的总宽度包括边框宽度,而 div 则不包含。

这是一个使用您的代码(严格文档类型)、一个标准表格和一个显示为 div 的表格的测试。您可以通过这种方式查看边框宽度包含差异:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>gfgfg fds f sdf sdf sd fsd f sd</title>
</head>

<body style="margin:0">
    <div style="width:1004px; display: table;margin: 0 auto; border: 1px solid black;">
        <div style="width:967px; height:16px;background-color: #666666;border:none">
            <div style="position: relative; width: 37px; float: right;margin-right:-37px; top: 30px;background-color:#ff3300">gfgfg<br />
                sdf<br />
                f<br />
            </div>
        Div Displaying as table
        </div>
        <div style="width:967px; display:table">dasdasdas<br />
            dgf<br />
            <br />
            sdf</div>
        <div style="width:967px; height:16px;">dasdasdas</div>
    </div>

    <table style="width:1004px; margin: 0 auto; border: 1px solid black;">
        <tr>
            <td style="width:967px; height:16px;background-color: #666666;border:none">
                <div style="position: relative; top: 10px;width: 37px; float: right;margin-right:-37px; background-color:#ff3300">gfgfg<br />
                    ds<br />
                    f<br />
                    sdf<br />
                </div>
                Table displaying as a table
            </td>
        </tr>
        <tr>
            <td style="width:967px; display:table">dasdasdas<br />
                dgf<br />
                sdf<br />
            </td>
        </tr>
        <tr>
            <td style="width:967px; height:16px;">dasdasdas</td>
        </tr>
    </table>

    <table style="width:1004px; display: block;margin: 0 auto; border: 1px solid black;">
        <tr>
            <td style="width:967px; height:16px;background-color: #666666;border:none">
                <div style="position: relative; top: 10px;width: 37px; float: right;margin-right:-37px; background-color:#ff3300">gfgfg<br />
                    asd<br />
                    f<br />
                    sdf<br />
                </div>
                Table displaying as block
            </td>
        </tr>
        <tr>
            <td style="width:967px; display:table">dasdasdas<br />
                dgf<br />
                sdf<br />
            </td>
        </tr>
        <tr>
            <td style="width:967px; height:16px;">dasdasdas</td>
        </tr>
    </table>


</body>

</html>

【讨论】:

  • - 如果你使用 strict 你不应该使用
    ,它会触发 quirks 模式。 - 我明白你做了什么,但我的问题是橙色块。我在FF35、IE8、IE7和IE6中定位OK,但是Chrome侧漏。我没有使用表格,是一个右侧有一个大橙色列的 seo 设计,我想我应该使用你的“相对”示例作为解决它的方法,但我不知道正确的橙色列是否会保留与左边的内容。对不起,如果我对这个例子很神秘,但我正在处理的网站不在线,所以我不能再提供线索了。我会做一个家庭样本给你看。谢谢!!
  • Kwek!!!我的错误,我仔细查看了您的数据并找到了一些答案,如果它按我的预期工作,我会永远感谢您... :)
  • 很高兴听到它,让我知道它是否有帮助。
  • 我必须说,同样的事情也发生在我的 Chrome 中。它更新到 16.xx,当我刷新页面 display: table; 时出于某种原因将所有内容分类为两列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
相关资源
最近更新 更多