Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 110новых вакансий за сутки·79 243вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании6 760
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 400 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python14 632
  • Облачные технологии11 077
  • QA вакансии3 282
  • Backend вакансии1 769
  • Инженер данных1 379
  • Продакт-менеджер819

Разработка

  • Android1 707
  • iOS1 580
  • AI вакансии842
  • Fullstack вакансии716
  • Frontend вакансии610
  • Mobile вакансии30

По стеку

  • Go8 031
  • Java5 182
  • Node.js1 640
  • Kotlin1 395
  • Rust1 333
  • .NET1 254
  • PHP541
  • C++384
  • C#353

DevOps и инфраструктура

  • Kubernetes6 326
  • Linux-инфраструктура4 784
  • DevOps вакансии4 584
  • Terraform / IaC3 487
  • Мониторинг и Observability1 598
  • CI/CD1 478
  • SRE494
  • Кибербезопасность242

Аналитика и данные

  • Data Scientist759
  • Аналитик данных739
  • Бизнес-аналитик680
  • Системный аналитик92

Другие направления

  • Проджект-менеджер327
  • UI/UX дизайн101
  • Ручное тестирование14

По регионам

  • Вакансии в США40 112
  • Вакансии в Европе16 478
  • Работа в России3 877
  • Вакансии в Канаде3 839

По формату

  • Удалённые вакансии64 386
  • Релокация в США40 296
  • Гибридная работа9 283
  • Офисная работа6 545

По уровню

  • Senior вакансии35 219
  • Middle вакансии16 676
  • Junior вакансии5 719

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Tailwind CSSВсе вопросы
Tailwind CSSSeniorПроектирование систем

Каковы лучшие практики организации Tailwind-классов в больших кодовых базах?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

В больших кодовых базах: стандартизировать порядок классов через prettier-plugin-tailwindcss, организовать компонентный слой через cva/class-variance-authority, ввести дизайн-токены вместо сырых значений, настроить ESLint-плагин для запрета антипаттернов.

1. Автоматическая сортировка классов

Самое высокоприоритетное правило: единый порядок классов в 100% файлов через prettier-plugin-tailwindcss:

// .prettierrc
{
  "plugins": ["prettier-plugin-tailwindcss"],
  "tailwindConfig": "./tailwind.config.js"
}

Плагин сортирует по официальному порядку Tailwind: positioning → display → spacing → sizing → typography → backgrounds → borders → effects → transitions → responsive.

Лучшие практики организации Tailwind-классов в больших кодовых базах

При 50+ компонентах и команде из нескольких разработчиков Tailwind требует архитектурных решений, чтобы кодовая база оставалась поддерживаемой.

2. Компонентный слой с class-variance-authority

// src/components/ui/badge.tsx
import { cva, type VariantProps } from 'class-variance-authority';
import { twMerge } from 'tailwind-merge';

const badgeVariants = cva(
  'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors',
  {
    variants: {
      variant: {
        default:     'border-transparent bg-primary text-primary-foreground',
        secondary:   'border-transparent bg-secondary text-secondary-foreground',
        destructive: 'border-transparent bg-destructive text-destructive-foreground',
        outline:     'text-foreground',
      },
    },
    defaultVariants: { variant: 'default' },
  }
);

interface BadgeProps
  extends React.HTMLAttributes<HTMLDivElement>,
    VariantProps<typeof badgeVariants> {}

export function Badge({ className, variant, ...props }: BadgeProps) {
  return (
    <div
      className={twMerge(badgeVariants({ variant }), className)}
      {...props}
    />
  );
}

3. Утилита cn() как стандарт слияния классов

// src/lib/utils.ts
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';

export function cn(...inputs: ClassValue[]): string {
  return twMerge(clsx(inputs));
}
// Использование — единый паттерн по всей кодовой базе
<div
  className={cn(
    'base-styles',
    isActive && 'active-styles',
    hasError && 'error-styles',
    className
  )}
/>

4. Структура директорий для UI-компонентов

src/
  components/
    ui/          // Примитивы: Button, Input, Badge, Card
    patterns/    // Составные: SearchBar, FilterPanel
    layouts/     // Layout-компоненты: PageLayout, Sidebar
  styles/
    globals.css  // @theme, @layer base
    tokens.css   // Дизайн-токены

5. ESLint для запрета антипаттернов

// eslint.config.js
import tailwind from 'eslint-plugin-tailwindcss';

export default [
  ...tailwind.configs['flat/recommended'],
  {
    rules: {
      'tailwindcss/no-custom-classname': 'error', // без произвольных классов без @theme
      'tailwindcss/no-contradicting-classname': 'error', // p-4 + p-8 одновременно
      'tailwindcss/enforces-shorthand': 'warn',   // px-4 py-4 → p-4
    },
  },
];

6. Ограничение использования @apply

@apply допустим только в globals.css для глобальных базовых стилей и в CSS Modules. В JSX/TSX-файлах — запрещён. Это предотвращает скрытые зависимости и замедление сборки.

7. Документация компонентов в Storybook

// Button.stories.tsx
import type { Meta, StoryObj } from '@storybook/react';
import { Button } from './Button';

const meta: Meta<typeof Button> = {
  component: Button,
  tags: ['autodocs'],
};
export default meta;

export const AllVariants: StoryObj = {
  render: () => (
    <div className="flex flex-wrap gap-4">
      <Button intent="primary">Primary</Button>
      <Button intent="secondary">Secondary</Button>
      <Button intent="destructive">Destructive</Button>
    </div>
  ),
};

Подводные камни

  • Отсутствие prettier-plugin-tailwindcss с первого дня: ретроактивное применение генерирует огромный diff без логических изменений.
  • Компоненты без className-пропса: нельзя кастомизировать на месте использования.
  • Дублирование вариантов вручную вместо cva: изменение дефолтного стиля требует grep по всему репозиторию.
  • Смешение twMerge и простой конкатенации строк в одной кодовой базе — конфликты классов в непредсказуемых местах.
  • Inline style={{}} рядом с Tailwind-утилитами для «сложных» значений — нарушение единственного источника истины.
  • Отсутствие lint-правил: разработчики добавляют произвольные значения (w-[347px]) вместо стандартных токенов.
  • Компонентная библиотека без экспорта типов вариантов (VariantProps) — потребители не видят доступные пропсы.
  • Storybook без PostCSS-конфигурации Tailwind не рендерит стили компонентов.

Частые вопросы на собеседовании

  • Что такое Tailwind CSS и что означает подход «utility-first»?
  • Как работает адаптивный дизайн в Tailwind? Объясните префиксы breakpoints (sm, md, lg, xl, 2xl).
  • Что такое массив content в конфигурации Tailwind и почему он важен?
  • В каких типах frontend-проектов Tailwind CSS даёт реальный выигрыш, а где будет избыточен или неудачен?

Типичные ошибки

  • Смешивать «организация Tailwind-классов» с похожим механизмом без критерия выбора.
  • Игнорировать риск: неверно оценить границы применения темы «организация Tailwind-классов» и получить хрупкое решение.
  • Показывать только синтаксис и не объяснять поведение в runtime или сборке.

Что проверяет интервьюер

  • Объясняет стандарты сортировки, токены, компоненты и ревью правил в больших командах.
  • Показывает на примере, как работает: лучшие практики включают Prettier-сортировку, компонентные variant APIs, ограничение arbitrary values, общий token layer и документацию паттернов для повторяемых интерфейсных решений.
  • Называет production-нюанс и граничный случай для темы «организация Tailwind-классов».

Как вы знаете этот вопрос?

Проверить себя по теме Tailwind CSS →

Источники

  • https://tailwindcss.com/blog/automatic-class-sorting-with-prettier
  • https://tailwindcss.com/docs/theme
  • https://tailwindcss.com/docs/styling-with-utility-classes
←Предыдущий вопросЧто такое Tailwind CSS и что означает подход «utility-first»?Следующий вопрос→Как работает адаптивный дизайн в Tailwind? Объясните префиксы breakpoints (`sm`, `md`, `lg`, `xl`, `2xl`).

Связанные темы

Tailwind CSSfrontend-architecturemaintainability