铬浮子? 1px额外填充,但它不填充

时间:2012-03-25 18:17:43

标签: css google-chrome css-float

以下html和css显示容器内的两个div。左边的div没有浮动;正确的div正好浮动。

右边的div似乎是一个太窄的像素,因此容器的红色背景颜色显示在一个像素间隙中。

这是我的问题的简化。 http://jsfiddle.net/XPd9J/

HTML

<div class="inner-wrapper">

    <div class="right-sidebar">
        &nbsp;
    </div>

    <div class="content">
        &nbsp;<br /><br />
    </div>

</div>​

CSS

.inner-wrapper {
    position:relative;
    background-color:red;
    overflow:auto;
    width:90%;
    padding:0;
    margin:20px 0 0 20px;
}
.right-sidebar {
    position:relative;
    width:40% !important;
    background-color:lime;
    float:right;
    margin:0;
    padding:0;
}
.content {
    position :relative;
    width:60%;
    background-color:silver;
    margin:0;
    padding:0;
}
​

6 个答案:

答案 0 :(得分:12)

这不是解决问题的浮点数。这是百分比宽度。在FF和IE中,它工作得很完美,但是Chrome会计算百分比宽度,因此并不总是像素总和达到100%。只是尝试轻微改变窗口宽度,你会注意到额外的1像素有时会消失/出现。

如何避免这种行为?你需要以某种方式使用相同的百分比,所以它的计算方法恰好相同。右侧边栏宽度为40%,因此内容div需要有40%的右边距(这40%是包含块元素的40%)

http://jsfiddle.net/XPd9J/1/

.inner-wrapper {
    background-color:red;
    overflow:auto;
    width:90%;
    padding:0;
    margin:20px 0 0 20px;
}
.right-sidebar {
    width:40% !important;
    background-color:lime;
    float:right;
    margin:0;
    padding:0;
}
.content {
    background-color:silver;
    margin:0 40% 0 0;
    padding:0;
}
​

答案 1 :(得分:7)

获得完整100%的另一个简单选项是将父元素设置为overflow:hidden,将元素设置为width:101%

答案 2 :(得分:3)

我也遇到了这个问题,我在浮动元素的父div中使用了两个选项display:inline-tabledisplay:table-cell。虽然它不是一个表,但我用它作为替代

答案 3 :(得分:1)

对于将来参加此活动的任何人,可以使用上述方法创建带有液体浮动的左侧边栏/内容/右侧边栏。可能会这样做:

Container div

右侧边栏宽度:30%;浮动:右侧;边距:0;填充:0;

内容宽度:40%;浮动:右;边距:0;填充:0;

左侧边距 - 右边:70%;边距:0;填充:0;

结束容器div

如果所有容器都有margin:0; padding:0;然后这适用于FF,IE,Chrome,Safari和Opera(最新)没有问题。天才。狡猾的浏览器应该很久以前就解决了这个问题 - 人们只能猜测网页设计师通常不需要像素完美放置侧边栏,否则会给浏览器构建者带来巨大压力。

答案 4 :(得分:0)

那里有两个不间断的空间。 &安培; NBSP;字符会导致右侧边栏左侧的1px额外空间。顺便说一下,position: relative在这种情况下是多余的(只有当你必须在IE6中修复某些东西时它才有用。)

答案 5 :(得分:0)

设置&#34;内包装&#34;溢出隐藏(以防万一)。然后在右边div使用calc(40%+ 1px)来解决问题。