# 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.luca.global/boas-vindas/luca-tema/primeiros-passos/boas-praticas-para-css-customizado.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
