О свойстве Overflow | CSS-Tricks по-русски
О свойстве Overflow
Каждый элемент на странице является прямоугольником. Размеры, позиционирование и поведение может регулироваться через CSS. Под поведением я подразумеваю как элемент обрабатывает события когда изменяется контент снаружи и внутри. Например, если вы не установили элементу высоту, то она будет увеличиваться пока в элементе не поместится весь контент. Но что случится когда вы все-таки установили высоту или ширину для элемента, а содержимое не поместилось? Здесь нам понадобится CSS-свойство overflow, которое позволяет вам указать как поступать в таких случаях. Всего существует четыре значения для этого свойства: visible (по умолчанию), hidden, scroll и auto. Также есть родственные свойства overflow-y и overflow-x, которые используются гораздо реже. Давайте рассмотрим поведение элементов с фиксированными размерами для каждого значения overflow и обсудим общие случаи использования.
Visible
Если вы не укажете свойство overflow, то по умолчанию оно будет равно visible. Итак, в основном, нет смысла явно устанавливать свойство в visible, до тех пор пока оно не будет перегружено его где-нибудь в другом месте, а вам потребуется поведение по умолчанию.
Здесь важно помнить, что даже если снаружи элемента есть видимый контент, этот контент не сместится на странице. Например:
В основном, вам не должно понадобиться устанавливать фиксированную высоту для элементов с текстом в них, поэтому таких ситуаций возникать не должно.
Hidden
Противоположное значение — hidden. В этом случае элемент прячет любой контент, который выходит за его границы.
Такое поведение особенно удобно для использования с динамическим контентом, возможности overflow позволяют избежать серьёзных проблем с вёрсткой макета. Однако, помните, что в этом случае контент скрыт и никаким способом он не станет доступным (кроме просмотра исходного текста страницы). Таким образом, если у пользователя размер шрифта по умолчанию больше, чем вы ожидали, текст может оказаться за пределами элемента и оказаться спрятанным от его глаз.
Scroll
Если элементу установленно значение scroll, то он будет скрывать непоместившееся содержимое, но появятся скроллбары, чтобы была возможность просмотреть весь контент.
Заметьте, что в этом случае вам будут показаны оба скроллбара, как горизонтальный, так и вертикальный, даже если для контента достаточно только одного из них.
Auto
Значение auto похоже на значение scroll, за исключением того, что скроллбары показываются, только там где они действительно необходимы.
Отмена свойства float
Один из самых распространённых случаев использования свойства overflow, как это ни странно, отмена свойства float. Установка свойства overflow не отменяет свойство float у элемента. Смысл такой, что элемент с установленным свойством overflow в значение auto или hidden, будет изменять размеры до тех пор, пока не вместит в себя все дочерние элементы, которым установлено свойство float, подразумевается что высота не установлена. Рассмотрим пример:
Обсуждение свойства float займёт отдельную статью, которой я возможно займусь в скором времени.
Кросс-браузерность.
Как и у большинства свойств CSS, у свойства overflow есть свои особенности обработки в разных браузерах.
Скроллбары должны быть внутри или снаружи элемента?
Firefox располагает их снаружи, IE — внутри. Я считаю, что только IE располагает их правильно (они должны быть внутри).
Ошибка расширения элемента в IE 8.
В новой версии IE появились новые ошибки, в том числе и такие серъёзные, из-за которых пропадает всё содержимое страницы. Подробности.
Плавающий макет.
IE версий 6, 7 и 8 игнорируют значение по умолчанию visible для фиксированных размеров и расширяет элемент, чтобы подогнать контент. Это особенно важно для сайтов с плавающим макетом. В некоторых случаях одна колонка может вытеснить другую, и в итоге ломается вся разметка.
Ещё про IE
IE отображает вертикальный скроллбар независимо от того, нужен он или нет. В некоторых случаях это может быть и полезно, но не всегда. Чтобы избавиться от этого, необходимо установить overflow: auto для элемента body.
Пример.
Использование свойства overflow CSS | Impuls-Web.ru
Приветствую вас дорогие друзья!
В одной из прошлых статей я рассказывала о наиболее часто используемых CSS-свойствах.
В этой статье я упоминала о свойстве overflow CSS, которое предназначено для управления контентом, расположенном в блочных элементах.
Навигация по статье:
Сегодня я хочу более подробно остановиться на данном свойстве и разобрать примеры его использования на практике.
Управление отображением контента в блоке свойством overflow CSS
По умолчанию для всех блочных элементов overflow CSS имеет значение visible. При данном значении отображается все содержимое блока, даже в том случае, если контент выходит за пределы заданных размеров.
Для overflow CSS можно задать следующие значения:
- hidden — отображение контента только внутри блока, а остальная часть обрезается
- scroll — добавляет полосы прокрутки по вертикали и горизонтали
- auto – добавление полос прокрутки только в случае, если контент выходит за границы блока
- inherit – наследование значений родительского блока
Больше всего возникает проблем с маленькими по размеру блоками, например, такими как названия товаров в каталоге интернет-магазина. Как правило, на начальном этапе они выглядят вот так:
Из-за того, что у товаров разные по длине названия, карточки имеют разную высоту, и это выглядит очень не красиво.
Если мы просто ограничим высоту бока с названием у нас получится вот так:
Даже при заданном размере блока с названием, текст все равно выходит за его пределы и налезает на цену товара. Подобные случаи встречаются довольно часто и для решения этой проблемы нам нужно сделать следующее:
#tovary .product h3 { height: 30px; overflow: hidden; }
#tovary .product h3 { height: 30px; overflow: hidden; } |
Мы добавляем для блока с названием товара свойство overflow CSS со значением hidden. В данном случае будет отображаться только та часть контента, которая находится в пределах блока. Все остальное будет обрезаться. Вот что получиться:
Как видите, в обеих карточках товара название имеет одинаковую высоту, которая не будет изменяться ни в случае с еще большим названием, ни при изменении размера экрана устройства, с которого просматривают данный сайт.
Добавление полос прокрутки для блоков небольшого размера свойством overflow CSS
Давайте рассмотрим ситуацию, когда у вас есть блок с ограниченной высотой, но в нем нужно поместить контент произвольного размера, и возможно, что данный контент будет намного больше размера блока.
Например, у нас есть всплывающая корзина товаров в интернет-магазине. Если в нее добавить большое количество товаров мы получим вот такой результат:
Товаров так много, что они не помещаются на видимую часть страницы, и у посетителя нет возможность нажать на кнопку «Оформить заказ». Это очень не красиво и не удобно.
Выходом из данной ситуации является ограничение максимальной высоты для блока с товарами, и добавление вертикальной полосы прокрутки для него. Для этого мы задаем следующие стили для этого блока:
#pop-up-products-list { overflow-y: auto; /*Автоматическое добавление полосы прокрутки* / max-height: 300px; /*Максимальная высота блока*/ }
#pop-up-products-list { overflow-y: auto; /*Автоматическое добавление полосы прокрутки* / max-height: 300px; /*Максимальная высота блока*/ } |
Свойство overflow-y CSS — это то же самое свойство overflow, но предназначенное для управления контентом только по вертикали. Есть так же специальное свойство для управления контентом по горизонтали — overflow-x. Они имеют такой же набор значений, как и базовое свойство.
В данном случае мы добавили для overflow-y значение auto, которое добавляет полосы прокрутки по вертикали только при необходимости.
Вот что у нас получится:
При большом количестве товаров, появляется полоса прокрутки, но при этом блок не превышает максимальной высоты.
Надеюсь, показанные в данной статье приемы работы со свойством overflow CSS поможет вам в будущем при создании вашего сайта.
Не забудьте оставить свой комментарий под статьей и поделиться своим опытом по использованию данного свойства или решению подобных проблем. Если вам понравилась данная статья, обязательно поделитесь ею со своими друзьями в социальных сетях.
Желаю вам успехов! До встречи в следующих статьях!
С уважением Юлия Гусарь
Свойство
clear
со значениями left, right, both
действительно очищает поток в отличие от overflow
со значеним hidden
, которое создаёт отдельный контекст форматирования для выбранного элемента, тем самым локализуя действие свойства float внутри элемента к которому применён.
В самом начале своего пути верстальщика многие из нас, наверно, ожидали следующее отобржание при следующей конструкции:
Ожидания не оправдывались и мы видели примерно следующее:
Тогда городились конструкции вида <div></div>
, кстати бессмысленные при существовании <br clear="all"/>
.
Потом приходили методы самоочистки, всё с тем же свойством clear. Ещё к ним относят overflow со значением hidden. В описании данного свойства в спецификации ничего связанного с обтеканием нет, зато в описании «нормального потока» есть абзац с парой строк, связанных с нашим «overflow:hidden
»:
«… элементам с ‘overflow
‘ отличными от ‘visible
‘ (не считая случаев, когда значение наследуется областью просмотра) устанавливается новый контекст для форматирования»
Таким образом всё колдовство, просходящее внутри элемента, локализуется и больше не выходит за его пределы, а это означает, что можем получить то, что ожидали получить (см. выше), как если бы мы поместили весь контент нашего элемента в отдельный iframe
. Но кроме этого мы получаем кое-что ещё.
CSS спецификация требует «поместить верхний край границы ниже нижнего внешнего края любых попадавшихся ранее в документе элементов со свойством float:left
или float:right
или и с тем и другим» при применении к элементу свойства clear
с значениями соотвественно left, right и both
.
Иными словами если у вас есть высокий сайдбар слева, и справа его обтекает контент и в контенте попадается элемент со свойством clear:left
, то этот элемент окажется ниже сайдбара, что не очень нужно, особенно если сайдбар очень высокий.
Я считаю, что свойство overflow гараздо удобней для управления потоком, чем clear
(см. рис. ниже) и предполагаю, что оно способствует улучшению производительности так же как абсолютное позиционирование.
Видимо свойство hasLayout в IE работает точно также — создаёт отдельный контекст форматирования для выбранного элемента.
Эта же статья на моём сайте Clear или overflow:hidden — очистка всего потока или создание контекста форматирования
Свойство overflow-y | CSS справочник
CSS свойстваОпределение и применение
CSS свойство overflow-y указывает, что произойдёт, если содержимое переполняет верхний, либо нижний край элемента.
Поддержка браузерами
CSS синтаксис:
overflow-y:"visible | hidden | scroll | auto | initial | inherit";
JavaScript синтаксис:
object.style.overflowY = "hidden"
Значения свойства
Значение | Описание |
---|---|
visible | Переполнение не обрезается, содержимое выходит за пределы размеров элемента. Это значение по умолчанию. |
hidden | Переполнение обрезается (контент, который выходит за размеры будет невидимым). |
scroll | Переполнение обрезается, но добавляется полоса прокрутки, позволяющая увидеть содержимое, которое выходит из заданных размеров. |
auto | Если переполнение обрезается, то полоса прокрутки будет добавлена автоматически, чтобы увидеть содержимое, которое выходит из заданных размеров. |
initial | Устанавливает свойство в значение по умолчанию. |
inherit | Указывает, что значение наследуется от родительского элемента. |
Версия CSS
CSS3Наследуется
Нет.Анимируемое
Нет.Пример использования
<!DOCTYPE html> <html> <head> <title>Пример использования свойств overflow-x и overflow-y.</title> <style> div { display : inline-block; /* выравниваем вертикально все элементы <div> */ margin-right : 30px; /* устанавливаем внешний отступ справа для элементов <div> */ width : 100px; /* устанавливаем ширину для блоков */ height : 100px; /* устанавливаем высоту для блоков */ border : 1px solid red; /* устанавливаем для блоков сплошную границу размером 1px красного цвета*/ } img { width : 125px; /* устанавливаем ширину для изображения */ height : 125px; /* устанавливаем высоту для изображения */ } .test { overflow-x : visible; /* переполнение левого, либо правого края элемента не обрезается, содержимое выходит за пределы размеров элемента */ overflow-y : visible; /* переполнение верхнего, либо нижнего края элемента не обрезается, содержимое выходит за пределы размеров элемента */ } .test2 { overflow-x : hidden; /* переполнение левого, либо правого края элемента обрезается (контент, который выходит за размеры будет невидимым) */ overflow-y : hidden; /* переполнение верхнего, либо нижнего края элемента обрезается (контент, который выходит за размеры будет невидимым) */ } .test3 { overflow-x : scroll; /* переполнение левого, либо правого края элемента обрезается, но добавляется полоса прокрутки */ overflow-y : scroll; /* переполнение верхнего, либо нижнего края элемента обрезается, но добавляется полоса прокрутки */ } .test4 { overflow-x : auto; /* если переполнение левого, либо правого края элемента будет обрезано, то добавится полоса прокрутки автоматически */ overflow-y : auto; /* если переполнение верхнего, либо нижнего края элемента будет обрезано, то добавится полоса прокрутки автоматически */ } </style> </head> <body> <div class = "test">visible <img src = nich.jpg alt = ничоси> </div> <div class = "test2">hidden <img src = nich.jpg alt = ничоси> </div> <div class = "test3">scroll <img src = nich.jpg alt = ничоси> </div> <div class = "test4">auto <img src = nich.jpg alt = ничоси> </div> </body> </html>Пример использования свойств overflow-x и overflow-y (переполнение элементов содержимым).CSS свойства
overflow-x | CSS | WebReference
Свойство overflow-x управляет отображением содержания блочного элемента по горизонтали, если контент целиком не помещается и выходит за область справа или слева от блока.
Краткая информация
Значение по умолчанию | visible |
---|---|
Наследуется | Нет |
Применяется | К блочным элементам |
Анимируется | Нет |
Синтаксис ?
overflow-x: auto | hidden | scroll | visible
Обозначения
Описание | Пример | |
---|---|---|
<тип> | Указывает тип значения. | <размер> |
A && B | Значения должны выводиться в указанном порядке. | <размер> && <цвет> |
A | B | Указывает, что надо выбрать только одно значение из предложенных (A или B). | normal | small-caps |
A || B | Каждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке. | width || count |
[ ] | Группирует значения. | [ crop || cross ] |
* | Повторять ноль или больше раз. | [,<время>]* |
+ | Повторять один или больше раз. | <число>+ |
? | Указанный тип, слово или группа не является обязательным. | inset? |
{A, B} | Повторять не менее A, но не более B раз. | <радиус>{1,4} |
# | Повторять один или больше раз через запятую. | <время># |
Значения
- visible
- Отображается всё содержимое элемента, даже за пределами установленной ширины.
- hidden
- Отображается только область внутри элемента, остальное будет скрыто.
- scroll
- Всегда добавляется горизонтальная полоса прокрутки.
- auto
- Горизонтальная полоса прокрутки добавляется только при необходимости.
Песочница
Винни-Пух был всегда не прочь немного подкрепиться, в особенности часов в одиннадцать утра, потому что в это время завтрак уже давно окончился, а обед ещё и не думал начинаться. И, конечно, он страшно обрадовался, увидев, что Кролик достаёт чашки и тарелки.
Пример
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>overflow-x</title>
<style>
.layer {
overflow-x: scroll; /* Добавляем полосу прокрутки */
width: 300px; /* Ширина блока */
height: 150px; /* Высота блока */
padding: 5px; /* Поля вокруг текста */
border: solid 1px black; /* Параметры рамки */
white-space: nowrap; /* Запрещаем перенос строк */
}
</style>
</head>
<body>
<div>
<h3>Гетерогенный голубой гель</h3>
<p>Кондуктометрия мягко передает электронный
способ получения независимо от последствий
проникновения метилкарбиола внутрь. </p>
</div>
</body>
</html>
Результат данного примера показан на рис. 1.
Рис. 1. Применение свойства overflow-x
Объектная модель
Объект.style.overflowX
Спецификация ?
Спецификация
Каждая спецификация проходит несколько стадий одобрения.
- Recommendation (Рекомендация) — спецификация одобрена W3C и рекомендована как стандарт.
- Candidate Recommendation (Возможная рекомендация) — группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
- Proposed Recommendation (Предлагаемая рекомендация) — на этом этапе документ представлен на рассмотрение Консультативного совета W3C для окончательного утверждения.
- Working Draft (Рабочий проект) — более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
- Editor’s draft (Редакторский черновик) — черновая версия стандарта после внесения правок редакторами проекта.
- Draft (Черновик спецификации) — первая черновая версия стандарта.
Браузеры
В таблице браузеров применяются следующие обозначения.
- — свойство полностью поддерживается браузером со всеми допустимыми значениями;
- — свойство браузером не воспринимается и игнорируется;
- — при работе возможно появление различных ошибок, либо свойство поддерживается лишь частично, например, не все допустимые значения действуют или свойство применяется не ко всем элементам, которые указаны в спецификации.
Число указывает версию браузера, начиная с которой свойство поддерживается.
×Автор и редакторы
Автор: Влад Мержевич
Последнее изменение: 29.08.2017
Редакторы: Влад Мержевич
Свойство text-overflow | CSS справочник
CSS свойстваОпределение и применение
CSS свойство text-overflow указывает, что должно произойти, когда текст переполняет, содержащий элемент.
Применение свойства рассматривается в тех ситуациях, когда текст обрезается, либо когда он переполняет содержимое элемента, в этих случаях текст можно обрезать, поставить троеточие (‘…’, Юникод — U+2026), или отобразить определенную пользовательскую строку(в настоящее время поддерживается только в Firefox). Т.е. text-overflow происходит, когда свойство overflow имеет значения hidden, scroll или auto и свойство white-space имеет значение nowrap (перенос слов запрещён).
Свойство text-overflow применяется только к блочным, либо блочно-строчным элементам, поскольку элемент должен иметь заданную ширину, кроме того переполнение происходит в зависимости от направления текста заданного свойством direction, либо глобальным HTML атрибутом dir.
Поддержка браузерами
CSS синтаксис:
text-overflow:"clip | ellipsis | string | initial | inherit"; Значение string(пользовательская строка) поддерживается только в Firefox. text-overflow:"///"; text-overflow:".."; text-overflow:"☺☺☺"; и т.п. Два значения для свойства (начало/конец элемента) поддерживается только в Firefox. text-overflow:"☺☺☺" "☺☺☺"; text-overflow:clip ellipsis; и т.п.
JavaScript синтаксис:
object.style.textOverflow = "clip"
Значения свойства
Значение | Описание |
---|---|
clip | Текст обрезается по размеру области содержимого. Это значение по умолчанию. |
ellipsis | Добавляет троеточие (‘…’, Юникод — U+2026), которое обозначает, что текст был обрезан. Троеточие (горизонтальное многоточие/эллипсис) отображается внутри области содержимого, уменьшая при этом размер отображаемого текста. Если необходимое место для отображения троеточия отсутствует, то оно обрезается. |
string | Указывает пользовательскую строку для отображения обрезанного текста. В настоящее время поддерживается только в Firefox. |
initial | Устанавливает свойство в значение по умолчанию. |
inherit | Указывает, что значение наследуется от родительского элемента. |
Версия CSS
CSS3Наследуется
Нет.Анимируемое
Нет.Пример использования
<!DOCTYPE html> <html> <head> <title>>Переполнение текстом элемента в CSS</title> <style> div { width : 250px; /* задаём ширину блока */ border : 1px solid blue; /* задаём сплошную границу шириной 1px синего цвета */ background : azure; /* задаём цвет заднего фона */ margin : 5px; /* указываем внешний отступ для всех сторон */ overflow : hidden; /* указываем, что при переполнении скрывать содержимое */ white-space : nowrap; /* перенос на новую строку не производится */ } .test { text-overflow:clip; /* текст обрезается по размеру области содержимого. */ } .test2 { text-overflow:ellipsis; /* добавляет троеточие, которое обозначает, что текст был обрезан */ } .test3 { text-overflow:"☺☺☺"; /* добавляет "пользовательскую строку"(пользовательское значение), которое обозначает, что текст был обрезан */ } .test4 { text-overflow:"☺☺☺" "☺☺☺"; /* добавляет "пользовательскую строку"(пользовательское значение), которое обозначает, что текст был обрезан как в начале, так и конце элемента */ text-indent : -10px; /* задаем отрицательную красную строку */ } </style> </head> <body> <div class = "test">съешь же ещё этих мягких французских булок, да выпей чаю</div> <div class = "test2">съешь же ещё этих мягких французских булок, да выпей чаю</div> <div class = "test3">съешь же ещё этих мягких французских булок, да выпей чаю</div> <div class = "test4">съешь же ещё этих мягких французских булок, да выпей чаю</div> </body> </html>Пример использования свойства text-overflow(переполнение текстом элемента в CSS).CSS свойства
Свойство overflow-wrap | CSS справочник
CSS свойстваОпределение и применение
CSS свойство overflow-wrap указывает браузеру, переносить или нет длинные слова, которые не помещаются по ширине в заданную область (разрешается ли разрывать строки внутри слов).
Свойство word-wrap было переименовано в свойство overflow-wrap в текущей спецификации CSS3 и оно теперь рассматривается как альтернативное название для overflow-wrap, но т.к. новый синтаксис имеет ограниченную поддержку, рекомендую Вам использовать свойство word-wrap, которое имеет поддержку всеми браузерами.Поддержка браузерами
CSS cинтаксис:
overflow-wrap:"normal | break-word | initial | inherit";
JavaScript cинтаксис:
object.style.overflowWrap = "normal"
Значения свойства
Значение | Описание |
---|---|
normal | Допускается переносить слова только в допустимых точках. Это значение по умолчанию. |
break-word | Указывает, что слово может быть прервано в произвольный месте, если нет допустимой точки для разрыва. |
initial | Устанавливает свойство в значение по умолчанию. |
inherit | Указывает, что значение наследуется от родительского элемента. |
Версия CSS
CSS3Наследуется
Да.Анимируемое
Нет.Пример использования
<!DOCTYPE html> <html> <head> <title>Пример переноса слов в CSS(свойство overflow-wrap)</title> <style> .test { width: 300px; /* устанавливаем ширину блока */ overflow-wrap: normal; /* допускается переносить слова только в допустимых точках (значение по умолчанию) */ background: azure; /* устанавливаем цвет заднего фона */ border: 1px solid gray; /* устанавливаем сплошную границу размером 1 пиксель серого цвета */ } .test2 { width: 300px; /* устанавливаем ширину блока */ overflow-wrap: normal; /* слово может быть прервано в произвольный месте, если нет допустимой точки для разрыва */ background: azure; /* устанавливаем цвет заднего фона */ border: 1px solid gray; /* устанавливаем сплошную границу размером 1 пиксель серого цвета */ } </style> </head> <body> <h3>Блок со значением overflow-wrap:normal</h3> <div class = "test"> Самое длинное название деревни в Европе: <a href = "https://ru.wikipedia.org/wiki/Лланвайр-Пуллгуингилл" target = "_blank" title = "Прочитать на Википедии">Лланвайрпуллгуингиллгогерихуирндробуллллантисилиогогого</a> </div> <h3>Блок со значением overflow-wrap:break-word</h3> <div class = "test2"> Самое длинное название деревни в Европе: <a href = "https://ru.wikipedia.org/wiki/Лланвайр-Пуллгуингилл" target = "_blank" title = "Прочитать на Википедии">Лланвайрпуллгуингиллгогерихуирндробуллллантисилиогогого</a> </div> </body> </html>Пример использования CSS свойства overflow-wrap(перенос слов в CSS).CSS свойства