Skip to main content

Escopo CSS — tema vs editor

No editor, a loja fica num iframe. Um :root dentro desse iframe não pinta os botões Salvar e Publicar da barra, que estão no documento de fora. Ainda assim, não grave tokens do tema em :root, html ou body:
  • No /preview, o tema e a página compartilham o documento principal.
  • A plataforma aplica as cores do painel Tema em .cx-theme-scope (--brand-primary, --color-primary e as outras listadas em Settings globais), não no :root.
  • Dentro do iframe, o CSS do tema alcança o que a plataforma injeta nesse documento.

O problema (vazamento de CSS)

O que acontecia

O tema guardava cores (primária, secundária, botões, etc.) em variáveis CSS globais no :root — ou seja, no document.documentElement, que vale para a página inteira. Exemplos de variáveis gravadas no lugar errado: Fluxo típico:
  1. O lojista define a cor primária no painel Tema.
  2. A plataforma grava --brand-primary e --color-primary no elemento .cx-theme-scope.
  3. Se o tema também grava a cor em :root ou em document.documentElement, o documento que contém o tema herda esse valor.

Outros pontos que pioram o vazamento


Como a plataforma isola o tema

No editor, a Corvex aplica settings globais no canvas, na classe .cx-theme-scope (ThemePreviewScope):
  • Variáveis de cor, fonte e esquema de cores vão no elemento escopo, não no :root
  • O chrome do editor (barra, laterais, inspetor) fica fora do iframe e não recebe essas variáveis.
  • Portais do tema usam data-corvex-theme-portal-root ancorado ao preview.
Na vitrine publicada, o escopo equivalente é ThemeSettingsScope no preview do editor e .cx-theme-scope na loja publicada. Não dependa de um :root escrito pelo tema.

Correção correta (autores de tema)

Regra de ouro

Todas as variáveis e resets do tema ficam dentro do container da loja, nunca em :root, html ou body sem escopo.
Use classes raiz estáveis por área: A plataforma já envolve o preview em .cx-theme-scope. O tema deve repetir o escopo nas próprias folhas de estilo.

❌ Errado — variáveis globais

✅ Correto — escopo por raiz do tema

Settings globais do painel Tema

Ids como color_primary são mapeados para variáveis (--brand-primary, --color-primary, …) no escopo .cx-theme-scope pela plataforma. No CSS do tema, consuma com var(--brand-primary) dentro das suas classes raiz — não redeclare no :root. Ver Settings globais.

Sections isoladas

Cada section deve prefixar estilos com a classe da section:
Nunca:

Sintomas e diagnóstico

Como verificar: DevTools → :root / html → procure custom properties do tema (--color_, --brand-, --btn_). Se existirem, o tema está vazando.

Checklist (agência / LLM)

Antes de corvex sync / publicar:
  1. Nenhum :root { … } em assets/theme.css ou CSS de section/header/footer
  2. Nenhum document.documentElement.style.setProperty para tokens do tema
  3. Layout, header e footer com classe raiz própria (.my-theme-root, .header-*-root, .footer-*-root)
  4. Variáveis CSS definidas só nessas raízes (ou descendentes), não em html/body
  5. Seletores universais (*, button, input, a) sempre prefixados com a raiz do tema
  6. Classes utilitárias (.container, .btn) com prefixo do tema ou BEM da section
  7. Testar no builder: topbar e sidebars não mudam ao alterar cor primária no painel Tema
  8. Testar na vitrine: cores do tema continuam corretas no preview e na loja

Referências