html - CSS 溢出 :hidden with floats

标签 html css overflow

我读了following code on w3schools并且不了解 overflow 属性将如何影响文本是否出现在 ul 的右侧。

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

li {
  float: left;
}

a {
  display: block;
  width: 60px;
  background-color: #dddddd;
  padding: 8px;
}
<ul>
  <li><a href="#home">Home</a></li>
  <li><a href="#news">News</a></li>
  <li><a href="#contact">Contact</a></li>
  <li><a href="#about">About</a></li>
</ul>
<p><b>Note:</b> overflow:hidden is added to the ul element to prevent li elements from going outside of the list.</p>

我知道 overflow:hidden 用于处理框外的内容,但不明白它在这种情况下如何应用。

最佳答案

我试图结束困惑:

ulp 元素一样都是 block 级元素(它们拉伸(stretch)到父宽度的 100%)。这就是为什么如果没有在这些元素上声明宽度或显示,默认情况下 p 将出现在 ul 下方。

现在在您的示例中,ul 仅包含 float 元素。这使得它折叠到 0px 的高度(尽管如您在示例中所见,它仍然具有 100% 的宽度)。相邻的 p 将出现在 float li 的右侧,因为它们被视为普通 float 元素。

现在声明 overflow(visible 以外的任何值)建立一个新的 block formatting context ,这使得 ul 包含它的 child 。 ul 突然“重新出现”,大小不再是 0pxp 被推到底部。您还可以声明 position:absolute 以实现相同的“清除”效果(副作用是现在 ul 被从正常元素流中取出 - ps 将被 ul 重叠。)

See the example fiddle

如果您对技术感兴趣,请比较 CSS 规范的相应段落:

§10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'

§10.6.7 'Auto' heights for block formatting context roots . (感谢 BoltClock 挖掘出链接)。

ul{
    list-style-type:none;
    margin:0; padding:0;
    background-color:#dddddd;
    border:2px solid red;
}
li{
    float:left;
}
a{
    display:block;
    width:60px;
    background-color:#555;
    color:white;
}
p{
    margin:0;
    outline:2px dotted blue;
}
#two{
    clear:both;
    overflow:hidden;
}
No overflow:
<ul>
<li><a href="#home">Home</a></li>
<li><a href="#news">News</a></li>
<li><a href="#contact">Contact</a></li>
<li><a href="#about">About</a></li>
</ul>
<p>Notice the collapsed ul - no background-color visible, collapsed border and this paragraph treats the lis as regular floats  </p>
<br>
With overflow: hidden
<ul id="two">
<li><a href="#home">Home</a></li>
<li><a href="#news">News</a></li>
<li><a href="#contact">Contact</a></li>
<li><a href="#about">About</a></li>
</ul>
<p>the ul reappeared - it now contains the child li's - the float is cleared</p>

关于html - CSS 溢出 :hidden with floats,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16041229/

相关文章:

css - 将 CSS/SASS 规则应用于外部元素而不是内部元素

c# - 使用 Array.Sum 禁用溢出检查

css - Safari 圆 Angular 无法隐藏在动画期间隐藏的溢出

html - 强制 div 具有背景图像的大小

jquery - Bootstrap 3 : Full Slider not working. Uncaught TypeError : $(. ..).carousel 不是函数

javascript - 如何在 jQuery Mobile 中设置 "list item > link"的样式

html - 如何将网格中的右列缩小到最大值。左栏的 100%?

javascript - 从右向左过渡

python - 如何仅返回 HTML 片段中的文本?

javascript - 使用 img.src 将 img.onload 链接到 Image() 对象