Урок 2 из 8 · 20 мин · обновлено

HTML и CSS: вёрстка интерфейса

Как frontend-разработчик верстает страницу по макету: смысловая разметка HTML, блочная модель CSS, расположение элементов с помощью Flexbox и Grid.

HTML описывает смысл

Первое, что делает frontend-разработчик с макетом кофейни «Зерно», — размечает страницу HTML. Важно описывать смысл элементов, а не их вид:

HTML
<header>
  <a href="/" class="logo">Зерно</a>
  <nav>
    <a href="#menu">Меню</a>
    <a href="#contacts">Контакты</a>
  </nav>
</header>
<main>
  <h1>Кофе с собой за 5 минут</h1>
  <section id="menu">
    <h2>Меню</h2>
    <ul class="menu">
      <li class="drink">…</li>
    </ul>
  </section>
</main>

Теги header, nav, main, section выглядят как обычные блоки, но несут смысл. Поисковики понимают, где главное содержимое, программы экранного доступа позволяют незрячим людям сразу перейти к навигации, а другой разработчик быстро разберётся в коде.

Частая ошибка новичков — делать всё из div: кнопку из div, ссылку из div. Внешне похоже, но такую «кнопку» нельзя нажать с клавиатуры.

Блочная модель

Каждый элемент на странице — прямоугольник из четырёх слоёв:

  • content — содержимое: текст или картинка;
  • padding — внутренний отступ от содержимого до рамки;
  • border — рамка;
  • margin — внешний отступ до соседних элементов.
CSS
.drink {
  padding: 16px;
  border: 1px solid #e5ddd5;
  border-radius: 12px;
  margin-bottom: 12px;
}

Если в макете между текстом и краем карточки 16 пикселей, это padding, а если между карточками — margin или gap. Точная вёрстка начинается с умения отличить одно от другого.

Раскладка: Flexbox и Grid

Flexbox раскладывает элементы в одну линию — строку или столбец. Идеально для шапки: логотип слева, меню справа.

CSS
header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

Grid раскладывает по сетке из строк и колонок. Подходит для меню из карточек:

CSS
.menu {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

repeat(3, 1fr) означает «три колонки равной ширины». Как сделать, чтобы на телефоне карточки шли в одну колонку, — в уроке 4.

Работа с макетом

Дизайнер передаёт макет в Figma. Frontend-разработчик берёт оттуда точные значения: размеры шрифтов, цвета, отступы, скругления. Вёрстка «на глаз» почти всегда заметна — дизайнер увидит, что отступы плавают, а заголовки разного размера.

Подробно HTML и CSS разобраны в курсе «HTML и CSS» — если тема новая, начните с него.

Попробуйте сами. Напишите HTML для карточки напитка в меню «Зерна»: фото, название, описание в одну строку, цена и кнопка «В корзину». Используйте смысловые теги.

Пример ответа
HTML
<li class="drink">
  <img src="latte.jpg" alt="Латте в высоком стакане с рисунком на пенке">
  <h3>Латте</h3>
  <p>Эспрессо и много молока</p>
  <p class="price">250 ₽</p>
  <button type="button">В корзину</button>
</li>

Карточка лежит в списке ul, у картинки есть описание в alt, название — заголовок, а кнопка — настоящий button.

Мини-тест · 4 вопроса

Проверьте себя

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

  1. Какой тег лучше использовать для кнопки «Оформить заказ»?

  2. Что такое padding в CSS?

  3. Карточки меню нужно разложить по сетке: три в ряд на компьютере. Что удобнее всего использовать?

  4. Зачем нужна смысловая разметка, если страница и так выглядит правильно?