Pular para o conteúdo

Blocos

Markdown para LLMs (em inglês)llms.txt

Blocos organizam o conteúdo da página. Há duas formas:

FormaSintaxeUso
Contêiner::: nome {atributos} … :::Blocos com conteúdo. Um ::: sozinho na linha fecha o último bloco aberto.
Uma linha:: nome valor {atributos}Blocos sem conteúdo, como ícones e espaços.

Todos os blocos aceitam os atributos de estilo. Blocos contêiner podem ser aninhados à vontade, e a indentação é opcional.

BlocoFormaFilhosAtributos próprios
columnsContêinerCada filho é uma colunawidths
stackContêinerEmpilhados na vertical
rowContêinerLado a lado, na horizontalwrap
gridContêinerCada filho é uma célulacols
boxContêinerEmpilhados dentro da caixa
stepsContêinerRevelados um por vez
notesContêinerTexto puro das notas
chartContêiner ou uma linhaUma tabela com os dados, ou data=$listatype, legend, stacked, values, colors, data, label, series
tableUma linhaNenhum; os dados vêm de data=$listadata, columns
if e elseContêinerO conteúdo mostrado conforme a condição
forContêinerO conteúdo repetido para cada item
slotContêinerConteúdo de um espaço nomeado
iconUma linhaNenhum; o valor é o nome do ícone
spacerUma linhaNenhum; o valor é o tamanho
dividerUma linhaNenhum
inputUma linhaNenhumbind, placeholder, on-submit
soundUma linhaNenhum; o valor é o endereço do áudioname, autoplay, loop, volume

icon, spacer e divider não aceitam conteúdo (R109). Nos demais blocos embutidos, texto depois do nome é ignorado (R110); use atributos entre chaves.

Coloca os filhos lado a lado. Cada filho direto é uma coluna: um parágrafo, uma imagem ou, para agrupar vários elementos numa coluna, um ::: stack.

AtributoValoresPadrão
widthsProporções separadas por espaço, uma por coluna: widths="2 1"Colunas iguais
gapEspaço entre as colunasmd (32 px)
valignAlinhamento vertical das colunascenter
::: columns {widths="2 1" gap=xl}
::: stack {gap=sm}
## Plano de expansão
Duas regiões novas até dezembro,
com a mesma equipe de suporte.
:::
::: box {.card align=center}
:: icon map-pin {color=accent}
2 regiões
:::
:::

Empilha os filhos na vertical. É o bloco usado para agrupar vários elementos dentro de uma coluna ou de uma célula.

AtributoUsoPadrão
gapEspaço entre os filhosmd (32 px)
alignAlinhamento horizontal dos filhosOcupam toda a largura
valignAlinhamento vertical dos filhostop
::: stack {gap=xs align=center}
Capítulo 1 {.kicker}
# O começo de tudo
Uma história em três atos {.muted}
:::

Coloca os filhos em linha, na horizontal, com o tamanho do próprio conteúdo. É útil para ícones, selos e listas curtas de itens.

AtributoValoresPadrão
wrapBooleano: quebra os itens em mais de uma linha quando não cabemDesligado
gapEspaço entre os itens16 px
alignDistribuição horizontal: left, center, rightleft
valignAlinhamento vertical dos itenscenter
::: row {gap=md align=center}
:: icon star {size=lg color=yellow}
:: icon star {size=lg color=yellow}
:: icon star {size=lg color=yellow}
4,8 de 5 em 1.200 avaliações {size=xl}
:::

Grade com número fixo de colunas. Cada filho ocupa uma célula, preenchendo as linhas da esquerda para a direita.

AtributoValoresPadrão
colsNúmero de colunas, de 1 a 12Número de filhos, limitado a 3
gapEspaço entre as célulasmd (32 px)
valignAlinhamento vertical das célulasEsticadas para a mesma altura
::: grid {cols=3 gap=lg}
::: box {.card}
### Rápido
Prévia a cada tecla.
:::
::: box {.card}
### Consistente
Temas e estilos reutilizáveis.
:::
::: box {.card}
### Versionado
Histórico de cada alteração.
:::
:::

Caixa que empilha os filhos na vertical e recebe fundo, borda, cantos e espaçamento. Combine com o estilo .card (bg=surface radius=lg pad=lg shadow=md) ou monte o visual com atributos.

AtributoUsoPadrão
gapEspaço entre os filhos20 px
bg, border, radius, pad, shadowAparência da caixaSem fundo, sem borda
::: columns {gap=lg}
::: box {.card}
### Com `.card`
Fundo, cantos e sombra prontos.
:::
::: box {border="3 accent" radius=md pad=lg}
### Com atributos
Só borda e espaçamento.
:::
:::

Revela os filhos um por vez enquanto o documento é mostrado: cada filho é uma etapa. Se um filho é uma lista, cada item da lista vira uma etapa. Numa visualização estática, como uma imagem ou um PDF, tudo aparece de uma vez.

Aceita os mesmos atributos de stack. Para controlar a ordem manualmente, use {step=N} em qualquer bloco ou trecho. Veja Revelação.

## Três motivos
::: steps {gap=sm}
- Menos tempo formatando
- Mais tempo no conteúdo
- Apresentações consistentes
:::

Notas para quem mostra o documento, como as notas do apresentador numa apresentação. O conteúdo nunca é desenhado na página: o programa que mostra o documento decide onde exibi-lo.

  • O texto é guardado como está, sem interpretar formatação nem blocos.
  • Vários blocos notes na mesma página são juntados, separados por uma linha em branco.
  • Atributos na linha ::: notes são ignorados.
# Resultados
Crescemos 38% no trimestre.
::: notes
Fazer uma pausa depois do número.
Perguntar se alguém tem dúvidas.
:::

Desenha um gráfico a partir de uma tabela Markdown dentro do bloco. A primeira coluna tem os rótulos; cada coluna seguinte é uma série, e o cabeçalho dá o nome da série. As células aceitam números como 42, 3.5, 3,5 e 12%.

AtributoValoresPadrão
typebar, line, area, pie, donutbar
legendBooleanoLigado com mais de uma série ou em pie/donut
stackedBooleano: empilha as sériesDesligado
valuesBooleano: mostra os valoresDesligado
colorsCores separadas por espaço, uma por série: colors="accent blue"Paleta do tema
::: chart {type=bar values}
| Mês | 2025 | 2026 |
| --- | ---: | ---: |
| Jan | 32 | 41 |
| Fev | 28 | 45 |
| Mar | 35 | 52 |
:::

Com data=$lista, os dados vêm de um @data e o bloco pode ter uma linha só: :: chart {data=$vendas label=mes series="receita custo"}.

Mais exemplos em Gráficos.

Monta uma tabela a partir de uma lista de registros. columns escolhe os campos e a ordem; colunas só com números ficam alinhadas à direita.

@data equipe
| nome | cargo | anos |
| --- | --- | --- |
| Ana | CTO | 7 |
| Bruno | Design | 3 |
@end
:: table {data=$equipe columns="nome anos"}

Para uma tabela escrita à mão, use a sintaxe Markdown | A | B |.

::: if condição mostra o conteúdo quando a condição é verdadeira. Logo depois podem vir ::: else if condição e ::: else. O conteúdo escolhido entra no bloco pai, sem caixa extra.

@let versao = curta
::: if $versao == curta
Resumo em uma frase.
:::
::: else
Versão completa, com todos os detalhes.
:::

O atributo if=condição faz o mesmo para um único elemento. Com @state, a escolha acontece enquanto o documento é mostrado; veja Interatividade.

::: for item in $lista repete o conteúdo para cada item, e os blocos gerados entram no bloco pai. ::: for item, i in $lista também dá a posição (a partir de 1) e ::: for i in 1..5 repete para um intervalo.

::: row {gap=md}
::: for n in 1..5
:: icon star {color="$($n <= 4 ? accent : muted)"}
:::
:::

Listas Markdown geradas por um for são juntadas numa lista só. Veja Variáveis, dados e repetição.

Preenche um espaço nomeado de um componente. Só pode ser usado diretamente dentro do uso de um componente contêiner (R416 fora dele). O nome do espaço vem depois de slot.

@component comparacao {antes depois}
::: columns {gap=xl}
::: box {.card}
### $antes
$content
:::
::: box {.card}
### $depois
$lado-b
:::
:::
@end
::: comparacao {antes=Planilhas depois="Painel vivo"}
Exportar, colar e formatar à mão.
::: slot lado-b
Os dados chegam sozinhos.
:::
:::

Veja Componentes para os detalhes de $content e dos espaços nomeados.

Desenha um ícone da biblioteca embutida. O nome vem depois de icon; a lista completa está em Ícones.

AtributoUsoPadrão
sizeTamanho do ícone: escala xs…7xl ou pixels96 px
colorCor do traçoCor do texto
::: row {gap=xl align=center}
:: icon rocket {size=3xl color=accent}
:: icon lightbulb {size=3xl color=yellow}
:: icon chart-line {size=3xl color=blue}
:::

Espaço vazio entre dois blocos. O valor é um tamanho da escala de espaçamento (none a 3xl) ou pixels de 0 a 600. Sem valor, vale md (32 px).

# Antes do espaço
:: spacer 3xl
Depois de 160 px {.muted}

Linha divisória horizontal. Aceita atributos de estilo, como w para limitar a largura e opacity.

## Seção
:: divider {w=40%}
Texto depois da linha {.muted}

Campo de texto ligado a um @state. O que a pessoa digita vai direto para a variável, então o texto em volta muda na hora. Ligado a um @state de número, o campo aceita só números.

AtributoUsoPadrão
bindA variável que guarda o valor, como bind=$nome (obrigatório)
placeholderTexto de exemplo mostrado com o campo vazioNenhum
on-submitAções ao apertar Enter, inclusive goNenhuma
@state nome = ""
## Como você se chama?
:: input {bind=$nome placeholder="Seu nome"}
Olá, $nome! {if="$nome != \"\""}

Digitar no campo não avança a página. Numa visualização estática, como uma imagem ou um PDF, o campo aparece com o valor inicial. Veja Entrada de texto.

Um som da página. Ele não é desenhado: toca com autoplay ao entrar, ou quando uma ação play pede. Todos os sons param ao sair da página. Visualizações estáticas, como imagens e PDF, não tocam som.

AtributoUsoPadrão
nameNome usado por play e stop, como name=portaNenhum
autoplayToca assim que a página abreDesligado
loopRepete sem pararDesligado
volumeDe 0 a 1, ou porcentagem1
:: sound https://exemplo.com/chuva.mp3 {name=chuva loop volume=40%}
:: sound https://exemplo.com/porta.mp3 {name=porta}
# A porta
[Abrir]{click="play porta"} · [Silêncio]{click="stop chuva"}

O endereço começa com https://. Veja Som.