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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python16 842
  • Облачные технологии13 724
  • QA вакансии3 439
  • Backend вакансии2 083
  • Инженер данных1 763
  • Продакт-менеджер1 196

Разработка

  • Android1 842
  • iOS1 687
  • Fullstack вакансии958
  • AI вакансии949
  • Frontend вакансии735
  • Mobile вакансии44

По стеку

  • Go8 619
  • Java6 377
  • Node.js1 968
  • .NET1 639
  • Kotlin1 597
  • Rust1 444
  • PHP670
  • C#650
  • C++538

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

  • Kubernetes7 591
  • DevOps вакансии5 863
  • Linux-инфраструктура5 413
  • Terraform / IaC4 162
  • CI/CD2 997
  • Мониторинг и Observability1 752
  • SRE558
  • Кибербезопасность424

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

  • Data Scientist1 087
  • Бизнес-аналитик910
  • Аналитик данных849
  • Системный аналитик148

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

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

По регионам

  • Вакансии в США45 355
  • Вакансии в Европе22 646
  • Вакансии в Канаде4 483
  • Работа в России3 902

По формату

  • Удалённые вакансии75 369
  • Релокация в США45 353
  • Гибридная работа12 002
  • Офисная работа7 033

По уровню

  • Senior вакансии42 326
  • Middle вакансии20 996
  • Junior вакансии6 757

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

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab139 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

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

Как интегрировать Tailwind CSS с CSS Modules или CSS-in-JS решениями?

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

Tailwind интегрируется с CSS Modules через @apply в .module.css-файлах или совместное использование в компоненте; с CSS-in-JS (Emotion, styled-components) — через twMerge или передачу className через cx(). Обе стратегии требуют осознанного выбора границ между системами.

Tailwind + CSS Modules

Наиболее распространённый сценарий — использование @apply в .module.css для создания именованных классов из utility-токенов:

/* Card.module.css */
.root {
  @apply flex flex-col gap-4 rounded-xl border border-gray-200 bg-white p-6 shadow-sm;
  @apply transition-shadow duration-200 hover:shadow-md;
}

.title {
  @apply text-lg font-semibold text-gray-900;
}

.badge {
  @apply inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium;
}

.badge--success { @apply bg-green-100 text-green-800; }
.badge--error   { @apply bg-red-100   text-red-800;   }
// Card.tsx
import styles from './Card.module.css';

interface CardProps {
  title: string;
  status: 'success' | 'error';
}

export function Card({ title, status }: CardProps) {
  return (
    <article className={styles.root}>
      <h2 className={styles.title}>{title}</h2>
      <span className={`${styles.badge} ${styles[`badge--${status}`]}`}>
        {status}
      </span>
    </article>
  );
}

Этот подход даёт читаемые имена классов в DevTools и инкапсуляцию стилей, сохраняя использование дизайн-токенов Tailwind.

Интеграция Tailwind CSS с CSS Modules и CSS-in-JS

Tailwind, CSS Modules и CSS-in-JS решают схожие задачи разными методами. Их совместное использование требует чёткого разграничения ответственности, иначе команда получает три конкурирующих стиля в одном проекте.

Прямое смешение в одном компоненте

CSS Modules для структурных/сложных стилей, Tailwind — для быстрых утилит:

import styles from './Layout.module.css';

export function Layout({ children }: { children: React.ReactNode }) {
  return (
    <div className={`${styles.container} mt-8 px-4`}>
      {children}
    </div>
  );
}

Tailwind + Emotion (CSS-in-JS)

С Emotion используют cx() для слияния классов или css-тег с Tailwind-переменными:

import { css, cx } from '@emotion/css';

const complexAnimation = css`
  animation: slideIn 300ms cubic-bezier(0.16, 1, 0.3, 1);
  @keyframes slideIn {
    from { transform: translateY(-8px); opacity: 0; }
    to   { transform: translateY(0);    opacity: 1; }
  }
`;

export function Tooltip({ children, label }: TooltipProps) {
  return (
    <div className="relative inline-block">
      {children}
      <div
        className={cx(
          'absolute bottom-full left-1/2 -translate-x-1/2 mb-2',
          'rounded-lg bg-gray-900 px-3 py-1.5 text-sm text-white shadow-lg',
          complexAnimation
        )}
      >
        {label}
      </div>
    </div>
  );
}

Tailwind + styled-components через tailwind-styled-components

import tw from 'tailwind-styled-components';

const StyledButton = tw.button<{ $primary?: boolean }>`
  inline-flex items-center rounded-lg px-4 py-2 font-medium transition-colors
  ${(p) => p.$primary ? 'bg-indigo-600 text-white hover:bg-indigo-700' : 'bg-gray-100 text-gray-900'}
`;

export function Button({ primary, children, ...props }) {
  return <StyledButton $primary={primary} {...props}>{children}</StyledButton>;
}

Разрешение конфликтов с tailwind-merge

При передаче className извне компонента возникают конфликты утилит (p-4 vs p-8). twMerge корректно разрешает их:

import { twMerge } from 'tailwind-merge';

function Card({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
  return (
    <div
      className={twMerge('rounded-xl bg-white p-6 shadow-sm', className)}
      {...props}
    />
  );
}

// Использование — p-6 будет заменён на p-10
<Card className="p-10 shadow-lg" />

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

  • @apply в .module.css работает только если PostCSS обрабатывает файл с Tailwind-плагином — не все конфигурации Webpack это делают.
  • Emotion SSR + Tailwind: без ServerStyleSheet или CacheProvider возможен FOUC.
  • Specificity войны: CSS Modules генерируют [hash]-классы со specificity 0-1-0, Tailwind — тоже 0-1-0. Порядок в <head> решает всё.
  • tailwind-styled-components не поддерживает Tailwind v4 — нужна проверка совместимости.
  • Два источника токенов (CSS-переменные Tailwind и тема Emotion ThemeProvider) расходятся без синхронизации.
  • Tree-shaking CSS-in-JS-стилей при SSG работает иначе, чем Tailwind PurgeCSS — лишние стили могут попасть в bundle.
  • DevTools показывают нечитаемые Emotion-хэши рядом с читаемыми Tailwind-классами — дебаг усложняется.

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

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

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

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

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

  • Объясняет границы utility-first подхода и интеграция с локальными стилями.
  • Показывает на примере, как работает: Tailwind обычно живет в className, а CSS Modules или CSS-in-JS оставляют для сложных scoped-правил, third-party overrides или runtime-динамики, которую нельзя выразить статическими utilities.
  • Называет production-нюанс и граничный случай для темы «Tailwind с CSS Modules или CSS-in-JS».

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

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

Источники

  • https://tailwindcss.com/docs/compatibility
  • https://tailwindcss.com/docs/styling-with-utility-classes
←Предыдущий вопросРасскажите о случае, когда вы улучшали performance, accessibility, testing или maintainability в проекте на Tailwind CSS.Следующий вопрос→Как организовать дизайн-токены и multi-brand theming в Tailwind v4?

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

Tailwind CSScss-architecturefrontend-architecture