HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Переполнение контента внутри блока - распространенное явление при верстке контента. Переполнением считается ситуация, при которой контент внутри контейнера больше, чем размер самого контейнера. Распространенный случай такого поведения - использование контейнера с фиксированными значениями высоты и ширины.</p>
1 <p>Переполнение контента внутри блока - распространенное явление при верстке контента. Переполнением считается ситуация, при которой контент внутри контейнера больше, чем размер самого контейнера. Распространенный случай такого поведения - использование контейнера с фиксированными значениями высоты и ширины.</p>
2 <p><strong>Интересно:</strong>использование фиксированных значений высоты и ширины в большинстве случаев не является хорошей практикой. Так можно достаточно быстро сверстать блок по макету, но одновременно с этим отнимается возможность расширения функционала. Любой отход от изначального контента может привести к проблемам, связанным с выходом контента из контейнера. Используйте фиксированные значения высоты и ширины там, где это предполагается в дизайне или для создания специфичной функциональности.</p>
2 <p><strong>Интересно:</strong>использование фиксированных значений высоты и ширины в большинстве случаев не является хорошей практикой. Так можно достаточно быстро сверстать блок по макету, но одновременно с этим отнимается возможность расширения функционала. Любой отход от изначального контента может привести к проблемам, связанным с выходом контента из контейнера. Используйте фиксированные значения высоты и ширины там, где это предполагается в дизайне или для создания специфичной функциональности.</p>
3 <p>В качестве примера создадим блок с фиксированными значениями высоты и ширины. Внутри такого контейнера расположим текст так, чтобы он вышел за границы блока.</p>
3 <p>В качестве примера создадим блок с фиксированными значениями высоты и ширины. Внутри такого контейнера расположим текст так, чтобы он вышел за границы блока.</p>
4 <p><a>Codepen</a></p>
4 <p><a>Codepen</a></p>
5 <p>Большая часть описания профессии вышла за пределы блока. Браузеры в данном случае считают контент важнее, чем контейнер, в котором он лежит, и не скрывают текст. Это не лишено смысла, ведь главная часть любой страницы - ее контент. Без него вся страница не будет иметь никакого смысла.</p>
5 <p>Большая часть описания профессии вышла за пределы блока. Браузеры в данном случае считают контент важнее, чем контейнер, в котором он лежит, и не скрывают текст. Это не лишено смысла, ведь главная часть любой страницы - ее контент. Без него вся страница не будет иметь никакого смысла.</p>
6 <p>Такая ситуация называется переполнением, и CSS позволяет управлять им. Для этого существует три свойства:</p>
6 <p>Такая ситуация называется переполнением, и CSS позволяет управлять им. Для этого существует три свойства:</p>
7 <ol><li>overflow-x - управление переполнением по горизонтали.</li>
7 <ol><li>overflow-x - управление переполнением по горизонтали.</li>
8 <li>overflow-y - управление переполнением по вертикали.</li>
8 <li>overflow-y - управление переполнением по вертикали.</li>
9 <li>overflow - сокращенная запись двух предыдущих свойств. Если указать внутри только одно значение, то оно применится к двум осям одновременно. Наиболее распространенный вариант использования.</li>
9 <li>overflow - сокращенная запись двух предыдущих свойств. Если указать внутри только одно значение, то оно применится к двум осям одновременно. Наиболее распространенный вариант использования.</li>
10 </ol><p>По умолчанию свойство имеет значение visible, которое и указывает на то, что при переполнении контент должен отрисовываться вне своего родителя. В противовес visible есть значение hidden. Его задача обратна - скрыть контент, который выходит за пределы своего родителя. При этом доступ к такому контенту теряется. При использовании свойства overflow важно помнить, что это свойство не является наследуемым, поэтому его необходимо указывать у каждого блока, с которым происходит переполнение. В дальнейшем вы увидите примеры таких реализаций.</p>
10 </ol><p>По умолчанию свойство имеет значение visible, которое и указывает на то, что при переполнении контент должен отрисовываться вне своего родителя. В противовес visible есть значение hidden. Его задача обратна - скрыть контент, который выходит за пределы своего родителя. При этом доступ к такому контенту теряется. При использовании свойства overflow важно помнить, что это свойство не является наследуемым, поэтому его необходимо указывать у каждого блока, с которым происходит переполнение. В дальнейшем вы увидите примеры таких реализаций.</p>
11 <p>Распространенная ситуация при верстке блоков, которые должны находиться в HTML, но при этом быть временно скрытыми. Например, при создании слайдеров, в которых все неактивные слайды находятся за пределами блока и скрыты с помощью свойства overflow.</p>
11 <p>Распространенная ситуация при верстке блоков, которые должны находиться в HTML, но при этом быть временно скрытыми. Например, при создании слайдеров, в которых все неактивные слайды находятся за пределами блока и скрыты с помощью свойства overflow.</p>
12 <p><a>Codepen</a></p>
12 <p><a>Codepen</a></p>
13 <p>Хоть теперь верстка не "сломалась" от переполнения, но прочитать описание профессии невозможно. Не хватает какой-нибудь полосы прокрутки внутри блока. Свойство overflow позволяет добавить полосу прокрутки в такой блок. Для этого может использоваться два значения:</p>
13 <p>Хоть теперь верстка не "сломалась" от переполнения, но прочитать описание профессии невозможно. Не хватает какой-нибудь полосы прокрутки внутри блока. Свойство overflow позволяет добавить полосу прокрутки в такой блок. Для этого может использоваться два значения:</p>
14 <ul><li>scroll</li>
14 <ul><li>scroll</li>
15 <li>auto</li>
15 <li>auto</li>
16 </ul><p>В чем разница между ними? Посмотрим на примере, взяв вначале значение scroll. Установим для секции новое значение свойства overflow.</p>
16 </ul><p>В чем разница между ними? Посмотрим на примере, взяв вначале значение scroll. Установим для секции новое значение свойства overflow.</p>
17 <p><a>Codepen</a></p>
17 <p><a>Codepen</a></p>
18 <p>Теперь мы можем прокрутить контент внутри блока и наконец прочитать описание всей профессии. Но прокрутка появилась не только по вертикали, но и по горизонтали. При этом она недоступна, так как в этом направлении нет переполнения контента. Во-первых, это "портит" дизайн, а во-вторых отнимает место внутри блока. Если такое поведение явно не обозначено в макете, то стоит добавить полосу прокрутки только для того направления, где возникает переполнение контента. Это возможно с помощью значения auto. В этом случае браузер следит за тем, где возникло переполнение и добавляет полосу прокрутки именно для этого направления.</p>
18 <p>Теперь мы можем прокрутить контент внутри блока и наконец прочитать описание всей профессии. Но прокрутка появилась не только по вертикали, но и по горизонтали. При этом она недоступна, так как в этом направлении нет переполнения контента. Во-первых, это "портит" дизайн, а во-вторых отнимает место внутри блока. Если такое поведение явно не обозначено в макете, то стоит добавить полосу прокрутки только для того направления, где возникает переполнение контента. Это возможно с помощью значения auto. В этом случае браузер следит за тем, где возникло переполнение и добавляет полосу прокрутки именно для этого направления.</p>
19 <p><a>Codepen</a></p>
19 <p><a>Codepen</a></p>
20 <p><strong>Важно:</strong>используйте свойство overflow с осторожностью. Велик соблазн использовать его в случае быстрой верстки, когда при выходе макета за пределы экрана выставляют следующий CSS код:</p>
20 <p><strong>Важно:</strong>используйте свойство overflow с осторожностью. Велик соблазн использовать его в случае быстрой верстки, когда при выходе макета за пределы экрана выставляют следующий CSS код:</p>
21 <p>Это действительно решит проблему с горизонтальной прокруткой, но может и обрезать важную часть контента. Потратьте чуть больше времени, но локализуйте проблему и решите именно ее. Это сделает вашу верстку понятнее и проще.</p>
21 <p>Это действительно решит проблему с горизонтальной прокруткой, но может и обрезать важную часть контента. Потратьте чуть больше времени, но локализуйте проблему и решите именно ее. Это сделает вашу верстку понятнее и проще.</p>
22 <h2>Переполнение текста</h2>
22 <h2>Переполнение текста</h2>
23 <p>Не всегда требуется работать с переполнением только в рамках свойства overflow. Бывают ситуации, когда нужно точечно работать с переполнением контента, а не со всем блоком сразу. В качестве примера используем верстку превью сообщения чата.</p>
23 <p>Не всегда требуется работать с переполнением только в рамках свойства overflow. Бывают ситуации, когда нужно точечно работать с переполнением контента, а не со всем блоком сразу. В качестве примера используем верстку превью сообщения чата.</p>
24 <p><a>Codepen</a></p>
24 <p><a>Codepen</a></p>
25 <p>Перед продолжением изучите верстку этого примера. Вы можете обнаружить пару новых свойств, которые относятся к модулю<em>CSS Flexible Box Layout</em>. С этим модулем вы познакомитесь в курсе<a>CSS: Flex</a>.</p>
25 <p>Перед продолжением изучите верстку этого примера. Вы можете обнаружить пару новых свойств, которые относятся к модулю<em>CSS Flexible Box Layout</em>. С этим модулем вы познакомитесь в курсе<a>CSS: Flex</a>.</p>
26 <p>Превью выглядит неплохо с текущим количеством текста, но если его станет больше, то вся верстка может развалиться.</p>
26 <p>Превью выглядит неплохо с текущим количеством текста, но если его станет больше, то вся верстка может развалиться.</p>
27 <p><strong>Интересно:</strong>одна из задач хорошего специалиста - предусмотреть различные варианты контента внутри блока. Попробуйте в полях, где ожидается имя, выставлять длинные последовательности. Среди дизайнеров хорошей практикой является тестирование макета на "Константине Константинопольском"</p>
27 <p><strong>Интересно:</strong>одна из задач хорошего специалиста - предусмотреть различные варианты контента внутри блока. Попробуйте в полях, где ожидается имя, выставлять длинные последовательности. Среди дизайнеров хорошей практикой является тестирование макета на "Константине Константинопольском"</p>
28 <p>Увеличим количество контента внутри компонента с превью сообщения.</p>
28 <p>Увеличим количество контента внутри компонента с превью сообщения.</p>
29 <p><a>Codepen</a></p>
29 <p><a>Codepen</a></p>
30 <p>Не очень похоже на превью. Теперь это полноценное сообщение, которое отображается пользователю. Если таких сообщений будет десяток или сотня, то очень легко плюнуть на все и уйти с сайта, чем листать такое количество контента. В идеальной ситуации стоит отобразить только по одной строчке от имени и сообщения. Это можно сделать с помощью свойства white-space со значением nowrap. Такая конструкция запретит перенос текста по строкам внутри блока. Если ее добавить, то весь текст внутри блока с именем и блок с сообщением расположится в одну строку, что приведет к переполнению, но решит задачу. Ведь мы уже умеем работать с переполнением. Установим это свойство для селекторов .contact-name и .contact-message.</p>
30 <p>Не очень похоже на превью. Теперь это полноценное сообщение, которое отображается пользователю. Если таких сообщений будет десяток или сотня, то очень легко плюнуть на все и уйти с сайта, чем листать такое количество контента. В идеальной ситуации стоит отобразить только по одной строчке от имени и сообщения. Это можно сделать с помощью свойства white-space со значением nowrap. Такая конструкция запретит перенос текста по строкам внутри блока. Если ее добавить, то весь текст внутри блока с именем и блок с сообщением расположится в одну строку, что приведет к переполнению, но решит задачу. Ведь мы уже умеем работать с переполнением. Установим это свойство для селекторов .contact-name и .contact-message.</p>
31 <p><a>Codepen</a></p>
31 <p><a>Codepen</a></p>
32 <p>Не очень красиво получилось. Стоит обрезать контент, который не помещается в рамки контейнера. Добавим свойство overflow-x для селекторов, к которым было добавлено правило white-space. Помимо этого, свойство необходимо добавить для всего контейнера, внутри которого и содержатся элементы с именем и сообщением</p>
32 <p>Не очень красиво получилось. Стоит обрезать контент, который не помещается в рамки контейнера. Добавим свойство overflow-x для селекторов, к которым было добавлено правило white-space. Помимо этого, свойство необходимо добавить для всего контейнера, внутри которого и содержатся элементы с именем и сообщением</p>
33 <p><a>Codepen</a></p>
33 <p><a>Codepen</a></p>
34 <p>Почему понадобилось столько свойств overflow? Дело в отображении HTML. По своей сути браузер просто считывает верстку сверху вниз. Если взглянуть на этот компонент с точки зрения браузера, то получится следующая ситуация:</p>
34 <p>Почему понадобилось столько свойств overflow? Дело в отображении HTML. По своей сути браузер просто считывает верстку сверху вниз. Если взглянуть на этот компонент с точки зрения браузера, то получится следующая ситуация:</p>
35 <ol><li>Отрисовываем блок .contact-body и ограничиваем его по ширине.</li>
35 <ol><li>Отрисовываем блок .contact-body и ограничиваем его по ширине.</li>
36 <li>Отрисовываем блок .contact-name. Внутри него содержится длинный контент, который запрещено переносить согласно правилу white-space. Ширина блока больше, чем ширина родителя. По умолчанию отрисовываем контент за пределами контейнера.</li>
36 <li>Отрисовываем блок .contact-name. Внутри него содержится длинный контент, который запрещено переносить согласно правилу white-space. Ширина блока больше, чем ширина родителя. По умолчанию отрисовываем контент за пределами контейнера.</li>
37 <li>Повторяем действия из пункта 2 для блока .contact-message.</li>
37 <li>Повторяем действия из пункта 2 для блока .contact-message.</li>
38 </ol><p>Добавляя в каждый из трех блоков свойство overflow браузер последовательно работает с переполнением контента. Если упустить свойство у блока .contact-body, то ширина блоков .contact-name и .contact-message не будет ограничена и использование overflow никак на них не повлияет.</p>
38 </ol><p>Добавляя в каждый из трех блоков свойство overflow браузер последовательно работает с переполнением контента. Если упустить свойство у блока .contact-body, то ширина блоков .contact-name и .contact-message не будет ограничена и использование overflow никак на них не повлияет.</p>
39 <p>Можно сказать, что верстка закончена, но сейчас отсутствуют отступы между участками текста по горизонтали. Например, имя пользователя и время сообщения почти слиплись. Можно добавить отступ, но есть и другой путь - работа с переполнением контента внутри строки.</p>
39 <p>Можно сказать, что верстка закончена, но сейчас отсутствуют отступы между участками текста по горизонтали. Например, имя пользователя и время сообщения почти слиплись. Можно добавить отступ, но есть и другой путь - работа с переполнением контента внутри строки.</p>
40 <p>Для указания браузеру, что нужно делать при переполнении контента внутри строки используется правило text-overflow. Оно может принимать всего два значения:</p>
40 <p>Для указания браузеру, что нужно делать при переполнении контента внутри строки используется правило text-overflow. Оно может принимать всего два значения:</p>
41 <ul><li>clip - значение по умолчанию. Текст "режется" в том месте, где достиг края блока. Именно это поведение можно заметить в примере выше.</li>
41 <ul><li>clip - значение по умолчанию. Текст "режется" в том месте, где достиг края блока. Именно это поведение можно заметить в примере выше.</li>
42 <li>ellipsis - вместо грубого среза строки добавляется многоточие. Это визуально показывает пользователю, что строка не закончена.</li>
42 <li>ellipsis - вместо грубого среза строки добавляется многоточие. Это визуально показывает пользователю, что строка не закончена.</li>
43 </ul><p>Добавим многоточие в блоки с именем пользователя и текстом сообщения.</p>
43 </ul><p>Добавим многоточие в блоки с именем пользователя и текстом сообщения.</p>
44 <p><strong>Важно:</strong>для работы свойства text-overflow необходимо наличие свойства overflow со значением, отличным от visible.</p>
44 <p><strong>Важно:</strong>для работы свойства text-overflow необходимо наличие свойства overflow со значением, отличным от visible.</p>
45 <p><a>Codepen</a></p>
45 <p><a>Codepen</a></p>