Вёрстка Pixel Perfect: что это такое, зачем нужно и как делается
easy

Вёрстка Pixel Perfect: что это такое, зачем нужно и как делается

Когда идеален каждый пиксель

В вакансиях верстальщиков и веб-разработчиков часто указывают, что кандидат должен следовать подходу Pixel Perfect. Это значит, что нужно верстать страницы так, чтобы они пиксель в пиксель совпадали с макетом дизайнера.

Pixel Perfect очень любят заказчики и дизайнеры, а вот разработчики — не очень. Разберёмся, что это такое, как проверить свою вёрстку и всегда ли нужно верстать пиксель в пиксель.

Что такое Pixel Perfect

Вёрстка Pixel Perfect — это когда каждый элемент, картинка и текст на экране находятся на своём месте и имеют ровно тот размер и цвет, как было задумано в оригинальном дизайне веб-сайта или приложения. Проверить результат просто: если совместить с вёрстку макетом, то они должны совпадать до пикселя.

Иногда получается что-то вроде такого — верстальщик сделал страницу, но пиксели из макета и результата явно не совпадают:

Такая разница между свёрстанной страницей и макетом — не Pixel Perfect
❌ Такая разница между свёрстанной страницей и макетом — не Pixel Perfect

В отличие от доступности и кроссбраузерности, Pixel Perfect — это не стандарт, а дополнительное условие в работе. 

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

Сейчас, с развитием резиновой и адаптивной вёрстки, совпадение до пикселя уже не так важно, но подход Pixel Perfect всё равно используют для проверки макетов.

Как проверить Pixel Perfect

Обычно веб-разработчик получает от дизайнера макет в Figma — онлайн-программе для работы с графикой (или в любой другой программе для дизайна). Если вёрстка адаптивная, то макетов будет несколько — под разные разрешения экрана — и проверять придётся их все. Если нужно проверить мобильную версию, то в Figma выбираем соответствующий макет и сохраняем картинку через Export:

Как проверить Pixel Perfect

Дальше есть несколько способов сравнить макеты:

1. Сделать скриншот сайта и в графическом редакторе наложить его отдельным слоем на картинку с макетом дизайнера. Затем изменить прозрачность, чтобы видеть одновременно два изображения, и сравнить различия. Это самый неудобный вариант.

2. Использовать специальные инструменты:

  • X-Precise: скрипт, который подключается к странице и позволяет накладывать макет для проверки точности.
  • pixLayout: jQuery-плагин для наложения макета на страницу.

3. Использовать браузерное расширение: 

Самый удобный из способов — использовать браузерное расширение. Работают они примерно одинаково.  Для примера установим Pixel Perfect Pro и посмотрим, как в нём сравнивать макеты.

Проверка на Pixel Perfect

Ставим расширение, открываем страницу со свёрстанным макетом и вызываем расширение. Внизу появится плашка, где можно загрузить картинку для сравнения макетов:

Проверка на Pixel Perfect

После загрузки картинка наложится на страницу дополнительным прозрачным слоем:

Проверка на Pixel Perfect

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

На этом примере видны отклонения в расположении кнопки:

Проверка на Pixel Perfect

Что делают после таких проверок

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

  • Выравнивают ключевые элементы макета (логотипы, кнопки, баннеры и заголовки).
  • Подгоняют размеры блоков и отступы.
  • Исправляют несоответствия в цветах и шрифтах, особенно если используются кастомные шрифты.

Figma позволяет получить CSS-код для элементов дизайна. Если видны какие-то явные расхождения, нужно проверить, соответствует ли CSS-код из Figma тому, что используется в проекте. Могут быть ошибки в значениях font-size, line-height, color или padding, которые легко исправить, скопировав код из Figma.

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

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

Какие различия допустимы в Pixel Perfect

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

На отображение страницы влияет множество факторов:

  • тип устройства (ПК, ноутбук, планшет или смартфон);
  • размер экрана и окна браузера;
  • плотность пикселей экрана;
  • технология экрана (OLED, LCD и другие);
  • уровень масштабирования и размер шрифта по умолчанию;
  • производительность устройства и сети;
  • коррекция цвета (например, ночной режим).

Всё это приводит к различиям в отображении страницы на разных устройствах.

Расхождения страниц на ПК и Mac
Расхождения страниц на ПК и Mac. Источник: Toptal.com

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

При этом даже точное следование размерам в Figma не гарантирует идеальную вёрстку. В макете дизайнер может использовать оптическое выравнивание, чтобы элемент выглядел гармонично и естественно с точки зрения восприятия. Дизайнер может немного сместить текст или объект, чтобы он казался визуально выровнен по отношению к другим элементам.

А вот в вёрстке это будет выглядеть немного по-другому. Поскольку в CSS используется блочная модель, то элементы выравниваются по математическим параметрам. И такое выравнивание не всегда совпадает с тем, как элемент должен выглядеть. В результате элемент, который выглядел идеально в макете, будет выглядеть смещённым на странице:

Слева математическое выравнивание, справа — оптическое
Слева математическое выравнивание, справа — оптическое

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

Если у заказчика нет явного требования к Pixel Perfect, то важнее следовать практическому подходу: чтобы сайт был адаптивным, удобным для пользователя и выглядел гармонично на разных устройствах. 

Как верстать почти идеально

Есть разные приёмы вёрстки, которые помогут добиться максимально близкого к идеальному результата.

✅ В первую очередь, нужно разобраться с основными принципами дизайна, в том числе с унифицированными значениями отступов и точками перелома для адаптивной вёрстки. Например, если в макете указана ширина 5 px, стоит округлить её до 4 px для упрощения и стандартизации. Так же и с точками перелома: обычно в макете используют три основные (мобильная версия, планшет и десктоп), а кастомные нужно добавлять только при необходимости.

✅ Правильно задавать отступы. С ними часто возникает много проблем, и вот что здесь поможет:

  • использовать заранее определённые шаги (например, 4 px, 8 px, 16 px);
  • задать отступы от предыдущего элемента к следующему;
  • обнулять отступ у последнего элемента в группе;
  • выносить размеры отступов в переменные.

✅ Использовать CSS-переменные и миксины, чтобы было проще управлять стилями макета, а все параметры были согласованы. Миксины в препроцессорах позволяют создавать переиспользуемые шаблоны стилей, а переменные — не запутаться в повторяющихся значениях по макету.

✅ Для упрощения расчёта размеров элементов использовать модель box-sizing: border-box. В ней размеры элементов остаются фиксированными независимо от внутреннего отступа и границы.

Слева content-box, Справа — border-box
Слева content-box, Справа — border-box. В content-box внутренние отступы и границы увеличивают общий размер элемента, а в border-box размеры элемента остаются фиксированными, включая внутренние отступы и границы

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

* {
    margin: 0; /* Убирает внешние отступы (margin) по умолчанию для всех элементов */
    padding: 0; /* Убирает внутренние отступы (padding) по умолчанию для всех элементов */
    box-sizing: border-box; /* Включает padding и border в общую ширину и высоту элемента */
}

✅ При вёрстке добавлять временные линии или рамки для выравнивания элементов outline. Так можно сразу увидеть, как элементы располагаются относительно друг друга и соответствуют ли они макету. 

✅ Использовать относительные единицы em, rem, vw, vh, чтобы сохранить правильные пропорции элементов. Эти единицы позволяют масштабировать размеры элементов, отступы и шрифты в зависимости от размера шрифта родительского элемента em, корневого элемента rem, ширины окна vw или высоты окна vh

✅ Для мелких корректировок элементов и использовать transform: translate, что поможет снизить расхождения между математическим выравниванием и оптическим. Функция transform: translate не изменяет размеры и отступы элемента, а просто смещает его на нужное количество пикселей. Это позволяет сохранить элемент в общем потоке документа, не влияя на положение соседних элементов и не вызывая непредсказуемых изменений в макете.

✅ Настроить рендеринг шрифтов для точного соответствия макету. Например, для браузеров на базе WebKit вроде Chrome и Safari можно прописать такое CSS-свойство:

body {
     -webkit-font-smoothing: antialiased; /* Улучшает рендеринг шрифтов на экранах */
}

Здесь важно протестировать рендеринг шрифтов во всех целевых браузерах.

✅ Если сайт делается с помощью какой-то библиотеки, можно использовать специальные компоненты для более точной настройки расположения элементов и достижения пиксельной точности. 

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

Нужно ли следовать Pixel Perfect, если такого требования нет?

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

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

Редактор:

Инна Долога

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy