Pergunta

Estou tentando limpar meu CSS para ser mais limpo usando o SCSs.

CSS padrão:

.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;
}

Existe alguma maneira de evitar a criação da classe 'generic-hr' que não será usada? Eu estava esperando que algum tipo de ninho funcionasse bem. Nesse cenário, o CSS é definitivamente mais limpo e mais legível que o SCSs.

Idealmente eu precisaria disso para trabalhar no SCSS:

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

SAÍDA:

 .dark-hr, .light-hr {
   //shared attributes defined by '.##'
 }
 .dark-hr {
   // overrides
 }
 .light-hr {
   // overrides
 }
Foi útil?

Solução

O que você quer usar é um estender a classe. (Eu os chamo de "aulas silenciosas"), que é significada usando um % em vez de um ..

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;
}

Outras dicas

Você normalmente faria algo assim:

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

Meu padrão para esse tipo de coisa é uma mistura:

@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;
}

Isso tem a vantagem adicional de ser extensível, por isso, se você encontrar a si mesmo precisando de vários seletores com propriedades realmente semelhantes, você pode adicionar nas variáveis:

@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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top