Гид по технологиям

Вложенные стили в CSS

6 min read Вёрстка Обновлено 07 Jan 2026
Вложенные стили в CSS: практический гайд
Вложенные стили в CSS: практический гайд

Важно: нативная вложенность похожа на синтаксис препроцессоров, но поведение селектора отличается — обязательно применяйте & при ссылке на родителя.

Ключевые варианты запроса

  • вложенные стили в CSS
  • nested css
  • вложенность в CSS без препроцессора
  • & селектор в CSS
  • вложенные медиа-запросы

Введение

Человек, держащий логотип CSS3

Исторически CSS воспринимался как неудобный для масштабирования язык: отсутствовали переменные, функции и удобные структуры. Препроцессоры (Sass, Less, Stylus) добавили удобства — вложенность, миксины, циклы. Со временем сам CSS заимствовал ряд идей из препроцессоров. Одна из таких идей — вложенные стили.

Вложенность позволяет группировать правила по структуре HTML. Это делает код более организованным: визуально видно, какие элементы относятся к какому контейнеру.

Вложенные стили: старый/классический способ

Вложенность была доступна в препроцессорах вроде Sass и Less. Смысл одинаков: описать отношения «родитель — потомок» компактно. В обычном CSS для оформления всех h1 внутри .container нужно было писать так:

.container {  
  background-color: #f2f2f2;  
}  
  
.container h1 {  
  font-size: 44px;  
}  

В препроцессоре (например, Less) та же логика выглядела короче:

.container{  
    background-color: #f2f2f2;  

    h1 {  
        font-size:44px;  
    }  
}  

Преимущество — явная иерархия. Глубину вложенности можно увеличивать, но чрезмерная вложенность ухудшает поддержку и может привести к излишне специфичным селекторам.

Нативная вложенность в CSS

Нативная вложенность работает похоже на препроцессоры, но с важной разницей: при обращении к дочернему элементу прямо по имени браузер не всегда правильно понимает контекст. Рассмотрим пример полного HTML-файла:

  
  
    
      
      
    Nested Styling in CSS  
    
    
      
      

Hello from the children of planet Earth!

    
       

В примере контейнер получает красный фон, а вложенный h1 — жёлтый цвет текста. Но в реальном браузере вы заметите, что фон применяется, а цвет h1 — нет. Причина в том, что нативная вложенность требует явной ссылки на родительский селектор при формировании итогового селектора. Для этого используется амперсанд (&):

.container {  
       background-color: red;  

    & h1 {  
        color: yellow;  
    }  
}  

Здесь & служит ссылкой на родительский селектор .container. Комбинация «& h1» означает “.container h1” в итоговом CSS, и браузер применит цвет.

Результат: h1 с жёлтым цветом внутри контейнера

Похожим образом можно обращаться к псевдоклассам и псевдоэлементам:

.parent1{  
    &:hover{  
        background-color: red;  
    }  
    &::before{  
        content:"Here is a pseudo element.";  
    }  
}  

Это делает код компактным и очевидным: все состояния и вставки связаны с родителем.

Вложенные медиа-запросы

Раньше нужно было писать медиа-запросы отдельно:

p {  
    color:black;  
}  
  
@media (min-width:750px) {  
    p {  
        color:gray;  
    }  
}  

Теперь можно вложить @media внутрь правила элемента — это улучшает читаемость и связывает условие с конкретным элементом:

p {  
    color:black;  

    @media (min-width:750px) {  
        color:gray;  
    }  
}  

Такая организация уменьшает фрагментацию стилей: вы видите базовое правило и условное переопределение рядом.

Пример: стилизация сайта с использованием вложенности

Создайте папку, добавьте index.htm и style.css. В index.htm разместите примерную разметку (ниже — та же, что в демонстрации):

  
  
    
      
      
      
    Simple Website  
    
    
      
        
        

Lorem ipsum dolor sit amet consectetur adipisicing elit.

                   David Uzondu           3 hours ago         
        
          Lorem ipsum dolor, sit amet consectetur adipisicing elit. Illo ut           quasi hic sint dolorum sapiente magni ratione? Suscipit commodi ad,           asperiores nostrum natus aperiam et alias, officiis dolorum ipsa vero           minima consequatur recusandae quasi aliquid quibusdam ducimus eaque!           Excepturi voluptas eveniet nemo, earum doloribus, soluta architecto           iste repellat autem aspernatur beatae ut quis odio est voluptates sunt           qui rerum blanditiis minus! Rerum labore nobis, odit quod amet dolorum           quae laudantium.         
      
               

Trending Articles

        

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Fugit, iusto ipsum!

      
    
  

В style.css вы можете оформить контейнер и вложенные правила так:

.container {  
  display: flex;  
  gap: 25px;  
  
  @media(max-width:750px) {  
   flex-direction: column;  
  }  
    
  
  .article{  
  width:90%;  
  }  
  
  & div:nth-child(3) {  
    text-align: justify;  
  }  
  
  & span {  
    color: rgb(67, 66, 66);  
  
    &:nth-child(1)::before {  
      font-style: italic;  
      content: "Written by ";  
    }  
  
    &:nth-child(2) {  
      font-style: italic;  
      &::before {  
        content: " ~ ";  
      }  
    }  
  }  
  
  .meta-data {  
    margin-bottom: 10px;  
    padding-bottom: 10px;  
    border-bottom: solid 1px;  
  }  
  
}  

Результат — компактный и логически сгруппированный CSS:

Скриншот готового сайта с контейнером, статьёй и сайдбаром

Нужен ли препроцессор теперь?

Короткий ответ: не обязательно. Длинный — зависит от задач. Нативная вложенность решает одну из основных удобств препроцессоров, но препроцессоры всё ещё дают:

Если вам нужны только вложенность и простые переиспользуемые куски — можно обойтись нативным CSS. Если проект предполагает сложную генерацию стилей, препроцессор остаётся удобным инструментом.

Когда вложенность не подходит (примеры и предостережения)

Альтернативные подходы

Шпаргалка: как и когда использовать &

Подсказка: если вы хотите получить селектор, начинающийся не с родителя, используйте &:matches(…) или составные селекторы с осторожностью.

Чек-листы по ролям

Разработчик:

Дизайнер / верстальщик:

Техлид:

Критерии приёмки

Ментальные модели и эвристики

Быстрая методология внедрения вложенности в проект

  1. Обозначьте компоненты, где вложенность улучшит поддержку (карточки, статьи, виджеты).
  2. Ограничьте глубину до 2–3 уровней.
  3. Используйте & для всех ссылок на родителя, чтобы избежать неожиданных селекторов.
  4. Запустите визуальные тесты и проверьте в целевых браузерах.

Decision flowchart (Mermaid)

flowchart TD
  A[Нужна ли вложенность?] -->|Да| B{Глубина > 3?}
  B -->|Да| C[Отказаться или рефакторить]
  B -->|Нет| D[Использовать & и вложенность]
  A -->|Нет| E[Писать обычные селекторы / BEM]

Рекомендации по совместимости и миграции

Краткое объявление для команды (100–200 слов)

Нативная вложенность CSS теперь позволяет писать более компактный и читаемый код, группируя стили по компонентам. Мы можем постепенно внедрять её в новые компоненты: использовать & для ссылок на родителя, ограничивать глубину вложенности и запускать проверку поддержки браузеров. Для сложной генерации стилей (циклы, миксины) остаётся смысл в препроцессоре. План внедрения: репозиторный эксперимент на 1–2 компонентах, правила стиля в CONTRIBUTING.md и автоматическая проверка совместимости в CI.

Краткое резюме

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство