CSS sistema de componentes · Novo recurso

Sistema de design Bulma.

Crie uma mesa editorial com a estrutura real de campos e controles de Bulma, colunas responsivas, modificadores de cores semânticas e variáveis de CSS, incluindo o código completo de validação.

Guia OpenDesign9 capítulos31 entradas de referênciaGuia de aplicação original
01

Prévia da interface do sistema de design Bulma

Edite um título e um resumo, valide o briefing, marque-o como pronto e alterne entre os temas claro e escuro.

Briefing editorial e prévia do artigoAbrir exemplo completo
Bulma 1.0.4 oficial CSS, com comportamento original em JavaScript puro JavaScript. · Referência de implementação
02

Referência de design do sistema de design Bulma

Bulma 1.0.4 compilado CSS e documentação oficial de responsividade e auxiliares. Os componentes HSL são valores padrão do pacote, não uma paleta de marca substituta. As conversões para rem consideram uma raiz de 16px.

Fundamentos de tipografia e controles

Fonte
Nome / RegraValor / ConfiguraçãoUso
--bulma-family-primaryInter, SF Pro, Segoe UI, Roboto, Oxygen, Ubuntu, Helvetica Neue, Helvetica, Arial, sans-serifPilha de fontes preferenciais; o pacote não baixa esses arquivos de fonte.
--bulma-size-normal1remTamanho padrão de controles e texto do corpo.
--bulma-size-small0.75remTamanho compacto de controles auxiliares.
--bulma-size-medium1.25remTamanho do modificador médio.
--bulma-size-large1.5remTamanho do modificador grande.
--bulma-weight-semibold600Rótulos e texto de interface em destaque.
--bulma-block-spacing1.5remEspaçamento entre elementos em bloco.
--bulma-radius0.375remRaio padrão de 6px com raiz de 16px.
--bulma-radius-small0.25remRaio pequeno de 4px.
--bulma-radius-large0.75remRaio grande de 12px.
--bulma-control-height2.5em2.5em equivale a 40px com um tamanho de controle de 16px.
--bulma-control-border-width1pxEspessura compartilhada das bordas dos controles.
--bulma-control-line-height1.5Altura de linha compartilhada do texto dos controles.

Composição de cores

Fonte
Nome / RegraValor / ConfiguraçãoUso
--bulma-primary-h / -s / -l171deg / 100% / 41%Componentes HSL da cor base primária.
--bulma-link-h / -s / -l233deg / 100% / 63%Papel de ação e link usado por is-link.
--bulma-scheme-h / -s221 / 14%Matiz e saturação do esquema neutro.
--bulma-scheme-main-l100% in light modeLuminosidade da superfície principal clara.
--bulma-text-l29% in light modeLuminosidade do texto no esquema normal.
--bulma-text-title-l14% in light modeLuminosidade do texto de título em destaque.

Auxiliares de espaçamento

Fonte
Nome / RegraValor / ConfiguraçãoUso
mb-00Utilitário de margem inferior; as outras direções usam a mesma escala de sufixos.
mb-10.25remUtilitário de margem inferior; as outras direções usam a mesma escala de sufixos.
mb-20.5remUtilitário de margem inferior; as outras direções usam a mesma escala de sufixos.
mb-30.75remUtilitário de margem inferior; as outras direções usam a mesma escala de sufixos.
mb-41remUtilitário de margem inferior; as outras direções usam a mesma escala de sufixos.
mb-51.5remUtilitário de margem inferior; as outras direções usam a mesma escala de sufixos.
mb-63remUtilitário de margem inferior; as outras direções usam a mesma escala de sufixos.

Pontos de interrupção responsivos

Fonte
Nome / RegraValor / ConfiguraçãoUso
mobile≤768pxColunas e pilha de níveis, a menos que is-mobile seja adicionado.
tablet≥769pxAs colunas padrão passam a ser horizontais.
desktop≥1024pxInício dos modificadores específicos para desktop.
widescreen≥1216pxFaixa mais ampla de contêiner/layout.
fullhd≥1408pxMaior faixa padrão.
03

Guia completo do sistema de design Bulma

Um guia prático para escolher, aplicar e avaliar este sistema em uma interface real.

DESIGN-bulma.md

Orientações completas, um ponto de partida para a implementação e links para o código-fonte.

Baixar o guia

Sistema de design Bulma: um framework CSS com comportamento explícito

Use as classes Bulma em elementos semânticos HTML

Bulma oferece um vocabulário visual de elementos, componentes, auxiliares de layout e modificadores. Não é um gerenciador de estado de formulários nem um runtime de widgets JavaScript. O espaço editorial carrega a folha de estilos oficial 1.0.4 e adiciona um pequeno script, totalmente apresentado, para validação, prévia de texto ao vivo e alternância de tema. Não há dependência de React nem provedor de framework.

Com base neste guia de OpenDesign

Um campo reúne um rótulo, um contêiner de controle e um texto de ajuda. A classe input deve ser aplicada ao próprio campo de entrada, enquanto select é um contêiner ao redor do elemento select nativo. Essas diferenças são importantes porque o contêiner cuida da decoração e do espaçamento. Reproduzir apenas a aparência de uma captura de tela usando divs genéricas eliminaria o comportamento nativo de edição e teclado.

Consulte a especificação de apoio

Papéis HSL e temas claro/escuro do sistema de design Bulma

Use modificadores em vez de ajustes codificados diretamente

Bulma 1 armazena famílias de cores como componentes HSL e deriva valores relacionados. O papel de link define o botão de revisão, o rótulo da seção e os detalhes de apoio. As etiquetas de aviso e sucesso indicam Rascunho e Pronto para revisão, mas o rótulo de texto permanece sempre visível. A mensagem usa is-info porque explica limites do processo, em vez de indicar um erro.

A demonstração começa com data-theme=light no elemento html. O botão de aparência alterna esse atributo entre light e dark. Todos os cartões, campos, textos de ajuda e mensagens herdam juntos o tema correto. Definir diretamente um fundo branco na caixa prejudicaria essa alternância. Para personalizações de marca, altere as variáveis de papel documentadas e verifique os estados derivados, em vez de modificar apenas o fundo final do botão.

Consulte a especificação de apoio

Preferências de fontes e escala tipográfica utilizável do sistema de design Bulma

O pacote define preferências, não fornece fontes

A pilha de fontes padrão começa com Inter e inclui várias alternativas do sistema. Carregar Bulma não baixa a fonte Inter. Este exemplo offline usa qualquer uma das fontes listadas que esteja instalada; portanto, uma compilação de produção que precise de uma fonte específica deve fornecer o arquivo da fonte e definir separadamente sua política de carregamento. As classes de título e subtítulo estabelecem uma hierarquia visual sem alterar o nível do cabeçalho HTML.

O painel usa title is-2 para a página, title is-4 para o formulário e title is-3 para o título do artigo. Um ajuste para telas estreitas reduz o título da página para 2rem; trata-se explicitamente de um refinamento local. Os controles mantêm o tamanho padrão de 1rem. O texto de ajuda fica junto ao campo correspondente, para que o usuário não precise consultar instruções em uma barra lateral separada.

Consulte a especificação de apoio

Auxiliares de espaçamento e colunas responsivas do sistema de design Bulma

Uma divisão 7/5 que se empilha naturalmente

O elemento columns pai usa is-variable is-6; seus filhos são column is-7 e column is-5. Essas proporções reservam mais largura para o formulário do que para a prévia do artigo. Por padrão, em uma abordagem mobile-first, as colunas se empilham em telas de largura móvel. Por isso, esta composição não adiciona is-mobile, que manteria um layout horizontal apertado.

Os sufixos dos auxiliares de espaçamento não correspondem a uma escala linear de pixels. Em particular, o sufixo five equivale a 1.5rem, e six, a 3rem. A separação entre o cartão e a mensagem usa mt-5, enquanto os rótulos pequenos usam mb-3. A seção externa aplica localmente 2rem na vertical e 1.5rem na horizontal; o CSS adicional completo está incluído na configuração.

Consulte a especificação de apoio

Anatomia de campos e validação no sistema de design Bulma

A cor é apenas parte do erro

O título e o resumo estão explicitamente associados a rótulos e textos de ajuda. Quando o envio é rejeitado, is-danger é adicionado ao campo e ao texto de ajuda, aria-invalid=true é definido e o foco vai para o primeiro controle inválido. O título deve ter pelo menos cinco caracteres após a remoção de espaços nas extremidades; o resumo, pelo menos vinte. Esses são requisitos editoriais de exemplo, não restrições de Bulma.

A caixa de seleção de revisão do texto também precisa estar marcada. A mensagem de erro explicativa está vinculada por aria-describedby. Bulma pode exibir esses estados, mas não pode decidir se o texto está pronto. Essa decisão cabe ao script, que impede a navegação padrão do formulário. Nenhum resultado do servidor é inventado.

  1. Apague o título e envie o formulário para ver o campo inválido receber foco.
  2. Restaure um título e um resumo com pelo menos vinte caracteres.
  3. Marque a caixa de revisão do texto, envie o formulário e edite novamente para que o rascunho volte ao estado Rascunho.

Consulte a especificação de apoio

Cartão, mensagem e etiquetas de estado no sistema de design Bulma

Atribua uma função a cada contêiner

O cartão do artigo separa card-header e card-content. O texto do cabeçalho identifica a pauta, enquanto uma etiqueta indica o estado editorial. O conteúdo inclui a seção dinâmica, o título e o resumo, seguidos dos metadados. A prévia prioriza intencionalmente o texto: o redator pode avaliar a hierarquia e o tamanho sem que uma imagem provisória se sobreponha ao conteúdo.

O componente message usa message-header e message-body para explicar que a prontidão para revisão é determinada localmente. Ele permanece visível independentemente da validação. Uma notificação temporária de sucesso seria um substituto inadequado para esse esclarecimento persistente: ao dispensá-la, o usuário poderia ficar com a impressão de que o artigo foi publicado.

  • Cartão: composição atual do artigo.
  • Etiqueta: estado explícito de rascunho ou revisão.
  • Mensagem: explicação persistente sobre o que a ação faz.

Consulte a especificação de apoio

Estado da aplicação sem um runtime de widgets no sistema de design Bulma

Evite mensagens de sucesso desatualizadas e inserções inseguras na prévia

Cada evento de entrada atualiza a prévia e redefine o estado para Rascunho. Isso evita manter a etiqueta Pronto depois que o redator altera o texto revisado. A exibição é atualizada com textContent, então HTML digitado aparece como texto, em vez de ser interpretado como marcação. Essas são responsabilidades da aplicação; a folha de estilos de Bulma não pode executá-las.

Restaurar rascunho chama form.reset, remove as classes de validação e aria-invalid, limpa a ajuda da caixa de seleção e reconstrói a prévia. O conteúdo original de exemplo é restaurado sem recarregar o documento. O parágrafo de status usa role=status para comunicar mudanças após o envio, enquanto a digitação normal não desloca o foco repetidamente.

Consulte a especificação de apoio

Instale CSS e mantenha o comportamento visível com o sistema de design Bulma

Sem provedor e sem Bulma JavaScript incluído no pacote

Instale [email protected] e copie o CSS compilado para um recurso local, ou importe esse CSS em um empacotador existente. A configuração em HTML puro apresentada aqui não precisa de uma etapa de compilação depois que o recurso é copiado. Coloque toda a marcação do painel em body e carregue app.js com defer. Não carregue um pacote JavaScript sem relação com o projeto esperando que ele ative os componentes de Bulma.

Se você adicionar um modal ou menu suspenso mais tarde, implemente deliberadamente o comportamento correspondente de teclado, foco e fechamento. Uma classe como is-active altera a aparência; ela não mantém o foco confinado. Neste exemplo, os campos e botões nativos mantêm o comportamento reduzido e fácil de revisar.

Consulte a especificação de apoio

Personalize no escopo adequado com o sistema de design Bulma

Inspecione as variáveis do componente antes de substituí-las

As variáveis globais --bulma definem o tema, mas os componentes também declaram variáveis em seus próprios seletores. Uma atribuição mais específica no componente pode substituir um valor definido no nível raiz. Quando uma substituição na raiz parecer não surtir efeito, inspecione a classe no CSS compilado e aplique a substituição ao componente adequado, em vez de acumular declarações sem relação entre si.

Em um produto de longa duração, mantenha separados os padrões do pacote, as substituições da marca e as regras de layout específicas de cada tela. Os pequenos ajustes no contêiner e no título para telas móveis deste exemplo são regras de tela. As tabelas de referência apresentam separadamente os valores reais de Bulma, deixando claro quais configurações podem ser reutilizadas e quais pertencem apenas a este painel editorial.

Consulte a especificação de apoio

Exemplos de componentes do sistema de design Bulma

Marcação completa do painel editorial

Anatomia de field/control/label/help de Bulma, colunas 7/5, Card, Message e etiquetas de estado.

html
<section class="section"><div class="container"><div class="level"><div class="level-left"><div><p class="is-size-7 has-text-weight-bold has-text-link mb-3">BULMA / LOCAL EDITORIAL DESK</p><h1 class="title is-2">Shape the next issue.</h1><p class="subtitle is-5">An article brief, a preview, and an explicit editorial state.</p></div></div><div class="level-right"><button class="button is-light" id="theme">Dark appearance</button></div></div><div class="columns is-variable is-6"><div class="column is-7"><form id="brief" class="box" novalidate><h2 class="title is-4">Article brief</h2><div class="field"><label class="label" for="headline">Headline</label><div class="control"><input class="input" id="headline" value="A quieter way to work" maxlength="90" aria-describedby="headline-help"></div><p class="help" id="headline-help">Use 5–90 characters. This field updates the preview as you type.</p></div><div class="field"><label class="label" for="section">Section</label><div class="control"><div class="select is-fullwidth"><select id="section"><option>Design notes</option><option>Field research</option><option>Product craft</option></select></div></div></div><div class="field"><label class="label" for="summary">Summary</label><div class="control"><textarea class="textarea" id="summary" rows="3" aria-describedby="summary-help">How small choices in layout and language can make a demanding interface feel manageable.</textarea></div><p class="help" id="summary-help">Use at least 20 characters to give the reviewer enough context.</p></div><div class="field"><label class="checkbox"><input id="checked" type="checkbox" aria-describedby="checked-help" aria-describedby="checked-help"> I have checked the headline and summary</label><p class="help" id="checked-help"></p></div><div class="field is-grouped is-grouped-multiline"><div class="control"><button type="submit" class="button is-link">Mark ready for review</button></div><div class="control"><button id="reset" type="button" class="button is-light">Restore draft</button></div></div><p id="result" class="help" role="status">Draft changes stay in this page only.</p></form></div><div class="column is-5"><article class="card"><header class="card-header"><p class="card-header-title">Issue 08 / Article preview</p><span id="state" class="tag is-warning is-light mr-4 my-4">Draft</span></header><div class="card-content"><p class="is-size-7 has-text-link has-text-weight-bold mb-3" id="preview-section">Design notes</p><h2 class="title is-3" id="preview-title">A quieter way to work</h2><div class="content" id="preview-summary">How small choices in layout and language can make a demanding interface feel manageable.</div><hr><p class="is-size-7">Copy desk · Reading time assigned after editing</p></div></article><article class="message is-info mt-5"><div class="message-header"><p>Review is a separate step</p></div><div class="message-body">Ready for review is a local label. It does not publish this article, send a notification, or save a draft on a server.</div></article></div></div><p class="is-size-7">Official Bulma 1.0.4 CSS. Form validation and preview updates are original JavaScript.</p></div></section>

Referência de código

  • A biblioteca CSS não valida nem envia o formulário.
  • aria-describedby associa os campos ao texto de ajuda.
  • A prévia usa textContent para exibir o texto inserido pelo usuário.

Validação e comportamento da prévia local

Os manipuladores de eventos originais fornecem o comportamento que Bulma intencionalmente deixa a cargo da aplicação.

javascript
const $=id=>document.getElementById(id);
const fields=['headline','summary'];
function draft(){ $('state').textContent='Draft';$('state').className='tag is-warning is-light mr-4 my-4';$('result').textContent='Draft changes stay in this page only.';}
function preview(){ $('preview-title').textContent=$('headline').value.trim()||'Untitled article';$('preview-summary').textContent=$('summary').value.trim()||'No summary yet.';$('preview-section').textContent=$('section').value;draft();}
for(const id of ['headline','summary','section','checked'])$(id).addEventListener('input',preview);
$('brief').addEventListener('submit',event=>{event.preventDefault();let first=null;for(const id of fields){const invalid=$(id).value.trim().length<(id==='headline'?5:20);$(id).classList.toggle('is-danger',invalid);$(id).setAttribute('aria-invalid',String(invalid));$(id+'-help').classList.toggle('is-danger',invalid);if(invalid&&!first)first=$(id);}$('checked-help').textContent=$('checked').checked?'':'Confirm the copy check before review.';$('checked-help').className='help is-danger';if(!$('checked').checked&&!first)first=$('checked');if(first){$('result').textContent='Check the highlighted brief fields.';first.focus();return;}$('state').textContent='Ready for review';$('state').className='tag is-success is-light mr-4 my-4';$('result').textContent='Marked ready in this local preview. Nothing was published.';});
$('reset').addEventListener('click',()=>{$('brief').reset();for(const id of fields){$(id).classList.remove('is-danger');$(id).removeAttribute('aria-invalid');$(id+'-help').classList.remove('is-danger');}$('checked-help').textContent='';preview();});
$('theme').addEventListener('click',()=>{const dark=document.documentElement.dataset.theme!=='dark';document.documentElement.dataset.theme=dark?'dark':'light';$('theme').textContent=dark?'Light appearance':'Dark appearance';});

Referência de código

  • Quando o envio é inválido, o foco vai para o primeiro campo sem preenchimento.
  • Editar um rascunho pronto faz com que ele volte ao estado Rascunho.
  • O atributo data-theme controla a aparência.
04

Configuração do agente de IA do sistema de design Bulma

Ponto de partida para implementação

Salve a marcação completa e os exemplos JavaScript conforme indicado. Bulma fornece o CSS; o script da aplicação fornecido implementa toda a validação e o estado local. A prévia offline incorpora os dois arquivos. O wrapper HTML inclui toda a marcação do corpo; salve os exemplos fornecidos de interação e de CSS com os nomes de arquivo indicados aqui.

html
<!-- Install and copy the local asset:
npm install [email protected]
mkdir -p assets
cp node_modules/bulma/css/bulma.min.css assets/bulma.min.css
-->
<!doctype html>
<html lang="en" data-theme="light">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Editorial desk</title>
<link rel="stylesheet" href="assets/bulma.min.css">
<style>.section{padding:2rem 1.5rem}.container{max-width:1080px!important}.card-header{align-items:center;flex-wrap:wrap}.title{overflow-wrap:anywhere}.level-left{min-width:0}@media(max-width:768px){.title.is-2{font-size:2rem}.level-right{margin-top:1rem}}</style>
<script src="app.js" defer></script>
</head>
<body><section class="section"><div class="container"><div class="level"><div class="level-left"><div><p class="is-size-7 has-text-weight-bold has-text-link mb-3">BULMA / LOCAL EDITORIAL DESK</p><h1 class="title is-2">Shape the next issue.</h1><p class="subtitle is-5">An article brief, a preview, and an explicit editorial state.</p></div></div><div class="level-right"><button class="button is-light" id="theme">Dark appearance</button></div></div><div class="columns is-variable is-6"><div class="column is-7"><form id="brief" class="box" novalidate><h2 class="title is-4">Article brief</h2><div class="field"><label class="label" for="headline">Headline</label><div class="control"><input class="input" id="headline" value="A quieter way to work" maxlength="90" aria-describedby="headline-help"></div><p class="help" id="headline-help">Use 5–90 characters. This field updates the preview as you type.</p></div><div class="field"><label class="label" for="section">Section</label><div class="control"><div class="select is-fullwidth"><select id="section"><option>Design notes</option><option>Field research</option><option>Product craft</option></select></div></div></div><div class="field"><label class="label" for="summary">Summary</label><div class="control"><textarea class="textarea" id="summary" rows="3" aria-describedby="summary-help">How small choices in layout and language can make a demanding interface feel manageable.</textarea></div><p class="help" id="summary-help">Use at least 20 characters to give the reviewer enough context.</p></div><div class="field"><label class="checkbox"><input id="checked" type="checkbox" aria-describedby="checked-help" aria-describedby="checked-help"> I have checked the headline and summary</label><p class="help" id="checked-help"></p></div><div class="field is-grouped is-grouped-multiline"><div class="control"><button type="submit" class="button is-link">Mark ready for review</button></div><div class="control"><button id="reset" type="button" class="button is-light">Restore draft</button></div></div><p id="result" class="help" role="status">Draft changes stay in this page only.</p></form></div><div class="column is-5"><article class="card"><header class="card-header"><p class="card-header-title">Issue 08 / Article preview</p><span id="state" class="tag is-warning is-light mr-4 my-4">Draft</span></header><div class="card-content"><p class="is-size-7 has-text-link has-text-weight-bold mb-3" id="preview-section">Design notes</p><h2 class="title is-3" id="preview-title">A quieter way to work</h2><div class="content" id="preview-summary">How small choices in layout and language can make a demanding interface feel manageable.</div><hr><p class="is-size-7">Copy desk · Reading time assigned after editing</p></div></article><article class="message is-info mt-5"><div class="message-header"><p>Review is a separate step</p></div><div class="message-body">Ready for review is a local label. It does not publish this article, send a notification, or save a draft on a server.</div></article></div></div><p class="is-size-7">Official Bulma 1.0.4 CSS. Form validation and preview updates are original JavaScript.</p></div></section>
</body>
</html>

Um prompt para seu projeto

Prompt para agente de IA
Comece com a área editorial completa do Bulma 1.0.4. Mantenha a estrutura dos campos, controles e textos de ajuda, as colunas responsivas, os componentes de cartão e mensagem e o tema claro/escuro no nível do documento. As edições do título e do resumo devem atualizar a prévia do artigo por meio de textContent e retornar o estado para Rascunho. Exija os limites de texto após a remoção de espaços nas extremidades e a confirmação da revisão do texto antes de marcar como Pronto para revisão; associe os campos inválidos às respectivas ajudas e coloque o foco no primeiro erro. Restaure o rascunho original e limpe o estado de validação sem dar a entender que houve publicação.
05

Fontes e escopo do sistema de design Bulma

Referência Bulma 1.0.4 CSS. As regras editoriais locais e o JavaScript são códigos originais de exemplo; nenhum rascunho é armazenado ou publicado.