`overflow` и `contain` свойства

`overflow` и `contain` свойства

Эта статья объясняет свойства overflow и contain.

Вы можете узнать, как использовать свойство 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">
 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>

overflow и contain свойства

overflow

Свойство CSS overflow — это важное свойство, которое управляет отображением содержимого элемента, если оно превышает размер его блока. Оно часто используется для формирования макета и пользовательского интерфейса веб-страниц, помогая управлять отображением полос прокрутки, обрезкой и переполнением элементов.

Основы свойства overflow

Свойство overflow имеет четыре основных значения: visible, hidden, scroll и auto.

visible
1section.overflow-visible {
2    width: 400px;
3    height: 100px;
4    overflow: visible;
5}

visible — это значение по умолчанию, при котором содержимое элемента выходит за пределы блока, но остаётся видимым. Переполненные части могут перекрывать другие элементы, но полосы прокрутки не отображаются.

Характеристики:

  • Содержимое отображается без ограничений.
  • Полосы прокрутки не отображаются.
hidden
1section.overflow-hidden {
2    width: 400px;
3    height: 100px;
4    overflow: hidden;
5}

hidden — это значение, при котором переполненные части элемента не отображаются, если содержимое превышает размер блока. Полосы прокрутки не отображаются, а переполненное содержимое не будет видно.

Характеристики:

  • Когда содержимое превышает границы элемента, избыточная часть скрывается.
  • Полосы прокрутки не отображаются.
scroll
1section.overflow-scroll {
2    width: 400px;
3    height: 100px;
4    overflow: scroll;
5}

При использовании значения scroll полосы прокрутки принудительно отображаются, если содержимое элемента превышает размер блока. Даже если содержимое не переполняет элемент, полосы прокрутки всегда отображаются.

Характеристики:

  • Полосы прокрутки отображаются, даже если содержимое помещается в границы элемента.
  • Прокрутка возможна в горизонтальном и вертикальном направлениях.
auto
1section.overflow-auto {
2    width: 400px;
3    height: 100px;
4    overflow: auto;
5}

auto отображает полосы прокрутки только тогда, когда содержимое переполняет элемент; если содержимое помещается в границы блока, полосы прокрутки не отображаются.

Характеристики:

  • Полосы прокрутки появляются только тогда, когда содержимое переполняет элемент.
  • Автоматически создает область с возможностью прокрутки.
overflow-x и overflow-y
1section.overflow-xy {
2    width: 400px;
3    height: 100px;
4    overflow-x: scroll;
5    overflow-y: hidden;
6}

Свойство overflow может быть настроено отдельно для горизонтального (ось x) и вертикального (ось y) направлений.

Таким образом, можно использовать overflow-x и overflow-y для индивидуальной настройки отображения вертикальных и горизонтальных полос прокрутки.

Особенности использования свойства Overflow

При использовании свойства overflow существуют некоторые важные моменты, на которые стоит обратить внимание.

Влияние полос прокрутки на дизайн

Использование значений scroll или auto для отображения полос прокрутки может нарушить общий дизайн страницы. В частности, если элементы размещены у правого или нижнего края, полосы прокрутки могут сделать их менее заметными.

Стандартное поведение браузеров

Отображение и функционирование полос прокрутки может отличаться в разных браузерах. Особенно на Windows и macOS существуют различия в стилях отображения полос прокрутки, что может приводить к некорректному отображению дизайна. Важно проводить тестирование в разных браузерах.

Переполнение вложенных элементов

Установка overflow: hidden на родительском элементе скрывает дочерние элементы, выходящие за пределы его области. Это может привести к некорректному отображению всплывающих окон или модальных окон.

overflow: clip (CSS Level 3)

1section.overflow-clip {
2    width: 400px;
3    height: 100px;
4    overflow: clip;
5}

В новой спецификации CSS было также введено значение overflow: clip. Это похоже на hidden, но не позволяет прокручивать содержимое и только обрезает его. На данный момент оно поддерживается только некоторыми браузерами.

Характеристики:

  • Если содержимое превышает границы, эта часть будет полностью скрыта.
  • Полосы прокрутки не отображаются.

Заключение

Свойство CSS overflow является важным инструментом для управления отображением содержимого в веб-дизайне. Управляя ситуациями, когда содержимое выходит за границы элемента, и применяя корректные полосы прокрутки или обрезку, это свойство обеспечивает более удобный интерфейс для пользователя. Кроме того, использование overflow-x и overflow-y позволяет более точно настраивать управление. При этом значении полосы прокрутки обязательно отображаются, если содержимое элемента превышает его границы. Даже если содержимое не переполняет элемент, полосы прокрутки всегда отображаются.

contain

Обзор свойства contain

Свойство CSS contain ограничивает влияние элемента на другие элементы и всю страницу, оптимизируя процесс рендеринга браузера. В частности, оно ограничивает перерисовку и перерасчёт макета, предотвращая влияние изменений стиля или макета элемента на содержимое за его пределами.

Это важно для производительности веб-страницы и особенно эффективно для сайтов со сложными макетами или большим количеством содержимого.

Значения свойства contain

Свойство contain имеет следующие значения:.

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

layout накладывает ограничения, связанные с макетом. При использовании этого значения размер и положение элемента не влияют на другие элементы. Например, даже если внутренний размер элемента изменится, это не повлияет на внешний макет.

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

paint ограничивает влияние процесса отрисовки. При указании этого значения отрисовка внутри элемента больше не влияет на внешние элементы, что ограничивает диапазон пересчёта перерисовки.

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

size обеспечивает независимость размера элемента от внешних элементов. В частности, оно предотвращает изменение размера дочерних элементов, влияющее на размер родительского элемента, что повышает стабильность макета.

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

style гарантирует, что стиль элемента не влияет на внешние элементы. Например, указание contain: style; обеспечивает, что изменения стиля внутри элемента не повлияют на другие элементы, сокращая область перерасчёта.

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

content — это составное значение, которое применяет свойства layout, paint, size и style. Используя это, можно гарантировать, что макет, отрисовка, размер и стиль элемента совсем не влияют на внешние элементы.

Преимущества для производительности

Основная причина использования свойства contain — улучшение производительности веб-страницы. В частности, оно эффективно в следующих ситуациях:.

  1. Оптимизация перерасчёта макета: Когда размер или макет элемента изменяется, его влияние может быть ограничено минимально возможной областью. Это сокращает область ненужных перерасчётов макета и снижает нагрузку на браузер.

  2. Сокращение перерисовок: Ограничивая область отрисовки, можно минимизировать часть, которая требует перерисовки при изменении стиля или содержимого элемента.

  3. Разработка на основе компонентов: Поскольку каждый компонент или модуль работает независимо от других элементов, это улучшает производительность каждого компонента даже в масштабных веб-приложениях.

Примечания

При использовании свойства contain следует учитывать следующие моменты.

  1. Понимание области применения: Свойство contain полезно для оптимизации производительности, но не должно применяться к каждому элементу. Важно использовать его в подходящих местах. Например, использование его на элементах, которые часто меняются, или на частях крупной структуры DOM, может наоборот ухудшить производительность.

  2. Совместимость с браузерами: Свойство contain — это относительно новая функция CSS, которая полностью не поддерживается всеми браузерами. Оно поддерживается основными браузерами (Chrome, Firefox, Edge, Safari), но может быть недоступно в старых версиях.

Заключение

Свойство CSS contain — это мощный инструмент для оптимизации производительности веб-страниц и приложений. Ограничивая влияние отдельного элемента на другие элементы, оно уменьшает расходы на перерисовку и повторное вычисление, оптимизируя общий процесс рендеринга. Однако важно тщательно продумывать, где именно его применять, и использовать его правильно.

Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.

YouTube Video