Aller au contenu principal

Transitions en cascade avec une boucle Sass

Fiche écrite en 2017 et relue en 2026 : l’encadré en fin de fiche signale ce qui a changé depuis.

Une boucle @for Sass évite d’écrire douze fois la même règle : ici, chaque colonne reçoit sa couleur tirée d’une liste, une teinte plus sombre au survol, et une transition pour que le changement ne soit pas brutal. La même boucle sert à décaler les délais d’animation d’une série d’éléments.

HTML
<div class="wrapper">
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
  <div class="col animated"></div>
</div>
SCSS
@function make-darker($value) {
    @return $value - rgb(50,50,50);
}

@for $i from 1 through 12 {
  $colors:
    #1abc9c,
    #f1c40f,
    #e74c3c,
    #2c3e50,
    #3498db,
    #40d47e,
    #16a085,
    #c0392b,
    #8e44ad,
    #5677fc,
    #8bc34a,
    #673ab7;

  .animated:nth-child(#{$i}) {
    $couleur: nth($colors, $i);
    background: $couleur;
    &:hover{
      background: make-darker($couleur);
    // background: nth($colors, 2);
      top:20px;
    }
  }

}

.col {
  background: #000;
  position:relative;
  top:0;
  transition: all 300ms linear 0ms;
  width: 100px;
  height: 100px;
  float: left;
  margin: 10px auto;
  box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12);
}

.wrapper {
  height: 100vh;
  display: flex;
  justify-content: space-around;
  align-items: center;
  text-align: center;
}