На второй ступени Школы бюро дизайнеры и редакторы верстают ХТМЛ‑страницу по собственному дизайну. Преподаватель оценивает соответствие макету и качество кода.

Работы по ХТМЛ‑вёрстке студентов Школы бюро

В этом задании и правда можно получить плохую оценку за абсолютное позиционирование. Но не за сам абсолют, а за его неуместное использование. Разберём на примерах.

Как нельзя использовать абсолют

Абсолютное позиционирование вырывает элемент из потока, «кирпичной кладки» страницы, и ставит его строго по заданным координатам. Заманчиво выглядит вариант расставить абсолютом сразу все элементы на странице — быстро, с точностью до пикселя и не заморачиваясь с более сложными способами раскладки.

.page {
  position: relative;
}

.logo {
  position: absolute;
  top: 5px;
}

.nav {
  position: absolute;
  right: 0;
  top: 20px;
}

.heroImg {
  position: absolute;
  top: 70px;
}

.title {
  position: absolute;
  top: 465px;
}

.lead {
  position: absolute;
  top: 570px;
}

.text {
  position: absolute;
  top: 685px;
}

.footer {
  position: absolute;
  top: 900px;
}

Но вёрстка всего абсолютом радикально снижает гибкость страницы, её способность адаптироваться к разным размерам экранов и к изменению содержимого. Это критично для современного сайта.

Откроем «абсолютную» вёрстку на другом размере экрана и всё сломается — элементы приколочены намертво к своим координатам и не учитывают ширину экрана. А задавать координаты для каждого из тысяч возможных экранов — мартышкин труд.

Или классические ситуации: появился новый пункт меню, изменился заголовок и текст — и снова всё сломалось. Элементы ничего не знают друг о друге, налезают или наоборот создают дыры.

Некоторые генераторы и конструкторы сайтов создают «абсолютную» вёрстку. Но это сложные программы, генерирующие сотни строк кода автоматикой, учитывающие кучу нюансов и краевых ситуаций. Повторять такое вручную — гиблое дело. Скорее всего, вы получите нежизнеспособную вёрстку.

К перечисленному добавим проблемы при изменении масштаба в браузере, потенциальные проблемы с индексацией из‑за непродуманной структуры. А главное — получится громоздкий, бессвязный, непредсказуемый код с кучей «магических чисел». Поддержка и доработка такой вёрстки будет настоящим адом.

Некоторые генераторы и конструкторы сайтов создают «абсолютную» вёрстку. Но это сложные программы, генерирующие сотни строк кода автоматикой, учитывающие кучу нюансов и краевых ситуаций. Повторять такое вручную — гиблое дело. Скорее всего, вы получите нежизнеспособную вёрстку.

В Школе бюро дизайнеры и редакторы пока осваивают лишь базовые навыки вёрстки. Мы опускаем многие тонкости и нюансы, но пресекаем откровенно нежизнеспособные решения. В реальной жизни никому не нужен сайт без возможности нормального редактирования и выглядящий адекватно лишь на одном размере экрана. Именно такой сайт получится при вёрстке всего абсолютом. Это грубый трюк и, по сути, несделанная работа. Оценка соответствующая, даже если с помощью трюка получилось идеально попасть в макет.

Не верстайте все элементы страницы абсолютом. Изучите и используйте для раскладки блочную модель, флексбокс, гриды. Так вёрстка будет более гибкой, надёжной и расширяемой, её можно будет опубликовать и использовать для решения реальных задач.

Как можно использовать абсолют

Абсолют не возбраняется использовать в решении задач, для которых он и предназначен — вынуть элемент из потока и поставить по координатам, безотносительно окружающих элементов.

Например, расставить фрукты вокруг «Фрутоняни»:

<div class="hero">
  <img class="hero__apple" src="…">
  <img class="hero__product" src="…">
  <img class="hero__banana" src="…">
</div>
.hero {
  position: relative;
  padding: 72px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.hero img {
  /* Нормализация стандартных размеров img */
  display: block;
  width: 100%;
}

.hero__img {
  max-width: 240px;
}

.hero__apple {
  position: absolute;
  z-index: 2;
  max-width: 23%;
  left: -3%;
  top: -3%;
}

.hero__banana {
  position: absolute;
  z-index: 2;
  max-width: 45%;
  right: -7%;
  bottom: -5%;
}

Поставить текст поверх фотографии:

<div class="hero">
  <img src="…">

  <div class="hero__text">
    <h1>Electrolux</h1>
    <p>Для дома и офиса</p>
  </div>
</div>
.hero {
  position: relative;
}

.hero__text {
  position: absolute;
  left: 18px;
  bottom: 18px;
}

Electrolux

Для дома и офиса

Или сверстать мозолящий глаза счётчик сообщений:

<a href="#" class="hasBadge">
  Сообщения
  <span class="badge">3</span>
</a>
.hasBadge {
  position: relative;
}

.badge {
  position: absolute;
  left: 100%;
  bottom: 70%;
  width: 24px;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: rgb(227, 0, 22);
  color: #fff;
  text-align: center;
  line-height: 24px;
}

Сообщения3


P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.

Веб‑разработка
Отправить
Поделиться
Запинить

Рекомендуем другие советы