`overflow` 和 `contain` 属性

`overflow` 和 `contain` 属性

本文解释了 overflowcontain 属性。

您可以学习如何使用 overflow 属性描述显示滚动条和裁剪等内容。

YouTube Video

预览的HTML

css-overflow-contain.html
  1<!DOCTYPE html>
  2<html lang="en">
  3<head>
  4    <meta charset="UTF-8">
  5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6    <title>CSS Properties Example</title>
  7    <link rel="stylesheet" href="css-base.css">
  8    <link rel="stylesheet" href="css-overflow-contain.css">
  9</head>
 10<body>
 11    <!-- Header -->
 12    <header>
 13        <h1>CSS Properties For Overflow Content</h1>
 14    </header>
 15
 16    <!-- Main content -->
 17    <main>
 18        <header>
 19            <h2>Overflow And Contain Properties</h2>
 20        </header>
 21        <article>
 22            <h3>overflow</h3>
 23            <section>
 24                <header><h4>overflow: visible</h4></header>
 25                <section class="sample-view" style="height: 100px;">
 26                    <section class="overflow-visible">
 27                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 28                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 29                    </section>
 30                </section>
 31                <header><h4>overflow: hidden</h4></header>
 32                <section class="sample-view">
 33                    <section class="overflow-hidden">
 34                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 35                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 36                    </section>
 37                </section>
 38                <header><h4>overflow: scroll</h4></header>
 39                <section class="sample-view">
 40                    <section class="overflow-scroll">
 41                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 42                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 43                    </section>
 44                </section>
 45                <header><h4>overflow: auto</h4></header>
 46                <section class="sample-view">
 47                    <section class="overflow-auto">
 48                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 49                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 50                    </section>
 51                </section>
 52                <header><h4>overflow-x: scroll; overflow-y: hidden;</h4></header>
 53                <section class="sample-view">
 54                    <section class="overflow-xy">
 55                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 56                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 57                    </section>
 58                </section>
 59                <header><h4>overflow: clip</h4></header>
 60                <section class="sample-view">
 61                    <section class="overflow-clip">
 62                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 63                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 64                    </section>
 65                </section>
 66            </section>
 67        </article>
 68        <article>
 69            <h3>contain</h3>
 70            <section>
 71                <header><h4>contain: layout</h4></header>
 72                <section class="sample-view">
 73                    <section class="contain-layout">
 74                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 75                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 76                    </section>
 77                </section>
 78                <header><h4>contain: paint</h4></header>
 79                <section class="sample-view">
 80                    <section class="contain-paint">
 81                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 82                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 83                    </section>
 84                </section>
 85                <header><h4>contain: size</h4></header>
 86                <section class="sample-view">
 87                    <section class="contain-size">
 88                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 89                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 90                    </section>
 91                </section>
 92                <header><h4>contain: style</h4></header>
 93                <section class="sample-view">
 94                    <section class="contain-style">
 95                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
 96                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
 97                    </section>
 98                </section>
 99                <header><h4>contain: content</h4></header>
100                <section class="sample-view">
101                    <section class="contain-content">
102                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id odio sit amet eros feugiat semper.</p>
103                        <p>Donec vehicula est non sapien sollicitudin, id tincidunt velit volutpat.</p>
104                    </section>
105                </section>
106            </section>
107        </article>
108    </main>
109</body>
110</html>

overflowcontain 属性

overflow

CSS 的 overflow 属性是一个重要的属性,用于控制当元素内容超出其框的大小时如何显示。它通常用于设计网页的布局和用户界面,帮助管理滚动条的显示、裁剪和元素溢出。

overflow 属性的基础知识

overflow 属性有四个主要值:visiblehiddenscrollauto

visible
1section.overflow-visible {
2    border: 2px dashed gray;
3    width: 400px;
4    height: 50px;
5    overflow: visible;
6}

visible 是默认值,当元素内容超出框的大小时,内容仍然可见。溢出的部分可能会与其他元素重叠,但不会显示滚动条。

特性:

  • 内容显示没有限制。
  • 不会显示滚动条。
hidden
1section.overflow-hidden {
2    border: 2px dashed gray;
3    width: 400px;
4    height: 50px;
5    overflow: hidden;
6}

hidden 是一种设置,当元素内容超出框的大小时,溢出的部分将不会显示。不会显示滚动条,且溢出的内容将不可见。

特性:

  • 当内容超出元素边界时,多余的部分将被隐藏。
  • 不会显示滚动条。
scroll
1section.overflow-scroll {
2    border: 2px dashed gray;
3    width: 400px;
4    height: 50px;
5    overflow: scroll;
6}

当使用 scroll 时,如果元素的内容超出框的大小,将强制显示滚动条。即使内容没有溢出,也会始终显示滚动条。

特性:

  • 即使内容适合元素边界,仍会显示滚动条。
  • 可以进行水平方向和垂直方向的滚动。
auto
1section.overflow-auto {
2    border: 2px dashed gray;
3    width: 400px;
4    height: 50px;
5    overflow: auto;
6}

auto 仅在内容溢出时显示滚动条;如果内容适合元素的框,将不会显示滚动条。

特性:

  • 仅在内容溢出时显示滚动条。
  • 自动创建一个可滚动的区域。
overflow-xoverflow-y
1section.overflow-xy {
2    border: 2px dashed gray;
3    width: 400px;
4    height: 50px;
5    overflow-x: scroll;
6    overflow-y: hidden;
7}

overflow 属性可以分别单独控制水平方向(x 轴)和垂直方向(y 轴)。

通过这种方式,可以使用 overflow-xoverflow-y 单独设置垂直和水平滚动条的显示。

溢出属性的注意事项

在使用 overflow 属性时,需要注意一些事项。

滚动条显示对设计造成的影响

使用 scrollauto 显示滚动条可能会破坏页面的整体设计。特别是当元素位于右边或底边时,滚动条可能会削弱其可见性。

默认的浏览器行为

滚动条的显示和功能可能因浏览器而异。特别是在 Windows 和 macOS 之间,滚动条显示样式存在差异,这可能导致设计未如预期显示。进行跨浏览器测试是很重要的。

子元素的溢出

在父元素上设置 overflow: hidden 会隐藏超出父元素框的子元素。这可能导致弹出窗口和模态窗口无法正确显示。

overflow: clip (CSS Level 3)

1section.overflow-clip {
2    border: 2px dashed gray;
3    width: 400px;
4    height: 50px;
5    overflow: clip;
6}

在新的 CSS 规范中,引入了一个名为 overflow: clip 的值。这类似于 hidden,但它不允许滚动,只是裁剪内容。

特性:

  • 如果内容溢出,溢出的部分将被完全隐藏。
  • 不会显示滚动条。

结论

CSS 的 overflow 属性是控制网页设计内容显示的重要工具。通过管理内容超出元素框的情况并应用适当的滚动条或裁剪,它为用户提供了更友好的界面。此外,使用 overflow-xoverflow-y 可实现更精确的控制。

contain

contain 属性概述

CSS 的 contain 属性通过限制一个元素对其他元素和整个页面的影响,从而优化浏览器的渲染过程。具体来说,它通过防止一个元素的样式或布局变化影响到该元素外部的内容,限制了重排和重绘的范围。

这对于网页性能至关重要,尤其适用于具有复杂布局或大量内容的网站。

contain 的值

contain 属性具有以下值:。

layout
1section.contain-layout {
2    width: 300px;
3    height: 100px;
4    contain: layout;
5}

layout 应用于与布局相关的限制。使用该值时,元素的大小和位置不会影响其他元素。例如,即使一个元素的内部大小发生变化,该变化也不会影响外部布局。

paint
1section.contain-paint {
2    width: 300px;
3    height: 100px;
4    contain: paint;
5}

paint 限制绘制(绘图)的影响。指定此值时,元素内部的绘制将不再影响外部元素,从而限制重绘计算的范围。

size
1section.contain-size {
2    width: 300px;
3    height: 100px;
4    contain: size;
5}

size 确保元素的大小不依赖于外部元素。具体来说,它防止子元素的大小调整影响父元素的大小,从而增强布局的稳定性。

style
1section.contain-style {
2    width: 300px;
3    height: 100px;
4    contain: style;
5}

style 确保一个元素的样式不会影响外部元素。例如,指定 contain: style; 确保该元素的样式变化不会影响其他元素,从而减少重新计算的范围。

content
1section.contain-content {
2    width: 300px;
3    height: 100px;
4    contain: content;
5}

content 是一个复合值,它同时应用了 layoutpaintsizestyle。通过使用该值,可以确保元素的布局、绘制、大小和样式完全不影响外部元素。

性能优势

使用 contain 属性的主要原因是提高网页性能。特别是在以下情况下效果显著:。

  1. 重排优化:当元素的大小或布局发生变化时,其影响可以被限制在最小的范围内。这样可以减少不必要的重排(布局重新计算)的范围,并减轻浏览器的负担。

  2. 减少重绘:通过限制绘制区域,可以将因元素样式或内容变化而需要重绘的部分降到最低。

  3. 基于组件的开发:由于每个组件或模块与其他元素独立运行,即使在大规模的 Web 应用中,也可以提升各组件的性能。

注意

使用 contain 属性时,应牢记以下几点。

  1. 理解适用范围contain 属性有助于性能优化,但不应应用于每个元素。在适当的地方合理使用它非常重要。例如,在频繁变化的元素或大型 DOM 结构的某些部分使用,可能会反而降低性能。

  2. 浏览器兼容性contain 属性是一个相对较新的 CSS 功能,并未被所有浏览器完全支持。主流浏览器(Chrome、Firefox、Edge、Safari)中已支持,但可能无法在旧版本中适用。

结论

CSS contain 属性是优化网页和应用程序性能的强大工具。通过限制特定元素对其他元素的影响,它可以减少回流和重绘的开销,从而优化整体渲染过程。然而,必须仔细考虑在哪里应用它并合理使用。

您可以在我们的YouTube频道上使用Visual Studio Code跟随上述文章进行学习。 请也查看我们的YouTube频道。

YouTube Video