Кратко
СкопированоПо умолчанию почти все элементы в HTML имеют блочный и строчный тип отображения. Но в вёрстке часто бывает, что нам нужно сделать элемент не строчным, а блочным. И наоборот.
Тут на помощь приходит свойство display
✨
Помимо значений block
(блочное отображение) и inline
(строчное отображение) существует смешанное значение inline
(строчно-блочное отображение).
Бывают и другие специфичные значения, например, flex
, grid
, table
.
Пример
СкопированоЧастая ситуация: на странице нужно показать иконки соцсетей со ссылками на аккаунты.
<div class="wrapper"> <ul class="social"> <li class="social__item twitter"> <a href="" class="social__link"></a> </li> <li class="social__item fb"> <a href="" class="social__link"></a> </li> <li class="social__item youtube"> <a href="" class="social__link"></a> </li> </ul></div>
<div class="wrapper"> <ul class="social"> <li class="social__item twitter"> <a href="" class="social__link"></a> </li> <li class="social__item fb"> <a href="" class="social__link"></a> </li> <li class="social__item youtube"> <a href="" class="social__link"></a> </li> </ul> </div>
Обратите внимание, что внутри ссылок ничего не написано. Нам не нужно выводить название соцсети, а нужно вывести иконку с логотипом. Что мы и сделаем при помощи фона.
Выстраиваем пункты списка в ряд, а не друг под другом:
.social__item { display: inline-block;}
.social__item { display: inline-block; }
Превращаем ссылки из строчных в блочные элементы. После этого можем задать высоту и ширину:
.social__link { display: block; width: 30px; height: 30px; background-repeat: no-repeat; background-position: center; background-size: contain;}
.social__link { display: block; width: 30px; height: 30px; background-repeat: no-repeat; background-position: center; background-size: contain; }
Задаём иконки фоном для каждой отдельной ссылки:
.twitter { background-image: url(twitter-round-blue.png);}.fb { background-image: url(fb-square-blue.png);}.youtube { background-image: url(youtube-red-square.png);}
.twitter { background-image: url(twitter-round-blue.png); } .fb { background-image: url(fb-square-blue.png); } .youtube { background-image: url(youtube-red-square.png); }
По умолчанию ссылки — строчные. Это значит, что им нельзя задать размеры (width
и height
) и фоновую картинку.
Пишем display
, и строка превращается в условный прямоугольник, у которого могут быть и размеры, и фон.
После этого смело меняем размер на нужный нам и фоном выводим иконки каждой из соцсетей.
Помимо этого по ходу решения задачи мы установили свойство display
для пунктов списка с классом social
. За счёт этого элементы, которые по умолчанию блочные, приобретают внешние признаки строчных элементов. Вместо того чтобы выстраиваться друг под другом, пункты списка теперь стоят рядом, в строку.
Как понять
СкопированоКаждый HTML-элемент по умолчанию имеет свой тип отображения. Например, ссылки нужны для оборачивания слов и фраз. Значит, они должны быть строчными, чтобы не разорвать окружающий текст.
Но по разным причинам может понадобиться изменить стандартное отображение на то, которое больше подходит под решение текущей задачи.
Как пишется
СкопированоПишем имя свойства display
и после двоеточия через пробел указываем одно из доступных значений при помощи ключевого слова.
Значения свойства, которые встречаются в работе чаще всего:
none
— полностью скрывает элемент со страницы, не удаляя его при этом из HTML-разметки.block
— элемент ведёт себя как блочный.inline
— элемент ведёт себя снаружи как строчный, а внутри как блочный.- block flex
— элемент становится флекс-контейнером, ведёт себя как блочный, а вложенные элементы становятся флекс-элементами. Подробнее в Гайде по flexbox.grid
— элемент становится грид-контейнером. Снаружи грид-контейнер ведёт себя как блок. Дочерние элементы такого контейнера начинают подчиняться правилам грид-раскладки. Подробнее в Гайде по grid.
Остальные значения можно посмотреть в спецификации.
Это свойство можно применить к любому HTML-элементу.
Подсказки
Скопировано💡 Свойство display
нельзя анимировать 😔
💡 Значение по умолчанию у каждого HTML-элемента своё. Если нет уверенности — загляните в «Инструменты разработчика» в браузере.
- Chrome 57, поддерживается
- Edge 79, поддерживается
- Firefox 81, поддерживается
- Safari 9, поддерживается
На практике
Скопированосоветует Скопировано
🛠 Если задаёте display
, чтобы выстроить несколько блоков в строку, обязательно указывайте для родительского элемента font
. Иначе между строчно-блочными элементами будут небольшие отступы, как между словами — пробелы.
🛠 Многие начинающие разработчики сталкиваются с проблемой при выводе иконок соцсетей фоном для ссылок. Ссылки изначально строчные. Для изменения размера ссылки и для возможности задать ей фон ссылку нужно сделать блочной (display
) или строчно-блочной (display
).
🛠 Если нужно вывести на страницу данные в виде таблицы, то в HTML-разметке создайте таблицу при помощи соответствующих тегов. Не используйте display
для визуального преобразования в таблицу тех элементов, которые не имеют никакого отношения к таблице. Помните про семантику! ☝️
Семантикой в вёрстке называют подбор тегов по смыслу элемента. Прошли эпохи вёрстки на таблицах и дивах. Теперь почти для всего есть отдельный тег. Например, для меню есть тег <nav>
, а для основного контента страницы — <main>
.
🛠 Если нужно плавно показывать элемент или наоборот, прятать его, стоит присмотреться к решениям с использованием visibility
и opacity
. Или менять стили элемента при помощи JavaScript. Например, можно показывать другой текст по наведению на элемент:
<div class="parent"> <p class="some-text"> Я — текст простой. Наведи на меня курсор, и я покажу подсказку! <span class="note">Теперь ты читаешь скрытую подсказку! 🎉</span> </p></div>
<div class="parent"> <p class="some-text"> Я — текст простой. Наведи на меня курсор, и я покажу подсказку! <span class="note">Теперь ты читаешь скрытую подсказку! 🎉</span> </p> </div>
.some-text { position: relative;}.note { position: absolute; top: 0; bottom: 0; left: 0; right: 0; opacity: 0; transition: opacity 0.35s;}.some-text:hover .note { opacity: 1;}
.some-text { position: relative; } .note { position: absolute; top: 0; bottom: 0; left: 0; right: 0; opacity: 0; transition: opacity 0.35s; } .some-text:hover .note { opacity: 1; }
🛠 Очень много задач сегодня решает display
. С его появлением перестали так часто использоваться значение inline
или свойство float
. Например, частая задача вертикального выравнивания раньше решалась при помощи магических пассов — большого количества кода, — а теперь легко решается одним свойством align
. Или прижать два блока к разным сторонам родителя раньше можно было при помощи float
и заклинания для решения проблемы выпадания. Теперь достаточно написать justify
, и два блока будут прижаты к краям родителя 🤗
На собеседовании
Скопировано отвечает
СкопированоЗначение display
используется для элементов, которые отображаются в группе слов рядом с другими элементами, например в параграфе. Размеры строчных элементов определяются содержимым, так что установить их через CSS-свойства не получится. Так же не выйдет указать для них вертикальные margin
и padding
. Пример строчных элементов это <span>
и <a>
— свойство display
устанавливается для них браузером по умолчанию.
Элементы с display
также располагаются в потоке текста, но вы можете установить размеры такому элементу, а так же любые значения margin
и padding
. Это позволит элементу отображаться в строке, но занимать пространство как блочному элементу. Примеры элементов со значением display
по умолчанию: <button>
или <textarea>
.
Алексей Руденко — наставник на курсе «Мидл фронтенд-разработчик» в Яндекс Практикуме.