Организация файлов и папок
Структурируйте точки входа CSS, таблицы стилей компонентов и файлы конфигурации так, чтобы сохранять ясность по мере роста проектов за пределами одного файла.
«Организация файлов и папок» — бесплатный урок Tailwind CSS Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Tailwind CSS Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Tailwind CSS Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Why File Organization Matters
As Tailwind projects grow, the number of files involving CSS-related configuration — the Tailwind config, PostCSS config, global stylesheets, and component-level CSS — multiplies. Without a clear structure, these files scatter across the project and become hard to find. Good file organization makes it immediately obvious where to add new values, where global overrides live, and which CSS belongs to which component.
Root-Level Config Files
Config files that affect the entire build — tailwind.config.js, postcss.config.js, and .prettierrc — live at the project root alongside package.json. They are root-level because build tools discover them by convention. Never nest them inside src/ unless your toolchain explicitly supports non-root config discovery.
my-project/
├── tailwind.config.js # ← root level
├── postcss.config.js # ← root level
├── .prettierrc # ← root level
├── package.json
├── src/
│ ├── styles/
│ │ └── globals.css # @tailwind directives
│ └── components/The Styles Directory
Place all CSS files inside a dedicated src/styles/ directory. The main entry point is globals.css, which contains the three @tailwind directives, @layer overrides for base elements, and imports for any additional stylesheets. Component-specific CSS goes in separate files like button.css or prose-overrides.css, imported into globals.css.
src/styles/
├── globals.css # main entry: @tailwind base/components/utilities
├── base.css # @layer base: html, body, heading resets
├── components.css # @layer components: .btn, .card, .badge
├── utilities.css # @layer utilities: custom utility helpers
└── prose-overrides.css # @tailwindcss/typography customizationsAnatomy of globals.css
The globals.css file is the entry point imported into your application's root. It declares the three Tailwind directives in order, then imports any additional stylesheets. Avoid putting custom styles directly in this file beyond the directives — keep custom layer declarations in their own files that are imported here for clarity.
/* src/styles/globals.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Import custom layer files */
@import './base.css';
@import './components.css';
@import './utilities.css';Co-Locating Component CSS
For component-based frameworks like React or Vue, you can co-locate a small CSS file alongside the component file when the styles are tightly coupled. However, in Tailwind projects this is rare since most styling lives in class names directly in the markup. Reserve co-located CSS only for styles that genuinely cannot be expressed with utilities — such as complex :focus-within selectors or @keyframes.
src/components/
├── Button/
│ ├── Button.tsx
│ └── Button.module.css # Only if truly needed beyond Tailwind
├── Card/
│ ├── Card.tsx
│ └── Card.test.tsx
└── Modal/
└── Modal.tsx # No CSS file — pure Tailwind utilitiesSeparating Theme Extensions
When the tailwind.config.js grows large, extract the theme.extend object into a separate file like theme/extend.js. This keeps the root config file short and readable, while the theme extension file can grow as long as needed. Import and spread the extension back in the main config.
// theme/extend.js
module.exports = {
colors: {
brand: { 50: '#eff6ff', 500: '#3b82f6', 900: '#1e3a8a' },
},
fontFamily: {
display: ['Inter', 'sans-serif'],
},
spacing: {
18: '4.5rem',
128: '32rem',
},
};
// tailwind.config.js
const themeExtend = require('./theme/extend');
module.exports = {
content: [...],
theme: { extend: themeExtend },
plugins: [...],
};Separating Plugin Configuration
If your project uses several Tailwind plugins and each requires significant configuration, extract plugin setups into their own files inside a plugins/ directory. Each file exports a configured plugin and is imported in the main config's plugins array. This makes it easy to see which plugins are active and to adjust their settings independently.
plugins/
├── typography.js # require('@tailwindcss/typography')({...})
├── forms.js # require('@tailwindcss/forms')({strategy:'class'})
└── custom-utils.js # custom plugin function
// tailwind.config.js
module.exports = {
plugins: [
require('./plugins/typography'),
require('./plugins/forms'),
require('./plugins/custom-utils'),
],
};Organizing Token Files
Design tokens — colors, typography, spacing — are best defined in a separate tokens/ directory rather than inline in the Tailwind config. Each category of tokens lives in its own file: tokens/colors.js, tokens/typography.js, tokens/spacing.js. These files can be shared with design tools, Storybook configurations, and the Tailwind config simultaneously.
tokens/
├── colors.js # { primary: '#3b82f6', surface: '#ffffff', ... }
├── typography.js # { fontFamily: { sans: ['Inter', ...] }, ... }
└── spacing.js # { 18: '4.5rem', 128: '32rem', ... }
// tailwind.config.js
const colors = require('./tokens/colors');
const typography = require('./tokens/typography');
module.exports = {
theme: {
extend: { colors, ...typography },
},
};Content Glob Patterns
Keep content glob patterns organized and readable. Group them by file type and location rather than writing one catch-all glob that scans too broadly. Comment each glob to explain which part of the project it covers. Maintain this list actively — remove old patterns when directories are renamed or removed, and add new patterns when new file types are introduced.
// tailwind.config.js
content: [
// Pages and layouts
'./src/pages/**/*.{js,ts,jsx,tsx}',
'./src/layouts/**/*.{js,ts,jsx,tsx}',
// UI components
'./src/components/**/*.{js,ts,jsx,tsx}',
// Public HTML files
'./public/**/*.html',
// Email templates (if any)
'./emails/**/*.{js,ts,jsx,tsx}',
],Naming Conventions for CSS Layers
When using @layer to add custom styles, follow a consistent naming approach. Use @layer base for element-level resets (e.g., a, h1, input), @layer components for multi-utility patterns with meaningful names (.btn, .card), and @layer utilities for single-purpose utilities not in Tailwind's default set. Never mix these responsibilities.
/* src/styles/base.css */
@layer base {
html { @apply scroll-smooth; }
h1 { @apply text-4xl font-extrabold; }
a { @apply text-blue-600 hover:text-blue-700; }
}
/* src/styles/components.css */
@layer components {
.btn { @apply rounded-lg px-4 py-2 font-semibold; }
}
/* src/styles/utilities.css */
@layer utilities {
.text-balance { text-wrap: balance; }
}README for Style Conventions
Document the file and folder structure in your project's README or a dedicated STYLE_GUIDE.md. Include a diagram of the src/styles/ directory, explain which file each kind of style goes in, and note the content glob maintenance responsibility. New developers should be able to understand where to add a new custom color or a new component class by reading a single page of documentation.
# CSS Architecture
## File Map
- `tailwind.config.js` — theme tokens, content globs, plugins
- `src/styles/globals.css` — entry point, @tailwind directives
- `src/styles/base.css` — element resets in @layer base
- `src/styles/components.css` — .btn, .card, .badge in @layer components
- `tokens/colors.js` — brand color palette
## Adding a new custom utility
Add to `src/styles/utilities.css` inside `@layer utilities { }`. Quick Check
Test your understanding of Tailwind CSS Mastery concepts from this lesson.
Lesson Recap
In this lesson you learned: keeping config files at the project root for toolchain compatibility, organizing styles into a src/styles/ directory with separate files per layer, and extracting theme tokens and plugins into dedicated files as the config grows. Next up we explore coexisting with legacy CSS in existing projects.
Часто задаваемые вопросы
Урок «Организация файлов и папок» бесплатный?
Да — полный текст урока «Организация файлов и папок» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Tailwind CSS Academy, подпишись на CoddyKit PRO. Курс Tailwind CSS Academy содержит 4 уроков всего.
Чему я научусь в уроке «Организация файлов и папок»?
Структурируйте точки входа CSS, таблицы стилей компонентов и файлы конфигурации так, чтобы сохранять ясность по мере роста проектов за пределами одного файла. Ты практикуешь Tailwind CSS Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Tailwind CSS Academy?
Предыдущий опыт не требуется. Tailwind CSS Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Организация файлов и папок»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Tailwind CSS Academy?
Да. Каждый урок Tailwind CSS Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Организация файлов и папок
- Совместная работа с устаревшим CSS
- CSS Modules и Tailwind
- Масштабирование Tailwind в монорепозиториях