css - 为什么我必须添加 "overflow:hidden"才能使导航栏在页面上可见?

标签 css

<分区>

我是 css 的新手,整个上午都在为我的代码的以下问题而苦苦挣扎。如果有人能帮我找出原因,我将不胜感激。

如果不将“ul.navBar”的“溢出”设置为“隐藏”,为什么导航栏会从页面上完全消失?

<html>
<head>
<style>
    ul.navBar {
        list-style-type: none;
        margin: 0px;
        padding: 0px;
        overflow: hidden;
        background-color: #4277f4;
        cursor: pointer;
    }

    li {
        float: left;
    }

    li a {
        display: inline-block;
        color: white;
        text-align: center;
        padding: 14px 16px;
        font-family: Verdana, Geneva, Tahoma, sans-serif;
        font-size: 20px;
        text-decoration: none;
    }

    li:hover {
        background-color: #A2AEB3;
    }

    .dropDownContent {
        display: none;
        position: absolute;
        background-color: #7DC9E3;
        width: 150px;
        box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
        z-index: 1;
        text-decoration: none;

    }
    .dropDownContent a {
        color: white;
        display: block;

    }
    .dropDownContent a:hover{
        background-color: #4A96B0;
    }


    li.dropDownBtn:hover .dropDownContent{
        display: block;
    }

</style>
</head>

<body>
    <ul class="navBar">
    <li><a href="#">Home</a></li>
    <li class="dropDownBtn"><a href="#">Products</a>
        <div class="dropDownContent">
            <a href="#">Product1</a>
            <a href="#">Product2</a>
            <a href="#">Product3</a>
        </div>
    </li>
    <li><a href="#">Service</a></li>
    <li><a href="#">Contact</a></li>
</body>
</html>

这是 navigation bar 的代码页.

最佳答案

Why does the navigation bar totally disappear from the page if I don't set the overflow of ul.navBar to hidden?

这是因为 .navBar 的子元素正在 float 。 float 元素脱离了正常的文档流,不占用空间。因为 child 不占空间 .navBar 没有高度。

添加 overflow: hidden; 会触发一个新的 block 格式化上下文,防止 .navBar 在有 float 子项时“折叠”


有些人会建议使用display: inline-block;。请谨慎使用,因为每个元素周围都有空白,这会使它们比您想象的要大。尤其是在使用百分比宽度时。

例子:

ul,
li {
  margin: 0;
  padding: 0;
  list-style: none;
}

li {
  width: 33.3333%;
}

.inline li {
  display: inline-block;
  background-color: gold;
}

.float li {
  float: left;
  background-color: indianred;
}

.flex {
  clear: left;
  display: flex;
  background-color: skyblue;
}
<ul class="inline">
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
</ul>

<ul class="float">
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
</ul>

<ul class="flex">
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
</ul>

这是关于 how to handle the white space 的一些选项如果您选择了 inline-block 路由。

关于css - 为什么我必须添加 "overflow:hidden"才能使导航栏在页面上可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43007817/

相关文章:

javascript - 根据输入将用户定向到两个不同的 URL

html - 防止元素缩小

c# - hiqpdf - asp.net - 如何修改代码以捕获 div

html - 如何从此 Tumblr 主题中删除 "Source:"?

javascript - Flexbox 图像库和单个图像位置

css - Angular Material : table inside mat-expansion not aligned to other table

html - Bootstrap 容器向网页的右端添加填充

html - 在wordpress的导航栏顶部制作一个栏

jQuery onclick 向左浮动并返回

html - Thymeleaf - 如何根据互斥条件应用两种(或更多)样式