кейсыmntn-landing-page

enобсудить задачуменюзакрыть

Пример вёрстки по чужому макету, Figma Community · 

Макет из Figma, который стал рабочей страницей

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

Первый экран собранной страницы — заголовок на фоне трёх слоёв гор

Что за задача

Обычная развилка: дизайн уже нарисован и оплачен, а сайта всё ещё нет. Макет живёт в Figma — его можно показать с экрана, но нельзя отправить ссылкой, открыть с телефона и тем более принимать на нём заявки. Между красивой картинкой и работающей страницей стоит отдельная работа, и делает её не дизайнер.

Эту работу я и показываю здесь. Заказчика у страницы нет: чтобы пример был честным, я взял чужой макет из Figma Community — тот, который вижу впервые и под который ничего не могу «подогнать задним числом». Дальше всё как в заказе: макет на входе, живая страница на выходе, ссылка открывается.

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

Что это дало

Оплаченный макет перестал жить в Figma и стал страницей, которую можно открыть по ссылке и показать кому угодно. Поддерживать её сможет любой, кто умеет верстать: обычные HTML и CSS, без сборщиков и админки, а правка цвета или отступа — это одно число в одном файле.

Где вёрстка обычно расходится с макетом

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

Шрифты заменили молча

В макете стоит платная гарнитура, у верстальщика её нет — и в вёрстку уходит «что-то похожее» из бесплатных. Заказчик не всегда назовёт причину, но видит, что стало дешевле.

Цифры сняты на глаз

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

Всё, что сложно, ушло картинкой

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

Один блок сверстан трижды

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

Телефона в макете не было

Часто дизайнер отдаёт только десктоп. Мобильную версию кто-то всё равно придумает — вопрос лишь в том, скажут вам об этом или поставят перед фактом, когда страница на телефоне развалится.

Что сделал

Сначала разобрал макет, потом начал верстать

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

Смысл простой: три секции из макета — не три куска вёрстки, а один блок с тремя наполнениями. Заголовок с чертой встречается четыре раза — значит, он описан один раз. Дальше правка цвета или отступа делается в одном месте и сразу везде, а не ищется по странице глазами.

Значения макета перенёс числами, а не на глаз

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

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

Проверил результат против координат макета

Готовую страницу я сверил с макетом не на глаз, а по координатам: где стоит каждый блок в Figma и где он оказался в браузере. Высота страницы сошлась до пикселя — 4600 точек и там, и там; расхождения по блокам не больше одной точки.

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

Сцену гор собрал слоями, а не одной картинкой

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

Отсюда и глубина: заголовок стоит между слоями, а не поверх плоской картинки. И отсюда же запас — заменить одну гряду или сдвинуть её можно, не пересобирая экран заново.

Три секции — один блок, вторая зеркальная

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

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

Секция 02: фотография слева, справа номер, заголовок, текст и ссылка «read more»
Зеркальная секция. В коде это тот же блок, что и две соседние, — отличается одной пометкой, а не отдельной копией.

Телефон и планшет придумал сам — и честно об этом сказал

В макете был только экран компьютера шириной 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 — отвечу сам.

Удобнее написать самому — в Telegram, в WhatsApp или на почту.

Не уверены, что с сайтом не так, — проверьте его бесплатно в Telegram: @jw_site_check_bot.

Кому потом всё принадлежит и что будет, если я пропаду, — ответы на главной.