Pagina inicial » Codificação » Criando um elegante formulário responsivo com CSS3 e HTML5

    Criando um elegante formulário responsivo com CSS3 e HTML5

    Codificar com CSS3 mudou drasticamente o cenário dentro do desenvolvimento web frontend. Existem mais oportunidades para criar interfaces exclusivas com gradientes, sombreados e cantos arredondados. Todos esses efeitos estão sendo adotados lentamente em todos os principais navegadores da Web..

    Neste tutorial eu quero mostrar muitos desses efeitos legais do CSS3. Eu criei um formulário web simples usando alguns dos mais novos tipos de entrada HTML5. O layout também é responsivo; ele se adaptará à medida que o tamanho da janela for reduzido. Esta situação é perfeita para construir formulários web para suportar usuários de smartphones.

    Confira o código-fonte e veja se você pode acompanhar na estrutura de arquivos. Também fique à vontade para personalizar esses elementos e copiá-los em seus próprios sites.

    • Demonstração
    • Download do Código Fonte

    Construindo a estrutura do formulário

    Para começar eu criei um arquivo principal index.html juntamente com duas folhas de estilo separadas. style.css contém todos os seletores padrão enquanto responsive.css lida com diferentes tamanhos de janela. Meu doctype é HTML5 e envolvi todo o formulário em um contêiner

    .

    Este exemplo demonstra apenas os efeitos que você pode manifestar ao codificar em CSS3. Portanto, não temos nenhum script ou destino de envio para redirecionar o usuário. Meu código abaixo contém as tags de entrada de entrada para nossos primeiros elementos de formulário.

     

    A primeira área do bloco é envolvida em uma tag de seção para que possamos flutuar o layout lado a lado. A coluna da esquerda contém todas essas entradas: texto, e-mail, URL e número de telefone. Conforme você navega no seu telefone, o visor do teclado móvel deve se adaptar com base no tipo de entrada. Há vários bons motivos para oferecer suporte a esses recursos para dispositivos móveis, já que todos estão trabalhando nos dias de hoje.

    O elemento textarea também pode ter um texto de espaço reservado definido no pageload. Isso é semelhante a um rótulo que desaparece quando o usuário digita algum texto no campo. O atributo que não é transportado é autocompletar porque as textareas normalmente não preenchem o conteúdo relacionado.

    Controles da Barra Lateral

    Eu queria construir este formulário para que ele respondesse apropriadamente ao redimensionamento de exibições de janelas. Quando a janela está cheia o suficiente, ambas as colunas de entrada estão flutuando uma ao lado da outra. Mas se a largura for cortada levemente, a barra lateral direita cairá abaixo do conteúdo principal.

    Aqui está o meu HTML para a área da barra lateral:

     

    Destinatário:

    Prioridade:

    Este código, na verdade, não é nada muito confuso. Apenas uma opção simples, selecione menu e alguns botões de opção. Além disso, depois desses objetos, coloquei um botão de reset e envio no final da seção..

     

    Isso tudo parece bom e bom, então agora vamos passar para algumas propriedades CSS. Existem muitas personalizações que você pode aplicar ao trabalhar em elementos de formulário. Tente não se atolar com muito pensamento e divirta-se!

    Sombras de caixa animada

    Você notará como você guia através de cada um dos principais elementos de entrada que eu animou uma sombra externa colorida. O Google Chrome tem uma propriedade de contorno que faz algo semelhante, mas não tão extravagante. Esta pequena parte da interface é atraente para os visitantes de primeira viagem.

     / ** os elementos de formulário ** / # hongkiat-form box-sizing: border-box;  # hongkiat-form .txtinput display: bloco; font-family: "Helvetica Neue", Arial, sem serifas; estilo de borda: sólido; largura da borda: 1px; border-color: #dedede; margem inferior: 20px; tamanho da fonte: 1.55em; preenchimento: 11 px 25 px; preenchimento esquerdo: 55px; largura: 90%; cor: # 777; box-shadow: 0 1px 3px rgba (0, 0, 0, 0.1) inserção; -moz-box-shadow: 0 1px 3px rgba (0, 0, 0, 0.1) inserção; -webkit-box-shadow: 0 1px 3px rgba (0, 0, 0, 0.1) inserção; transição: 0s lineares de 0,15s da borda, 0s lineares da caixa-sombra 0,15s, 0s lineares da cor 0,15s; -webkit-transição: 0s lineares de 0,15s da borda, 0s lineares da caixa-sombra 0,15s, 0s lineares da cor 0,15s; -moz-transição: 0s lineares de 0,15s da borda, 0s lineares da caixa-sombra 0,15s, 0s lineares da cor 0,15s; -o-transição: 0s lineares de 0,15s da borda, 0s lineares da caixa-sombra 0,15s, 0s lineares da cor 0,15s;  # hongkiat-form .txtinput: focus color: # 333; border-color: rgba (41, 92, 161, 0,4); box-shadow: 0 1px 3px rgba (0, 0, 0, 0,1) inserido, 0 0 8px rgba (41, 92, 161, 0,6); -moz-box-shadow: 0 1px 3px rgba (0, 0, 0, 0,1) inserido, 0 0 8px rgba (41, 92, 161, 0,6); -webkit-box-shadow: 0 1px 3px rgba (0, 0, 0, 0,1) inserido, 0 0 8px rgba (41, 92, 161, 0,6); esboço: 0 nenhum;  

    Para segmentar cada elemento de texto, usei a classe .txtinput. Cada uma das propriedades de transição trabalha na borda, na sombra da caixa e na cor. estou a usar dimensionamento de caixa: caixa de borda; no contêiner de formulário para preenchimento não atrapalhar o nosso design responsivo.

    Eu tive que copiar esses mesmos estilos e editá-los um pouco para a área de texto. Alterei alguns dos preenchimentos e margens e anexei um ícone de plano de fundo exclusivo.

     # hongkiat-form textarea display: block; font-family: "Helvetica Neue", Arial, sem serifas; estilo de borda: sólido; largura da borda: 1px; border-color: #dedede; margem inferior: 15px; tamanho da fonte: 1.5em; preenchimento: 11 px 25 px; preenchimento esquerdo: 55px; largura: 90%; altura: 180px; cor: # 777; box-shadow: 0 1px 3px rgba (0, 0, 0, 0.1) inserção; -moz-box-shadow: 0 1px 3px rgba (0, 0, 0, 0.1) inserção; -webkit-box-shadow: 0 1px 3px rgba (0, 0, 0, 0.1) inserção; transição: 0s lineares de 0,15s da borda, 0s lineares da caixa-sombra 0,15s, 0s lineares da cor 0,15s; -webkit-transição: 0s lineares de 0,15s da borda, 0s lineares da caixa-sombra 0,15s, 0s lineares da cor 0,15s; -moz-transição: 0s lineares de 0,15s da borda, 0s lineares da caixa-sombra 0,15s, 0s lineares da cor 0,15s; -o-transição: 0s lineares de 0,15s da borda, 0s lineares da caixa-sombra 0,15s, 0s lineares da cor 0,15s;  #hongkiat-form textarea: focus color: # 333; border-color: rgba (41, 92, 161, 0,4); box-shadow: 0 1px 3px rgba (0, 0, 0, 0,1) inserido, 0 0 8px rgba (40, 90, 160, 0,6); -moz-box-shadow: 0 1px 3px rgba (0, 0, 0, 0,1) inserido, 0 0 8px rgba (40, 90, 160, 0,6); -webkit-box-shadow: 0 1px 3px rgba (0, 0, 0, 0,1) inserido, 0 0 8px rgba (40, 90, 160, 0,6); esboço: 0 nenhum;  # hongkiat-form textarea.txtblock fundo: #fff url ('https://assets.hongkiat.com/uploads/responsive-css3-form/speech.png') 5px 4px no-repeat;  

    Entradas da Barra Lateral

    Os botões de opção e os itens de menu selecionados são estilizados de maneira muito mais simples. Você pode aplicar efeitos de brilho externos e sombreamentos semelhantes nesses elementos, mas nem sempre ele fica bem. Alternativamente, os designers criarão interfaces de usuário personalizadas e as anexarão como imagens de fundo. Mas isso pode exigir uma solução alternativa jQuery para manter as opções exibindo corretamente.

     span.radiobadge display: bloco; margem inferior: 8px;  rótulo span.radiobadge font-size: 1.2em; fundo de preenchimento: 4px;  select.selmenu font-size: 17px; cor: # 676767; preenchimento: 9px! importante; borda: 1px sólido #aaa; largura: 200px;  

    Eu não fiz muito para afastá-los dos principais elementos de entrada. É muito importante ter um preenchimento extra para que os usuários se sintam à vontade para interagir com o formulário. Quando o texto é super pequeno, pode ser uma luta apenas preencher cada parte. Mantenha sua fonte grande, mas não tão grande que sobrecarregue a página.

    Botões personalizados

    Os botões de reposição e envio são projetados em uma classe própria. Eu construí um conjunto de gradientes de luz para combinar bem com os destaques azuis em nossos campos de formulário.

    Abaixo está o meu código CSS para o botão de envio no estado padrão e hover.

     #buttons #submitbtn display: bloco; flutuar: esquerda; altura: 3em; preenchimento: 0 1em; borda: 1px sólido; esboço: 0; intensidade da fonte: Negrito; tamanho da fonte: 1.3em; cor: #fff; text-shadow: 0px 1px 0px # 222; espaço branco: nowrap; quebra de linha: normal; Alinhamento vertical: meio; cursor: ponteiro; -moz-border-radius: 2px; -webkit-border-radius: 2px; raio de fronteira: 2px; border-color: # 5e890a # 5e890a # 000; -moz-box-shadow: inserção 0 1px 0 rgba (256,256,256, 0,35); -ms-box-shadow: inserção 0 1px 0 rgba (256,256,256, 0,35); -webkit-box-shadow: inserção 0 1px 0 rgba (256,256,256, 0,35); box-shadow: inserção 0 1px 0 rgba (256,256,256, 0,35); cor de fundo: rgb (226,238,175); imagem de fundo: -moz-gradiente linear (topo, rgb (226, 238, 175) 3%, rgb (188 226,77) 3%, rgb (144, 176, 38) 100%); background-image: -webkit-gradiente (linear, superior esquerdo, inferior esquerdo, cor-stop (3%, rgb (226.238.175)), cor-stop (3%, rgb (188,216,77)), cor-stop (100 %, rgb (144,176,38))); imagem de fundo: -global-linear de guaxinim (superior, rgb (226,238,175) 3%, rgb (188,216,77) 3%, rgb (144,176,38) 100%); imagem de fundo: -o-gradiente linear (top, rgb (226,238,175) 3%, rgb (188,216,77) 3%, rgb (144,176,38) 100%); imagem de fundo: -m-gradiente linear-m (em cima, rgb (226, 238, 175) 3%, rgb (188,216, 7) 3%, rgb (144, 176, 38) 100%); imagem de fundo: gradiente linear (top, rgb (226, 238, 175) 3%, rgb (188,216, 7) 3%, rgb (144, 176, 38) 100%); filtro: progid: DXImageTransform.Microsoft.gradient (startColorstr = "# e2eeaf", endColorstr = "# 90b026", GradientType = 0);  #buttons #submitbtn: hover, #buttons #submitbtn: active border-color: # 7c9826 # 7c9826 # 000; cor: #fff; -moz-box-shadow: inserção 0 1px 0 rgba (256,256,256,0,4), 0 1px 3px rgba (0,0,0,0,5); -ms-box-shadow: inserção 0 1px 0 rgba (256,256,256,0,4), 0 1px 3px rgba (0,0,0,0,5); -webkit-box-shadow: inserção 0 1px 0 rgba (256,256,256,0,4), 0 1px 3px rgba (0,0,0,0,5); box-shadow: inserção 0 1px 0 rgba (256,256,256,0,4), 0 1px 3px rgba (0,0,0,0,5); fundo: rgb (228,237,189); fundo: -moz-gradiente linear (topo, rgb (228,237,189) 2%, rgb (207,219,120) 3%, rgb (149,175,54) 100%); fundo: gradiente -webkit (linear, superior esquerdo, inferior esquerdo, cor-stop (2%, rgb (228,237,189)), cor-stop (3%, rgb (207,219,120)), cor-stop (100%, rgb ( 149,175,54))); fundo: - gradiente linear de guaxinim (superior, rgb (228,237,189) 2%, rgb (207,219,120) 3%, rgb (149,175,54) 100%); fundo: -o-gradiente linear (top, rgb (228,237,189) 2%, rgb (207,219,120) 3%, rgb (149,175,54) 100%); fundo: -ms-gradiente linear (em cima, rgb (228,237,189) 2%, rgb (207,219,120) 3%, rgb (149,175,54) 100%); fundo: gradiente linear (topo, rgb (228,237,189) 2%, rgb (207,219,120) 3%, rgb (149,175,54) 100%); filter: progid: DXImageTransform.Microsoft.gradient (startColorstr = "# e4edbd", endColorstr = "# 95af36", GradientType = 0);  

    É quase impossível manter esse tipo de seletor limpo! Há simplesmente muitas propriedades que você precisa listar e oferecer suporte a muitos navegadores legados mais antigos. O Internet Explorer pode até renderizar esses gradientes com o filtro adequado. Observe que, além dos gradientes de plano de fundo, incluí também uma nova cor de borda, cantos arredondados e uma sombra de caixa em pairar..

    O botão de reset parece semelhante, mas eu fui uma rota totalmente diferente com o esquema de cores. O cinza claro tende a cair no fundo em comparação com as cores verdes brilhantes. Nosso botão de reset provavelmente não será usado muito, então não precisa de toda a atenção.

     #buttons #resetbtn display: bloco; flutuar: esquerda; cor: # 515151; text-shadow: -1px 1px 0px #fff; margem direita: 20px; altura: 3em; preenchimento: 0 1em; esboço: 0; intensidade da fonte: Negrito; tamanho da fonte: 1.3em; espaço branco: nowrap; quebra de linha: normal; Alinhamento vertical: meio; cursor: ponteiro; -moz-border-radius: 2px; -webkit-border-radius: 2px; raio de fronteira: 2px; background-color: #fff; imagem de fundo: -moz-gradiente linear (topo, rgb (255,255,255) 2%, rgb (240,240,240) 2%, rgb (222222222) 100%); background-image: -webkit-gradiente (linear, superior esquerdo, inferior esquerdo, cor-stop (2%, rgb (255,255,255)), cor-stop (2%, rgb (240,240,240)), cor-stop (100%, rgb (222,222,222))); imagem de fundo: -global linear-ladelo (em cima, rgb (255,255,255) 2%, rgb (240,240,240) 2%, rgb (222,222,222) 100%); imagem de fundo: -o-gradiente linear (top, rgb (255,255,255) 2%, rgb (240,240,240) 2%, rgb (222,222,222) 100%); imagem de fundo: -ms-gradiente linear (top, rgb (255,255,255) 2%, rgb (240,240,240) 2%, rgb (222,222,222) 100%); imagem de fundo: gradiente linear (top, rgb (255,255,255) 2%, rgb (240,240,240) 2%, rgb (222,222,222) 100%); filtro: progid: DXImageTransform.Microsoft.gradient (startColorstr = "# ffffff", endColorstr = "# dedede", GradientType = 0); borda: 1px sólido # 969696; box-shadow: 0 1px 2px rgba (144, 144, 144, 0,4); -moz-box-shadow: 0 1px 2px rgba (144, 144, 144, 0,4); -webkit-box-shadow: 0 1px 2px rgba (144, 144, 144, 0,4); text-shadow: 0 1px 1px rgba (255, 255, 255, 0,75);  #buttons #resetbtn: hover text-shadow: 0 1px 1px rgba (255, 255, 255, 0,75); cor: # 818181; background-color: #fff; imagem de fundo: -moz-gradiente linear (topo, rgb (255,255,255) 2%, rgb (244,244,244) 2%, rgb (229,229,229) 100%); background-image: -webkit-gradiente (linear, superior esquerdo, inferior esquerdo, cor-stop (2%, rgb (255,255,255)), cor-stop (2%, rgb (244,244,244)), cor-stop (100%, rgb (229,229,229))); background-image: -bebkit-gradiente linear (top, rgb (255,255,255) 2%, rgb (244,244,244) 2%, rgb (229,229,229) 100%); imagem de fundo: -o-gradiente linear (topo, rgb ( 255,255,255) 2%, rgb (244,244,244) 2%, rgb (229,229,229) 100%); imagem de fundo: -ms-gradiente linear (topo, rgb (255,255,255) 2%, rgb (244,244,244) 2%, rgb (229,229,229) 100%); imagem de fundo: gradiente linear (top, rgb (255,255,255) 2%, rgb (244,244,244) 2%, rgb (229,229,229) 100%); filtro: progid: DXImageTransform.Microsoft.gradient (startColorstr = "# ffffff", endColorstr = "# e5e5e5", GradientType = 0); border-color: #aeaeae; box-shadow: inserção 0 1px 0 rgba (256,256,256,0,4), 0 1px 3px rgba (0,0,0,0,5);  

    Você pode até mesmo descartar o tipo de redefinição e usar esse esquema de cores branco / cinza como seu principal botão de envio. Eu usei muitos dos mesmos estilos de gradiente e efeitos de sombreamento, junto com uma sombra de texto para o rótulo interno. Definitivamente fornece um sentimento diferente para a experiência do usuário.

    Alterações de layout responsivo

    Passando para o meu outro arquivo CSS, podemos dar uma olhada nas simples consultas de mídia responsiva que eu configurei. Qualquer janela do navegador acima de 800px terá a interface completa da barra lateral. À medida que você fica abaixo desse limite, a coluna da esquerda se expande para 100% de largura e você vê os elementos da barra lateral abaixo.

     @media screen e (max-width: 800px) body padding: 10px 15px;  #container width: 100%;  # hongkiat-form #aligned width: 100%; float: nenhum; display: bloco;  #hongkiat-form #aside width: 100%; display: bloco; float: nenhum;  # hongkiat-form .txtinput, # hongkiat-form textarea largura: 85%;  #prioritycase float: left; display: bloco;  #recipientcase float: left; display: bloco; margin-right: 55px;  

    À medida que nos aproximamos do tamanho, tento adaptar cada uma das formas de entrada. A propriedade width pode acabar por mais tempo do que a própria página da web e, em seguida, temos formas de entrada saindo pela borda. Isso acontece em torno de 550px, que é onde eu quebro a próxima consulta, juntamente com as resoluções de tela do iPhone para retrato e paisagem.

     / * menor tela dropoff ******* / @media apenas tela e (max-width: 550px) # hongkiat-formulário .txtinput, # hongkiat-forma textarea largura: 80%;  / * Paisagem do iPhone ******** / @media only screen e (max-width: 480px) body padding: 10px 0px;  select.selmenu largura: 190px;  / * Retrato do iPhone ******* / @media only screen e (max-width: 320px) body padding: 10px 0px;  # hongkiat-form .txtinput, # hongkiat-form textarea largura: 70%;  # hongkiat-form #aligned overflow: hidden;  select.selmenu largura: 160px;  #recipientcase margin-right: 30px;  

    O modo de paisagem horizontal ainda mantém tudo muito bem. Eu só fiz o dropdown menu select um pouco mais fino para dar espaço para os botões de rádio. Na vista de retrato, redimensionei todos os elementos para larguras muito menores. Agora o nosso código não vai quebrar mesmo em janelas de navegador redimensionadas. Mas é bom ter suporte para smartphones iOS / Android também.

    • Demonstração
    • Download do Código Fonte

    Conclusão

    Espero que este tutorial tenha sido informativo para explicar o quanto pode ser feito em seus webforms. As novas propriedades CSS3 são poderosas o suficiente para criar animações totalmente funcionais com apenas algumas linhas de código. É realmente um momento empolgante para trabalhar no desenvolvimento da Web e seguir essas tendências.

    Se você tiver ideias ou sugestões sobre o código do tutorial, sinta-se à vontade para compartilhá-las conosco por meio da caixa de comentários abaixo.