W3docs

Свойство CSS clear

Свойство CSS clear определяет, с каких сторон элементу нельзя находиться рядом с плавающими элементами. Примеры и демонстрации.

Свойство clear напрямую связано с float. Оно управляет тем, может ли элемент располагаться рядом с предшествующим плавающим элементом или же должен быть опущен (сброшен) ниже него.

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

На этой странице рассказывается о том, что делает каждое значение clear, о наиболее распространённой причине использования clear (паттерн «clearfix» для охвата плавающих элементов) и о типичных ошибках.

Как работает clear

clear принимает значения none, left, right, both, initial и inherit:

  • none — значение по умолчанию. Элемент может располагаться рядом с плавающими элементами с обеих сторон.
  • left — элемент перемещается ниже всех левых плавающих элементов, стоящих перед ним.
  • right — элемент перемещается ниже всех правых плавающих элементов, стоящих перед ним.
  • both — элемент перемещается ниже всех плавающих элементов с любой стороны. Это значение нужно в большинстве случаев.

Примечание: clear реагирует только на плавающие элементы, которые стоят раньше в разметке, и влияет только на элементы в нормальном блочном потоке. Оно не работает внутри макетов Flexbox или CSS Grid, где свойство float само по себе игнорируется.

Когда использовать clear?

Самое распространённое применение clearохват плавающих элементов. Родительский контейнер, содержащий только плавающие дочерние элементы, схлопывается до нулевой высоты, потому что плавающие элементы выведены из нормального потока. Классическое решение — «clearfix» — добавляет сброшенный псевдоэлемент после плавающих элементов, чтобы родитель растянулся и охватил их:

/* Clearfix: makes a container wrap its floated children */
.container::after {
  content: "";
  display: block;
  clear: both;
}

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

Начальное значениеnone
Применяется кБлочным элементам.
НаследуетсяНет.
АнимируетсяНет.
ВерсияCSS1
DOM-синтаксисelement.style.clear = "both";

Синтаксис

Синтаксис свойства CSS clear

clear: none | left | right | both | initial | inherit;

Пример свойства clear:

Пример свойства CSS clear со значением left

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      img {
        float: left;
        background: #ccc
      }
      .clear {
        clear: left;
      }
    </style>
  </head>
  <body>
    <img src="/uploads/media/default/0001/01/003e5c463668d174ab70bea245c192d81901a4a6.png" />
    <p class="clear">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.</p>
  </body>
</html>

Результат

CSS clear Property

Пример свойства clear со значением «right»:

Пример свойства CSS clear со значением right

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      img {
        float: right;
        background: #ccc
      }
      .clear {
        clear: right;
      }
    </style>
  </head>
  <body>
    <img src="/uploads/media/default/0001/01/003e5c463668d174ab70bea245c192d81901a4a6.png" />
    <p class="clear">
      Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
    </p>
  </body>
</html>

Пример свойства clear со значением «both»:

Пример свойства CSS clear со значением both

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      img {
        float: right;
        background: #CCC;
      }
      p.clear {
        clear: both;
      }
    </style>
  </head>
  <body>
    <img src="/uploads/media/default/0001/01/003e5c463668d174ab70bea245c192d81901a4a6.png" width="220" height="80" />
    <p>
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </p>
    <p class="clear">
      Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
    </p>
  </body>
</html>

Пример паттерна clearfix

Здесь clear выполняет свою самую полезную функцию: без правила clearfix блок с рамкой схлопнулся бы до нулевой высоты, потому что его единственный дочерний элемент является плавающим. Псевдоэлемент ::after со значением clear: both заставляет блок охватывать плавающий элемент.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .box {
        border: 3px solid #1c87c9;
      }
      .box img {
        float: left;
        background: #ccc;
      }
      /* Remove this rule and the border collapses around nothing */
      .box::after {
        content: "";
        display: block;
        clear: both;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <img src="/uploads/media/default/0001/01/003e5c463668d174ab70bea245c192d81901a4a6.png" width="220" height="80" alt="Floated image" />
    </div>
  </body>
</html>

Распространённые ошибки

  • clear реагирует только на предшествующие плавающие элементы. Оно опускает элемент ниже плавающих, которые стоят раньше него в разметке, но не после. Выстраивайте разметку соответственно.
  • Применять clear к самому плавающему элементу редко имеет смысл. Чтобы охватить плавающие элементы, сбрасывайте соседний элемент после них (псевдоэлемент ::after по паттерну clearfix), а не сами плавающие элементы.
  • В Flexbox или CSS Grid clear не работает. Внутри flex- или grid-контейнера float игнорируется, поэтому clear не на что воздействовать. Для новых проектов используйте Flexbox или CSS Grid вместо макетов на основе float.

Значения

ЗначениеОписание
noneРазрешает плавающие элементы с обеих сторон. Является значением по умолчанию для этого свойства.
leftЗапрещает плавающие элементы с левой стороны.
rightЗапрещает плавающие элементы с правой стороны.
bothЗапрещает плавающие элементы с обеих сторон.
initialУстанавливает свойству значение по умолчанию.
inheritНаследует свойство от родительского элемента.

Практика

Практика
Что делает свойство 'clear' в CSS?
Что делает свойство 'clear' в CSS?
Was this page helpful?