`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 的注意事項

在使用 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. 基於組件的開發:由於每個組件或模塊都能獨立於其他元素運行,即使在大型網頁應用中,也能提高每個組件的性能。

注意事項

使用 contain 屬性時,請記住以下幾點。

  1. 理解應用範圍contain 屬性有助於性能優化,但不應將其應用於每個元素。在適合的地方適當使用它是很重要的。例如,在頻繁更改的元素或大型 DOM 結構的一部分上使用它可能會反而降低性能。

  2. 瀏覽器相容性contain 屬性是一個相對較新的 CSS 功能,並非所有瀏覽器完全支援。其在主要瀏覽器(Chrome、Firefox、Edge、Safari)中受到支援,但可能無法適用於舊版本。

結論

CSS 的 contain 屬性是一個優化網頁和應用程序性能的強大工具。通過限制特定元素對其他元素的影響,它能減少重排和重繪的成本,從而優化整體渲染過程。然而,謹慎考慮其應用場所並適當使用它非常重要。

您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。

YouTube Video