Школа
Веб-разработка

Трюк: не верстать сложную типографику

Игорь Петров
10 апр 2025
👁 800   🗩3
Веб-разработка

Трюк: не верстать сложную типографику

Игорь Петров
10 апр 2025
👁 800   🗩3
Игорь Петров
Разработчик, преподаватель Школы бюро
Полезно
 13
13
Непонятно
  
Войдите в Бюросферу, чтобы голосовать

Иногда нет времени или возможности верстать сложную типографику. Например, подогнанные дизайнером вручную заголовки с нестандартным шрифтом:

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

Можно сделать заголовок картинкой, но это плохо для поисковых роботов и программ чтения с экрана. Особенно когда речь о заголовке первого уровня h1, на который поисковики смотрят особенно внимательно.

<img class="fakeHeadingImg" src="./fake-heading.svg" alt="Красивый заголовок: переговоры и отношения с клиентами" aria-hidden="true">

Трюк. Разместите поверх картинки визуально скрытый «честный» заголовок. Поставьте текст как можно точнее по картинке, чтобы выделение текста курсором выглядело адекватно.

<div class="fakeHeading">
  <!-- По возможности используйте СВГ, он почти ничего не весит и не мылится при масштабировании -->
  <img class="fakeHeadingImg" src="./fake-heading.svg" alt="Красивый заголовок: переговоры и отношения с клиентами" aria-hidden="true">

  <h1 class="fakeHeadingHidden">
    Переговоры <br>
    и отношения <br>
    с клиентами
  </h1>
</div>
.fakeHeading {
  max-width: 100%;
  position: relative;
  overflow: hidden; /* На всякий случай, чтобы текст настоящего заголовка не протёк за пределы модуля */
}

.fakeHeadingImg {
  display: block;
  width: 100%;
}

.fakeHeadingHidden {
  position: absolute;
  top: 0;
  left: 0;
  font-size: 5vw;

  /* Подгоняем текст по к картинке */
  margin: 0;
  text-transform: uppercase;
  font-size: 12.2vw;
  line-height: 1.05;
}
Переговоры
и отношения
с клиентами

И скройте текст, сделав его прозрачным.

<div class="fakeHeading">
  <!-- По возможности используйте СВГ -->
  <img class="fakeHeadingImg" src="./fake-heading.svg" alt="Красивый заголовок: переговоры и отношения с клиентами" aria-hidden="true">

  <h1 class="fakeHeadingHidden">
    Переговоры <br>
    и отношения <br>
    с клиентами
  </h1>
</div>
.fakeHeading {
  max-width: 100%;
  position: relative;
  overflow: hidden; /* На всякий случай, чтобы текст настоящего заголовка не протёк за пределы модуля */
}

.fakeHeadingImg {
  display: block;
  width: 100%;
}

.fakeHeadingHidden {
  position: absolute;
  top: 0;
  left: 0;
  font-size: 5vw;
  color: transparent;

  /* Подгоняем текст по к картинке */
  margin: 0;
  text-transform: uppercase;
  font-size: 12.2vw;
  line-height: 1.05;
}
Переговоры
и отношения
с клиентами

Этот трюк иногда может сэкономить кучу времени и нервов, без потери качества страницы. А ещё может сэкономить деньги: веб‑лицензия на шрифт обычно дороже и заморочнее, чем десктопная.

Опасность. Используйте трюк исключительно для дублирования текста, содержащегося на картинке. Намеренное скрытие текста от пользователей называется гостингом (ghosting) и сурово наказывается поисковиками, вплоть до исключения сайта из поисковой выдачи.

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

Веб‑разработка
Полезно
 13
13
Непонятно
  
Войдите в Бюросферу, чтобы голосовать
Отправить
Поделиться
Поделиться
Запинить
Твитнуть

Комментарии

Когда текст сделан картинкой, её alt должен содержать тот же текст и ничего лишнего. «Красивый заголовок:» — лишнее.

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

При выделении, скрытый текст проявляется поверх джипега, и, кажется, это некрасиво. См. картинку № 1.

Скрытый текст останется скрытым при выделении, если в псевдоклассе ::selection явно прописать прозрачный цвет текста. Важно не забыть вручную задать выделение фона, потому что у прозрачного текста нету системного выделения. Вот код, который заработает в инспекторе стилей на этой странице:

.exFakeHeadingReal.bureausans.transparent::selection {
color: transparent;
background‑color: color‑mix(in srgb, var(‑‑keyColor) 50%, transparent);
}

В результате получится как на картинке № 2

Колор‑микс нужен, чтобы выделение фона было полупрозрачным — именно так себя ведёт системное выделение фона. Да и вообще, так выглядит лучше. Если не сделать полупрозрачно, получится как на картинке № 3.

Когда‑то очень давно я не делал текст невидимым, а оставлял его нормальным, — если вдруг не появится картинка, текст всё равно останется. Картинку делал фоном для span внутри и поднимал над текстом.

<h1 class="logo">Dепрессивный bLOG&nbsp;— личный сайт.<span></span></h1>

Картинки, её alt и отсутствие alt никого не смущает. Скринридер текст читает. А с выделением проблемы: текст либо не выделяется, либо выделяется сразу весь. Но для логотипа было нормально :‑)

Цель рубрики — обсуждение вопросов дизайна, веб-разработки, переговоров, редактуры и управления.
Комментарии модерируются. Мы публикуем комментарии, которые добавляют к уже сказанному новые мысли и хорошие примеры.

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