Question

J'essaie de nettoyer mon CSS pour être plus propre en utilisant SCSS.

Standard CSS:

.dark-hr,
.light-hr { 
  width: 100%;
  height: 1px;
  margin: 15px 0px;
}
.dark-hr {
  background-color: #595959;
}
.light-hr {
  background-color: #cccccc;
}

VS SCSS:

.generic-hr { 
  width: 100%;
  height: 1px;
  margin: 15px 0px;
}
.dark-hr {
  @extend .generic-hr;
  background-color: #595959;
}
.light-hr {
  @extend .generic-hr;
  background-color: #cccccc;
}

Y a-t-il un moyen de ne pas créer la classe «générique-hr» qui ne sera pas utilisée? J'espérais que quelque peu de nid fonctionnerait bien. Dans ce scénario, le CSS est définitivement plus propre et lisible que les SCSS.

Idéalement, j'aurais besoin de cela pour travailler dans SCSS:

.## {
  // base class that is not outputted
  .dark-hr {
    //attributes the extend the base class '.##'
  }
  .light-hr {
    //attributes the extend the base class '.##'
  }
}

SORTIR:

 .dark-hr, .light-hr {
   //shared attributes defined by '.##'
 }
 .dark-hr {
   // overrides
 }
 .light-hr {
   // overrides
 }
Était-ce utile?

La solution

Ce que vous voulez utiliser est un prolonger la classe (Je les appelle "classes silencieuses"), qui est signifiée en utilisant un % au lieu d'une ..

hr%base { 
  width: 100%;
  height: 1px;
  margin: 15px 0px;
}
.dark-hr {
  @extend hr%base;
  background-color: #595959;
}
.light-hr {
  @extend hr%base;
  background-color: #cccccc;
}

Autres conseils

Ne feriez-vous pas normalement quelque chose comme ça:

.generic-hr { 
  width: 100%;
  height: 1px;
  margin: 15px 0px;
  &.dark {
    background-color: #595959;
  }
  &.light {
    background-color: #cccccc;
  }
}

Mon modèle pour ce genre de chose est un mixin:

@mixin generic-hr { 
  width: 100%;
  height: 1px;
  margin: 15px 0px;
}
.dark-hr {
  @include generic-hr;
  background-color: #595959;
}
.light-hr {
  @include generic-hr;
  background-color: #cccccc;
}

Cela a l'avantage supplémentaire d'être extensible, de sorte que si vous avez besoin de plusieurs sélecteurs avec des propriétés vraiment similaires, vous pouvez ajouter des variables:

@mixin generic-hr($background-color: transparent) { 
  width: 100%;
  height: 1px;
  margin: 15px 0px; 
  background-color: $background-color;
}
.dark-hr {
  @include generic-hr(#595959);
}
.light-hr {
  @include generic-hr(#cccccc);
}
.medium-hr {
  @include generic-hr(#818181);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top