Estilos e CSS
Astro foi desenvolvido pensando em tornar a estilização e a escrita de CSS fácil. Escreva seu próprio CSS diretamente em componentes Astro ou importe sua biblioteca CSS favorita como Tailwind. Além disso, linguagens avançadas de estilização com Sass e Less também são suportadas.
Estilização em Astro
Seção intitulada Estilização em AstroEstilizar um componente Astro é tão fácil quanto adicionar uma tag <style>
no seu componente ou template de página. E quando você coloca uma tag <style>
dentro de um componente Astro, Astro vai detectar o CSS e manipular os estilos para você automaticamente.
Estilos com Escopo
Seção intitulada Estilos com EscopoAs regras de CSS em <style>
no Astro são automaticamente adicionadas a um escopo por padrão. Estilos com escopo são compilados nos bastidores para serem somente aplicados no HTML escrito dentro do mesmo componente onde a regra CSS foi definida. O CSS que você escreve dentro de um componente é automaticamente encapsulado dentro desse componente.
Este CSS:
Compila para isto:
Estilos com escopo não conflitam e não irão impactar o restante do seu site. Em Astro, não é um problema utilizar seletores de baixa especificidade como h1{}
ou p{}
pois eles serão compilados com escopos no resultado final.
Estilos com escopo também não serão aplicados em outros componentes astro contidos dentro de seu template. Se você precisa estilizar um componente filho, considere envolver esse componente em uma <div>
( ou em outro elemento ) para que você possa então estilizá-lo.
A especificidade de estilos com escopo é preservada, os permitindo funcionar de forma consistente com outros arquivos ou bibliotecas CSS enquanto ainda se preserva os limites exclusivos que previnem que estilos sejam aplicados fora do componente.
Estilos Globais
Seção intitulada Estilos GlobaisAo mesmo tempo que nós recomendamos estilos com escopo para a maioria dos componentes, você pode eventualmente ter uma razão válida para escrever CSS global. Você pode optar por remover CSS com escopo automático adicionando o atributo is:global
na tag <style>
.
Você pode também mesclar regras CSS globais e com escopo juntas na mesma tag <style>
usando o seletor :global()
. Isto se tornar um padrão poderoso para aplicação de estilos CSS em filhos de seu componente.
Isto é uma ótima forma de estilizar coisas como postagens em blogs ou documentos alimentados por conteúdos de um CMS, onde o conteúdo fica fora do Astro. Contudo, seja cuidadoso: os componentes cuja aparência muda de acordo com a condição de que ele tem um certo parente, torna mais difícil solucionar problemas futuros que o envolvam.
Estilos com escopo são recomendados para serem usados sempre que possível. E estilos globais, quando necessários.
Combinando classes com class:list
Seção intitulada Combinando classes com class:listSe você precisa combinar classes em um elemento dinamicamente, você pode utilizar o atributo utilitário class:list
em arquivos .astro
.
📚 Veja nossa página de referência de diretivas para aprender mais sobre class:list
.
Variáveis no CSS
Seção intitulada Variáveis no CSSastro@0.21.0
Em Astro, <style>
pode referenciar quaisquer variáveis disponíveis na página. Ademais, você pode também passar variáveis CSS diretamente do frontmatter do seu componente usando a diretiva define:vars
.
📚 Veja nossa página de referência de diretivas para saber mais sobre define:vars
.
Passando class
para um componente filho
Seção intitulada Passando class para um componente filhoNo Astro, atributos HTML como class
não são passados automaticamente para componente filhos.
Ao invés disso, aceite uma prop class
no componente filho e aplique-a no elemento raiz. Ao fazer desestruturação, você precisa renomeá-la, pois class
é uma palavra reservada no JavaScript.
Ao usar a estratégia de estilo com escopo padrão, você também deve passar o atributo data-astro-cid-*
. Você pode fazer isso passando o ...rest
das props para o componente. Se você alterou a propriedade scopedStyleStrategy
para 'class'
ou 'where'
, a prop ...rest
não é necessária.
Devido a presença do atributo data-astro-cid-*
, que inclui o filho no escopo do pai, é possível que os estilos se propaguem do pai para o filho. Para evitar efeitos colaterais indesejados, certifique-se de usar nomes de classe exclusivos no componente filho.
Estilos em linha
Seção intitulada Estilos em linhaVocê pode estilizar elementos HTML em linha usando o atributo style
. Isso pode ser uma string CSS ou um objeto de propriedades CSS:
Estilos Externos
Seção intitulada Estilos ExternosHá duas formas para incluir folhas de estilos globais e externas: uma importação ESM para arquivos dentro de seu projeto, e com um link URL absoluto para arquivos em seu diretório public/
ou disponíveis fora de seu projeto.
📚 Leia mais sobre como utilizar assets estáticos localizados no diretório public/
ou src/
.
Importe uma Folha de Estilos Local
Seção intitulada Importe uma Folha de Estilos LocalVocê talvez precise atualizar o seu astro.config quando estiver importando CSS de pacotes do npm. Veja a seção de importação de uma folha de estilos de um pacote do npm abaixo.
Você pode importar folhas de estilos no frontmatter do seu componente Astro usando a sintaxe de importação ESM. Importação de CSS funcionam como qualquer outra importação ESM em um componente Astro, que deve ser referenciada relativo para o componente e obrigatoriamente deve ser escrito no início do script do seu componente junto com outras importações.
import
de CSS por meio de ESM é suportado dentro de qualquer arquivo JavaScript, incluindo componentes JSX como React e Preact. Isto pode ser útil para escrever estilos por componente de forma granular para seus componentes React.
Importe uma Folha de Estilos de um Pacote do NPM
Seção intitulada Importe uma Folha de Estilos de um Pacote do NPMVocê talvez precise incluir uma folha de estilos de um pacote externo. Isso é especialmente comum para utilitários como Open Props. Se seu pacote recomenda usar uma extensão de arquivo (ex.: nome-do-pacote/estilos.css
ao invés de nome-do-pacote/estilos
), isso deve funcionar como qualquer importação de uma folha de estilos local.
Se seu pacote não recomenda usar uma extensão de arquivo (ex.: nome-do-pacote/estilos
), antes, você vai precisar atualizar sua configuração Astro!
Digamos que você está importando um arquivo CSS de um nome-do-pacote
chamado normalize
(com a extensão omitida). Para garantir que nós podemos pré-renderizar sua página corretamente, adicione nome-do-pacote
para o array vite.ssr.noExternal:
Isso é uma configuração específica do Vite que não tem relação com (ou necessita de) SSR do Astro (EN).
Agora, você está livre para importar nome-do-pacote/normalize
. Isto passará por bundle e será otimizado pelo Astro como qualquer outra folha de estilos local.
Inclua uma Folha de Estilos Estática via tags link
Seção intitulada Inclua uma Folha de Estilos Estática via tags linkVocê pode também usar o elemento <link>
para incluir uma folha de estilos na página. Isto deve ser um caminho de URL absoluto para um arquivo CSS localizado no seu diretório /public
, ou uma URL para um website externo. Note que valores relativos de href para o elemento <link>
não são suportados.
Como esta abordagem usa o diretório public/
, ela pula o processamento normal do CSS, o processo de bundle e outras otimizações feitas por Astro. Sendo assim, se você precisa desses recursos, use o método de importe uma folha de estilos ensinado acima.
Ordem de Cascata
Seção intitulada Ordem de CascataComponentes Astro as vezes terão que analisar múltiplas fontes de CSS. Por exemplo, seu componente pode importar uma folha de estilos CSS, incluir sua própria tag <style>
tag e ser renderizada dentro de um layout que importa CSS.
Quando regras conflitantes de CSS são aplicadas ao mesmo elemento, navegadores primeiro utilizam especificidade e depois ordem de aparecimento para determinar qual valor mostrar.
Se uma regra é mais específica que outra, não importa onde a regra de CSS aparece, seu valor terá precedência:
Se duas regras tem a mesma especificidade, então a ordem de aparecimento é avaliada e o valor da última regra terá precedência:
As regras de CSS do Astro são avaliadas nessa ordem de aparecimento:
- tags
<link>
na head (menor precedência) - estilos importados
- estilos com escopo (maior precedência)
Estilos com Escopo
Seção intitulada Estilos com EscopoUtilizar estilos com escopo não aumenta a especificidade do seu CSS, porém eles sempre irão vir por último na ordem de aparecimento. Logo eles tomarão precedência sobre outros estilos de mesma especificidade. Por exemplo, se você importar uma folha de estilos que conflita com um estilo com escopo, o valor do estilo com escopo será aplicado:
Se você fazer o estilo importado mais específico, ele terá uma maior precedência sobre o estilo com escopo:
Ordem de Importação
Seção intitulada Ordem de ImportaçãoAo importar múltiplas folhas de estilo em um componente Astro, as regras de CSS são analisadas na ordem em que são importadas. Uma maior especificidade sempre irá determinar quais estilos serão mostrados, não importa onde o CSS é analisado. Porém, quando estilos conflitantes tem a mesma especificidade, o último a ser importado ganha:
Enquanto tags <style>
possuem escopo e apenas é aplicada ao componente que a declara, CSS importado pode “vazar”. Importar um componente aplica qualquer CSS que ele importa, mesmo que o componente nunca seja utilizado:
Um padrão comum no Astro é importar CSS global dentro de um componente de Layout. Certifique-se de importar o componente de Layout antes de outras importações para que ele tenha a menor precedência.
Tags Link
Seção intitulada Tags LinkFolhas de estilo carregadas via tags link são analisadas em ordem, antes de quaisquer outros estilos em um arquivo Astro. Portanto, esses estilos terão menor precedência que folhas de estilo importadas e estilos com escopo:
Integrações CSS
Seção intitulada Integrações CSSAstro vem com suporte para adicionar bibliotecas, ferramentas e frameworks CSS populares para seu projeto como Tailwind e mais!
Tailwind
Seção intitulada TailwindPara usar o Tailwind no seu projeto, instale a integração para Tailwind oficial do Astro usando o comando astro add
no seu gerenciador de pacotes:
📚 Veja o Guia de Integrações para instruções sobre instalação, importação, e configuração destas integrações.
Pré-processadores CSS
Seção intitulada Pré-processadores CSSAstro suporta pré-processadores tais como Sass, Stylus, e Less através de Vite.
Sass e SCSS
Seção intitulada Sass e SCSSUse <style lang="scss">
ou <style lang="sass">
em arquivos .astro
.
Stylus
Seção intitulada StylusUse <style lang="styl">
ou <style lang="stylus">
em arquivos .astro
.
Use <style lang="less">
em arquivos .astro
.
Em componentes de frameworks
Seção intitulada Em componentes de frameworksVocê pode também usar todos os pré-processadores CSS listados acima dentro de frameworks JS também! Tenha certeza de seguir os padrões que cada framework recomenda:
- React / Preact:
import Estilos from './estilos.module.scss'
; - Vue:
<style lang="scss">
- Svelte:
<style lang="scss">
PostCSS
Seção intitulada PostCSSAstro vem com PostCSS incluído como parte de Vite. E para configurar PostCSS para seu projeto, crie um arquivo postcss.config.cjs
na raiz de seu projeto. Você pode importar plugins usando require()
após os instalar (por exemplo npm install autoprefixer
).
Bibliotecas e Frameworks
Seção intitulada Bibliotecas e Frameworks📘 React / Preact
Seção intitulada 📘 React / PreactArquivos .jsx
suporta tanto CSS global quanto Módulos CSS. E para habilitar o segundo, use a extensão .module.css
(ou .module.scss
/ .module.sass
se você estiver usando Sass).
Em Astro, Vue suporta os mesmos métodos que vue-loader
suporta:
📕 Svelte
Seção intitulada 📕 SvelteEm Astro, Svelte também funciona como esperado: Documentação de estilização no Svelte.
Estilização de Markdown
Seção intitulada Estilização de MarkdownQuaisquer métodos de estilização no Astro estão disponíveis em um componente de layout Markdown, porém diferentes métodos terão diferentes efeitos na estilização da sua página.
Também é possível estilizar seu Markdown com as tags <style is:global>
no componente de layout. Note que quaisquer estilos adicionados estão sujeitos à ordem de cascata do Astro, e você deve verificar sua página renderizada cuidadosamente para garantir que seus estilos estejam sendo aplicados conforme o desejado.
Você também pode adicionar integrações de CSS, incluindo o Tailwind. Se você estiver usando o Tailwind, o plugin de tipografia pode ser útil para estilizar o Markdown.
Produção
Seção intitulada ProduçãoControle de bundle
Seção intitulada Controle de bundleQuando o Astro faz a build do seu site para lançamento em produção, ele minifica e combina seu CSS em pedaços. Cada página no seu site ganha seu próprio pedaço, e adicionalmente, o CSS que é compartilhado entre múltiplas páginas é dividido em seus próprios pedaços para reutilização.
Contudo, quando você tem diversas páginas compartilhando estilos, alguns pedaços compartilhados podem se tornar realmente pequenos. Se todos eles fossem enviados separadamente, isso levaria a muitas requisições de folhas de estilo e afetaria a performance do site. Portanto, por padrão o Astro irá fazer link apenas daquelas no seu HTML acima de 4kB em tamanho como tags <link rel="stylesheet">
, enquanto adiciona inline as menores como <style type="text/css">
. Essa abordagem fornece um equilíbrio entre o número de requisições adicionais e o volume de CSS que pode ser cacheado entre páginas.
Você pode configurar o tamanho no qual folhas de estilo serão adicionadas com links externos (em bytes) utilizando a opção da build do vite assetsInlineLimit
. Note que essa pção afeta a adição inline de scripts e imagens também.
Se você preferir que todos os estilos do projeto continuem externos, você pode configurar a opção da build inlineStylesheets
.
Você também pode definir essa opção como 'always'
que vai colocar em linha todas as folhas de estilo.
Avançado
Seção intitulada AvançadoTenha cuidado quando contornar o bundle de CSS interno do Astro! Estilos não serão mais automaticamente incluídos no resultado final, sendo assim, é de sua responsabilidade certificar-se de que o arquivo referenciado está adequadamente incluído no resultado final.
Importação de CSS com ?raw
Seção intitulada Importação de CSS com ?rawPara casos de uso avançado, CSS pode ser lido diretamente do disco sem passar por bundle ou ser otimizado por Astro. Isto pode ser útil quando você precisa de um controle completo sobre um pedaço de código CSS, e necessita contornar a manipulação de CSS automática do Astro.
Isto não é recomendável para a maioria dos usuários.
Veja a documentação do Vite para detalhes completos.
Importação de CSS com ?url
Seção intitulada Importação de CSS com ?urlPara casos de uso avançado, você pode importar uma referência URL direta para um arquivo CSS dentro de seu projeto no diretório src/
. Isto pode ser útil quando você necessita de controle completo sobre como um arquivo é incluído na página. Entretanto, isto vai prevenir a otimização desse arquivo CSS com o resto do CSS da sua página.
Isto não é recomendável para a maioria dos usuários. Em vez disso, coloque os arquivos CSS dentro de public/
para conseguir uma referência URL consistente.
Importar um arquivo CSS menor com ?url
talvez retorne o conteúdo dos arquivos CSS codificado em base64 como uma URL de dados, mas somente em sua build final. Sendo assim, você pode escrever seu código com suporte para URLs codificadas (data:text/css;base64,...
) ou configurar a opção vite.build.assetsInlineLimit
para 0
para desabilitar esta funcionalidade.
Veja a documentação do Vite para detalhes completos.
Learn