Exemplos e diretrizes de uso para estilos de controle de formulário, opções de layout e componentes personalizados para criar uma ampla variedade de formulários.
Visão geral
Os controles de formulário do Bootstrap expandem nossos estilos de formulário reiniciados com classes. Use essas classes para ativar suas exibições personalizadas para uma renderização mais consistente em navegadores e dispositivos.
Certifique-se de usar um typeatributo apropriado em todas as entradas (por exemplo, emailpara endereço de e-mail ou numberpara informações numéricas) para aproveitar os controles de entrada mais recentes, como verificação de e-mail, seleção de número e muito mais.
Aqui está um exemplo rápido para demonstrar os estilos de formulário do Bootstrap. Continue lendo para obter documentação sobre classes obrigatórias, layout de formulário e muito mais.
Controles de formulário
Controles de formulários textuais — como <input>s, <select>s e <textarea>s — são estilizados com a .form-controlclasse. Estão incluídos estilos para aparência geral, estado de foco, dimensionamento e muito mais.
Para entradas de arquivo, troque .form-controlpor .form-control-file.
Dimensionamento
Defina as alturas usando classes como .form-control-lge .form-control-sm.
Somente leitura
Adicione o readonlyatributo booleano em uma entrada para evitar a modificação do valor da entrada. As entradas somente leitura parecem mais claras (assim como as entradas desabilitadas), mas mantêm o cursor padrão.
Texto simples somente leitura
Se você quiser ter <input readonly>elementos em seu formulário com estilo de texto simples, use a .form-control-plaintextclasse para remover o estilo de campo de formulário padrão e preservar a margem e o preenchimento corretos.
Entradas de intervalo
Defina entradas de intervalo roláveis horizontalmente usando .form-control-range.
Caixas de seleção e rádios
Caixas de seleção e rádios padrão são aprimorados com a ajuda de .form-checkuma única classe para ambos os tipos de entrada que melhora o layout e o comportamento de seus elementos HTML . As caixas de seleção são para selecionar uma ou várias opções em uma lista, enquanto os rádios são para selecionar uma opção entre muitas.
Caixas de seleção e rádios desativados são suportados, mas para fornecer um not-allowedcursor ao passar o cursor do pai <label>, você precisará adicionar o disabledatributo ao arquivo .form-check-input. O atributo disabled aplicará uma cor mais clara para ajudar a indicar o estado da entrada.
O uso de caixas de seleção e rádios são criados para dar suporte à validação de formulários baseada em HTML e fornecer rótulos concisos e acessíveis. Como tal, nossos <input>s e <label>s são elementos irmãos em oposição a um <input>dentro de um <label>. Isso é um pouco mais detalhado, pois você deve especificar ide foratributos para relacionar o <input>and <label>.
Padrão (empilhado)
Por padrão, qualquer número de caixas de seleção e rádios que são irmãos imediatos serão empilhados verticalmente e espaçados adequadamente com .form-check.
Em linha
Agrupe caixas de seleção ou rádios na mesma linha horizontal adicionando .form-check-inlinea qualquer arquivo .form-check.
Sem rótulos
Adicione .position-staticàs entradas .form-checkque não têm nenhum texto de rótulo. Lembre-se de ainda fornecer algum tipo de rótulo para tecnologias assistivas (por exemplo, usando aria-label).
Esquema
Como o Bootstrap se aplica display: blocka width: 100%quase todos os nossos controles de formulário, os formulários, por padrão, serão empilhados verticalmente. Classes adicionais podem ser usadas para variar esse layout em uma base por formulário.
Grupos de formulários
A .form-groupclasse é a maneira mais fácil de adicionar alguma estrutura aos formulários. Ele fornece uma classe flexível que incentiva o agrupamento adequado de rótulos, controles, texto de ajuda opcional e mensagens de validação de formulário. Por padrão, aplica-se apenas margin-bottom, mas seleciona estilos adicionais .form-inlineconforme necessário. Use-o com <fieldset>s, <div>s ou quase qualquer outro elemento.
Grade do formulário
Formulários mais complexos podem ser construídos usando nossas classes de grade. Use-os para layouts de formulário que exigem várias colunas, larguras variadas e opções de alinhamento adicionais.
Linha do formulário
Você também pode trocar .rowpor .form-row, uma variação de nossa linha de grade padrão que substitui as calhas de coluna padrão para layouts mais apertados e compactos.
Layouts mais complexos também podem ser criados com o sistema de grade.
Forma horizontal
Crie formulários horizontais com a grade adicionando a .rowclasse aos grupos de formulários e usando as .col-*-*classes para especificar a largura de seus rótulos e controles. Certifique-se de adicionar .col-form-labelaos seus <label>s também para que eles fiquem centralizados verticalmente com seus controles de formulário associados.
Às vezes, talvez você precise usar utilitários de margem ou preenchimento para criar o alinhamento perfeito que você precisa. Por exemplo, removemos o padding-toprótulo de entradas de rádio empilhadas para alinhar melhor a linha de base do texto.
Dimensionamento de rótulo de formulário horizontal
Certifique-se de usar .col-form-label-smou .col-form-label-lgpara seus <label>s ou <legend>s para seguir corretamente o tamanho de .form-control-lge .form-control-sm.
Dimensionamento da coluna
Conforme mostrado nos exemplos anteriores, nosso sistema de grade permite que você coloque qualquer número de .cols dentro de um .rowou .form-row. Eles dividirão a largura disponível igualmente entre eles. Você também pode escolher um subconjunto de suas colunas para ocupar mais ou menos espaço, enquanto os .cols restantes dividem igualmente o resto, com classes de coluna específicas como .col-7.
Dimensionamento automático
O exemplo abaixo usa um utilitário flexbox para centralizar verticalmente o conteúdo e muda .colpara .col-autoque suas colunas ocupem apenas o espaço necessário. Dito de outra forma, a coluna se dimensiona com base no conteúdo.
Você pode então remixar isso mais uma vez com classes de coluna específicas de tamanho.
Use a .form-inlineclasse para exibir uma série de rótulos, controles de formulário e botões em uma única linha horizontal. Os controles de formulário dentro de formulários embutidos variam ligeiramente de seus estados padrão.
Os controles são display: flex, recolhendo qualquer espaço em branco HTML e permitindo que você forneça controle de alinhamento com utilitários de espaçamento e flexbox .
Os controles e grupos de entrada recebem width: autopara substituir o padrão do Bootstrap width: 100%.
Os controles só aparecem em linha em viewports com pelo menos 576 pixels de largura para levar em conta as viewports estreitas em dispositivos móveis.
Pode ser necessário endereçar manualmente a largura e o alinhamento de controles de formulário individuais com utilitários de espaçamento (como mostrado abaixo). Por fim, certifique-se de sempre incluir um <label>com cada controle de formulário, mesmo se precisar ocultá-lo de visitantes que não são leitores de tela com .sr-only.
Controles e seleções de formulários personalizados também são suportados.
Alternativas para rótulos ocultos
Tecnologias assistivas, como leitores de tela, terão problemas com seus formulários se você não incluir um rótulo para cada entrada. Para esses formulários embutidos, você pode ocultar os rótulos usando a .sr-onlyclasse. Existem outros métodos alternativos de fornecer um rótulo para tecnologias assistivas, como o atributo aria-label, aria-labelledbyou . titleSe nenhum deles estiver presente, as tecnologias assistivas podem recorrer ao uso do placeholderatributo, se presente, mas observe que o uso de placeholdercomo substituto de outros métodos de rotulagem não é recomendado.
Texto de ajuda
O texto de ajuda em nível de bloco em formulários pode ser criado usando .form-text(anteriormente conhecido como .help-blockna v3). O texto de ajuda embutido pode ser implementado de forma flexível usando qualquer elemento HTML embutido e classes de utilitário como .text-muted.
Associando texto de ajuda a controles de formulário
O texto de ajuda deve ser explicitamente associado ao controle de formulário ao qual se relaciona usando o aria-describedbyatributo. Isso garantirá que as tecnologias assistivas, como leitores de tela, anunciem esse texto de ajuda quando o usuário focar ou entrar no controle.
O texto de ajuda abaixo das entradas pode ser estilizado com .form-text. Esta classe inclui display: blocke adiciona alguma margem superior para facilitar o espaçamento das entradas acima.
Sua senha deve ter de 8 a 20 caracteres, conter letras e números e não deve conter espaços, caracteres especiais ou emoji.
O texto embutido pode usar qualquer elemento HTML embutido típico (seja um <small>, <span>, ou qualquer outro) com nada mais do que uma classe de utilitário.
Formulários desativados
Adicione o disabledatributo booleano em uma entrada para evitar interações do usuário e torná-la mais clara.
Adicione o disabledatributo a a <fieldset>para desabilitar todos os controles dentro.
Advertência com âncoras
Por padrão, os navegadores tratarão todos os controles de formulário nativos ( <input>, <select>e <button>elementos) dentro de <fieldset disabled>como desabilitados, impedindo interações de teclado e mouse neles. No entanto, se o seu formulário também incluir <a ... class="btn btn-*">elementos, eles receberão apenas um estilo de pointer-events: none. Conforme observado na seção sobre estado desabilitado para botões (e especificamente na subseção para elementos âncora), essa propriedade CSS ainda não é padronizada e não é totalmente compatível com o Internet Explorer 10 e não impedirá que usuários de teclado sejam capaz de focar ou ativar esses links. Portanto, por segurança, use JavaScript personalizado para desativar esses links.
Compatibilidade entre navegadores
Embora o Bootstrap aplique esses estilos em todos os navegadores, o Internet Explorer 11 e versões anteriores não oferecem suporte total ao disabledatributo em um arquivo <fieldset>. Use JavaScript personalizado para desativar o conjunto de campos nesses navegadores.
Validação
Forneça feedback valioso e acionável para seus usuários com validação de formulário HTML5 – disponível em todos os nossos navegadores compatíveis . Escolha entre os comentários de validação padrão do navegador ou implemente mensagens personalizadas com nossas classes integradas e JavaScript inicial.
No momento, recomendamos o uso de estilos de validação personalizados, pois as mensagens de validação padrão do navegador nativo não são expostas de forma consistente a tecnologias assistivas em todos os navegadores (principalmente, Chrome em desktop e dispositivos móveis).
Como funciona
Veja como a validação de formulário funciona com o Bootstrap:
A validação de formulários HTML é aplicada por meio de duas pseudoclasses de CSS :invalide :valid. Aplica-se a <input>, <select>, e <textarea>elementos.
Bootstrap abrange os estilos :invalide :validpara a classe pai .was-validated, geralmente aplicada ao <form>. Caso contrário, qualquer campo obrigatório sem valor aparecerá como inválido no carregamento da página. Dessa forma, você pode escolher quando ativá-los (normalmente após a tentativa de envio do formulário).
Para redefinir a aparência do formulário (por exemplo, no caso de envios de formulários dinâmicos usando AJAX), remova a .was-validatedclasse do formulário <form>novamente após o envio.
Como um fallback, .is-invalide .is-validclasses podem ser usadas em vez das pseudo-classes para validação do lado do servidor . Eles não exigem uma .was-validatedclasse pai.
Devido a restrições em como o CSS funciona, não podemos (no momento) aplicar estilos a um <label>que vem antes de um controle de formulário no DOM sem a ajuda de JavaScript personalizado.
Todos os navegadores modernos suportam a API de validação de restrição , uma série de métodos JavaScript para validar controles de formulário.
As mensagens de feedback podem utilizar os padrões do navegador (diferentes para cada navegador e não estilizados via CSS) ou nossos estilos de feedback personalizados com HTML e CSS adicionais.
Você pode fornecer mensagens de validade personalizadas setCustomValidityem JavaScript.
Com isso em mente, considere as demonstrações a seguir para nossos estilos de validação de formulário personalizados, classes opcionais do lado do servidor e padrões do navegador.
Estilos personalizados
Para mensagens personalizadas de validação de formulário do Bootstrap, você precisará adicionar o novalidateatributo boolean ao seu arquivo <form>. Isso desativa as dicas de ferramentas de feedback padrão do navegador, mas ainda fornece acesso às APIs de validação de formulário em JavaScript. Tente enviar o formulário abaixo; nosso JavaScript interceptará o botão de envio e enviará feedback para você. Ao tentar enviar, você verá os estilos :invalide :validaplicados aos seus controles de formulário.
Os estilos de feedback personalizados aplicam cores, bordas, estilos de foco e ícones de plano de fundo personalizados para comunicar melhor o feedback. Os ícones de fundo para <select>s estão disponíveis apenas com .custom-select, e não com .form-control.
Padrões do navegador
Não está interessado em mensagens de feedback de validação personalizadas ou em escrever JavaScript para alterar os comportamentos do formulário? Tudo bem, você pode usar os padrões do navegador. Tente enviar o formulário abaixo. Dependendo do seu navegador e sistema operacional, você verá um estilo de feedback ligeiramente diferente.
Embora esses estilos de feedback não possam ser estilizados com CSS, você ainda pode personalizar o texto de feedback por meio de JavaScript.
Lado do servidor
Recomendamos usar a validação do lado do cliente, mas caso precise de validação do lado do servidor, você pode indicar campos de formulário inválidos e válidos com .is-invalide .is-valid. Observe que .invalid-feedbacktambém é compatível com essas classes.
Elementos compatíveis
Nossos formulários de exemplo mostram s textuais nativos <input>acima, mas os estilos de validação de formulário também estão disponíveis para <textarea>s e controles de formulário personalizados.
Dicas de ferramentas
Se o layout do formulário permitir, você poderá trocar as .{valid|invalid}-feedbackclasses por .{valid|invalid}-tooltipclasses para exibir comentários de validação em uma dica de ferramenta com estilo. Certifique-se de ter um pai com position: relativeele para o posicionamento da dica de ferramenta. No exemplo abaixo, nossas classes de coluna já têm isso, mas seu projeto pode exigir uma configuração alternativa.
Formulários personalizados
Para ainda mais personalização e consistência entre navegadores, use nossos elementos de formulário totalmente personalizados para substituir os padrões do navegador. Eles são construídos sobre marcação semântica e acessível, portanto, são substitutos sólidos para qualquer controle de formulário padrão.
Caixas de seleção e rádios
Cada caixa de seleção e rádio <input>e <label>emparelhamento são agrupados em um <div>para criar nosso controle personalizado. Estruturalmente, esta é a mesma abordagem que nosso padrão .form-check.
Usamos o seletor irmão ( ~) para todos os nossos <input>estados - como :checked- para estilizar adequadamente nosso indicador de formulário personalizado. Quando combinado com a .custom-control-labelclasse, também podemos estilizar o texto de cada item com base no <input>estado do .
Ocultamos o padrão <input>com opacitye usamos o .custom-control-labelpara criar um novo indicador de formulário personalizado em seu lugar com ::beforee ::after. Infelizmente não podemos construir um personalizado apenas <input>porque o CSS contentnão funciona nesse elemento.
Nos estados verificados, usamos ícones SVG incorporados em base64 do Open Iconic . Isso nos fornece o melhor controle para estilo e posicionamento em navegadores e dispositivos.
Caixas de seleção
As caixas de seleção personalizadas também podem utilizar a :indeterminatepseudoclasse quando configuradas manualmente via JavaScript (não há atributo HTML disponível para especificá-lo).
Se você estiver usando jQuery, algo assim deve ser suficiente:
Rádios
Em linha
Desabilitado
Caixas de seleção e rádios personalizados também podem ser desativados. Adicione o disabledatributo booleano ao <input>e o indicador personalizado e a descrição do rótulo serão estilizados automaticamente.
Comuta
Um switch tem a marcação de uma caixa de seleção personalizada, mas usa a .custom-switchclasse para renderizar um switch de alternância. Os switches também suportam o disabledatributo.
Selecione o menu
<select>Os menus personalizados precisam apenas de uma classe personalizada .custom-selectpara acionar os estilos personalizados. Os estilos personalizados são limitados à <select>aparência inicial do s e não podem modificá- <option>los devido às limitações do navegador.
Você também pode escolher entre seleções personalizadas pequenas e grandes para corresponder às nossas entradas de texto de tamanho semelhante.
O multipleatributo também é suportado:
Assim como o sizeatributo:
Variar
Crie <input type="range">controles personalizados com .custom-range. A faixa (o plano de fundo) e a miniatura (o valor) são estilizadas para aparecer da mesma forma nos navegadores. Como apenas o IE e o Firefox suportam “preencher” sua faixa da esquerda ou direita do polegar como um meio de indicar visualmente o progresso, atualmente não oferecemos suporte a isso.
As entradas de intervalo têm valores implícitos para mine max— 0e 100, respectivamente. Você pode especificar novos valores para aqueles que usam os atributos mine .max
Por padrão, o intervalo insere “snap” para valores inteiros. Para alterar isso, você pode especificar um stepvalor. No exemplo abaixo, dobramos o número de etapas usando step="0.5".
Navegador de arquivos
O plugin recomendado para animar a entrada de arquivo personalizado: bs-custom-file-input , é o que estamos usando atualmente aqui em nossos documentos.
A entrada de arquivo é a mais complicada do grupo e requer JavaScript adicional se você quiser conectá-los com a função Escolher arquivo… e o texto do nome do arquivo selecionado.
Ocultamos o arquivo padrão <input>via opacitye, em vez disso, estilizamos o <label>. O botão é gerado e posicionado com ::after. Por fim, declaramos um widthe heightno <input>para o espaçamento adequado para o conteúdo ao redor.
Traduzindo ou personalizando as strings com SCSS
A :lang()pseudo-classe é usada para permitir a tradução do texto “Browse” para outros idiomas. Substitua ou adicione entradas à $custom-file-textvariável Sass com a tag de idioma relevante e strings localizadas. As strings em inglês podem ser personalizadas da mesma maneira. Por exemplo, veja como se pode adicionar uma tradução em espanhol (o código de idioma do espanhol é es):
Aqui está lang(es)em ação na entrada de arquivo personalizado para uma tradução em espanhol:
Você precisará definir o idioma do seu documento (ou subárvore dele) corretamente para que o texto correto seja exibido. Isso pode ser feito usando o langatributo no <html>elemento ou o Content-Languagecabeçalho HTTP , entre outros métodos.
Traduzindo ou personalizando as strings com HTML
O Bootstrap também fornece uma maneira de traduzir o texto “Browse” em HTML com o data-browseatributo que pode ser adicionado ao rótulo de entrada personalizado (exemplo em holandês):