溢出

Avatar of Sara Cope
Sara Cope

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 $200 免费信用额度!

overflow 属性控制超出其边界的内容的显示方式:想象一个你显式设置为 200px 宽的 div,但它包含一个 300px 宽的图像。默认情况下,该图像将超出 div可见。而如果将 overflow 值设置为 hidden,图像将被裁剪至 200px。

div {
  overflow:  visible | hidden | scroll | auto | inherit
}

  • visible:当内容超出其框时不会被裁剪。这是该属性的默认值
  • hidden:溢出的内容将被隐藏。
  • scroll:类似于 hidden,但用户可以滚动隐藏的内容。
  • clip:当内容超出其框时被裁剪。这可以与 overflow-clip-margin 一起使用来设置裁剪区域。
  • auto:如果内容超出其框,则该内容将被隐藏,同时应显示一个滚动条供用户查看剩余内容。
  • initial:使用默认值 visible
  • inherit:将溢出设置为其父元素的值。

请记住,文本会自然地在元素末尾换行(除非更改 空白),因此文本很少会导致溢出。除非设置了 高度,否则文本只会使元素更高。当显式设置宽度和高度并且不希望任何内容溢出时,或者显式避免滚动时,溢出会更常见地出现。

visible

如果你根本没有设置 overflow 属性,则默认值为 visible。因此,通常没有理由将该属性显式设置为 visible,除非你要覆盖它从其他地方的设置。

这里要记住的重要一点是,即使内容在框外可见,该内容也不会影响页面的流动。例如

通常,你不应该在包含网页文本的框上设置静态高度,因此它不应该出现。

hidden

默认 visible 的反面是 hidden。这会将任何超出框的内容隐藏起来。

这在与动态内容一起使用时特别有用,因为溢出可能会导致严重的布局问题。但是,请记住,以这种方式隐藏的内容是完全不可访问的(除了查看源代码)。例如,用户将默认字体大小设置为比你预期的更大,你可能会将文本推到框之外并将其完全隐藏在他们的视野之外。

scroll

将框的 overflow 值设置为 scroll 将隐藏超出框的内容,但会提供滚动条以滚动框的内部以查看内容。

值得注意的是,无论如何你都会获得水平和垂直滚动条,即使内容只需要其中一个。

可以使用 -webkit-overflow-scrolling 为该值启用 iOS 的动量滚动。

注意:在 OS X Lion 中,当滚动条设置为仅在使用时显示时,scroll 的行为更像是 auto,即只有需要的滚动条才会显示。

auto

自动溢出与 scroll 值非常相似,只是它解决了在你不需要滚动条时出现滚动条的问题。只有当内容实际上超出元素时,滚动条才会显示。

overflow-x 和 overflow-y

也可以使用 overflow-xoverflow-y 属性来水平或垂直地操作内容的溢出。例如,在下面的演示中,可以滚动浏览水平溢出,而超出框高度的文本将被隐藏

.box {
  overflow-y: hidden;
  overflow-x: scroll;
}

清除浮动

设置溢出的最流行用途之一,奇怪的是,是 浮动 清除。设置溢出不会 清除 元素处的浮动,它会 自我清除。这意味着具有溢出(除 visible 以外的任何值)的元素将扩展到它需要的大小以包含其中的浮动子元素(而不是折叠),假设未声明高度。像这样

更好的浮动清除技术是 clearfix,因为它不需要以你不需要的方式改变溢出属性。

生成块级格式化上下文

值得注意的是,overflow 还会创建一个新的 块级格式化上下文,如果我们要将一个块级元素与一个浮动元素对齐,这将很有用。在下面的示例中,我们展示了多个段落默认情况下如何与浮动图像交互,然后我们使用 overflow: hidden 将文本与其自身框对齐

这来自 Nicole Sullivan 的一篇 很棒的文章,它启发了 媒体对象

滚动条可以用 CSS 样式化吗?

以前你可以在 IE 中 设置滚动条样式(v5.5?),但现在不行了。你可以在 WebKit 浏览器中 再次设置滚动条样式。如果你需要跨浏览器的自定义滚动条,请 查看 JavaScript

如果元素需要附加滚动条以符合溢出值,Firefox 会将它们放在元素外部,保持声明的可见宽度/高度。IE 会将滚动条放在内部,保持声明的总宽度/高度。

演示

本文的演示取自 此示例页面

浏览器支持

此浏览器支持数据来自Caniuse,其中有更多详细信息。数字表示浏览器从该版本开始支持该功能。

桌面

ChromeFirefoxIEEdgeSafari
9081119016.0

移动设备 / 平板电脑

Android ChromeAndroid FirefoxAndroidiOS Safari
12712712716.0

更多信息