Skip to content

Classes de customização ​

As classes de customização são utilizadas para criar uma ou mais variações de um componente ou elemento especifico.

Essas classes podem ser criadas de duas formas:

Classes Modificadores ​

São pequenas classes aninhadas dentro da classe principal do componente e inseridas na estrutura HTML de acordo com as necessidades.

Características ​

  • Possuem um hífen - como prefixo -secondary -big
  • SEMPRE ficam aninhadas dentro de uma classe principal

Benefícios ​

  • É mais simples
  • Gera menos CSS
  • Funciona muito bem com CSS puro

Desvantagens ​

  • Contém sobreposição de código
  • Possuem um código compartilhado

Exemplo ​

html
<button class="button">
	Submit
</button>

<button class="button -big">
	Submit
</button>

<button class="button -secondary -big">
	Submit
</button>
scss
.button {
	display: flex;
    align-items: center;
    justify-content: center;

	max-width: 100%;
	padding: $button-padding;

	color: $button-color;

	&.-secondary {	
		color: $button-color-secondary;
	}

	&.-big {
		padding: $button-padding-big;
	}
}

Classes de composição ​

São formadas pelo nome do componente junto com o nome das classes modificadoras.

Características ​

  • É formado por um nome de classe único
  • Funciona melhor com SASS, pois o uso de @mixins diminui a repetição de código

Benefícios ​

  • Evita aninhamento
  • Evita sobreposição de código
  • Possui código exclusivo

Desvantagens ​

  • É mais trabalhoso
  • Gera mais CSS

Exemplo ​

html
<button class="button">
	Submit
</button>

<button class="button_big">
	Submit
</button>

<button class="button_secondary">
	Submit
</button>

<button class="button_secondary_big">
	Submit
</button>
scss
.button {
	display: flex;
    align-items: center;
    justify-content: center;

	max-width: 100%;
	padding: $button-padding;

	color: $button-color;
}	

.button_big {
	display: flex;
    align-items: center;
    justify-content: center;

	max-width: 100%;
	padding: $button-padding-big;

	color: $button-color;
}

.button_secondary {
	display: flex;
    align-items: center;
    justify-content: center;

	max-width: 100%;
	padding: $button-padding;

	color: $button-color-secondary;
}

.button_secondary_big {	
	display: flex;
    align-items: center;
    justify-content: center;

	max-width: 100%;
	padding: $button-padding-big;

	color: $button-color-secondary;
}

Com @mixins ​

scss
@mixin button_style(
    $color: $button-color,
) {
	display: flex;
    align-items: center;
    justify-content: center;

	max-width: 100%;

	color: $color;
}

@mixin button_size(
    $padding: $button-padding,
) {
	padding: $padding;
}

.button {
	@include button_style;
	@include button_size;
}	

.button_big {
	@include button_style;
	@include button_size(
		$padding: $button-padding-big
	);
}

.button_secondary {
	@include button_style(
		$color: $button-color-secondary
	);
	@include button_size;
}

.button_secondary_big {	
	@include button_style(
		$color: $button-color-secondary
	);

	@include button_size(
		$padding: $button-padding-big
	);
}

Released under the MIT License.