Advertisement
  1. Web Design
  2. Flexbox

Como Construir um Formulário Responsivo com Flexbox

Scroll to top
Read Time: 5 min

Portuguese (Português) translation by Erick Patrick (you can also view the original English article)

Nesse tutorial, aprenderemos como lançar mão do flexbox para criar um formulário responsivo. O interessante (e excitante ao mesmo tempo) é que o flexbox permite construirmos nosso formulário sem usar media queries.

Antes de começarmos, vejamos o que construiremos (veja a versão maior e perceba como o layout muda):

Estrutura do Formulário

Certo, primeiro as coisas primeiras: a estrutura do formulário. Nós codificaremos da seguinte forma:

  • Usaremos a lista não ordenada .flex-outer para agrupar os vários elementos do formulário
  • e a lista não ordenada .flex-inner para agrupar as caixas de seleção.
  • Quase todos controles de formulário tem rótulos associados.

É isso! Ao definir duas listas não ordenadas (poderiam ser ordenadas também), criamos um formulário bem consciso. Eis como ele parece:

1
<form>
2
  <ul class="flex-outer">
3
    <li>
4
      <label for="first-name">First Name</label>
5
      <input type="text" id="first-name" placeholder="Enter your first name here">
6
    </li>
7
    <li>
8
      <label for="last-name">Last Name</label>
9
      <input type="text" id="last-name" placeholder="Enter your last name here">
10
    </li>
11
    <li>
12
      <label for="email">Email</label>
13
      <input type="email" id="email" placeholder="Enter your email here">
14
    </li>
15
    <li>
16
      <label for="phone">Phone</label>
17
      <input type="tel" id="phone" placeholder="Enter your phone here">
18
    </li>
19
    <li>
20
      <label for="message">Message</label>
21
      <textarea rows="6" id="message" placeholder="Enter your message here"></textarea>
22
    </li>
23
    <li>
24
      <p>Age</p>
25
      <ul class="flex-inner">
26
        <!-- list items here -->
27
      </ul>
28
    </li>
29
    <li>
30
      <button type="submit">Submit</button>
31
    </li>
32
  </ul>
33
</form>

Nota: usamos o elemento p ao invés do label antes da lista .flex-inner . Porque, nesse caso, não faz sentido usar o elemento label. Ele deve ser usado, apenas, para associar um texto de rótulo com um controlador de formulário.

Eis o código para as caixas de seleção:

1
<ul class="flex-inner">
2
  <li>
3
    <input type="checkbox" id="twenty-to-twentynine">
4
    <label for="twenty-to-twentynine">20-29</label>
5
  </li>
6
  <li>
7
    <input type="checkbox" id="thirty-to-thirtynine">
8
    <label for="thirty-to-thirtynine">30-39</label>
9
  </li>
10
  <!-- more list items here -->
11
</ul>

Com o código pronto, o formulário não estilizado está assim:

Não será o formulário mais bonito que você já viu, mas funciona! Ele é semântico, acessível e fluido: aspectos mais importantes que qualquer outra coisa.

Agora, já estamos prontos para aplicar alguns estilos nele.

Estilos do Formulário

Comecemos adicionando o normalize e o autoprefixer às configurações de nossa pen:

Depois, identifiquemos os recipientes flex. Em nosso caso, serão os elementos a seguir:

  • Cada um dos itens da lista .flex-outer .
  • A lista .flex-inner, que contém todas as caixas de seleção.

Adicionalmente, queremos centralizar verticalmente os itens flex em relação ao cruzamento dos eixos.

Para obter isso, devemos preparar algumas regras CSS iniciais:

1
.flex-outer li,
2
.flex-inner {
3
  display: flex;
4
  flex-wrap: wrap;
5
  align-items: center;
6
}

O próximo passo é especificar as larguras dos items flex. Começaremos com os items flex da lista .flex-outer .

Os requisitos principais:

  • A largura dos rótulos devem estar entre 120px e 220px.
  • A largura dos elementos do formulário que vem depois dos rótulos devem ter, pelo menos, 220px.

O que obtemos com isso? Cada rótulo, junto ao seu elemento do formulário, será apresentado em uma única linha vertical quando a largura total do formulário for, no mínimo, 340px. Em outros casos, os elementos do formulários (fora as caixas de seleção, como veremos adiante), empilharão verticalmente.

Nota: os valores mencionados anteriormente são arbitrários–você pode modificá-los de acordo com suas necessidades.

1
.flex-outer > li > label,
2
.flex-outer li p {
3
  flex: 1 0 120px;
4
  max-width: 220px;
5
}
6
7
.flex-outer > li > label + *,
8
.flex-inner {
9
  flex: 1 0 220px;
10
}

Botão de Submissão

Por último, para o botão de submissão, que também é um item flex, definiremos alguns estilos básicos:

1
.flex-outer li button {
2
  margin-left: auto;
3
  padding: 8px 16px;
4
  border: none;
5
  background: #333;
6
  color: #f2f2f2;
7
  text-transform: uppercase;
8
  letter-spacing: .09em;
9
  border-radius: 2px;
10
}

Caixas de Seleção

Estilizemos as caixas de seleção. Lembre-se que o recipeinte deles tem largura mínima de 220px.

Primeiro, estabelecemos a largura em 100px, dos itens flex que são parentes imediatos das caixas de seleção:

1
.flex-inner li {
2
  width: 100px;
3
}

Então, lançamos mão da propriedade justify-content para alinhá-los em relação ao eixo principal. Note que essa propriedade possui valores diferentes, agora, porém, estamos interessados no space-between:

1
.flex-inner {
2
  justify-content: space-between;
3
}

Ele funciona bem e permite-nos alcançar um alinhamento consistente para as caixas de seleção e seus respectivos rótulos. Algo que devemos mencionar é que esse valor pode distribuir os elementos da última linha estranhamente. Em algumas larguras de áreas de exibição, você verá algo assim:

Note o alinhamento dos dois últimos itens flex. Se, por algum motivo, você não gostar desse layout e prefere que eles apareçam um do lado do outro, pode tentar algo assim:

  • Removas a propriedade justify-content do recipiente flex.
  • Use percentuais para adicionar largura fixa aos elementos flex (por exemplo, width: 50%).
  • Use media queria para sobrescrever essa largura. Por exemplo, quando a área de exibição for maior que 992px, atribua width: 25% para os items flex ao invés de width: 50%.

Acima de tudo, o importante é entender duas coisas:

  • Flexbox nos dá grande flexibilidade para construir rapidamente formulários bonitos
  • e todos os valores espepecificados anteriormente funcionam bem para esse exemplo. Em seus próprios projetos, talvez precisará de valores diferentes. Por exemplo, os rótulos das caixas de seleção são pequenos e, por isso, estabelecemos uma largura fixa aos pais (100px). Entretanto, se tiverem larguras diferentes, pode ser melhor dá-los flex: 1 100px.

Estilos Finais

Antes de terminarmos, embelezemos um pouco mais o formulário. Selecione a aba CSS da demonstração abaixo e veja onde adicionamos cores e espaçamentos:

Conclusão

Como podemos ver, com um código mínimo e o poder da flexbox, fomos capazes de construir um formulário responsivo. Espero ter conseguido ajudar você a entender e a como criar seus próprios formulários flexbox.

Próximos Passos

Se quiser melhorar mais esse formulário, tenho dois desafios para você:

  • Aprimore sua aparência, sobrescrevendo os estilos padrões (por exemplo: adicione caixas de seleção customizadas)
  • e torne-o dinâmico. Por exemplo, se tiver conhecimento de WordPress, tente criar um formulário do Contact Form 7 ou do Ninja Form que preserve a estrutura e estilo desse formulário.
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.