Пример вёрстки по чужому макету, Figma Community ·
Макет из Figma, который стал рабочей страницей
У заказчика на руках макет от дизайнера, а сайта нет: макет нельзя открыть в браузере и отправить ссылкой. Этот разрыв и закрывает вёрстка — страницу можно открыть прямо сейчас.

Что за задача
Обычная развилка: дизайн уже нарисован и оплачен, а сайта всё ещё нет. Макет живёт в Figma — его можно показать с экрана, но нельзя отправить ссылкой, открыть с телефона и тем более принимать на нём заявки. Между красивой картинкой и работающей страницей стоит отдельная работа, и делает её не дизайнер.
Эту работу я и показываю здесь. Заказчика у страницы нет: чтобы пример был честным, я взял чужой макет из Figma Community — тот, который вижу впервые и под который ничего не могу «подогнать задним числом». Дальше всё как в заказе: макет на входе, живая страница на выходе, ссылка открывается.
Смотреть на такую работу нужно с двух сторон. Первая — похоже ли. Вторая, которая всплывает через месяц: можно ли это менять, не переверстывая всё заново, и что произойдёт со страницей на телефоне, для которого макета никто не рисовал.
Что это дало
Оплаченный макет перестал жить в Figma и стал страницей, которую можно открыть по ссылке и показать кому угодно. Поддерживать её сможет любой, кто умеет верстать: обычные HTML и CSS, без сборщиков и админки, а правка цвета или отступа — это одно число в одном файле.
Где вёрстка обычно расходится с макетом
Собрать «в целом похоже» можно за вечер. Разница между «похоже» и «то же самое» набирается из мест, которые заказчик замечает не сразу, а когда уже поздно.
Шрифты заменили молча
В макете стоит платная гарнитура, у верстальщика её нет — и в вёрстку уходит «что-то похожее» из бесплатных. Заказчик не всегда назовёт причину, но видит, что стало дешевле.
Цифры сняты на глаз
Отступы и кегли берутся приблизительно, градиент подбирается пипеткой. По отдельности мелочь, вместе — страница, которая «вроде та, но не та».
Всё, что сложно, ушло картинкой
Сложную сцену проще вклеить одним скриншотом, чем разложить на слои. Весит больше, тянется хуже, а текст внутри картинки не найдёт ни поиск, ни человек.
Один блок сверстан трижды
Три одинаковые секции копируются целиком. Потом правка в одной из них — и страница расходится сама с собой, потому что две другие поправить забыли.
Телефона в макете не было
Часто дизайнер отдаёт только десктоп. Мобильную версию кто-то всё равно придумает — вопрос лишь в том, скажут вам об этом или поставят перед фактом, когда страница на телефоне развалится.
Что сделал
Сначала разобрал макет, потом начал верстать
До первой строки кода я прошёл макет целиком и записал, из чего он состоит: какие секции, где повторяются одни и те же блоки, что дешевле отдать картинкой, а что собрать кодом. Эта карта лежит в репозитории отдельным файлом.
Смысл простой: три секции из макета — не три куска вёрстки, а один блок с тремя наполнениями. Заголовок с чертой встречается четыре раза — значит, он описан один раз. Дальше правка цвета или отступа делается в одном месте и сразу везде, а не ищется по странице глазами.
Значения макета перенёс числами, а не на глаз
Все цвета, кегли, начертания, отступы и размеры вынесены в один файл и взяты из макета как есть. Даже градиент за первым экраном пересчитан из значений Figma, а не подобран пипеткой.
Там же прямо помечено, что пришло из макета, а что я вывел сам, потому что в макете этого не было. Через полгода это спасает: видно, какие числа трогать нельзя, а какие — мои решения и обсуждаются.
Проверил результат против координат макета
Готовую страницу я сверил с макетом не на глаз, а по координатам: где стоит каждый блок в Figma и где он оказался в браузере. Высота страницы сошлась до пикселя — 4600 точек и там, и там; расхождения по блокам не больше одной точки.
Для заказчика это значит одно: открыв страницу рядом с макетом, он увидит макет, а не «интерпретацию верстальщика». Два места, где я сознательно отступил от макета, записаны в репозитории вместе с причиной — например, размер одной надписи в шапке приведён к остальным пунктам меню, потому что в макете он выпадал на один пункт из четырёх.
Сцену гор собрал слоями, а не одной картинкой
Первый экран в макете — три гряды гор одна за другой и два затемнения поверх. Их можно было вклеить единым снимком и забыть; вместо этого каждый слой живёт отдельно, и вся сцена тянется от ширины окна.
Отсюда и глубина: заголовок стоит между слоями, а не поверх плоской картинки. И отсюда же запас — заменить одну гряду или сдвинуть её можно, не пересобирая экран заново.
Три секции — один блок, вторая зеркальная
Секции 01, 02 и 03 устроены одинаково: номер, заголовок, текст, ссылка и фотография. У второй фотография слева, а не справа — в вёрстке это не отдельная копия, а переключатель у того же блока.
Порядок чтения при этом не меняется: тот, кто слушает страницу голосом или идёт по ней с клавиатуры, в обеих секциях получает сначала заголовок, потом текст. Местами меняется только картинка.

Телефон и планшет придумал сам — и честно об этом сказал
В макете был только экран компьютера шириной 1920 точек: ни планшета, ни телефона, ни единой подсказки, как всё это должно себя вести на узком экране. Раскладку для них я собрал сам.
На телефоне страница идёт одной колонкой: меню уходит второй строкой, заголовок остаётся поверх гор, фотография встаёт над текстом, вертикальные подписи разворачиваются в обычные. На планшете места хватает на две колонки, и фотография чередуется — слева, справа, слева, — тем же переключателем, что и на десктопе. Геометрия десктопа при этом не сдвинулась ни на точку.
Это не «как в макете» — этого в макете нет. Поэтому и в репозитории, и в передаче работы записано прямым текстом: телефон и планшет придуманы и подлежат согласованию с дизайнером. Такие вещи заказчик должен получать списком, а не обнаруживать сам через месяц.

Добавил анимацию появления — и пометил её как добавку
При прокрутке карточки секций выезжают: первая слева, вторая справа, третья снова слева. Это единственное место, где на странице работает скрипт — тридцать строк, которые только следят, что карточка показалась на экране.
Сделано с двумя оговорками, и обе важнее самой анимации. Если человек отключил движение в настройках устройства — анимации не будет, карточки просто стоят на месте. Если скрипт не загрузился или отключён — то же самое: страница остаётся читаемой, ничего не пропадает. Анимация здесь украшение, а не условие, при котором сайт работает.
В макете её тоже нет, поэтому она идёт в том же списке на согласование, что и раскладки для телефона.
Тексты перенёс дословно, вместе с опечатками
В исходном макете есть опечатки — в одном абзаце лишняя буква, в другом две точки вместо одной. Я перенёс их как есть и вынес отдельным списком на согласование.
Верстальщик, который молча «поправляет» тексты, опаснее опечатки: сегодня он исправил очевидное, завтра — цену или название услуги. Правки в текст вносит тот, кому они принадлежат.
Сделал то, чего в макете не рисуют
Макет не показывает, что происходит при наведении, как выглядит страница для того, кто ходит по ней с клавиатуры, и что делать с анимацией, если человек её отключил в системе. Всё это решает верстальщик.
Каждая картинка получила текстовое описание, кнопки и иконки — подписи для тех, кто не видит экран, у ссылок появилась заметная рамка при переходе клавиатурой, а плавная прокрутка отключается, если в настройках устройства движение выключено.
Есть макет от дизайнера и нужна такая же страница — открытая по ссылке?
НаписатьЧто в эту работу не входило
Это чистая вёрстка макета, и важно назвать границу прямо, а не оставить заказчика её угадывать.
Здесь нет ни одной из работ, которые делаются после вёрстки и обычно стоят отдельно: страница не оптимизирована под скорость, не подготовлена к поиску, не размечена под ответы ИИ-ассистентов, к ней не подключены ни аналитика, ни формы, ни платежи.
Часть этого видно сразу. Нет заголовков и картинки для репостов: отправите ссылку в мессенджер — увидите голый адрес. Нет разметки, по которой поиск понимает, что это за страница и о чём. Нет иконки в закладках.
Отдельная история — адреса ссылок: в макете их не было ни одного. Оставлять на живой странице ссылки в никуда нельзя, поэтому решение я принял сам и записал его в репозитории: пункты меню ведут к разделам страницы, иконки соцсетей — на Instagram и Twitter, а «read more», аккаунт и ссылки в подвале открывают страницу-заглушку «Coming soon» с возвратом на основную страницу. Под реальный заказ это первый вопрос к заказчику, а не место для моей фантазии.
Кое-что вышло неплохо само собой: на первую загрузку уходит около 0,7 мегабайта, потому что фотографии отданы в лёгком современном формате и подгружаются по мере прокрутки. Но специально скорость никто не мерил и не выжимал — это отдельная работа со своим результатом, и выдавать удачный побочный эффект за неё я не буду.
Вёрстка отвечает на вопрос «выглядит ли и работает ли как макет». На вопросы «находят ли страницу», «быстро ли она открывается на слабом интернете» и «что с неё приходит в заявках» отвечают следующие слои работы. Они делаются поверх этой и видны в других кейсах.
Что можно проверить прямо сейчас
Кейс без цифр аналитики: страницу никуда не продвигали, посетителей у неё нет и считать нечего. Зато проверяется она вся, целиком и без моего участия.
Открыть и сравнить
Страница лежит по ссылке с первого экрана. Исходный макет — общедоступный файл Figma Community; открыть их рядом и сверить может кто угодно.
Сузить окно
Достаточно потянуть край браузера или открыть ссылку с телефона, чтобы увидеть, как раскладка перестраивается — и как выглядят те самые телефон с планшетом, которых в макете не было.
Посмотреть код
Репозиторий открыт целиком: вёрстка, значения макета, карта разбора и журнал работы. Любой разработчик заказчика может оценить, что ему передадут.
Прочитать историю
В истории изменений видно, что и в каком порядке собиралось — секция за секцией, с замером после каждой.
Сроки: вся страница собрана за один заход утром 15 сентября 2026 — первая запись в 7:21, последняя в 10:29, это видно в истории репозитория. Вечером того же дня добавились планшетная раскладка, анимация и адреса ссылок — это уже доработка сверх макета, а не сама вёрстка. Оговорка обязательна: макет был один, десктопный, без интеграций, без текстов на согласовании и без работ из раздела выше. Под реальный заказ срок считается от объёма, а не от этой строки.
Что это даёт заказчику дальше
Кто потом это поддерживает?
Кто угодно, кто умеет верстать. Это обычные HTML и CSS без сборщиков, библиотек и админки: значения собраны в одном файле, секции разложены по отдельным. Разработчику заказчика не придётся разбираться в моих привычках, чтобы поменять цвет кнопки.
А если дизайнер пришлёт правку?
Правка цвета, кегля или отступа — это одно число в одном файле, а не поиск по всей странице. Новая секция собирается из готовых блоков: заголовок с чертой, ссылка со стрелкой и карточка с фотографией уже описаны.
Это можно наполнить содержимым?
Да, это следующий шаг. Сейчас тексты и фотографии стоят прямо в странице, как в макете. Если нужен блог или каталог, та же вёрстка становится шаблоном, а содержимое переезжает в файлы или в админку — переверстывать при этом нечего.
Где такая страница живёт?
Эта — на бесплатном хостинге GitHub, и ей этого достаточно: страница статическая, без сервера и базы. Свой домен подключается сюда же, платить — только за домен.
Что переносится на настоящий заказ?
Порядок работы целиком: разбор макета до вёрстки, значения числами вместо глазомера, повторяющееся — одним блоком, замер против координат макета в конце и список того, чего в макете не было, — отдельным письмом заказчику. Меняется только сам макет.
Как это устроено технически
HTML и CSS плюс один скрипт scripts/reveal.js (~30 строк) исключительно
на анимацию появления; сборщика и зависимостей нет, страница работает как
есть, из папки. Токены макета — styles/tokens.css, база и примитивы —
styles/main.css, по файлу на секцию в styles/sections/, страница-заглушка
soon.html со своим styles/pages/soon.css. Разбор макета и журнал —
docs/design-map.md и docs/progress.md.
Раскладка на flex и grid, зеркальная секция — модификатор с order, порядок
в разметке не меняется. Сцена гор масштабируется от ширины страницы через
container query units (cqw) с нижним пределом 900px, слои разложены
по z-index в порядке Figma; на ширине от 1920px заголовок уходит под горы,
как в макете, ниже — поверх, иначе горы его перекрывают. Градиент пересчитан
из gradientHandlePositions: −19.7°, стопы 31.1% и 108.9%.
Мобильный-первым, брейкпоинты 768 / 1280 / 1920: до 767 одна колонка,
768–1279 две колонки с чередованием фотографии через тот же
feature--reverse и футер в две колонки, от 1280 — значения макета.
Значения десктопа взяты из макета, остальные выведены и помечены как таковые.
Анимация: скрипт ставит класс на <html> и через IntersectionObserver
помечает карточку, когда видно 15% её высоты; нечётные выезжают слева,
чётные справа, сдвиг 40px на телефоне и 80px шире, 800 мс, переход назначен
только на появление. При prefers-reduced-motion скрипт не делает ничего. Фотографии — picture
с webp и джипегом-запасным, srcset на 1x и 2x, loading="lazy" ниже
первого экрана. Иконки — SVG-спрайт с currentColor. Шрифты — локальные
woff2 с font-display: swap и предзагрузкой двух начертаний первого экрана.
Доступность: семантические секции, aria-label у навигаций и иконок,
:focus-visible, prefers-reduced-motion (и плавная прокрутка, и анимация
карточек). Внешние ссылки — с rel="noopener noreferrer", заглушка закрыта
от индексации noindex.
Публикация — GitHub Pages из ветки, сборка не нужна. Репозиторий открыт для ознакомления: макет, шрифты и фотографии принадлежат их правообладателям и лежат там только ради демонстрации.
Кто это делал
За jw-dev.pro — я один, а не студия и не агентство. Значит, вы говорите напрямую с тем, кто делает: без менеджера, без брифа через третьи руки и без передачи проекта другому исполнителю посреди работы.
Часовой пояс UTC+7 — как в Бангкоке и Ханое. Делаю сайты, Telegram-ботов и автоматизацию — задача редко заканчивается страницей, обычно её нужно связать с тем, что у вас уже работает.
Чем дальше, тем реже задача звучит как «сделать сайт». Одному нужно, чтобы цена правилась в одном месте, а не на двадцати страницах. Другому — чтобы канал выходил без него. Третьему — чтобы весь прайс лежал внутри Telegram, куда его клиенты и так заходят каждый день. Поэтому список работ у меня открытый: если вашей задачи в нём нет, это ещё не значит, что она не решается.
Кейсы я пишу так, чтобы их можно было проверить: что было, что сделано и чем это измерено. Есть аналитика — ставлю её цифры и период, за который они сняты; мерить рано — так и пишу. «Увеличил продажи» вы тут не найдёте: это не результат, а обещание.
Нужно похожее?
Сайт, бот или то, что сейчас делается руками, — расскажите, что у вас происходит, и я скажу, решается это или нет.
Такая работа — услуга «Вёрстка сайта по макету из Figma».
Заявка не ушла
Текст не пропал — вернитесь назад и попробуйте ещё раз. Или напишите напрямую: в Telegram, в WhatsApp или на почту.
Удобнее написать самому — в Telegram, в WhatsApp или на почту.
Не уверены, что с сайтом не так, — проверьте его бесплатно в Telegram: @jw_site_check_bot.
Кому потом всё принадлежит и что будет, если я пропаду, — ответы на главной.