Вёрстка современных интерфейсов: опыт использования Shadcn/UI
Сталкивались с тем, что готовый UI-kit не вписывается в дизайн, а кастомизация превращается в переопределение стилей через !important? Material UI и Chakra UI добавляют тонны неиспользуемого кода, а SSR-поддержка требует отдельной настройки. Shadcn/UI решает эту проблему иначе: он не библиотека, а коллекция копируемых компонентов на Radix UI и Tailwind CSS. Весь код попадает в ваш репозиторий — вы контролируете каждый пиксель.
Наша команда внедряет Shadcn/UI с момента его выхода. За это время реализовали более 50 решений: от админ-панелей до лендингов с высокой конверсией. Один из клиентов, перейдя с Material UI, сэкономил около 150 000 руб. на переписывании кода — Shadcn/UI оказался в три раза легче по размеру бандла и не требовал дополнительных настроек для SSR. В другом проекте удалось сократить время разработки на 2 недели, что сэкономило 80 000 руб. на трудозатратах.
Почему Shadcn/UI быстрее других UI-библиотек?
Главная проблема больших UI-фреймворков — избыточность. Вы тянете 100+ компонентов, а используете 5-10. Shadcn/UI работает иначе: вы устанавливаете только то, что нужно. Это снижает размер bundle на 30–40% и улучшает Core Web Vitals — LCP падает на 15-20% по сравнению с Material UI. Доступность встроена в каждый компонент благодаря Radix UI, поэтому вам не нужно беспокоиться о ARIA-атрибутах.
Вторая проблема — кастомизация. В Shadcn/UI нет оверрайдов: вы правите исходный код компонента. Хотите сделать кнопку с градиентом? Добавьте строку в variant-объект. Нужна нестандартная типографика? Поменяйте CSS-переменные. При этом базовая доступность (ARIA-атрибуты, фокус, клавиатурная навигация) уже вшита.
Третья — тёмная тема. В Shadcn/UI она реализована через CSS-переменные: переключение класса dark на корневом элементе автоматически меняет цвета. Никаких дополнительных провайдеров или стилей.
| Критерий | Shadcn/UI | Material UI | Chakra UI |
|---|---|---|---|
| Размер bundle (минимальный) | 5-10 KB | 50+ KB | 20+ KB |
| Контроль кода | Полный | Через props/sx | Через props |
| SSR-поддержка | Из коробки | Отдельная настройка | Из коробки |
| Тёмная тема | CSS-переменные | ThemeProvider | ColorModeScript |
| Доступность (ARIA) | Встроена (Radix) | Частично | Встроена |
Как кастомизировать компоненты без потери обновлений?
Рассмотрим типовой кейс: лендинг для SaaS-продукта на Next.js 14 с TypeScript и Tailwind. Мы начинаем с инициализации Shadcn/UI:
npx shadcn@latest init CLI запрашивает стиль (default/new-york), базовый цвет и алиасы. Конфигурация записывается в components.json:
{ "$schema": "https://ui.shadcn.com/schema.json", "style": "new-york", "rsc": true, "tsx": true, "tailwind": { "config": "tailwind.config.ts", "css": "src/styles/globals.css", "baseColor": "slate", "cssVariables": true }, "aliases": { "components": "@/components", "utils": "@/lib/utils" } } Дальше добавляем нужные компоненты: button, card, dialog, input, form. Каждый файл появляется в components/ui/. Например, диалог с формой:
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; const ContactDialog = () => ( <Dialog> <DialogTrigger asChild> <Button>Связаться</Button> </DialogTrigger> <DialogContent> <DialogHeader> <DialogTitle>Оставьте заявку</DialogTitle> </DialogHeader> <form className="flex flex-col gap-4"> <input name="name" placeholder="Ваше имя" /> <input name="email" type="email" placeholder="Email" /> <Button type="submit">Отправить</Button> </form> </DialogContent> </Dialog> ); Кастомизация не требует переопределений: добавить новый вариант кнопки — правим button.tsx:
const buttonVariants = cva( 'inline-flex items-center justify-center ...', { variants: { variant: { default: '...', gradient: 'bg-gradient-to-r from-blue-600 to-purple-600 text-white hover:opacity-90', }, }, } ); Процесс работы над проектом
- Аналитика (1-2 дня): изучаем макеты, выделяем повторяющиеся UI-блоки, определяем необходимые компоненты.
- Проектирование (1 день): настраиваем тему (цвета, типографику, анимации), создаём базовый layout.
- Реализация (2-4 дня): интегрируем компоненты, адаптируем под дизайн, проверяем состояние загрузки/ошибки/пустые данные.
- Тестирование (1 день): проверяем доступность (скринридеры, клавиатура), адаптивность, производительность (Lighthouse 90+).
- Деплой (0.5 дня): настраиваем сборку, кеширование, подключаем аналитику.
Что входит в работу
- Исходный код всех компонентов с TypeScript и JSDoc.
- Файл
globals.cssс корректными CSS-переменными под ваш бренд. - Адаптивная вёрстка (mobile-first) с breakpoints.
- Тёмная тема (если нужно).
- Краткая документация: как добавить новый компонент, как обновить через
npx shadcn diff. - Обучение вашей команды (1 час созвон) — расскажем про best practices.
- Поддержка в течение 2 недель после сдачи.
Сроки и стоимость
| Тип проекта | Срок |
|---|---|
| Лендинг (до 5 блоков) | от 3 дней |
| Многостраничный сайт (10-15 страниц) | от 7 дней |
| Админ-панель (с формами, таблицами, графиками) | от 14 дней |
Стоимость рассчитывается индивидуально — зависит от количества компонентов и сложности кастомизации. Оценка бесплатна и занимает не более 24 часов. Закажите вёрстку на Shadcn/UI — мы гарантируем код без ошибок hydration, 100% соответствие макету и прохождение Core Web Vitals. Получите консультацию за 24 часа — свяжитесь с нами, чтобы обсудить ваш проект.







