W3docs

Свойство CSS overflow-x

Узнайте, как свойство CSS overflow-x управляет горизонтальным обрезанием и прокруткой при переполнении блока. Значения, примеры и советы по браузерам.

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

overflow-x является частью сокращённого свойства CSS overflow и работает совместно со свойством overflow-y, которое управляет вертикальным переполнением.

Информация

Если для overflow-y установлено значение hidden, scroll или auto, а overflow-x оставлен со значением по умолчанию visible, браузеры автоматически вычисляют overflow-x как auto. Значение visible не может сосуществовать с отличным от visible значением по перпендикулярной оси.

Начальное значениеvisible
Применяется кБлочным контейнерам, контейнерам flex и контейнерам grid.
НаследуетсяНет.
АнимируетсяНет.
ВерсияCSS3
DOM-синтаксисobject.style.overflowX = "scroll";

Синтаксис

overflow-x: visible | hidden | scroll | auto | clip | initial | inherit;

Значения

ЗначениеОписание
visibleСодержимое не обрезается. Оно отображается за пределами левого и правого краёв блока с отступами. Это значение по умолчанию.
hiddenСодержимое обрезается по краям блока с отступами. Полоса прокрутки не отображается, и обрезанный контент недоступен.
scrollСодержимое обрезается, и горизонтальная полоса прокрутки всегда отображается, даже если контент помещается.
autoСодержимое обрезается только при переполнении. Полоса прокрутки появляется только при необходимости. Предпочтительнее scroll в большинстве случаев.
clipАналогично hidden, но также запрещает программную прокрутку через JavaScript (scrollLeft, scroll()). Поддерживается современными браузерами.
initialСбрасывает свойство до значения по умолчанию (visible).
inheritНаследует значение от родительского элемента.

Когда использовать каждое значение

  • visible — значение по умолчанию. Используйте, когда переполнение намеренно, например, для подсказки или выпадающего меню, которые должны выходить за пределы контейнера.
  • hidden — используйте для скрытия переполнения в дизайн-компонентах (карточки с изображениями, слайдеры), где обрезанный контент никогда не должен быть доступен. Учтите, что любой обрезанный контент недоступен для пользователей клавиатуры и программ чтения с экрана.
  • scroll — используйте, когда всегда нужна видимая полоса прокрутки, например, в режимах сравнения рядом, чтобы макет не смещался при изменении длины контента.
  • auto — наиболее распространённый выбор для адаптивных контейнеров. Полоса прокрутки появляется только тогда, когда контент действительно переполняет блок, сохраняя чистоту макета.
  • clip — используйте, когда нужна такая же жёсткая обрезка, как у hidden, но при этом необходимо запретить JavaScript программно прокручивать элемент (полезно при определённых техниках анимации).

Практические паттерны

Распространённый случай использования — контейнер с горизонтальной прокруткой для широкого контента, например таблиц данных или блоков кода. Сочетайте overflow-x: auto с white-space: nowrap (см. white-space), чтобы сохранить контент в одну строку:

.scroll-container {
  overflow-x: auto;
  white-space: nowrap;
  max-width: 100%;
}

Чтобы работало многоточие text-overflow (), нужно сочетание overflow-x: hidden (или overflow: hidden) с white-space: nowrap:

.truncate {
  overflow-x: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

Примеры

overflow-x: scroll

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

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div.example {
        background-color: #1c87c9;
        color: #fff;
        width: 40px;
        overflow-x: scroll;
      }
    </style>
  </head>
  <body>
    <h2>Overflow-x property example</h2>
    <h3>Overflow-x: scroll</h3>
    <div class="example">
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </div>
  </body>
</html>

overflow-x: visible

При значении visible текст отображается за пределами узкого блока и перекрывает окружающий контент. Это поведение браузера по умолчанию.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div.example {
        background-color: #1c87c9;
        color: #cccccc;
        width: 40px;
        overflow-x: visible;
      }
    </style>
  </head>
  <body>
    <h2>Overflow-x property example</h2>
    <h3>Overflow-x: visible</h3>
    <div class="example">
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </div>
  </body>
</html>

overflow-x: hidden

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

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div.example {
        background-color: #1c87c9;
        color: #fff;
        width: 40px;
        overflow-x: hidden;
      }
    </style>
  </head>
  <body>
    <h2>Overflow-x property example</h2>
    <h3>Overflow-x: hidden</h3>
    <div class="example">
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </div>
  </body>
</html>

overflow-x: auto

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

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div.example {
        background-color: #1c87c9;
        color: #fff;
        width: 40px;
        overflow-x: auto;
      }
    </style>
  </head>
  <body>
    <h2>Overflow-x property example</h2>
    <h3>Overflow-x: auto</h3>
    <div class="example">
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </div>
  </body>
</html>

Сравнение всех значений

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

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div.scroll {
        background-color: #ccc;
        width: 50px;
        overflow-x: scroll;
      }
      div.hidden {
        background-color: #ccc;
        width: 50px;
        overflow-x: hidden;
      }
      div.auto {
        background-color: #ccc;
        width: 50px;
        overflow-x: auto;
      }
      div.visible {
        background-color: #ccc;
        width: 50px;
        overflow-x: visible;
      }
    </style>
  </head>
  <body>
    <h2>Overflow-x property example</h2>
    <h3>overflow-x: scroll</h3>
    <div class="scroll">
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </div>
    <h3>overflow-x: hidden</h3>
    <div class="hidden">
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </div>
    <h3>overflow-x: auto</h3>
    <div class="auto">
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </div>
    <h3>overflow-x: visible</h3>
    <div class="visible">
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </div>
  </body>
</html>

Связанные свойства

  • overflow — сокращённое свойство, задающее одновременно overflow-x и overflow-y.
  • overflow-y — управляет поведением при вертикальном (верхнем/нижнем) переполнении.
  • overflow-wrap — определяет, может ли браузер переносить длинные слова для предотвращения горизонтального переполнения.
  • text-overflow — управляет тем, как пользователю сигнализируется о переполнении текста (например, многоточие).
  • white-space — определяет, переносится ли текст; сочетание white-space: nowrap с overflow-x является распространённым паттерном.

Практика

Практика
Какое значение overflow-x всегда показывает горизонтальную полосу прокрутки, даже если контент помещается?
Какое значение overflow-x всегда показывает горизонтальную полосу прокрутки, даже если контент помещается?
Was this page helpful?