Перейти к содержимому

61. Best practices

Иллюстрация к уроку

Хорошо написанный CSS — это не просто стили, которые работают. Это код, который легко читать, поддерживать, масштабировать и совместно разрабатывать. В этом уроке мы рассмотрим ключевые практики, которые помогут вам писать более эффективный и надежный CSS.

Разделение вашей стилистики на небольшие, независимые и многоразовые компоненты является краеугольным камнем современных методик (например, BEM, OOCSS). Это позволяет избегать конфликтов и упрощает разработку.

/* Пример компонента "Карточка продукта" */
.product-card {
display: flex;
flex-direction: column;
padding: 1rem;
border: 1px solid var(--color-border-default);
border-radius: var(--border-radius-default);
margin-bottom: var(--spacing-md);
}
.product-card__image {
max-width: 100%;
height: auto;
margin-bottom: var(--spacing-sm);
}
.product-card__title {
font-size: var(--font-size-lg);
color: var(--color-text-heading);
margin-bottom: var(--spacing-xs);
}
.product-card__price {
font-weight: bold;
color: var(--color-primary);
}

CSS-переменные — мощный инструмент для управления значениями, такими как цвета, шрифты, отступы и размеры, из центрального места. Это упрощает брендирование, тематизацию и изменения в проекте.

:root {
--color-primary: #007bff;
--color-text-default: #333;
--color-text-heading: #222;
--color-border-default: #eee;
--font-size-base: 16px;
--font-size-sm: 0.875rem; /* 14px */
--font-size-md: 1rem; /* 16px */
--font-size-lg: 1.25rem; /* 20px */
--spacing-xs: 0.25rem;
--spacing-sm: 0.5rem;
--spacing-md: 1rem;
--spacing-lg: 1.5rem;
--border-radius-default: 4px;
}
body {
font-family: sans-serif;
color: var(--color-text-default);
font-size: var(--font-size-base);
}
button {
background-color: var(--color-primary);
color: white;
padding: var(--spacing-sm) var(--spacing-md);
border: none;
border-radius: var(--border-radius-default);
font-size: var(--font-size-md);
}

Забудьте о float и inline-block для основных макетов. Flexbox и Grid — это стандарты для построения сложных, гибких и отзывчивых раскладок.

/* Flexbox для навигационного меню */
.navbar {
display: flex;
justify-content: space-between; /* Элементы по краям */
align-items: center; /* Выравнивание по центру по вертикали */
padding: var(--spacing-md);
background-color: #f8f9fa;
}
.nav-list {
display: flex;
list-style: none;
margin: 0;
padding: 0;
gap: var(--spacing-md); /* Пространство между элементами */
}
/* CSS Grid для сетки карточек */
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: var(--spacing-lg);
padding: var(--spacing-lg);
}

Применяйте подход Mobile-First, начиная стилизацию с самых маленьких экранов, а затем добавляя медиа-запросы для больших. Используйте относительные единицы измерения (rem, em, %, vw/vh).

/* Mobile-First: стили для мобильных устройств по умолчанию */
body {
font-size: var(--font-size-base);
}
.product-grid {
grid-template-columns: 1fr; /* Одна колонка на мобильных */
}
/* Медиа-запрос для планшетов и десктопов */
@media (min-width: 768px) {
body {
font-size: var(--font-size-md); /* Чуть больше шрифт на больших экранах */
}
.product-grid {
grid-template-columns: repeat(2, 1fr); /* Две колонки на планшетах */
}
}
/* Медиа-запрос для десктопов */
@media (min-width: 1200px) {
.product-grid {
grid-template-columns: repeat(3, 1fr); /* Три колонки на десктопах */
}
}
  • Последовательность: Используйте единообразный порядок свойств (например, группируйте по функциям: box model, typography, visual).
  • Комментарии: Объясняйте сложные секции или логику.
  • Отступы и Переносы: Правильные отступы делают код более читаемым.
/* Комментарий: Общие стили для кнопок */
.btn {
/* Box Model */
display: inline-flex;
padding: var(--spacing-sm) var(--spacing-md);
margin: 0;
border: 1px solid transparent;
border-radius: var(--border-radius-default);
/* Typography */
font-family: inherit;
font-size: var(--font-size-md);
line-height: 1;
text-align: center;
text-decoration: none;
/* Visual */
background-color: var(--color-primary);
color: white;
cursor: pointer;
transition: background-color 0.2s ease-in-out;
/* Other */
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}

Типичные Ошибки, Которых Следует Избегать

Заголовок раздела «Типичные Ошибки, Которых Следует Избегать»
  • Чрезмерное использование !important: Усложняет отладку и переопределение стилей.
  • Глубокая вложенность селекторов: Особенно при использовании препроцессоров, приводит к неэффективным и труднопереопределяемым стилям.
  • “Магические” числа: Использование фиксированных пиксельных значений для отступов или размеров, которые не имеют логического обоснования и плохо масштабируются. Замените на переменные.
  • Дублирование кода: Повторное написание одних и тех же стилей для разных элементов.
  • Использование id для стилизации: id имеют очень высокую специфичность и должны использоваться для JavaScript, а не для CSS.

Создайте компонент “Alert” (предупреждение) используя:

  1. CSS Custom Properties для цветов фона и текста.
  2. Flexbox для выравнивания текста и иконки закрытия.
  3. Относительные единицы (rem) для отступов и размеров шрифта.
  4. Напишите стили для двух вариантов: .alert--success и .alert--error.

Мир CSS постоянно развивается. Продолжайте изучать новые свойства (например, :has(), container queries), методики и инструменты. Автоматизация (линтеры, форматеры) и тестирование вашего CSS также значительно повышают качество кода.

Попробуйте примеры в интерактивном редакторе: