HTML Diff
8 added 9 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#База знаний</a></p>
1 <p><a>#База знаний</a></p>
2 <ul><li>2 мар 2021</li>
2 <ul><li>2 мар 2021</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Три примера вёрстки, которые встречаются часто и пригодятся наверняка.</p>
4 </ul><p>Три примера вёрстки, которые встречаются часто и пригодятся наверняка.</p>
5 <p>Автор статей по программированию. Преподаватель, ментор, выпускник Skillbox. Фрилансер, веб-разработчик</p>
5 <p>Автор статей по программированию. Преподаватель, ментор, выпускник Skillbox. Фрилансер, веб-разработчик</p>
6 <p>При разработке сайта верстальщик должен отличать<em>контентные</em>(информативные) изображения от <em>декоративных</em>.</p>
6 <p>При разработке сайта верстальщик должен отличать<em>контентные</em>(информативные) изображения от <em>декоративных</em>.</p>
7 <p><strong>Контентные изображения</strong>связаны со структурой и смысловым наполнением страниц. Они содержательны, поэтому их <strong>вставляем в разметку</strong>.</p>
7 <p><strong>Контентные изображения</strong>связаны со структурой и смысловым наполнением страниц. Они содержательны, поэтому их <strong>вставляем в разметку</strong>.</p>
8 <p><strong>Декоративные изображения</strong> - это элементы оформления: разделители, маркеры, значки, фоны и так далее. Они не несут полезной информации для пользователя, поэтому их <strong>задаём средствами CSS</strong>. Так мы избавляем HTML-документ от всего лишнего.</p>
8 <p><strong>Декоративные изображения</strong> - это элементы оформления: разделители, маркеры, значки, фоны и так далее. Они не несут полезной информации для пользователя, поэтому их <strong>задаём средствами CSS</strong>. Так мы избавляем HTML-документ от всего лишнего.</p>
9 <p>Пример явно декоративных изображений - пиктограммы ("иконки") и фоновые картинки. Научимся их верстать с помощью CSS-свойства background.</p>
9 <p>Пример явно декоративных изображений - пиктограммы ("иконки") и фоновые картинки. Научимся их верстать с помощью CSS-свойства background.</p>
10 - <p>Почти на любом сайте есть блок со ссылками на Facebook*, "ВКонтакте", Instagram* и другие соцсети:</p>
10 + <p>Почти на любом сайте есть блок со ссылками на соцсети и медиа - "ВКонтакте", "Одноклассники", YouTube и другие:</p>
11 - <p>Поскольку это иконки, а текста (контентной составляющей) мы рядом не видим, - нужно использовать CSS.</p>
11 + <em>Изображение: Skillbox Media</em><p>Поскольку это иконки, а текста (контентной составляющей) мы рядом не видим, - нужно использовать CSS.</p>
12 <p>Здесь есть пара нюансов:</p>
12 <p>Здесь есть пара нюансов:</p>
13 <ul><li>Раз текста нет, то у ссылки нет размеров. А фона без размеров не бывает (нельзя покрасить стену, когда самой стены нет).</li>
13 <ul><li>Раз текста нет, то у ссылки нет размеров. А фона без размеров не бывает (нельзя покрасить стену, когда самой стены нет).</li>
14 <li>Если мы зададим размеры ссылке, то они не сработают, так как по умолчанию ссылка - строчный элемент (его размер не изменить с помощью свойств width и height).</li>
14 <li>Если мы зададим размеры ссылке, то они не сработают, так как по умолчанию ссылка - строчный элемент (его размер не изменить с помощью свойств width и height).</li>
15 </ul><p>Обойдём эти ограничения.</p>
15 </ul><p>Обойдём эти ограничения.</p>
16 <p>Сперва напишем простую разметку - список ссылок. Классы сделаем по БЭМ, чтобы наш компонент было удобно стилизовать и использовать повторно.</p>
16 <p>Сперва напишем простую разметку - список ссылок. Классы сделаем по БЭМ, чтобы наш компонент было удобно стилизовать и использовать повторно.</p>
17 <p>Начнём, конечно, с HTML-кода:</p>
17 <p>Начнём, конечно, с HTML-кода:</p>
18 - &lt;ul class="social"&gt; &lt;li class="social__item"&gt; &lt;a href="#" class="social__link social__link--vk" aria-label="Мы во ВКонтакте"&gt;&lt;/a&gt; &lt;/li&gt; &lt;li class="social__item"&gt; &lt;a href="#" class="social__link social__link--fb" aria-label="Мы в Фейсбуке*"&gt;&lt;/a&gt; &lt;/li&gt; &lt;li class="social__item"&gt; &lt;a href="#" class="social__link social__link--insta" aria-label="Мы в Инстаграме*"&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;<p>Далее - CSS:</p>
18 + &lt;ul class="social"&gt; &lt;li class="social__item"&gt; &lt;a href="#" class="social__link social__link--vk" aria-label="Мы во ВКонтакте"&gt;&lt;/a&gt; &lt;/li&gt; &lt;li class="social__item"&gt; &lt;a href="#" class="social__link social__link--ok" aria-label="Мы в Одноклассниках"&gt;&lt;/a&gt; &lt;/li&gt; &lt;li class="social__item"&gt; &lt;a href="#" class="social__link social__link--youtube" aria-label="Наш канал на YouTube"&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;<p>Далее - CSS:</p>
19 - .social__link { display: inline-block; width: 30px; height: 30px; background-position: center; background-size: cover; background-repeat: no-repeat; } .social__link--vk { background-image: url("../img/vk.svg"); } .social__link--fb { background-image: url("../img/fb.svg"); } .social__link--insta { background-image: url("../img/instagram*.svg"); }<ul></ul><ul><li>Заметьте, что свойству display для ссылок мы задали значение inline-block. Поэтому наши ссылки стали строчно-блочными элементами. Теперь можно задать им ширину и высоту - и это уже сработает.</li>
19 + .social__link { display: inline-block; width: 30px; height: 30px; background-position: center; background-size: cover; background-repeat: no-repeat; } .social__link--vk { background-image: url("../img/vk.svg"); } .social__link--ok { background-image: url("../img/ok.svg"); } .social__link--youtube { background-image: url("../img/youtube.svg"); }<ul></ul><ul><li>Заметьте, что свойству display для ссылок мы задали значение inline-block. Поэтому наши ссылки стали строчно-блочными элементами. Теперь можно задать им ширину и высоту - и это уже сработает.</li>
20 <li>Одинаковые для всех элементов стили (background-position, background-size, background-repeat) мы вынесли в общий класс social__link.</li>
20 <li>Одинаковые для всех элементов стили (background-position, background-size, background-repeat) мы вынесли в общий класс social__link.</li>
21 <li>А вот фоновые изображения у нас разные - их мы задаём в разных классах.</li>
21 <li>А вот фоновые изображения у нас разные - их мы задаём в разных классах.</li>
22 </ul><p>Вот и готов наш универсальный компонент. Его легко обновить и использовать повторно, когда нам понадобятся другие соцсети.</p>
22 </ul><p>Вот и готов наш универсальный компонент. Его легко обновить и использовать повторно, когда нам понадобятся другие соцсети.</p>
23 <p>Такие иконки с фоном встречаются в контактах на сайте. Мы вешаем ссылку на email, а для наглядности добавляем пиктограмму.</p>
23 <p>Такие иконки с фоном встречаются в контактах на сайте. Мы вешаем ссылку на email, а для наглядности добавляем пиктограмму.</p>
24 - <p>На скриншоте выше видно, что значок находится слева от текста. Вспоминаем все свойства background и понимаем, что для размещения слева годится background-position (начальная позиция фонового изображения). Перейдём к коду.</p>
24 + <em>Изображение: Skillbox Media</em><p>На скриншоте выше видно, что значок находится слева от текста. Вспоминаем все свойства background и понимаем, что для размещения слева годится background-position (начальная позиция фонового изображения). Перейдём к коду.</p>
25 <p>Сперва ничего особенного - обычная ссылка:</p>
25 <p>Сперва ничего особенного - обычная ссылка:</p>
26 &lt;a href="mailto:mail@yahoo.com" class="email-link"&gt;mail@yahoo.com&lt;/a&gt;<p>Вся магия в CSS:</p>
26 &lt;a href="mailto:mail@yahoo.com" class="email-link"&gt;mail@yahoo.com&lt;/a&gt;<p>Вся магия в CSS:</p>
27 .email-link { background-image: url("../img/mail.svg"); background-position: left center; background-size: 20px 20px; background-repeat: no-repeat; }<ul><li>Сначала задали путь до изображения.</li>
27 .email-link { background-image: url("../img/mail.svg"); background-position: left center; background-size: 20px 20px; background-repeat: no-repeat; }<ul><li>Сначала задали путь до изображения.</li>
28 <li>Потом установили начальное положение фона (background-position) в left center - ведь наша иконка левее текста (горизонтальная позиция left) и на одном с ним уровне (вертикальная позиция center).</li>
28 <li>Потом установили начальное положение фона (background-position) в left center - ведь наша иконка левее текста (горизонтальная позиция left) и на одном с ним уровне (вертикальная позиция center).</li>
29 <li>Размер фонового изображения (background-size) мы задали, чтобы предотвратить отдалённые проблемы.<p>Дело в том, что иконка может оказаться больше блока, в котором её захотят показать. Тогда она некрасиво обрежется по бокам. Чтобы этого не произошло - указываем размеры, в которые иконка должна вписаться.</p>
29 <li>Размер фонового изображения (background-size) мы задали, чтобы предотвратить отдалённые проблемы.<p>Дело в том, что иконка может оказаться больше блока, в котором её захотят показать. Тогда она некрасиво обрежется по бокам. Чтобы этого не произошло - указываем размеры, в которые иконка должна вписаться.</p>
30 </li>
30 </li>
31 </ul><ul><li>И наконец, устанавливаем режим повторения фона (background-repeat) в no-repeat. Без этого фоновая картинка будет дублироваться, пока не заполнит собой блок (как это выглядит - зависит от размеров картинки и HTML-элемента, где она задана фоном).</li>
31 </ul><ul><li>И наконец, устанавливаем режим повторения фона (background-repeat) в no-repeat. Без этого фоновая картинка будет дублироваться, пока не заполнит собой блок (как это выглядит - зависит от размеров картинки и HTML-элемента, где она задана фоном).</li>
32 </ul><p>Что же мы получили:</p>
32 </ul><p>Что же мы получили:</p>
33 - <p><strong>Не совсем то, чего ожидали.</strong>Давайте разбираться.</p>
33 + <em>Изображение: Skillbox Media</em><p><strong>Не совсем то, чего ожидали.</strong>Давайте разбираться.</p>
34 <p>Наш "конвертик" стал фоновым изображением для блока, который занимает ссылка. Текст ссылки - это содержимое того же блока. Оно и наложилось на наше фоновое изображение.</p>
34 <p>Наш "конвертик" стал фоновым изображением для блока, который занимает ссылка. Текст ссылки - это содержимое того же блока. Оно и наложилось на наше фоновое изображение.</p>
35 <p>Значит, нужно отодвинуть это самое содержимое от <em>левой</em>границы блока (помните, мы прижали "конвертик" именно к <em>левому</em>краю). Причём отодвинуть более чем на 20px (ширина фоновой картинки, заданная background-size) - тогда увидеть наш фон уже ничто не помешает.</p>
35 <p>Значит, нужно отодвинуть это самое содержимое от <em>левой</em>границы блока (помните, мы прижали "конвертик" именно к <em>левому</em>краю). Причём отодвинуть более чем на 20px (ширина фоновой картинки, заданная background-size) - тогда увидеть наш фон уже ничто не помешает.</p>
36 <p>Делается это с помощью свойства padding (внутренний отступ).</p>
36 <p>Делается это с помощью свойства padding (внутренний отступ).</p>
37 <p>Добавим в код такой отступ<em>слева</em>:</p>
37 <p>Добавим в код такой отступ<em>слева</em>:</p>
38 .email-link { padding-left: 30px; background-image: url("../img/mail.svg"); background-position: left center; background-size: 20px 20px; background-repeat: no-repeat; }<p>Вот теперь всё вышло как надо:</p>
38 .email-link { padding-left: 30px; background-image: url("../img/mail.svg"); background-position: left center; background-size: 20px 20px; background-repeat: no-repeat; }<p>Вот теперь всё вышло как надо:</p>
39 - <p><strong>На заметку:</strong>этот приём также подходит для иконок справа, сверху или снизу от текста. Например, нужна иконка справа - меняйте отступ слева на отступ справа, и позицию фона задайте тоже справа.</p>
39 + <em>Изображение: Skillbox Media</em><p><strong>На заметку:</strong>этот приём также подходит для иконок справа, сверху или снизу от текста. Например, нужна иконка справа - меняйте отступ слева на отступ справа, и позицию фона задайте тоже справа.</p>
40 <p>Подобные блоки привлекают внимание. Фоном идёт картинка, а поверх неё текст. Давайте разбираться, как такое сделать.</p>
40 <p>Подобные блоки привлекают внимание. Фоном идёт картинка, а поверх неё текст. Давайте разбираться, как такое сделать.</p>
41 - <p>Взглянув на этот макет, можно предположить, что тут достаточно задать высоту и ширину, расположить фоновое изображение - и всё.</p>
41 + <em>Скриншот: Skillbox Media</em><p>Взглянув на этот макет, можно предположить, что тут достаточно задать высоту и ширину, расположить фоновое изображение - и всё.</p>
42 <p>Однако мы не всегда знаем заранее, сколько контента будет внутри блока - не изменят ли потом его содержимое. Могут поменять заголовок, сделать его больше на две-три строки - и тогда всё сломается. Поэтому фон нужно делать адаптивным. Итак, к коду.</p>
42 <p>Однако мы не всегда знаем заранее, сколько контента будет внутри блока - не изменят ли потом его содержимое. Могут поменять заголовок, сделать его больше на две-три строки - и тогда всё сломается. Поэтому фон нужно делать адаптивным. Итак, к коду.</p>
43 <p>Создаём простую HTML-разметку:</p>
43 <p>Создаём простую HTML-разметку:</p>
44 &lt;article class="card"&gt; &lt;h3 class="card__title"&gt;Мальдивские острова&lt;/h3&gt; &lt;p class="card__price"&gt;от 55 000 р&lt;/p&gt; &lt;a href="tel:+74932200080" class="card__link"&gt;+7 (4932) 2000-80&lt;/a&gt; &lt;/article&gt;<p>Главное у нас снова в CSS:</p>
44 &lt;article class="card"&gt; &lt;h3 class="card__title"&gt;Мальдивские острова&lt;/h3&gt; &lt;p class="card__price"&gt;от 55 000 р&lt;/p&gt; &lt;a href="tel:+74932200080" class="card__link"&gt;+7 (4932) 2000-80&lt;/a&gt; &lt;/article&gt;<p>Главное у нас снова в CSS:</p>
45 .card { padding: 30px; background-image: url("../img/content-bg.jpg"); background-repeat: no-repeat; background-position: center; background-size: cover; }<ul><li>Чтобы даже при увеличении текста ничего не сломалось - применяем внутренний отступ (padding). Таким образом уходим от фиксированных размеров: контент можно менять, при этом блок и его фон будут подстраиваться.</li>
45 .card { padding: 30px; background-image: url("../img/content-bg.jpg"); background-repeat: no-repeat; background-position: center; background-size: cover; }<ul><li>Чтобы даже при увеличении текста ничего не сломалось - применяем внутренний отступ (padding). Таким образом уходим от фиксированных размеров: контент можно менять, при этом блок и его фон будут подстраиваться.</li>
46 <li>Устанавливаем background-repeat в no-repeat. По умолчанию применяется repeat, но с ним фоновая картинка повторяется, пока не заполнит собой блок, а нам такого не нужно.</li>
46 <li>Устанавливаем background-repeat в no-repeat. По умолчанию применяется repeat, но с ним фоновая картинка повторяется, пока не заполнит собой блок, а нам такого не нужно.</li>
47 <li>Задаём background-position: center - выравниваем картинку по центру контейнера (как по вертикали, так и по горизонтали).</li>
47 <li>Задаём background-position: center - выравниваем картинку по центру контейнера (как по вертикали, так и по горизонтали).</li>
48 <li>А теперь самое важное - масштабируем фон. Задаём свойству background-size значением cover. Это и позволит нашей картинке подстроиться под размеры блока (её ширина или высота будет равняться ширине или высоте блока, а пропорции сохранятся).</li>
48 <li>А теперь самое важное - масштабируем фон. Задаём свойству background-size значением cover. Это и позволит нашей картинке подстроиться под размеры блока (её ширина или высота будет равняться ширине или высоте блока, а пропорции сохранятся).</li>
49 </ul><p>Вот мы и сделали фон адаптивным.</p>
49 </ul><p>Вот мы и сделали фон адаптивным.</p>
50 - <p>* Решением суда запрещена "деятельность компании Meta Platforms Inc. по реализации продуктов - социальных сетей Facebook и Instagram на территории Российской Федерации по основаниям осуществления экстремистской деятельности.</p>
 
51 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
50 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>