Skip to content
Extensões

Selection Card

Componente de seleção visual em formato de card para escolhas exclusivas (radio). Suporta ícone, título, subtítulo e layouts horizontal/vertical. Dark mode automático via variáveis semânticas.

components/selection-card.cssAbrir no Figma

Uso

Quando e como utilizar o selection card para oferecer opções visuais ao usuário.

  • Horizontal — Até 4 opções lado a lado. Ideal para escolhas rápidas.
  • Vertical — Opções empilhadas. Ideal para descrições longas ou muitas opções.
Use selection cards quando as opções são poucas (2 a 4) e o contexto visual facilita a decisão do usuário. Para muitas opções, prefira radio buttons ou select.

Exemplos

Veja abaixo os exemplos interativos do selection card, com todos os seus estados.

Carregando exemplo...
Carregando exemplo...
Carregando exemplo...

Anatomia

Estrutura interna do componente e seus elementos.

ParteElementoDescrição
Group.selection-card-groupFieldset que agrupa as opções
Label.selection-card-labelLegenda do grupo de seleção
Options.selection-card-optionsContainer flex das opções
Card.selection-cardLabel individual clicável
Input.selection-card-inputRadio input oculto (acessível)
Ícone.selection-card-iconÍcone SVG 18x18
Text.selection-card-textWrapper de título e subtítulo
Título.selection-card-titleTexto principal, Inter 14px w500
Subtítulo.selection-card-subtitleTexto auxiliar, Inter 12px w400

Propriedades

Classes e atributos disponíveis para configurar o selection card.

PropriedadeTipoDefaultDescrição
.selection-card-groupclasseFieldset wrapper que agrupa os cards.
.selection-card-labelclasseLegenda/label do grupo.
.selection-card-optionsclasseContainer das opções (flex row).
.selection-cardclasseCard individual (elemento label).
.selection-card-inputclasseInput radio oculto visualmente.
.selection-card-iconclasseContainer do ícone do card.
.selection-card-textclasseWrapper de título e subtítulo.
.selection-card-titleclasseTítulo principal do card.
.selection-card-subtitleclasseSubtítulo opcional do card.
.selection-card-group--verticalclasseLayout vertical ao invés de horizontal.
disabledatributoDesabilita o input e o card visualmente.

Código

Snippets prontos para copiar e usar no seu projeto.

Seleção horizontal

html
<fieldset class="selection-card-group">
  <legend class="selection-card-label">Tipo de pessoa</legend>
  <div class="selection-card-options">
    <label class="selection-card">
      <input type="radio" name="tipo" value="fisica" class="selection-card-input" checked>
      <span class="selection-card-icon">
        <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18"
          viewBox="0 0 48 48" fill="none" stroke="currentColor"
          stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
          <path d="M24 22C28.4183 22 32 18.4183 32 14C32 9.58172 28.4183 6 24 6C19.5817 6 16 9.58172 16 14C16 18.4183 19.5817 22 24 22Z"/>
          <path d="M6 42C6 32.0589 14.0589 24 24 24C33.9411 24 42 32.0589 42 42"/>
        </svg>
      </span>
      <div class="selection-card-text">
        <span class="selection-card-title">Pessoa Física</span>
        <span class="selection-card-subtitle">CPF</span>
      </div>
    </label>
    <label class="selection-card">
      <input type="radio" name="tipo" value="juridica" class="selection-card-input">
      <span class="selection-card-icon">
        <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18"
          viewBox="0 0 48 48" fill="none" stroke="currentColor"
          stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
          <rect x="4" y="8" width="40" height="32" rx="2"/>
          <path d="M16 8V4"/>
          <path d="M32 8V4"/>
          <path d="M4 20H44"/>
        </svg>
      </span>
      <div class="selection-card-text">
        <span class="selection-card-title">Pessoa Jurídica</span>
        <span class="selection-card-subtitle">CNPJ</span>
      </div>
    </label>
  </div>
</fieldset>

Seleção vertical

html
<fieldset class="selection-card-group selection-card-group--vertical">
  <legend class="selection-card-label">Prioridade</legend>
  <div class="selection-card-options">
    <label class="selection-card">
      <input type="radio" name="prioridade" value="alta" class="selection-card-input">
      <span class="selection-card-icon"><!-- ícone --></span>
      <div class="selection-card-text">
        <span class="selection-card-title">Alta</span>
        <span class="selection-card-subtitle">Resolução imediata</span>
      </div>
    </label>
    <label class="selection-card">
      <input type="radio" name="prioridade" value="media" class="selection-card-input">
      <span class="selection-card-icon"><!-- ícone --></span>
      <div class="selection-card-text">
        <span class="selection-card-title">Média</span>
        <span class="selection-card-subtitle">Resolução em até 48h</span>
      </div>
    </label>
  </div>
</fieldset>

Design

Especificações visuais e tokens utilizados no componente.

Especificações

PropriedadeValor
Padding12px (--spacing-3)
Border-radius8px (--radius-md)
Gap (opções)12px (--spacing-3)
Gap (ícone → texto)32px
Fonte títuloInter 14px w500
Fonte subtítuloInter 12px w400
Ícone18x18 SVG
Transição150ms ease

Tokens utilizados

EstadoBackgroundBordaÍconeTítuloSubtítulo
Default--surface-base-neutral-container-default--border-base-neutral-default--text-base-neutral-secondary--text-base-neutral-secondary--text-base-neutral-subtle
Hover--surface-base-neutral-container-default--border-base-neutral-strong--text-base-neutral-default--text-base-neutral-default--text-base-neutral-subtle
Selecionado--surface-base-neutral-container-default--border-base-brand-default--icon-base-brand-secondary--text-base-neutral-default--text-base-neutral-subtle
Desativado--surface-base-neutral-container-emphasis--text-base-neutral-subtle--text-base-neutral-subtle--text-base-neutral-subtle

Design System interno do GALES