Skills
Frontend

Scss Bem

Convenção de estilo SCSS Modules + BEM para componentes React. Invoque ao estilizar um componente em projeto que usa este archetype.

SCSS Modules + BEM

BEM dentro de SCSS Modules: o escopo do arquivo já evita colisão global. Cada componente tem um .module.scss ao lado do .tsx (ver frontend/react → folder-structure).

  • Nunca importe CSS global dentro de um componente — use SCSS Modules.
// Button.module.scss
.button {
  padding: 8px 16px;
  border-radius: 4px;

  &--primary   { background: var(--color-primary); color: #fff; }
  &--secondary { background: transparent; border: 1px solid var(--color-primary); }

  &__icon { margin-right: 8px; }
}
// Button/Button.tsx
import styles from './Button.module.scss';

// elemento + modifier
<button className={`${styles.button} ${styles['button--primary']}`} />

// elemento filho
<span className={styles.button__icon} />

Quando o modifier é dinâmico, prefira clsx ou template literal em vez de concatenação manual:

import clsx from 'clsx';
<button className={clsx(styles.button, styles[`button--${variant}`])} />

SCSS global

Variáveis CSS custom properties e mixins ficam em src/styles/_variables.scss / _mixins.scss. Injete globalmente via vite.config.ts para não repetir @use em cada arquivo:

// vite.config.ts
export default defineConfig({
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@use "@/styles/variables" as *; @use "@/styles/mixins" as *;`,
      },
    },
  },
});

Quando precisar de funções do Sass no arquivo, importe explicitamente:

@use 'sass:color';
.foo { background: color.adjust(#3366ff, $lightness: 10%); }

src/styles/global.scss (reset, tipografia base) é importado em main.tsx — nunca dentro de um componente.

Skills relacionadas

  • Estrutura de componente: frontend/react