# Boas práticas para CSS customizado

Este documento fornece orientações para personalizar componentes do LUCA usando CSS personalizado em uma loja Shopify. As práticas recomendadas incluem o uso de nomes de classes descritivos, evitar estilos globais excessivos e o uso de seletores específicos do componente. Siga estas práticas para garantir que sua personalização seja consistente e fácil de manter.

## Identificadores de páginas[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#identificadores-de-p%C3%A1ginas) <a href="#identificadores-de-paginas" id="identificadores-de-paginas"></a>

Todas as páginas contêm um identificador com o tipo/nome da página em `param-case`.

#### Exemplo[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#exemplo) <a href="#exemplo" id="exemplo"></a>

```css
<body id="page-type-name">
  <main ...>
</body>
```

## Classes de seção e elemento[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#classes-de-se%C3%A7%C3%A3o-e-elemento) <a href="#classes-de-secao-e-elemento" id="classes-de-secao-e-elemento"></a>

Todas as seções possuem uma classe com o nome do componente no estilo param-case, alguns embutidos dentro de uma section ou no próprio elemento.

#### Exemplo[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#exemplo-1) <a href="#exemplo-1" id="exemplo-1"></a>

```css
<section class="component-name">
  <div ...>
</section>

<header class="menu-left">
  <div ...>
</header>
```

Para a customização global de um componente, você pode criar os seus estilos usando apenas a classe do componente seguido de seu elemento sucessor quando o mesmo for embutido dentro de uma section ou diretamente no próprio elemento.

#### Exemplo[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#exemplo-2) <a href="#exemplo-2" id="exemplo-2"></a>

```css
.component-name > div {
  width: 100%;
  /* outros estilos */
}

.menu-left {
  width: 100%;
  /* outros estilos */
}
```

Caso a necessidade seja a customização de um componente em uma página específica, você pode usar o prefixo do id dessa página seguido da classe do elemento.

```css
#page-type-name > .component-name {
  /* estilos específicos */
}

#page-type-service > .menu-left {
  color: white;
  background-color: black;
}
```

{% hint style="danger" %}
Nunca use os ids de section gerados pelo Shopify para fazer qualquer tipo de customização. Esses ids podem mudar se o componente for removido e inserido novamente na página, perdendo assim a referência do mesmo e consequentemente de seus estilos.
{% endhint %}

## Use rem ao Invés de px[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#use-rem-ao-inv%C3%A9s-de-px) <a href="#use-rem-ao-inves-de-px" id="use-rem-ao-inves-de-px"></a>

Use sempre rem para especificar os valores da página. Você pode calcular o rem dividindo o valor em px por 16, que é o valor de fonte base usado pelo Tailwind. Caso você precise mudar o valor do font-size padrão por algum motivo, use esse valor para conversão.

#### Exemplo[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#exemplo-3) <a href="#exemplo-3" id="exemplo-3"></a>

```
💡 300px = 300/16 = 18.75rem
```

## Suporte para Mobile[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#suporte-para-mobile) <a href="#suporte-para-mobile" id="suporte-para-mobile"></a>

Lembre-se sempre de adicionar as media queries correspondentes para o override de cada componente/propriedade na sua folha de estilos, baseado nas propriedades padrão do Tailwind.

<table><thead><tr><th width="191">Breakpoint Prefix</th><th width="152">Minimum Width</th><th>CSS</th></tr></thead><tbody><tr><td>sm</td><td>640px</td><td><code>@media (min-width: 640px) { ... }</code></td></tr><tr><td>md</td><td>768px</td><td><code>@media (min-width: 768px) { ... }</code></td></tr><tr><td>lg</td><td>1024px</td><td><code>@media (min-width: 1024px) { ... }</code></td></tr><tr><td>xl</td><td>1280px</td><td><code>@media (min-width: 1280px) { ... }</code></td></tr><tr><td>2xl</td><td>1536px</td><td><code>@media (min-width: 1536px) { ... }</code></td></tr></tbody></table>

#### Exemplo[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#exemplo-4) <a href="#exemplo-4" id="exemplo-4"></a>

```css
/**
 * Products
 */
.products-list-variant > div h3 {
  color: white;
}

@media (min-width: 768px) {
  /**
   * Products
   */
  .products-list-variant > div h3 {
    color: black;
  }
}
```

## Sobrescreva Elementos Gerais Globais Apenas Quando Necessário[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#sobrescreva-elementos-gerais-globais-apenas-quando-necess%C3%A1rio) <a href="#sobrescreva-elementos-gerais-globais-apenas-quando-necessario" id="sobrescreva-elementos-gerais-globais-apenas-quando-necessario"></a>

Essa regra depende de projeto para projeto, mas tome cuidado ao customizar elementos gerais globais (a, button, h1-h6, tokens, etc) para evitar replicar estilos excessivamente em outras páginas da loja. Em alguns casos, pode ser mais produtivo fazer um override global, mas sempre faça uma análise antes de começar.

## Faça Uso Correto dos Seletores[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#fa%C3%A7a-uso-correto-dos-seletores) <a href="#faca-uso-correto-dos-seletores" id="faca-uso-correto-dos-seletores"></a>

Evite copiar e colar o que o browser sugere ao inspecionar o elemento da página, pois ele sempre trará ids gerados pelo Shopify que podem mudar, incluindo classes que tornam a leitura e manutenção do CSS difíceis.

### Exemplo Ruim 👎

```css
#shopify-section-template--20019652100413__23641507-e331-498c-964e-5824112576ec > div > div.wrapper.flex.items-end.justify-between > div.flex-1.text-gray-700 > h3 {
  text-transform: uppercase;
}
```

### Exemplo Bom 👍

```css
.products-list-variant > div h3 {
  text-transform: uppercase;
}
```

## Use Comentários para os Elementos[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#use-coment%C3%A1rios-para-os-elementos) <a href="#use-comentarios-para-os-elementos" id="use-comentarios-para-os-elementos"></a>

Como boa prática para leitura e manutenção do seu código, é sempre bom escopar a customização dos seus componentes usando comentários em bloco.

### Exemplo Ruim 👎

```css
.products-list-variant > div h3 {
  text-transform: uppercase;
}

/* outros estilos */

.footer-default-variant form#contact_form {
  gap: 0;
}

/* outros estilos */
```

### Exemplo Bom 👍

```css
/**
 * Products
 */
.products-list-variant > div h3 {
  text-transform: uppercase;
}

/* outros estilos */

/**
 * Footer
 */
.footer-default-variant form#contact_form {
  gap: 0;
}

/* outros estilos */
```

## Evite Redundância[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#evite-redund%C3%A2ncia) <a href="#evite-redundancia" id="evite-redundancia"></a>

Sempre que detectar um padrão de estilo se repetindo, faça o reuso dos mesmos agrupando os seus elementos.

### Exemplo Ruim 👎

```css
.header-short > .relative {
  height: 22.5rem;
}

.header-short > .relative img {
  height: 22.5rem;
}

.header-short > .relative > div:nth-of-type(1) {
  height: 22.5rem;
}
```

### Exemplo Bom 👍

```css
/**
 * Header Short
 */
.header-short > .relative,
.header-short > .relative img,
.header-short > .relative > div:nth-of-type(1) {
  height: 22.5rem;
}
```

Isso permite estilos mais reaproveitáveis e consequentemente mais leves para serem carregados na loja.

{% hint style="info" %}
☝ Isso não é overengineering! O seu CSS pode crescer rapidamente e afetar a performance do site.
{% endhint %}

## Use !important Apenas Quando Necessário[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#use-important-apenas-quando-necess%C3%A1rio) <a href="#use-important-apenas-quando-necessario" id="use-important-apenas-quando-necessario"></a>

Por padrão, o LUCA adiciona o custom.css já pensando no override padrão de estilos, dessa forma, raramente será necessário o uso de !important.

Afinal, se tudo é important, nada é realmente important 😏

## Prefira Usar Propriedades Declarativas ao Invés de Genéricas[​](https://luca-copilot.github.io/doc-public/docs/guias-avancados/boas-praticas-css#prefira-usar-propriedades-declarativas-ao-inv%C3%A9s-de-gen%C3%A9ricas) <a href="#prefira-usar-propriedades-declarativas-ao-inves-de-genericas" id="prefira-usar-propriedades-declarativas-ao-inves-de-genericas"></a>

Isso é importante para não sobrescrever propriedades que não precisam ou não deveriam ser sobrescritas.

### Exemplo Ruim 👎

```css
background: white;
background: cover;
background: url();
background: no-repeat;
```

### Exemplo Bom 👍

```css
background-color: white;
background-image: url();
background-size: cover;
background-repeat: no-repeat;
```

Este é um documento vivo e ainda está em construção. Fique à vontade para tirar dúvidas e fazer sugestões sempre que houver necessidade.
