【问题标题】:CSS overflow:hidden with floatsCSS溢出:用浮动隐藏
【发布时间】:2013-04-09 02:31:16
【问题描述】:

我阅读了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 用于处理超出框框的内容,但不明白它在这种情况下如何应用。

【问题讨论】:

    标签: html css overflow


    【解决方案1】:

    我试图结束混乱:

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

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

    现在声明overflowvisible 以外的任何值)会建立一个新的block formatting context,这使得ul 包含其子项。突然ul“重新出现”,不再具有0px 的大小。 p 被推到底部。您还可以声明 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>

    【讨论】:

    【解决方案2】:

    在元素上设置 overflow: hidden 会导致创建新的浮动上下文,因此在应用了 overflow: hidden 的元素内浮动的元素将被清除。

    http://www.w3.org/TR/CSS2/visuren.html#block-formatting

    【讨论】:

      【解决方案3】:

      引用HTML & CSS Is Hard

      总而言之,当您在 容器 div 的底部,使用透明溶液。否则,添加一个 溢出:容器元素的隐藏声明。底层证券 这两个选项的想法是您需要一种方法来告诉浏览器 将浮动合并到其容器元素的高度中

      【讨论】:

        【解决方案4】:

        使用clear:both; 代替overflow:hidden; 代替&lt;p&gt;。这里正在使用http://jsfiddle.net/Mvv8w/。基本上overflow:hidden 会像clear:both; 一样清除它旁边的任何东西。

        【讨论】:

        • 那不一样。看看你的modified example
        • 我没说他们是一样的?我只是说它会清除它旁边的元素。所以没有必要给负面评价。
        • 1) 我没有投反对票。 2)从我发布的小提琴中可以看出,此示例中的溢出用于使父元素包含浮动的子元素。我将背景颜色放在 ul 上以使其清楚:第二个 ul 扩展以包含它的浮动子级,而第一个列表中的浮动也被清除,但 ul 未能包含它的浮动子级 li,因此高度为 0 = no背景色。
        【解决方案5】:

        这就是为什么 w3schools 不是网页设计师/开发人员的可靠来源。你是对的,这是一个糟糕的例子。

        这不是因为,在这个例子中,父元素没有固定的。此外,它是一个无序列表标签,无论如何它都会扩展到它的孩子的大小。

        http://jsfiddle.net/EhphH/

        CSS

        .parent {
            width: 150px;
            height: 100px;
            padding: 10px;
            background: yellow;
            overflow: hidden;
        
        }
        .child {
            float: left;
            width: 75px;
            height: 120px;
            margin: 10px;
            background: blue;
        
        }
        .baby {
            width: 200px;
            height: 25px;
            background: green;
        }
        

        标记

        <div class="parent">
            <div class="child">
                <div class="baby">
                </div>
            </div>
            <div class="child">
            </div>
        </div>
        

        【讨论】:

        • 在中风之前放松一下。生气是没有办法的生活。
        • 呵呵,我一点也不生气。我很高兴某些人如何看待他们的错误观点。您应该深入了解我的示例小提琴并思考几个小时。
        • @tPlummer:“在中风之前放松一下。愤怒是无法生存的。” Speakyourself。无论如何,因为 jsFiddle 整个下午都对我不利,我将假设您添加的实际上与您的链接中的代码相同 - 尽管考虑到您对此的立场,它似乎仍然有点可疑。跨度>
        • @BoltClock:“我在 w3schools 上阅读了以下代码,但没有看到溢出属性如何影响天气文本是否出现在“ul”的右侧。 “......然后......”我知道溢出:隐藏等用于处理框外的内容,但是在这个简单的示例中看不到这是如何发生的。我回答了 OP 提出的问题并提供了一个示例。众所周知,他使用的资源不可靠。之后发生的一切都源于我对克里斯托夫需要超越必要的批评的丰富多彩的看法。道歉。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多