Java, UX, HTML, CSS, WEB-design

Помощь браузерам в оптимизации с помощью свойства CSS Contain

Краткое описание по статье Помощь браузерам в оптимизации с помощью свойства CSS Contain

Название: Помощь браузерам в оптимизации с помощью свойства CSS Contain . Краткое описание: [ad_1] ⭐ Рэйчел . Дата публикации: 22.01.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года

[ad_1]

  • Рэйчел Эндрю

  • 0 Комментарии

Помощь браузерам в оптимизации с помощью свойства CSS Contain

  • 9 минут чтения

  • CSS, браузеры

Краткое резюме ↬

CSS contain Свойство дает вам способ объяснить ваш макет браузеру, чтобы можно было оптимизировать производительность. Тем не менее, это имеет некоторые побочные эффекты с точки зрения вашего макета.

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

Хотя это свойство существует для оптимизации производительности, оно также может повлиять на макет вашей страницы. Поэтому в этой статье я объясню различные типы сдерживания, которыми вы можете воспользоваться, а также то, на что вам нужно обратить внимание при подаче заявления. contain к элементам вашего сайта.

Проблема пересчета макета

Если вы создаете простые веб-страницы, элементы которых не добавляются и не изменяются динамически после того, как они загружены с помощью JavaScript, вам не нужно беспокоиться о проблеме, которую решает сдерживание CSS. Браузер должен вычислить ваш макет только один раз, когда страница загружается.

Где Containment становится полезным, когда вы хотите добавить элементы на свою страницу без необходимости перезагрузки пользователем. В моем примере я создал большой список событий. Если вы нажмете кнопку, первое событие будет изменено, добавлен плавающий элемент и изменен текст:

Список элементов с кнопкой для изменения части содержимого в первом элементе.

(См. исходный пример на CodePen)

Когда содержимое нашего блока изменяется, браузер должен учитывать, что любой из элементов мог измениться. Браузеры, как правило, довольно хорошо справляются с этим, так как это обычное дело. Тем не менее, как разработчик, вы будете знать, является ли каждый из компонентов независимым, и что изменение одного из них не влияет на другие, поэтому было бы неплохо, если бы вы могли сообщить об этом браузеру через свой CSS. Вот что такое сдерживание и CSS contain имущество дает вам.

Еще после прыжка! Продолжить чтение ниже ↓

Как сдерживание помогает?

HTML-документ представляет собой древовидную структуру, которую вы можете увидеть при проверке любого элемента с помощью DevTools. В приведенном выше примере я определяю один элемент, который хочу изменить с помощью JavaScript, а затем вношу некоторые изменения во внутренние компоненты. (Это означает, что я изменяю вещи только внутри поддерева для этого элемента списка.)

DevTools с расширенным элементом списка рекомендуемого элемента, чтобы увидеть элементы внутри

Проверка элемента списка в DevTools

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

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

Использование сдерживания

То contain Свойство может установить три различных типа содержания:

  • layout
  • paint
  • size

Примечание: Eсть style значение в спецификации уровня 2. Он был удален с уровня 1, поэтому не отображается в Рекомендации и не реализован в Firefox.

Макет

Сдерживание макета приносит самые большие преимущества. Чтобы включить сдерживание макета, используйте следующий фрагмент кода:

.item {
  contain: layout;
}

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

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

Коробка устанавливает независимый контекст форматирования. Это гарантирует, что содержимое блока останется в блоке — в частности, плавающие элементы будут содержаться, а поля не будут схлопываться через блок. Это то же самое поведение, которое мы включаем, когда используем display: flow-root как описано в моей статье «Понимание макета CSS и контекста форматирования блоков». Если бы поплавок мог высовываться из вашего поля, заставляя следующий текст обтекать поплавок, это была бы ситуация, когда элемент был изменение расположения вещей за его пределами, что делает его плохим кандидатом для содержания.

Содержащий блок действует как содержащий блок для любых потомков с абсолютной или фиксированной позицией. Это означает, что он будет действовать так, как если бы вы использовали position: relative на коробке, которую вы применили contain: layout.

Коробка также создает контекст стека. Следовательно z-index будет работать с этим элементом, его дочерние элементы будут складываться на основе этого нового контекста.

Если мы посмотрим на пример, на этот раз с contain: layout, вы можете видеть, что при введении плавающего элемента он больше не выступает из нижней части блока. Это наш новый контекст форматирования блока в действии, содержащий число с плавающей запятой.

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

Использование contains: layout содержит float (см. пример сдерживания макета на CodePen)

Краска

Чтобы включить сдерживание краски, используйте следующее:

.item {
  contain: paint;
}

При включенном сдерживании рисования возникают те же побочные эффекты, что и при сдерживании макета: содержащий блок становится независимым контекстом форматирования, содержащим блоком для позиционированных элементов и устанавливает контекст наложения.

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

Мы можем увидеть, как это происходит на простом примере. Даже если мы задаем нашей карточке высоту, плавающий элемент все равно выпирает из нижней части коробки из-за того, что плавающий объект выведен из потока.

Плавающая коробка, торчащая из нижней части содержащей ее коробки

Поплавок не содержится в элементе списка

При включенном сдерживании краски плавающий элемент теперь обрезается до размера коробки. Ничто не может быть закрашено за пределы элемента с помощью contain: paint применяемый.

Коробка с плавающей коробкой внутри, которая была отрезана в том месте, где она выходит из коробки.

Содержимое блока обрезается по высоте блока (см. пример рисования на CodePen).

Размер

Сдерживание размера — это значение, которое, скорее всего, вызовет у вас проблемы, если вы не полностью понимаете, как оно работает. Чтобы применить сдерживание размера, используйте:

.item {
  contain: size;
}

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

В приведенном ниже примере я не указал li высота; у них также есть contain: size применяемый. Вы можете видеть, что все элементы свернуты, как будто у них вообще нет содержимого, что делает список очень странным!

Список элементов с кнопкой для изменения части содержимого в первом элементе.

(См. пример размера на CodePen)

Если вы дадите ящикам высоту, то высота будет соблюдаться, когда contain: size используется. Само по себе сдерживание размера не создаст новый контекст форматирования и, следовательно, не будет содержать плавающие элементы и поля, в отличие от сдерживания макета и рисования. Маловероятно, что вы будете использовать его в одиночку; вместо этого, скорее всего, вы примените его вместе с другими значениями contain чтобы иметь возможность получить максимально возможное сдерживание.

Сокращенные значения

В большинстве случаев вы можете использовать одно из двух сокращенных значений, чтобы получить максимальную отдачу от сдерживания. Чтобы включить компоновку и сдерживание рисования, используйте contain: content;, и чтобы включить все возможные ограничения (имея в виду, что элементы, у которых нет размера, затем свернутся), используйте contain: strict.

Спецификация говорит:

contain: content достаточно «безопасен» для широкого применения; его эффекты на практике довольно незначительны, и большая часть контента не будет противоречить его ограничениям. Однако, поскольку он не применяет сдерживание размера, элемент по-прежнему может реагировать на размер своего содержимого, что может привести к просачиванию недействительного макета вверх по дереву дальше, чем хотелось бы. Использовать contain: strict когда это возможно, чтобы получить как можно больше сдерживания».

Поэтому, если вы не знаете заранее размер элементов и понимаете, что будут содержаться числа с плавающей запятой и поля, используйте contain: content. Если вы знаете размер предметов в дополнение к другим побочным эффектам сдерживания, используйте contain: strict. Остальное зависит от браузера, вы внесли свою лепту, объяснив, как работает ваш макет.

Могу ли я использовать сдерживание сейчас?

Спецификация CSS Containment теперь является рекомендацией W3C, которую мы иногда называем веб-стандарт. Чтобы спецификация дошла до этой стадии, должны были быть две реализации функции, которые мы можем видеть как в Firefox, так и в Chrome:

Снимок экрана с информацией о поддержке браузера в разделе «Можно ли использовать»

Поддержка сдерживания браузером (Источник: Могу ли я использовать)

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

Я бы предположил, что это отличная вещь для добавления к любым компонентам, которые вы создаете в библиотеке компонентов или шаблонов, если вы работаете таким образом, вероятно, каждый компонент разработан как независимая вещь, которая не влияет на другие элементы в библиотеке. страница, изготовление contain: content полезное дополнение.

Поэтому, если у вас есть страница, которая добавляет содержимое в DOM после загрузки, я бы порекомендовал попробовать — если вы получите какие-либо интересные результаты, сообщите мне об этом в комментариях!

Следующие ресурсы предоставят вам более подробную информацию о реализации сдерживания и потенциальных преимуществах производительности:

  • « contain Свойство CSS», Веб-документы MDN
  • «Сдерживание CSS в Chrome 52», Разработчики Google
  • «Модуль сдерживания CSS, уровень 1», Рекомендация W3C
  • «Введение в сдерживание CSS», Мануэль Рего Касасновас
Сокрушительная редакция
(иль)



[ad_2]
Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Помощь браузерам в оптимизации с помощью свойства CSS Contain

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован.

Кнопка «Наверх»