我觉得应该有一个简单的答案。我有一个侧边栏向右浮动,当我注意到悬停时有一些问题。原来我的
<p>
左边的标签交叉进入浮动,即使它们内部的文本正确地避开浮动。我做了一个简单的jsfiddle示例,以显示我的意思,并打开背景,以便您可以看到它们重叠。
JSFiddle:http://jsfiddle.net/ahvs3nr3/
答案 0 :(得分:2)
答案 1 :(得分:2)
添加此CSS可修复问题:
p {
overflow: auto;
}
<强> Working Fiddle 强>
在您的代码中,容器(p
)溢出了侧边栏,即使其内容被限制为不溢出。
来自W3 spec:
浮动,绝对定位元素,阻止容器 ......不是阻止 盒子和带有“溢出”的块盒。除了&#39;可见&#39; ......建立新的 阻止格式化其内容的上下文。
这就是我尝试overflow: auto
的原因。
在块格式化上下文中,每个框的左外边缘都接触到 包含块的左边缘(从右到左格式化,右边 边缘触摸)。即使在浮子的存在下也是如此(尽管如此) 除非盒子,否则盒子的线盒可能会因浮子而缩小 建立一个新的块格式化上下文(在这种情况下,框 由于漂浮物本身可能会变窄。
这就解释了为什么容器溢出侧边栏,但它的&#34;线盒&#34; (包含其文本)不会。
那么&#34;行框&#34;究竟是什么?
在内联格式化上下文中,框是水平布局的,一个 在另一个之后,从包含块的顶部开始。 这些之间会考虑水平边距,边框和填充 框。盒子可以以不同的方式垂直对齐:它们 底部或顶部可以对齐,或者其中的文本基线 可以对齐。包含形成框的矩形区域 一条线称为线框。线框的宽度由a确定 含有块和浮子的存在。
没有明确的内联元素,因此导致这种&#34;内联格式化上下文&#34;?
直接包含在块容器元素中的任何文本 (不在内联元素内)必须被视为匿名内联 元件。
你有它。 每个段落中的文本是一个&#34;匿名内联元素,&#34;这会创建一个&#34;线框,&#34;受到花车的影响。
答案 2 :(得分:0)
只需在p标签右边添加一些边距。
.sidebar {
background-color:rgba(0,0,0,.2);
float:right;
width:25%;
height:30em;
}
p { background:red; padding:1em; margin-right: 25%; }
我还添加了一个jsfiddle以供参考。
http://jsfiddle.net/ahvs3nr3/2/
我在这里使用%margin,因为它们将适应任何宽度的浏览器,但是如果你想使用5em侧边栏,只需确保p标签具有相同的边距量。