CSS 中溢出的工作不符合预期

这是代码


ul {

  list-style-type: none;

  margin: 0;

  padding: 0;

  overflow: hidden; /*The problem is here*/

  background-color: #333;

}


li {

  float: left;

}


li a {

  display: inline-block;

  color: blue;

  text-align: center;

  padding: 14px 16px;

  text-decoration: none;

}


li a:hover {

  background-color: #111;

}


.active {

  background-color: red;

}

<ul>

  <li><a href="#home" class="active">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>

在 ul 样式中,正在使用溢出隐藏。现在,当使用溢出隐藏时,导航栏的背景颜色会变成黑色,就像

https://img1.sycdn.imooc.com/65819557000105a306600052.jpg

但是当我删除 Overflow:hidden 时,背景颜色消失了,就像

https://img1.sycdn.imooc.com/658195600001189806440050.jpg

现在基本上我只是感到困惑,因为溢出:隐藏只是将溢出的东西隐藏在容器中,那么为什么在这里它会出现背景颜色呢?



缥缈止盈
浏览 105回答 3
3回答

暮色呼如

我不想知道正确的解决方案。我只是想知道为什么溢出:隐藏的行为是这样的。由于您的列表项是浮动的,因此默认情况下它们不会影响其父项的 高度 ul 。列表元素本身的有效高度保持在此处 0,因此您实际上在任何地方都看不到背景颜色。overflow 设置为默认值以外的任何值auto,作为明确修复。这意味着 li 现在将影响 ul 的高度,现在 ul 实际上具有高度,您还会看到它的背景颜色应用于该高度。如果您不熟悉该术语,可以了解有关什么是“明确修复”以及实现它的其他方法的更多信息。

慕后森

除非将溢出设置为隐藏、滚动或自动,否则任何可能浮动的内容都不会被剪切。该方法的真正目的是,在没有给元素设置高度和宽度的情况下,当您将溢出设置为隐藏时,它会采用内部元素的高度和宽度:https:// codepen.io/Aypro18/pen/ExVVgYa?editors=1000&nbsp; <!DOCTYPE html>&nbsp; &nbsp;<html>&nbsp; &nbsp; <head>&nbsp; &nbsp; <style>&nbsp; &nbsp; ul {&nbsp; &nbsp; &nbsp; list-style-type: none;&nbsp; &nbsp; &nbsp; margin: 0;&nbsp; &nbsp; &nbsp; padding: 0;&nbsp; &nbsp; &nbsp; overflow: auto; //The problem is here and the olution itself&nbsp; &nbsp; &nbsp; background-color: #333;&nbsp; &nbsp; }&nbsp; &nbsp; li {&nbsp; &nbsp; &nbsp; float: left;&nbsp; &nbsp; }&nbsp; &nbsp; li a {&nbsp; &nbsp; &nbsp; display: inline-block;&nbsp; &nbsp; &nbsp; color: blue;&nbsp; &nbsp; &nbsp; text-align: center;&nbsp; &nbsp; &nbsp; padding: 14px 16px;&nbsp; text-decoration: none;}li a:hover {&nbsp; background-color: #111;}.active {&nbsp; background-color: red;}</style></head><body><ul>&nbsp; <li><a href="#home" class="active">Home</a></li>&nbsp; <li><a href="#news">News</a></li>&nbsp; <li><a href="#contact">Contact</a></li>&nbsp; <li><a href="#about">About</a></li></ul></body></html>

冉冉说

添加&nbsp;display: flex;&nbsp;至 UI 样式。现在,您可以删除overflow:hidden。发生这种情况是因为父元素没有充当子元素的容器(因为它们的浮动属性)。所以,它不会继承他们的身高并适应它。因此,display flex 解决了这个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5