流式布局和溢出

当内容超出容器所能容纳的范围时,就会发生溢出。理解溢出行为对于处理CSS中任何具有受限尺寸的元素都非常重要。本指南解释了在处理正常流时溢出是如何工作的。HTML在每个示例中都是相同的,因此它在第一部分中可见,为了简洁起见在其他部分中隐藏。

什么是溢出?

给一个元素一个固定的高度和宽度,然后向盒子里添加大量内容,就会创建一个基本的溢出示例。

html
<div class="box">
  <p>
    One November night in the year 1782, so the story runs, two brothers sat
    over their winter fire in the little French town of Annonay, watching the
    grey smoke-wreaths from the hearth curl up the wide chimney.
  </p>
</div>
<p>
  Their names were Stephen and Joseph Montgolfier. They were papermakers by
  trade, and were noted as possessing thoughtful minds and a deep interest in
  all scientific knowledge and new discovery.
</p>
<p>
  Before that night—a memorable night, as it was to prove—hundreds of millions
  of people had watched the rising smoke-wreaths of their fires without drawing
  any special inspiration from the fact.
</p>
css
body {
  font: 1.2em / 1.5 sans-serif;
}

.box {
  width: 300px;
  height: 100px;
  border: 5px solid rebeccapurple;
  padding: 10px;
}

内容进入盒子。一旦填满盒子,它就会以可见的方式继续溢出,将内容显示在盒子外部,可能会显示在后续内容下方。控制溢出行为的属性是overflow属性,其初始值为visible。这就是为什么我们可以看到溢出内容的原因。

控制溢出

还有其他值可以控制溢出内容的行为。要隐藏溢出内容,请使用hidden值。这可能会导致您的某些内容不可见。

css
body {
  font: 1.2em / 1.5 sans-serif;
}
.box {
  width: 300px;
  height: 100px;
  border: 5px solid rebeccapurple;
  padding: 10px;
  overflow: hidden;
}

使用scroll值会将内容包含在其盒子里,并添加滚动条以启用查看。即使内容适合盒子,也会添加滚动条。

css
body {
  font: 1.2em / 1.5 sans-serif;
}
.box {
  width: 300px;
  height: 100px;
  border: 5px solid rebeccapurple;
  padding: 10px;
  overflow: scroll;
}

如果内容适合盒子,使用auto值将显示内容而没有滚动条。如果不适合,则会添加滚动条。比较下一个示例,您应该看到上面的overflow: scroll示例具有水平和垂直滚动条,即使它只需要垂直滚动。下面的auto示例只在我们需要的方向上添加滚动条。

css
body {
  font: 1.2em / 1.5 sans-serif;
}
.box {
  width: 300px;
  height: 100px;
  border: 5px solid rebeccapurple;
  padding: 10px;
  overflow: auto;
}

正如我们已经了解到的,使用这些值中的任何一个(除了默认的visible),都将创建一个新的块级格式化上下文

overflow: clip 的行为类似于 overflow: hidden,但不允许通过编程方式滚动;盒子变为不可滚动。它也不会创建块格式化上下文。

overflow 属性实际上是 overflow-xoverflow-y 属性的简写。如果您只为 overflow 指定一个值,则该值将用于两个轴。但是,您可以指定两个值,在这种情况下,第一个值用于 overflow-x(即水平方向),第二个值用于 overflow-y(即垂直方向)。在下面的示例中,我只指定了 overflow-y: scroll,因此我们不会得到不必要的水平滚动条。

css
body {
  font: 1.2em / 1.5 sans-serif;
}
.box {
  width: 300px;
  height: 100px;
  border: 5px solid rebeccapurple;
  padding: 10px;
  overflow-y: scroll;
}

流相对属性

书写模式和流式布局指南中,我们研究了block-sizeinline-size属性,这些属性在处理不同书写模式时比将布局绑定到屏幕的物理尺寸更有意义。CSS溢出模块还包括溢出的流相对属性——overflow-blockoverflow-inline。它们对应于overflow-xoverflow-y,但映射取决于文档的书写模式。

指示溢出

在 CSS 溢出模块中,有一些属性可以帮助改善内容在溢出情况下的外观。

内联轴溢出

text-overflow 属性处理内联方向的文本溢出。它接受两个值之一:clip,在这种情况下,内容在溢出时被剪裁,这是初始值,因此是默认行为。我们还有 ellipsis,它会渲染一个省略号,该省略号可能会被正在使用的语言或书写模式的更好字符替换。

css
body {
  font: 1.2em / 1.5 sans-serif;
}
.box {
  width: 300px;
  border: 5px solid rebeccapurple;
  padding: 10px;
}

.box p {
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}

块轴溢出

溢出模块级别 4 规范增加了 block-ellipsis 属性(以前称为 block-overflow)。该属性允许在文本在块维度溢出时添加省略号(或自定义字符串),尽管在撰写本文时还没有浏览器支持。

这在您有文章列表(例如)并将列表显示在固定高度的框中时非常有用,这些框只能容纳有限数量的文本。对于读者来说,可能不清楚点击框或标题时是否有更多内容可供点击。省略号清楚地表明有更多内容。该规范将允许插入内容字符串或常规省略号。

总结

无论您是在网络上的连续媒体中,还是在打印或 EPUB 等分页媒体格式中,理解内容如何溢出对于处理任何布局方法都很有用。通过理解正常流中的溢出如何工作,您应该会发现更容易理解网格和弹性盒等布局方法中溢出内容的影响。

另见