Как сверстать карточку пользователя

Эта статья основана на одном из практических заданий verstaem.online.

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

Перейти к заданию

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

Создаем HTML-разметку

Сначала создадим базовую HTML-разметку с помощью Emmet. Для этого достаточно ввести ! и нажать Tab. Обратите внимание на атрибут lang. Поскольку основной контент страницы написан на русском языке, здесь используем значение ru.

<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Карточка пользователя</title>
  </head>
  <body>
  </body>
</html>

Переходим к карточке. Сразу возникает вопрос, а каким же тегом сверстать саму карточку? Я предлагаю тег <article>. Этим тегом делают законченный и независимый контент, такой как карточки товара, виджеты погоды и т. д. И в данном случае нам он тоже подойдет. А вот внутри все просто — одно изображение и парочка дивов. Почему дивов? Потому что специальных тегов ни для имени, ни для позиции пользователя нет. И здесь небольшой нюанс — это конечно обертки. Весь текст вместе с кнопкой дополнительно обернут в <div>, что дает нам возможность отдельно представить текст от картинки.

<article class="user-card">
  <img src="img/avatar.png" alt="Антон Смирнов" class="user-card__avatar">
  <div class="user-card__text">
    <div class="user-card__name">Антон Смирнов</div>
    <div class="user-card__position">UX/UI дизайнер</div>
    <a href="#" target="_blank" class="user-card__link">Написать</a>
  </div>
</article>

Здесь важный момент — это атрибут alt. Практически всегда в работах верстальщиках его либо не пишут вообще, либо пишут, но не заполняют. И это большая ошибка. alt нужен как для поисковых роботов, так и для скринридеров — программ, которые читают сайт. Незрячий пользователь не видит сайт, но может услышать это описание, поэтому оно важно. Не забывайте его указывать.

Добавляем стили

Подключим файл стилей через <link> и зададим несколько базовых правил. Для этого задания достаточно переопределить box-sizing, сбросить отступ у <body> и подключить шрифт Inter, который используется в макете.

* {
  box-sizing: border-box;
}

@font-face {
  font-family: "Inter";
  src: url("../fonts/InterRegular.woff2");
  font-display: swap;
  font-weight: 400;
}

body {
  margin: 0;
  padding: 20px;
  font-family: "Inter", sans-serif;
}

Теперь пишем стили непосредственно для карточки. Карточка состоит из изображения и текстового блока, поэтому именно здесь используем Flexbox. Также задаем внутренние отступы, скругление, рамку и цвет фона из макета. Обратите внимание, здесь нам лучше использовать display: inline-flex, а не flex, потому что нам не нужна карточка на всю ширину. Она будет иметь ширину контента.

.user-card {
  display: inline-flex;
  align-items: center;
  gap: 16px;
  border: 1px solid #2a2f37;
  border-radius: 20px;
  padding: 16px 24px 16px 16px;
  background: #1a1d22;
}

Далее — стили для изображения. Здесь нам стоит задать размеры, скругления (даже если исходное изображение уже скруглено, а также object-fit: cover. Такой набор стилей позволит сделать универсальное изображение, и если мы вставим туда любое другое — оно будет отображаться адекватно.

.user-card__avatar {
  display: block;
  border-radius: 100%;
  width: 72px;
  height: 72px;
  object-fit: cover;
}

Остались текстовые стили, здесь все очень просто останавливаться не будем. А вот ссылка — важнее. Здесь также стоит использовать flexbox, чтобы представить текст по центру. Также, стоит сбросить text-decoration, а также добавить transition для плавности, чтобы сделать hover. Это необязательно, но лучше сделать.

.user-card__link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-top: 12px;
  border-radius: 10px;
  padding: 8px 12px;
  font-weight: 400;
  font-size: 14px;
  color: #f3f4f6;
  text-decoration: none;
  background: #00447c;
  transition: background 0.3s;
}

.user-card__link:hover {
  background: #035496;
}

Теперь вы умеете создавать простую карточку пользователя с помощью Flexbox, выбирать подходящие HTML-теги и оформлять элементы по макету. Попробуйте изменить размеры карточки, добавить новую информацию или сверстать собственный вариант без подсказок.

Решение задачи

предыдущий пост следующий пост