Aprenda a criar um formulário de inscrição seguro, acessível e mais fácil de usar. O formulário final está disponível no CodePen.
1. Usar HTML significativo
Aprenda a usar elementos de formulário para aproveitar ao máximo os recursos integrados do navegador.
Copie e cole o código a seguir no editor de HTML.
<form action="#" method="post"> <h1>Sign up</h1> <section> <label>Full name</label> <input> </section> <section> <label>Email</label> <input> </section> <section> <label>Password</label> <input> </section> <button id="sign-up">Sign up</button> </form>
Clique na prévia dinâmica para ver o formulário HTML. Há entradas para nome, e-mail e senha. Este formulário usa apenas o CSS padrão do navegador.
Cada entrada está em uma seção e tem um rótulo. O botão de inscrição é, principalmente, um <button>
. Mais adiante neste codelab, você vai aprender os
poderes especiais de todos esses elementos.
Faça as seguintes perguntas:
- Os estilos padrão parecem adequados? O que você mudaria para melhorar a aparência do formulário?
- Os estilos padrão funcionam corretamente? Quais problemas podem ser encontrados ao usar seu formulário como ele está? E em dispositivos móveis? E para leitores de tela ou outras tecnologias adaptativas?
- Quem são seus usuários e quais dispositivos e navegadores você está segmentando?
Testar o formulário
Você pode adquirir muito hardware e configurar um laboratório de dispositivos, mas há maneiras mais baratas e simples de testar seu formulário em vários navegadores, plataformas e dispositivos:
- Use o Modo dispositivo do Chrome DevTools para simular dispositivos móveis.
- Envie o URL do computador para o smartphone.
- Use um serviço como o BrowserStack para testar em vários dispositivos e navegadores.
- Teste o formulário usando um leitor de tela, como a extensão do Chrome ChromeVox.
Abra a visualização dinâmica do CodePen ou acesse nossa visualização dinâmica. Teste seu formulário em diferentes dispositivos usando o Modo dispositivo do Chrome DevTools.
Agora abra o formulário em um smartphone ou outros dispositivos reais. Quais diferenças você percebe?
2. Adicionar CSS para melhorar o funcionamento do formulário
Até agora, não há nada de errado com o HTML, mas você precisa garantir que o formulário funcione bem para vários usuários em dispositivos móveis e computadores.
Nesta etapa, você vai adicionar CSS para facilitar o uso do formulário.
Copie e cole este CSS
no arquivo css/main.css
.
Clique na prévia para ver o formulário de inscrição estilizado.
Esse CSS funciona em vários navegadores e tamanhos de tela?
- Tente ajustar
padding
,margin
efont-size
para adequar aos dispositivos de teste. - O CSS é mobile-first. Use consultas de mídia
para aplicar regras de CSS a janelas de visualização com pelo menos
400px
de largura e depois a janelas de visualização com pelo menos500px
de largura. Esses pontos de interrupção são adequados? Como escolher pontos de interrupção para formulários?
3. Adicionar atributos para ajudar os usuários a inserir dados
Adicione atributos aos elementos de entrada para permitir que o navegador armazene e preencha automaticamente valores de campos de formulário e avise sobre campos com dados ausentes ou inválidos.
Atualize o HTML para que o código do formulário fique assim:
<form action="#" method="post">
<h1>Sign up</h1>
<section>
<label for="name">Full name</label>
<input id="name" name="name" autocomplete="name"
pattern="[\p{L}\.\- ]+" required>
</section>
<section>
<label for="email">Email</label>
<input id="email" name="email" autocomplete="username"
type="email" required>
</section>
<section>
<label for="password">Password</label>
<input id="password" name="password" autocomplete="new-password"
type="password" minlength="8" required>
</section>
<button id="sign-up">Sign up</button>
</form>
Os valores type
fazem muito trabalho:
- O
type="password"
oculta o texto à medida que ele é inserido e permite que o gerenciador de senhas do navegador sugira uma senha forte. - O
type="email"
oferece validação básica e garante que os usuários de dispositivos móveis recebam um teclado adequado.
Na prévia, clique no rótulo E-mail. O que acontece? O foco muda para a entrada de e-mail porque o rótulo tem um valor for
que corresponde ao id
da entrada de e-mail. Os outros rótulos e entradas funcionam da mesma forma. Os leitores de tela também anunciam o texto do marcador quando ele (ou a entrada associada) recebe o foco.
Tente enviar o formulário com um campo vazio. O navegador não envia o formulário, pede para preencher os dados ausentes e define o foco. Isso porque adicionamos o atributo require
a todas as entradas.
Agora tente enviar com uma senha que tenha menos de oito caracteres. O
navegador avisa que a senha não é longa o suficiente e define o foco na
entrada de senha devido ao atributo minlength="8"
. O mesmo vale para
pattern
(usado para a entrada de nome) e outras
restrições de validação.
O navegador faz tudo isso automaticamente, sem precisar de código extra.
Usar o valor autocomplete
name
para a entrada Nome completo faz sentido, mas e as outras entradas?
autocomplete="username"
para a entrada E-mail significa que o gerenciador de senhas do navegador vai armazenar o endereço de e-mail como o "nome" desse usuário (o nome de usuário!) para acompanhar a senha.autocomplete="new-password"
para Senha é uma dica para o gerenciador de senhas de que ele deve oferecer o armazenamento desse valor como a senha do site atual. Em seguida, useautocomplete="current-password"
para ativar o preenchimento automático em um formulário de login. Lembre-se de que este é um formulário de inscrição.
4. Ajudar os usuários a inserir senhas seguras
Você notou algo errado com a entrada de senha? Há dois problemas:
- Não há como saber se há restrições no valor da senha.
- Não é possível ver a senha para verificar se ela está correta.
Não faça os usuários adivinharem. Atualize a seção de senha de index.html
com o
seguinte código:
<section>
<label for="password">Password</label>
<button id="toggle-password" type="button"
aria-label="Show password as plain text. Warning: this displays your password on the screen.">
Show password</button>
<input id="password" name="password" type="password" minlength="8"
autocomplete="new-password" aria-describedby="password-constraints" required>
<div id="password-constraints">Eight or more characters.</div>
</section>
Isso adiciona novos recursos para ajudar os usuários a inserir senhas:
- Um botão (na verdade, apenas texto) para alternar a exibição de senha. (A funcionalidade do botão será adicionada com JavaScript.)
- Um atributo
aria-label
para o botão de alternância de senha. - Um atributo
aria-describedby
para a entrada de senha. Os leitores de tela leem o texto do rótulo, o tipo de entrada (senha) e a descrição.
Para ativar o botão de alternância de senha e mostrar aos usuários informações sobre restrições de senha, copie o JavaScript e cole no editor JavaScript.
Um ícone funcionaria melhor do que texto para ativar/desativar a exibição de senha? Teste a avaliação de usabilidade com desconto com um pequeno grupo de amigos ou colegas.
Para saber como os leitores de tela funcionam com formulários, instale a extensão ChromeVox e navegue pelo formulário. Você pode preencher o formulário usando apenas o ChromeVox? Se não, o que você mudaria?
Vá além
Este codelab não aborda vários recursos importantes:
Verificando se há senhas comprometidas. Nunca permita senhas que foram comprometidas. Você pode (e deve) usar um serviço de verificação de senhas para detectar senhas comprometidas.
Inclua links para os documentos de Termos de Serviço e Política de Privacidade. Deixe claro para os usuários como você protege os dados deles.
Atualize o estilo e a marca dos formulários para que eles correspondam ao restante do site. Isso ajuda os usuários a se sentirem confortáveis de que estão no lugar certo ao inserir nomes e endereços, e principalmente ao fazer pagamentos.
Adicione análises e monitoramento de usuários reais. Permita que o desempenho e a usabilidade do design do formulário sejam testados e monitorados para usuários reais.