Começar
Aparência

Vale na hora e fica lembrado neste navegador.

Componentes

Botão

O botão pesa mais que o campo: texto de 16 px e contorno de 2 px. Hierarquia, não cor por ação.

Quando usar

  • <button type> para ação
  • um primário por formulário

Quando não usar

  • <a> com cara de botão para ação
  • verde para confirmar
  • link "desabilitado"

Hierarquia

claro
Cancelar
escuro
Cancelar
html
<div class="hx-actions">
  <button class="hx-button hx-button-primary" type="submit">Publicar versão</button>
  <button class="hx-button" type="button">Ver histórico</button>
  <button class="hx-button hx-button-danger" type="button">Descartar versão</button>
  <a class="hx-button hx-button-link" href="#">Cancelar</a>
</div>
Primário (cobalto cheio) · secundário (contorno neutro) · perigo (contorno vermelho) · sair (link).

Perigo final

claro
escuro
html
<button class="hx-button hx-button-danger-solid" type="button">Confirmar recusa</button>
Vermelho cheio só no último passo de uma ação destrutiva: o que pediu dados ou o diálogo de confirmação.

Estados

claro
escuro
html
<div class="hx-actions">
  <button class="hx-button hx-button-primary" type="submit" disabled aria-busy="true"><span class="hx-spinner" aria-hidden="true"></span>Publicando…</button>
  <button class="hx-button" type="button" disabled>Encerrar</button>
  <button class="hx-button hx-button-compact" type="button">Compacto</button>
</div>
Enviando: disabled + rótulo no gerúndio. Compacto (36 px) só por linha de tabela e só com ponteiro fino.

Com ícone e só ícone

claro
escuro
html
<div class="hx-actions">
  <button class="hx-button hx-button-primary" type="button"><svg class="hx-icon" aria-hidden="true"><use href="hibex/icons/sprite.svg#icon-plus"></use></svg>Nova solicitação</button>
  <button class="hx-button" type="button"><svg class="hx-icon" aria-hidden="true"><use href="hibex/icons/sprite.svg#icon-refresh-cw"></use></svg>Tentar de novo</button>
  <button class="hx-button hx-button-icon" type="button" aria-label="Buscar"><svg class="hx-icon" aria-hidden="true"><use href="hibex/icons/sprite.svg#icon-search"></use></svg></button>
</div>
Só ícone: 44 × 44, sempre com aria-label (o nome que o leitor de tela diz).

Enviando, em cada variante

claro
escuro
html
<div class="hx-actions">
  <button class="hx-button hx-button-primary" type="button" disabled aria-busy="true"><span class="hx-spinner" aria-hidden="true"></span>Publicando…</button>
  <button class="hx-button" type="button" disabled aria-busy="true"><span class="hx-spinner" aria-hidden="true"></span>Carregando…</button>
  <button class="hx-button hx-button-danger" type="button" disabled aria-busy="true"><span class="hx-spinner" aria-hidden="true"></span>Descartando…</button>
  <button class="hx-button hx-button-danger-solid" type="button" disabled aria-busy="true"><span class="hx-spinner" aria-hidden="true"></span>Recusando…</button>
</div>

Por que não há botão verde

A paleta dos botões é a hierarquia — primário, secundário, perigo, perigo final e sair —, não as cores de estado. Verde é "concluído" e âmbar é "atenção" (ADR-0006): um botão verde ao lado de um selo verde diz duas coisas com a mesma cor. Confirmar, aprovar e homologar são primários (ADR-0010). Para ações que andam juntas, veja o grupo de botões.

Anatomia

  1. rótulo — verbo + objeto ("Criar disponibilidade"); nunca "OK" ou "Enviar" sozinho
  2. ícone — opcional, reforço, à esquerda
  3. contorno — 2 px, mais forte que o do campo; ou cheio

Acessibilidade

  • o anel de foco é o do sistema (2 px de fundo + 2 px de foco);
  • todo <button> declara type;
  • alvo de 44 px; o compacto volta a 44 no toque.

Faça e não faça

Faça

  • primário primeiro, à esquerda, sob o último campo
  • no celular, empilhados na largura toda

Não faça

  • dois primários no mesmo formulário
  • cor pela natureza da ação (verde aprovar, âmbar pausar)

Referência

Classe ou atributoPara quê
.hx-buttonsecundário (base)
.hx-button-primary / -danger / -danger-solid / -linknível na hierarquia
.hx-button-compact36 px com ponteiro fino
.hx-button-iconsó ícone, 44 × 44, com aria-label
.hx-actionsfileira de ações: empilha no celular
disabled, aria-busy="true"estado de envio

Origem: cap. 04 §3.6 · ADR-0010, ADR-0016 · desde a versão 0.1.0