BaliseTonSite

Nesting (Imbrication)

Structure ton SCSS par hiérarchie comme un arbre de talents.

Imagine : dans ton RPG, l'arbre de compétences est organisé en branches : "Magie → Feu → Boule de Feu → Explosion". En CSS classique, tu dois répéter le chemin complet à chaque fois. Avec le nesting SCSS, tu écris la hiérarchie naturellement, comme si tu suivais les branches de l'arbre. Plus lisible, plus logique !

3.1Le principe de base

Le nesting te permet d'imbriquer tes sélecteurs les uns dans les autres, en suivant la structure de ton HTML.

// SCSS avec nesting
.carte-sort {
  background: #f8f9fa;
  padding: 1rem;
  border-radius: 8px;
  
  h3 {
    color: #2c3e50;
    margin-bottom: 0.5rem;
  }
  
  p {
    color: #6c757d;
    line-height: 1.6;
  }
  
  .bouton {
    background: #3498db;
    color: white;
    padding: 0.5rem 1rem;
  }
}
/* CSS généré */
.carte-sort {
  background: #f8f9fa;
  padding: 1rem;
  border-radius: 8px;
}

.carte-sort h3 {
  color: #2c3e50;
  margin-bottom: 0.5rem;
}

.carte-sort p {
  color: #6c757d;
  line-height: 1.6;
}

.carte-sort .bouton {
  background: #3498db;
  color: white;
  padding: 0.5rem 1rem;
}

3.2Le sélecteur parent (&)

Le symbole & représente le sélecteur parent. C'est ton outil le plus puissant pour gérer les états (hover, focus, active) et les modificateurs.

.bouton-magie {
  background: #9b59b6;
  color: white;
  transition: all 0.3s ease;
  
  // États au survol
  &:hover {
    background: #8e44ad;
    transform: translateY(-2px);
  }
  
  // État actif
  &:active {
    transform: translateY(0);
  }
  
  // Modificateur (variante)
  &--dangereux {
    background: #e74c3c;
    
    &:hover {
      background: #c0392b;
    }
  }
  
  // Contexte (dans un autre élément)
  .mode-sombre & {
    border: 1px solid #555;
  }
}

3.3Nesting avec les pseudo-éléments

Les pseudo-éléments ::before et ::after s'intègrent parfaitement dans le nesting.

.bouton-enchante {
  position: relative;
  background: #3498db;
  color: white;
  
  // Ajout d'une aura magique
  &::before {
    content: '';
    position: absolute;
    top: -2px;
    left: -2px;
    right: -2px;
    bottom: -2px;
    background: linear-gradient(45deg, #f39c12, #e74c3c, #9b59b6);
    border-radius: inherit;
    opacity: 0;
    transition: opacity 0.3s ease;
    z-index: -1;
  }
  
  &:hover::before {
    opacity: 1;
  }
}

3.4Nesting avec les media queries

Tu peux imbriquer les media queries directement dans tes sélecteurs. Très pratique pour le responsive !

.menu-principal {
  display: flex;
  gap: 2rem;
  
  // Comportement sur tablette
  @media (max-width: 768px) {
    flex-direction: column;
    gap: 1rem;
  }
  
  // Comportement sur mobile
  @media (max-width: 480px) {
    padding: 0.5rem;
    
    .lien {
      font-size: 0.9rem;
    }
  }
}

3.5Limites et bonnes pratiques

Le nesting c'est puissant, mais attention à ne pas abuser ! Voici les règles d'or :

Règle des 3 niveaux maximum

Si tu dépasses 3 niveaux d'imbrication, ton CSS devient difficile à maintenir et trop spécifique. En plus, ça génère du CSS plus lourd que le navigateur met plus de temps à traiter. Comme un donjon avec trop d'étages, on s'y perd !
// ❌ Trop profond (4 niveaux) = CSS lourd et difficile à maintenir
.page {
  .contenu {
    .section {
      .carte {
        .titre {
          // Trop imbriqué ! Le navigateur doit vérifier 5 sélecteurs
        }
      }
    }
  }
}

// ✅ Mieux organisé = CSS plus léger et plus maintenable
.page-contenu {
  padding: 2rem;
}

.section-carte {
  margin-bottom: 2rem;
  
  .titre {
    font-size: 1.5rem;
  }
}

3.6Combinaisons avec les sélecteurs

Le nesting fonctionne avec tous les sélecteurs CSS : classes, IDs, attributs, pseudo-classes...

.formulaire-contact {
  
  // Sélecteur d'attribut
  input[type="email"] {
    border-color: #3498db;
  }
  
  // Pseudo-classe
  input:focus {
    outline: 2px solid #3498db;
    outline-offset: 2px;
  }
  
  // Sélecteur adjacent
  label + input {
    margin-top: 0.25rem;
  }
  
  // Sélecteur d'enfant direct
  > .champ-obligatoire {
    position: relative;
    
    &::after {
      content: '*';
      color: #e74c3c;
    }
  }
}

Astuce de niveau expert

Utilise le nesting pour organiser tes composants par "zones de responsabilité". Chaque bloc imbriqué doit avoir un sens logique, comme les salles d'un château bien conçu !

Verifie tes acquis

3 questions pour valider ce chapitre

1. Que fait le selecteur & dans une regle imbriquée en SCSS ?

Valide et sauvegarde ce chapitre

Ne perds pas le fil de ton apprentissage. Chaque QCM complété s'enregistre comme un checkpoint dans ton tableau de bord personnel. Crée ton profil de développeur gratuitement pour débloquer toutes les évaluations du site et suivre ta progression étape par étape.

Commencer l'aventure
Déjà membre ?Connecte-toi