Vous êtes sur la page 1sur 70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

CAPTULO 11

Bootstrap e formulrios HTML5


"O trabalho a melhor das regularidades e a pior das intermitncias"
Victor Marie Hugo

11.1 - BOOTSTRAP E FRAMEWORKS DE CSS


Uma tendncia em alta no mundo front-end o uso de frameworks CSS com
estilos base para nossa pgina. Ao invs de comear todo projeto do zero, criando
todo estilo na mo, existem frameworks que j trazem toda uma base construda de
onde partiremos nossa aplicao.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

1/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Existem muitas opes mas o Twitter Bootstrap talvez seja o de maior


notoriedade. Ele foi criado pelo pessoal do Twitter a partir de cdigo que eles j
usavam internamente. Foi liberado como opensource e ganhou muitos adeptos. O
projeto cresceu bastante em maturidade e importncia no mercado a ponto de se
desvincular do Twitter e ser apenas o Bootstrap.
http://getbootstrap.com
O Bootstrap traz uma srie de recursos:
Reset CSS
Estilo visual base pra maioria das tags
cones
Grids prontos pra uso
Componentes CSS
Plugins JavaScript
Tudo responsivo e mobile-first
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

2/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Como o prprio nome diz, uma forma de comear o projeto logo com um
design e recursos base sem perder tempo com design no incio.

11.2 - ESTILO E COMPONENTES BASE


Para usar o Bootstrap, apenas inclumos seu CSS na pgina:
<link rel="stylesheet" href="css/bootstrap.css">

S isso j nos traz uma srie de benefcios. Um reset aplicado, e nossas tags
ganham estilo e tipografia base. Isso quer dizer que podemos usar tags como um
H1 ou um P agora e elas tero um estilo caracterstico do Bootstrap.
Alm disso, ganhamos muitas classes com componentes adicionais que
podemos aplicar na pgina. So vrias opes. Por exemplo, pra criar um ttulo
com uma frase de abertura em destaque, usamos o jumbotron:
<div class="jumbotron">
<div class="container">
<h1>tima escolha!</h1>
<p>Obrigado por comprar na Mirror Fashion.</p>
</div>
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

3/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

</div>

No exerccio a seguir vamos usar vrios outros componentes.

Nova editora Casa do Cdigo com livros de uma forma diferente


Editoras tradicionais pouco ligam para ebooks e novas
tecnologias. No conhecem programao para revisar os livros
tecnicamente a fundo. No tm anos de experincia em didticas
com cursos.
Conhea a Casa do Cdigo, uma editora diferente, com curadoria da Caelum
e obsesso por livros de qualidade a preos justos.
Casa do Cdigo, ebook com preo de ebook.

11.3 - A PGINA DE CHECKOUT DA MIRROR FASHION


Neste captulo, vamos desenvolver a pgina de checkout da Mirror Fashion.
Aps escolher o produto desejado, o usurio cai nessa pgina para efetivar a
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

4/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

compra.
Nossa loja foi otimizada pra compra direta, sem carrinho de compras. O cliente
escolhe o produto e compra direto, com um clique. S precisamos coletar os dados
de dele, do pagamento e da entrega.
O foco dessa nova pgina ento a coleta de informaes para efetivao da
compra. Um grande formulrio complexo com os campos necessrios. Vamos usar
o Bootstrap para desenvolver essa pgina com mais facilidade e rapidez.

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

5/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Figura 11.1: Site visto no Desktop

E, como aprendemos antes, vamos desenvolver tudo mobile-first. Nesse


momento, portanto, ainda no teremos o design Desktop mostrado acima, mas
uma verso mobile em uma coluna. Veremos como adaptar a verso Desktop com
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

6/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Bootstrap depois.

Figura 11.2: Site visto no Mobile


http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

7/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

11.4 - EXERCCIO OPCIONAL: INCIO DO CHECKOUT SEM PHP


1. Se voc no fez os captulos com PHP, crie agora sua pgina checkout.html com
HTML simples pra poder seguir esse captulo. No h dependncia obrigatria de
PHP no curso.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Checkout Mirror Fashion</title>
<meta name="viewport" content="width=device-width">
</head>
<body>
<h1>tima escolha!</h1>
<p>Obrigado por comprar na Mirror Fashion!
Preencha seus dados para efetivar a compra.</p>
<h2>Sua compra</h2>
<dl>
<dt>Produto</dt>
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

8/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<dd>Fuzzy Cardigan</dd>
<dt>Cor</dt>
<dd>verde</dd>
<dt>Tamanho</dt>
<dd>40</dd>
<dt>Preo</dt>
<dd>R$ 129,00</dd>
</dl>
</body>
</html>

Teste a pgina simples no navegador.

11.5 - EXERCCIOS: PGINA DE CHECKOUT


1. Abra a pgina de checkout no navegador e veja que est com o estilo padro do
navegador.
O primeiro passo incluirmos o arquivo CSS do bootstrap na nossa pgina. Voc
vai ver uma mudana sutil no estilo da pgina, principalmente nos aspectos
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

9/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

tipogrficos.
Coloque no <head>da pgina de checkout o CSS do bootstrap:
<link rel="stylesheet" href="css/bootstrap.css">

Teste novamente a pgina.


2. O primeiro componente pronto do bootstrap que vamos usar o jumbotron.
basicamente a abertura do site, contendo sua chamada principal. Para us-lo basta
criar um divcom a classe jumbotron.
Envolva as chamadas de abertura que j tnhamos com h1e pem dois <div>. O
primeiro divcontm class="jumbotron"e o segundo, class="container".
<div class="jumbotron">
<div class="container">
<!-- h1 e p que j tnhamos -->
<h1>tima escolha!</h1>
<p>Obrigado....</p>
</div>
</div>
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

10/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Abra a pgina e note que um estilo diferente aparece. Teste redimensionar o


navegador e veja que o tamanho da fonte e espaamento do componente se
ajustam automaticamente. O Bootstrap usa responsive design automaticamente
em seus componentes.
Para saber mais do jumbotron: http://getbootstrap.com/components/#jumbotron
3. Use um outro componente do Bootstrap, o panel para organizar a seo que
mostramos as informaes da compra do cliente. Cuidado com o exerccio, com os
nomes das classes, que confundem bastante.
Adapte o HTML do H2 "Sua compra" e do DL que temos para se adequar ao
componente de panel:
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Sua compra</h2>
</div>
<div class="panel-body">
<!-- ... aqui vai o <dl> que j temos hoje ... -->
</div>
</div>
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

11/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Repare como os nomes das classes, apesar de serem muitos, fazem sentido para
isolar cada parte do painel.
Teste novamente a pgina no navegador e veja o resultado. Temos um painel
arredondado com ttulo em destaque no topo.
Para saber mais sobre painis do Bootstrap:
http://getbootstrap.com/components/#panels
4. Repare no exerccio anterior do jumbotron que o divcontainer responsvel
por centralizar e dar espaamento na tela. Muito parecido alis com o container
que havamos criado antes em nosso projeto, mas agora uma classe do Bootstrap.
Crie um outro div container pra conter o panelque acabamos de criar e veja como
ele fica melhor posicionado no centro da tela.
<div class="container">
<!-- ... panel aqui ... -->
</div>

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

12/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

5. Dentro do panel-body, logo no topo, acima da lista de definies <dl>, vamos


colocar uma foto do produto escolhido e na cor escolhida.
O segredo gerar o endereo da imagem levando em conta os parmetros do ID e
da cor:
img/produtos/foto<?= $_POST["id"] ?>-<?= $_POST["cor"] ?>.png

Com Bootstrap, podemos ainda acrescentar algumas classes nessa imagem para
obter resultados interessantes. A classe img-responsivefaz a imagem ficar
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

13/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

flexvel e nunca estourar o tamanho do pai. E a classe img-thumbnailfaz a


imagem ficar centralizada com uma borda de destaque.
Adicione a imagem do produto logo acima da lista <dl>dentro do div panel-body:
<img src="img/produtos/foto<?= $_POST["id"] ?>-<?= $_POST["cor"] ?>.png"
class="img-thumbnail img-responsive">

Teste novamente a pgina.

Imagem sem PHP


Para o exerccio de Bootstrap em si, voc pode usar uma imagem esttica
sem envolver o PHP para gerar o endereo:
<img src="img/produtos/foto1-verde.png" alt="Fuzzy Cardigan"
class="img-thumbnail img-responsive">

6. (opcional) No painel, troque a classe panel-defaultpela classe panel-success.


Teste e veja o resultado. Consulte outros valores na documentao:
http://getbootstrap.com/components/#panels
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

14/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

J conhece os cursos online Alura?


A Alura oferece dezenas de cursos online em sua plataforma
exclusiva de ensino que favorece o aprendizado com a
qualidade reconhecida da Caelum. Voc pode escolher um
curso nas reas de Java, Ruby, Web, Mobile, .NET e outros,
com uma assinatura que d acesso a todos os cursos.
Conhea os cursos online Alura.

11.6 - FORMULRIOS A FUNDO


Quando solicitamos que o usurio informe seu nome, seu endereo de email, se
ele quer receber uma newsletter, qualquer informao, precisamos utilizar os
elementos corretos. Para isso, vamos conhecer os formulrios HTML: a tag
<form>.
J usamos alguns antes. Agora vamos ver a fundo seus desdobramentos.

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

15/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Atributos do Form
<form action="/efetivar.php" method="POST">
</form>

O formulrio exemplificado anteriormente apresenta o atributo obrigatrio


action. O valor desse atributo o endereo para onde as informaes do
formulrio sero enviadas, e esse valor depende inteiramente de como feita a
aplicao que receber essas informaes no lado do servidor.
O segundo atributo, method, especifica o mtodo do HTTP pelo qual essa
informao ser transmitida. O valor post, de maneira simplista, significa que
queremos inserir as informaes desse formulrio, salv-la de alguma maneira.
Outro valor possvel para esse atributo, o get, utilizado quando queremos obter
alguma coisa a partir das informaes que estamos transmitindo, por exemplo, um
formulrio de busca.

Componentes
Porm, neste exemplo, no temos nenhum elemento para capturar as
informaes. Na verdade, somente a marcao da tag <form>no mostra nenhum
elemento visvel no navegador. Vamos supor que precisemos de uma informao
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

16/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

como o nome do visitante do nosso site para guardar em um banco de dados.


Vamos adicionar alguns elementos ao nosso formulrio anterior:
<form action="/efetivar.php" method="POST">
<label for="nome">Nome:</label>
<input type="text" name="nome" id="nome">
<input type="submit">
</form>

Label
Adicionamos a marcao do elemento <label>. Esse elemento uma tag de
contedo, e seu texto exibido de maneira comum dentro do nosso formulrio, a
nica diferena que essa marcao faz uma ligao com outro elemento qualquer
em nosso formulrio. Note que nosso labeltem o atributo for, que recebe o valor
nome.
Quando clicamos com o mouse sobre o texto marcado com a tag label, o
elemento que tem o atributo idcom o mesmo valor que o atributo fordo label
selecionado para que possamos interagir com ele. No exemplo, esse elemento
vinculado ao label um campo de texto que declaramos com a tag input.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

17/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Essa marcao <label> de extrema importncia para a usabilidade e


acessibilidade dos nossos formulrios.

Input
A maioria dos elementos que utilizamos nos formulrios para capturar
informaes dos usurios so da tag <input>. No exemplo anterior, utilizamos
duas variaes dessa tag.
Os tipos diferentes de inputsso determinados pelo valor do seu atributo type,
e no exemplo ns utilizamos dois muito comuns. A seguir, vamos detalhar os tipos
aceitos para essa tag.
text
<input type="text" name="nome_usuario">

Provavelmente o tipo mais comum de input, o que tem o atributo type="text",


utilizado quando queremos que o usurio envie uma informao textual simples,
pois esse elemento no permite a entrada de quebras de linha.
Ao enviarmos o formulrio, a informao digitada pelo usurio acessvel no
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

18/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

lado do servidor por meio do atributo name, utilizado para identificar cada
informao contida nos parmetros da requisio. Para ter acesso informao
digitada quando tratamos o formulrio com algum tipo de script, para validar o
contedo por exemplo, necessrio obter o contedo da propriedade valuedo
objeto no DOM.
password
O input que recebe o atributo type="password" similar ao anterior, do tipo
text, com a diferena de que ele no exibe exatamente o texto digitado pelo
usurio, e sim uma srie de smbolos *ou outro, dependendo do navegador e
sistema operacional.
<input type="password" name="senha">

checkbox
O elemento inputdo tipo checkbox exibe uma caixa para marcao, muito
utilizado quando temos uma opo que pode ser marcada como sim ou no, por
exemplo "Aceito os termos de contrato do usurio", ou "Manter a sesso ativa" em
formulrios de login.

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

19/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Apesar de muito utilizado com o valor true, possvel determinar qualquer


valor para o checkbox.
<input id="contrato" name="contrato" type="checkbox" value="sim">
<label for="contrato">Aceito os termos do contrato.</label>

radio
<p>
<input type="radio" name="idade" id="idade5" value="5">
<label for="idade5">Menos de 5 anos</label>
</p>
<p>
<input type="radio" name="idade" id="idade10" value="10">
<label for="idade10">Menos de 10 anos</label>
</p>
<p>
<input type="radio" name="idade" id="idade15" value="15">
<label for="idade15">Menos de 15 anos</label>
</p>
<p>
<input type="radio" name="idade" id="idade20" value="20">
<label for="idade20">Menos de 20 anos</label>
</p>

Quando desejamos que o usurio escolha somente uma entre uma srie de
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

20/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

opes, podemos utilizar elementos inputdo tipo radio. Quando h mais de um


elemento desse tipo com o mesmo valor no atributo name, somente um pode ser
selecionado.
button
<input type="button" name="mostra_dialogo" value="Clique aqui!">

O elemento inputcom o atributo type="button" renderiza um boto dentro do


formulrio, mas esse boto no tem nenhuma funo direta nele e comumente
utilizado para disparar eventos para a execuo de scripts.
O texto do boto determinado pelo valor do atributo value.
submit
<input type="submit" name="enviar" value="Enviar">

O elemento inputcom o atributo type="submit" similar ao boto, mas


quando acionado esse elemento inicia a chamada que envia as informaes do
formulrio para o endereo indicado no atributo actiondo <form>.
image
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

21/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<input type="image" name="botao" src="images/enviar.png" width="20"


height="18">

possvel substituir o boto de envio do formulrio por uma imagem,


possibilitando criar um visual mais atrativo para o formulrio.
reset
<input type="reset" name="reset" value="Limpar">

O inputcom type="reset" elimina os valores entrados anteriormente nos


elementos de um formulrio, permitindo que o usurio limpe o mesmo.

<input> e <button>
A tag <input>dos tipos button, submit e reset pode ser substituda pela tag
<button>. Neste caso, o texto do boto passa a ser indicado como contedo
da tag. Ainda assim necessrio especificar o valor do atributo type,
inclusive se ele for button:
<button type="button" name="enviar">Clique aqui</button>

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

22/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

file
<input type="file" name="anexo">

Quando necessrio que o usurio envie um arquivo para a aplicao no lado do


servidor necessrio o uso do inputdo tipo file. Para o correto envio dos arquivos,
muitas vezes tambm necessrio adicionar o atributo
enctype="multipart/form-data"na tag <form>.
hidden
<input type="hidden" name="codigo" value="abc012xyz789">

Muitas vezes precisamos enviar e receber informaes que no tm utilidade


direta para o usurio e, portanto, no devem ser exibidos no formulrio. Para essa
finalidade, existe o inputdo tipo hidden, que somente carrega em si um valor.

Textarea
Quando desejamos que o usurio insira uma quantidade grande de informaes
textuais, incluindo quebras de linha, necessrio o uso da tag textarea
<textarea name="texto"></textarea>
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

23/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Select, Optgroup e Option


Quando desejamos que o usurio selecione entre diversas opes, com a
possibilidade de flexibilizar a maneira com que ele interage com o componente do
formulrio, podemos utilizar a tag <select>.
<select name="cidades">
<option value="bsb">Braslia</option>
<option value="rj">Rio de Janeiro</option>
<option value="sp">So Paulo</option>
</select>

Em sua configurao padro, o controle selectexibe o que conhecemos como


menu drop-down, permitindo que somente uma das opes possa ser
selecionada. Caso seja adicionado o atributo multiple, possvel selecionar mais
de uma opo da mesma maneira que selecionamos diversos arquivos no
explorador do sistema operacional.
<select multiple name="cidades">
<option value="bsb">Braslia</option>
<option value="rj">Rio de Janeiro</option>
<option value="sp">So Paulo</option>
</select>

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

24/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Caso necessrio, dependendo do nmero de opes apresentadas ao usurio,


pode ser interessante agrup-las:
<select name="bairro">
<optgroup label="Braslia">
<option value="asan_bsb">Asa Norte</option>
<option value="asas_bsb">Asa Sul</option>
</optgroup>
<optgroup label="So Paulo">
<option value="vlmariana_sp">Vila Mariana</option>
<option value="centro_sp">Centro</option>
</optgroup>
<optgroup label="Rio de Janeiro">
<option value="botafogo_rj">Botafogo</option>
<option value="centro_rj">Centro</option>
</optgroup>
</select>

11.7 - NOVOS COMPONENTES DO HTML5


Com a nova especificao do HTML, possvel utilizar uma srie de novos
componentes que facilitam bastante o desenvolvimento de formulrios. At o
momento em que essa apostila foi escrita, muitos componentes so incompatveis
com os navegadores, mas mostram, na maioria dos casos, um campo de texto
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

25/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

permitindo a entrada de qualquer tipo de informao.


A maioria dos novos tipos de componentes de formulrio foram criados para
permitir que o navegador adapte o mtodo de entrada para o mais adequado em
cada um dos casos. Alguns desses componentes j so compatveis com
navegadores de dispositivos mveis.
email
<input type="email" name="email">

O inputdo tipo email permite que os dispositivos mveis, principalmente,


exibam um teclado adaptado para facilitar esse tipo de entrada. Por exemplo, o
iPhone exibe um teclado com o caractere @e com as opes de domnio .com.

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

26/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

number
<input type="number" max="100" step="5">

O inputdo tipo number, alm de exibir um teclado numrico em dispositivos


mveis, nos navegadores modernos exibe um controle que permite incrementar
ou decrementar o valor do campo clicando em uma seta para cima ou para baixo.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

27/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Alm dessa diferena visual, possvel determinar valores mnimos, mximos e


se h uma escala de valores vlidos. No exemplo anterior, o elemento deve aceitar
nmeros mltiplos de 5 com o limite do valor "100".
url
<input type="url" name="endereco">

O elemento inputcom tipo url permite que os dispositivos exibam um teclado


como, no exemplo do iPhone, opes como wwwe .com.
range
<input type="range" name="volume">

O elemento inputdo tipo range exibe um controle deslizante nos navegadores


modernos, permitindo uma interao mais agradvel quando precisamos de um
valor numrico em escala. O controle guarda um valor numrico em seu atributo
value. Assim como o inputdo tipo number, possvel especificar um valor
mnimo, mximo e uma escala.
A renderizao mais comum desse controle, em um Chrome:
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

28/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

date, month, week, time, datetime e datetime-local


<input type="date" name="validade">

Os controles de "date picker" so feitos para coletar uma informao de data ou


hora. So vrias as possibilidades de formato de data ou hora necessrias. No
navegador Opera, quando utilizado esse tipo de controle, o usurio pode selecionar
uma data a partir de um calendrio. possvel especificar datas mnima e mxima.
Em geral, os navegadores devem oferecer alguma funcionalidade de escolha de
datas para o usurio, como o Chrome:

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

29/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Ou o iPhone:

color
<input type="color" name="cor_olhos">

O elemento inputdo tipo color permite que seja exibido um "color picker" para
o preenchimento do seu valor. O Chrome no Mac, por exemplo, exibe o color
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

30/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

picker padro do sistema:

search
<input type="search" results="10">

O inputdo tipo search exibe um campo especfico para busca. O atributo


"results" determina quantas ltimas buscas sero armazenadas e lembradas, alm
de exibir uma lupa dentro do campo (Safari e Chrome).
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

31/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

tel
<input type="tel" name="telefone">

O inputdo tipo tel foi especificado para coletar um nmero de telefone.


Em dispositivos com teclados virtuais como smartphones e tablets, comum o
teclado ser adaptado para exibir apenas opes relevantes entrada de nmeros
telefnicos, como no iPhone:

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

32/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

11.8 - NOVOS ATRIBUTOS HTML5 EM ELEMENTOS DE FORMULRIO


Na especificao do HTML5 esto definidos novos atributos pra os elementos de
formulrio, visando implementar algumas necessidades comuns que antes no
eram possveis de serem atendidas puramente com a marcao do formulrio.

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

33/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

autofocus
Sua presena indica que aquele campo deve iniciar com foco quando a pgina for
carregada. O usurio j pode comear a digitar algo sem nenhum clique.
<input name="nome" autofocus>

placeholder
<input type="text" name="nome" placeholder="Insira seu nome">

O atributo placeholder exibe o texto contido em seu valor dentro do elemento


do formulrio caso o seu valor seja vazio.
autocomplete, list e datalist
possvel implementar uma funcionalidade de sugesto de valores com mais
facilidade.
<input type="text" list="cidades" autocomplete="on">
<datalist id="cidades">
<option value="Braslia">
<option value="Rio de Janeiro">
<option value="So Paulo">
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

34/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

</datalist>

A implementao de autocomplete sem o atributo list no campo, ligando-o a


um datalist, vai utilizar os ltimos valores utilizados em outros campos ou em
outros formulrios, dando prioridade a valores adicionados em inputscom o
mesmo valor no atributo name.
Existem diversas maneiras de utilizar os componentes de formulrios, tanto os
novos do HTML5 como os j existentes. Mesmo com a oportunidade de inovar e
criar uma interao totalmente diferente do usurio com um formulrio,
importante manter o mesmo mtodo que adotamos anteriormente. A marcao
correta do formulrio facilita muito o uso dele em diversos navegadores e em
outros tipos de clientes tambm, como por exemplo navegadores especiais para
deficientes visuais.

Voc no est nessa pgina a toa


Voc chegou aqui porque a Caelum referncia nacional em
cursos de Java, Ruby, Agile, Mobile, Web e .NET.
Faa curso com quem escreveu essa apostila.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

35/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e


JavaScript.

11.9 - CONES COM GLYPHICONS


O Bootstrap traz um conjunto de cones prontos para uso chamado de
Glyphicons. Esses cones so disponibilizados atravs de uma fonte de texto
customizada. Eles desenharam os cones e exportaram como uma fonte normal.
Para usarmos com Bootstrap bem simples:
<span class="glyphicon glyphicon-thumbs-up"></span>

So 180 cones no total, das mais diversas razes. Basta olhar o nome da
documentao e usar na pgina.

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

36/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Figura 11.9: Alguns dos cones

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

37/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

http://getbootstrap.com/components/#glyphicons
A vantagem de se usar fontes para cones que o desenho fica escalvel, como
uma letra. Ele no perde qualidade em nenhum tamanho ou resoluo por ser
vetorial. E, assim como uma letra, podemos aplicar efeitos de texto como sombras
e cores.
A desvantagem que cada cone s pode ter um path no desenho e uma nica
cor. No possvel usar cones complexos com fontes.

11.10 - EXERCCIOS: FORMULRIOS


1. O formulrio de compra possui campos para o cliente digitar informaes
pessoais e informaes sobre o pagamento. Para melhor organizao, vamos
separar os campos em dois fieldsets.
Vamos criar o <form>logo depois do panel, e ainda dentro do container. Neste
form, crie os dois fieldsets usando <legend>para identificar cada um. No final, um
boto cuidar do envio dos dados (vamos usar um btn-primarydo Bootstrap).
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

38/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<form>
<fieldset>
<legend>Dados pessoais</legend>
</fieldset>
<fieldset>
<legend>Carto de crdito</legend>
</fieldset>
<button type="submit" class="btn btn-primary">
Confirmar Pedido
</button>
</form>

2. O primeiro fieldset, dos Dados Pessoais, deve conter os campos Nome, Email,
CPF e um checkbox para o usurio optar ou no por receber spam.
Implemente os campos dentro do primeiro fieldset. Use as classes do Bootstrap
para formulrios. Use tambm um input emaildo HTML5.
<fieldset>
<legend>Dados pessoais</legend>
<div class="form-group">
<label for="nome">Nome completo</label>
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

39/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<input type="text" class="form-control" id="nome" name="nome">


</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" name="email">
</div>
<div class="form-group">
<label for="cpf">CPF</label>
<input type="text" class="form-control" id="cpf" name="cpf">
</div>
<div class="checkbox">
<label>
<input type="checkbox" value="sim" name="spam" checked>
Quero receber spam da Mirror Fashion
</label>
</div>
</fieldset>

Repare que cada campo possui um input e um label. Para agrup-los, usamos um
div form-groupdo Bootstrap. Cada input deve ter uma classe form-control.
Teste a pgina e observe o estilo padro que ganhamos apenas por usar o
Bootstrap.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

40/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

3. O fieldset de dados do carto tem trs campos: um com cdigo do carto, outro
com a bandeira do carto e outro com data de validade. Neste ltimo, usaremos o
input month do HTML5.
Implemente os campos dentro do segundo fieldset:
<fieldset>
<legend>Carto de crdito</legend>
<div class="form-group">
<label for="numero-cartao">Nmero - CVV</label>
<input type="text" class="form-control"
id="numero-cartao" name="numero-cartao">
</div>
<div class="form-group">
<label for="bandeira-cartao">Bandeira</label>
<select name="bandeira-cartao" id="bandeira-cartao"
class="form-control">
<option value="master">MasterCard</option>
<option value="visa">VISA</option>
<option value="amex">American Express</option>
</select>
</div>
<div class="form-group">
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

41/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<label for="validade-cartao">Validade</label>
<input type="month" class="form-control"
id="validade-cartao" name="validade-cartao">
</div>
</fieldset>

4. Adicione o atributo placeholder do HTML5 nos campos email e CPF com dicas
de preenchimento:
<input type="email" class="form-control" id="email" name="email"
placeholder="email@exemplo.com">
...
<input type="text" class="form-control" id="cpf" name="cpf"
placeholder="000.000.000-00">

Adicione o atributo autofocus do HTML5 no input nome:


<input type="text" class="form-control" id="nome" name="nome" autofocus>

5. Vamos incentivar o clique no boto de pedido com um cone alm do texto. Use
os glyphicons do Bootstrap pra isso. Dentro do boto, apenas adicione a linha que
declara o cone:
<button type="submit" class="btn btn-primary">
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

42/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<span class="glyphicon glyphicon-thumbs-up"></span>


Confirmar Pedido
</button>

Para saber mais sobre os cones do Bootstrap:


http://getbootstrap.com/components/#glyphicons
6. Use outras classes do Bootstrap para ajustar mais detalhes. No boto, adicione a
classe btn-lgpara deixar o boto maior.
Ainda no boto, acrescente tambm a classe pull-rightpara deix-lo alinhado
direita.
Veja mais opes de botes com Bootstrap: http://getbootstrap.com/css/#buttons
7. (opcional) O Bootstrap tem outros recursos para formulrios, como os input
groups. Teste trocando o cdigo do campo email para isso:
<div class="form-group">
<label for="email">Email</label>
<div class="input-group">
<span class="input-group-addon">@</span>
<input type="email" class="form-control"
id="email" name="email">
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

43/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

</div>
</div>

Implemente tambm em outros campos, inclusive usando cones do glyphicons.


Veja mais opes do Bootstrap para formulrios:
http://getbootstrap.com/css/#forms

11.11 - VALIDAO HTML5


Entre as muitas novidades de formulrios que vimos no HTML5, h ainda toda
uma parte de validao de dados com restries expressas diretamente no cdigo
HTML.

required
Podemos indicar na marcao do formulrio quando um campo de
preenchimento obrigatrio.
<input type="text" name="nome" required>

Esse atributo permite uma validao fraca no lado do cliente.


http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

44/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

pattern
Conseguimos tambm especificar um formato requerido atravs do atributo
pattern, adicionando uma expresso regular como valor:
<input type="text" pattern="^@\w{2,}" name="usuario_twitter">

O atributo patterntambm permite uma validao fraca do campo.

Validao no CSS
A maioria dos novos componentes de formulrio e os atributos que funcionam
como validadores de campos na verdade somente aplicam uma pseudo-classe
especfica no campo que no est atendendo ao padro ou requisito especificado.
Essa pseudo-classe a :invalid, e pode ser utilizada para dar um retorno visual
imediato caso o usurio no esteja atendendo aos requisitos dos campos do
formulrio.
:invalid {
outline: 1px solid #cc0000;
}

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

45/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Essa validao fraca pois de maneira direta no possvel impedir que o


usurio envie as informaes do formulrio, mesmo que incompletas ou
incorretas. possvel porm alterar o boto de submite deix-lo desabilitado caso
seja possvel selecionar algum elemento por essa pseudo-classe no formulrio.
Essa verificao e alterao do elemento submitpode ser feita por JavaScript e
jQuery de maneira simples.

Seus livros de tecnologia parecem do sculo passado?


Conhea a Casa do Cdigo, uma nova editora, com autores de
destaque no mercado, foco em ebooks (PDF, epub, mobi), preos
imbatveis e assuntos atuais.
Com a curadoria da Caelum e excelentes autores, uma
abordagem diferente para livros de tecnologia no Brasil. Conhea os ttulos
e a nova proposta, voc vai gostar.
Casa do Cdigo, livros para o programador.

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

46/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

11.12 - PARA SABER MAIS: CONTROLANDO AS VALIDAES HTML5


A ideia da nova validao do HTML5 permitir que os navegadores j possuam
uma forma simples de prover validaes sem que os desenvolvedores precisem
recorrer a complicadas bibliotecas JavaScript (algo comum em muitas pginas).
No entanto, muitas vezes, as opes padro do navegador no so exatamente o
que precisamos, e queremos mudar o comportamento da validao ou executar
validaes personalizadas e diferentes.
Podemos, ento, usando JavaScript, desabilitar a validao padro e fazer a
nossa prpria:
document.querySelector('form input').oninvalid = function(evt) {
// cancela comportamento padro do browser
evt.preventDefault();
// checa validade e mostra alert
if (!this.validity.valid) {
alert("Nome obrigatrio!");
}
};
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

47/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Isso nos permite trocar, por exemplo, todo o visual e forma de apresentao dos
erros. E, o melhor, caso o usurio esteja com JavaScript desabilitado, ser
executada a validao padro sem problemas. Um timo fallback. (nas solues
tradicionais de validao dom jQuery, por exemplo, tudo se perde quando o usurio
desabilita JavaScript).
Outra forma de desabilitar a validao, afetando o formulrio inteiro,
colocando o atributo novalidatena tag <form>.
Alm de desabilitar completamente a validao do navegador, podemos apenas
trocar a mensagem de erro mas ainda usar o mecanismo e design padro:
document.querySelector('input[type=email]').oninvalid = function() {
// remove mensagens de erro antigas
this.setCustomValidity("");
// reexecuta validao
if (!this.validity.valid) {
// se invlido, coloca mensagem de erro
this.setCustomValidity("Email invlido");
}
};
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

48/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Suporte nos navegadores


A validao HTML5 est implementada no Chrome, Firefox, Safari, Opera e
IE10. Dos navegadores mveis, temos suporte em Chrome, Firefox, Opera,
IE e Blackberry:
http://caniuse.com/form-validation
Se voc quiser suportar navegadores mais antigos, recomendamos o uso de
um polyfill:
https://github.com/aFarkas/webshim

11.13 - EXERCCIOS: VALIDAO COM HTML5


1. Adicione o atributo required nos campos Nome e CPF.
Teste submeter o formulrio sem preencher esse campos.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

49/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

2. Algumas validaes j so implcitas apenas por usarmos o input type correto.


Por exemplo, tente submeter o formulrio preenchendo o Email com um valor
invlido (com dois @ por exemplo).
3. Podemos estilizar no CSS quando um campo est invlido:
.form-control:invalid {
border: 1px solid #cc0000;
}

4. (opcional avanado) Implemente uma mensagem customizada para erro de


email de invlido usando a API JavaScript das validaes HTML5.
document.querySelector('input[type=email]').oninvalid = function() {
// remove mensagens de erro antigas
this.setCustomValidity("");
// reexecuta validao
if (!this.validity.valid) {
// se invlido, coloca mensagem de erro
this.setCustomValidity("Email invlido");
}
};

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

50/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

11.14 - GRID RESPONSIVO DO BOOTSTRAP


Umas das dificuldades mais comuns de um projeto front-end o
posicionamento de elementos, sobretudo em designs multi coluna. A soluo mais
comum uso de grids, uma ideia antiga que veio dos prprios designers.
Divide-se a tela em colunas e vamos encaixando os elementos dentro desse
grid.
Todo framework CSS moderno traz um grid pronto para utilizao. Todo codigo
CSS necessrio para correto posicionamento j foi escrito e s precisamos usar as
classes certas. O Bootstrap tem um grid pronto e vrias classes para usarmos.
O grid do Bootstrap trabalha com a ideia de 12 colunas e podemos escrever
nosso cdigo escolhendo quantas colunas ocupar. Alguns exemplos:

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

51/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Essas classes de coluna so as que definem o tamanho de cada elemento na


pgina com base nas 12 partes do grid padro. Em cdigo:
<div class="row">
<div class="col-md-4">
...
</div>
<div class="col-md-8">
...
</div>
</div>

No cdigo anterior, deixamos o primeiro DIV ocupando 4/12 da tela e o outro,


8/12. Repare que, para o grid funcionar, ao redor das colunas usamos um div com
class row. Ele necessrio.
Podemos ainda criar grids dentro de grid, sempre obedecendo a diviso de 12
colunas em cada. Por exemplo:
<div class="row">
<div class="col-md-4">
...
</div>

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

52/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<div class="col-md-8">
<div class="row">
<div class="col-md-6">
...
</div>
<div class="col-md-6">
...
</div>
</div>
</div>
</div>

Esse exemplo criou um segundo grid dentro da coluna da direita do primeiro.


Nesse segundo grid h duas colunas ocupando metade cada uma (6/12). Mas como
um grid est dentro do outro, na prtica, ele vai ocupar metade do tamanho do div
que tem 8/12 de tamanho.

Responsivo
Um dos pontos mais interessantes dos grids que eles so responsivos. Isso
quer dizer que podemos aplicar diferentes layouts de colunas no nosso cdigo ao
mesmo tempo e cada um deles vai valer s em determinada situao.
Nos cdigos anteriores, por exemplo, usamos classes como col-md-6. O md
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

53/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

nessa classe significa que vamos ocupar 6 colunas do grid apenas em telas maiores
que 992px de largura. Em telas menores, automaticamente nosso grid ser de uma
coluna s.
E, claro, temos classes pra outros tamanhos de tela tambm. No Bootstrap
temos essas famlias de classes de grids j prontas:
col-xs- : Extra small. < 768px
col-sm- : Small (tablets). >= 768px
col-md- : Medium (Desktops). >= 992px
col-lg- : Large (Desktops). >= 1200px
Podemos aplicar mais de uma classe ao mesmo tempo no mesmo elemento:
<div class="row">
<div class="col-xs-6 col-sm-4">
...
</div>
<div class="col-xs-6 col-sm-8">
...
</div>
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

54/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

</div>

Nesse exemplo, nosso grid divide no meio (6 pra cada lado) em telas muito
pequenas mas depois divide em 4 e 8 pra telas um pouco maiores.

Agora a melhor hora de aprender algo novo


Se voc gosta de estudar essa apostila aberta da Caelum,
certamente vai gostar dos novos cursos online que lanamos
na plataforma Alura. Voc estuda a qualquer momento com a
qualidade Caelum.
Conhea a Alura.

11.15 - EXERCCIOS: GRIDS


1. Nosso design mobile-first funciona muito bem em telas pequenas. Mas
conforme vamos aumentando o browser, notamos que tudo fica meio grande. O
panel e o form esticam 100%, o que um exagero em telas maiores.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

55/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Vamos usar grids do Bootstrap para transformar nosso design em 2 colunas em


telas maiores. Por padro, o Bootstrap j traz media queries para adaptao em
768px. A ideia deixar o panel ocupar 4/12 e o form ocupar 8/12.
So trs alteraes necessrias:
Criar um div com classe rowdentro do container;
Criar um div com classe col-sm-4ao redor do panel;
Aplicar a classe col-sm-8no formulrio.
Faa essas alteraes e cuidado com o resultado final e os milhes de divs
misturados. O cdigo deve ficar mais ou menos assim:
<div class="container">
<div class="row">
<div class="col-sm-4">
<div class="panel panel-default">
<!-- ... painel todo aqui ... -->
</div>
</div>
<form class="col-sm-8">
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

56/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<!-- ... todos os campos aqui ... -->


</form>
</div>
</div>

Teste a pgina e redimensione para um tamanho em torno de 768px pra ver o


resultado.
2. Repare que o Bootstrap ajusta vrias coisas responsivamente pra gente de
maneira automtica. Alm de aplicar as classes do grid, repare como os tamanhos
e fontes aumentam de acordo com a resoluo, sem precisarmos fazer nada.
Faa os testes.
3. Quando aumentamos bastante a tela, tudo ainda se ajusta na proporo de 4 pra
8 que definimos. Mas o formulrio fica grande demais. Em telas maiores, talvez
seja legal deixar o formulrio em 2 colunas.
Vamos usar outras classes do grid do Bootstrap que se aplicam em layouts maiores
que 992px. Vamos dividir o formulrio em 2 partes iguais, ou seja 6/12 (lembre que
o grid do Bootstrap tem 12 partes como base). Conseguimos isso tudo usando a
classe col-md-6.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

57/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

As mudanas necessrias so:


Crie um div com classe row ao redor dos 2 fieldsets;
Aplique a classe col-md-6 em cada um dos fieldsets.
No final, a estrutura deve estar parecida com essa:
<form ....>
<div class="row">
<fieldset class="col-md-6">
....
</fieldset>
<fieldset class="col-md-6">
....
</fieldset>
</div>
<button ....>
</form>

Teste a pgina e redimensione para um tamanho em torno de 992px pra ver o


resultado.
4. (opcional) possvel usar mais de uma classe de grid ao mesmo tempo no
mesmo elemento. Por exemplo: dividimos a tela em 4/12 para o painel e 8/12 para
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

58/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

o formulrio. Mas se, em telas maiores, voc quiser mudar essa proporo para
3/12 e 9/12, basta adicionar as classes col-lg-3 e col-lg-9 em conjunto as que
tnhamos antes.
Implemente essa mudana no projeto.
Exemplo:
<form class="col-sm-8 col-lg-9">

A srie col-lg- aplica em resolues acima de 1200px.


Para saber mais sobre os grids do Bootstrap: http://getbootstrap.com/css/#grid
5. (opcional) Alm de alterar o grid nas diferentes resolues, o Bootstrap tambm
permite esconder/exibir certos elementos apenas em uma resoluo especfica.
Por exemplo: imagine que, para otimizar o espao pequeno no design para
smartphone, vamos esconder a imagem do produto. Podemos fazer isso
adicionando a classe hidden-xsna <img>. Isso vai esconder o elemento em
resolues menores que 768px.
Para saber mais sobre as classes auxiliares para responsivo do Bootstrap:
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

59/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

http://getbootstrap.com/css/#responsive-utilities

11.16 - PARA SABER MAIS: COMPONENTES JS DO BOOTSTRAP


Alm de componentes CSS puro do Bootstrap como panel e jumbotron, temos
outros componentes mais avanados que envolvem interatividade e JavaScript.
H muita coisa disponvel por padro no Bootstrap, pelo menos os
componentes mais comuns como janela modal, galeria de imagens, dropdowns,
menus de navegao e mais.
http://getbootstrap.com/javascript/
No exerccio, vamos usar o menu superior (navbar).

11.17 - EXERCCIOS OPCIONAIS: NAVBAR E JAVASCRIPT


1. Um componente muito famoso do Bootstrap seu menu superior, chamado de
navbar. O HTML um pouco mais complexo pois se trata de um menu completo,
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

60/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

mas relativamente fcil.


Implemente um navbar em nossa pgina acima do jumbotron, logo no topo da
pgina:
<nav class="navbar navbar-default">
<div class="navbar-header">
<a class="navbar-brand" href="index.php">Mirror Fashion</a>
</div>
<ul class="nav navbar-nav">
<li><a href="sobre.php">Sobre</a></li>
<li><a href="#">Ajuda</a></li>
<li><a href="#">Perguntas frequentes</a></li>
<li><a href="#">Entre em contato</a></li>
</ul>
</nav>

Teste o resultado no navegador.


2. Repare que o menu no gruda no jumbotron por ter uma margem por padro.
Sem problemas, com um CSS bem simples podemos customizar o componente.
Remova a margem da navbar adicionando esse CSS:
<style>
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

61/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

.navbar {
margin: 0;
}
</style>

Alm disso, adicione no <nav>a classe navbar-static-top.


Teste novamente.
3. Teste o menu em resolues menores. Note que o Bootstrap ajusta
automaticamente o navbar em telas menores. Por padro, o comportamento
mudar o menu de horizontal para vertical em mobile.
Veja esse comportamento redimensionando o browser.
4. Uma outra soluo para menus em telas pequenas de juntar as opes em uma
espcie de dropdown que s abre quando ativado. Isso , criar um boto para ativar
o menu (geralmente com o famoso cone do sanduche).
bem simples fazer isso com Bootstrap, a funcionalidade est toda pronta.
Para fazer o menu colapsar em telas pequenas, basta adicionar 2 classes no <ul>: a
collapse e a navbar-collapse.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

62/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<ul class="nav navbar-nav collapse navbar-collapse">

Se voc testar agora, vai notar que o menu some nas telas menores. Para exibi-lo,
precisamos fazer o prximo passo: criar o cone que ativa o menu.
Dentro do navbar-header, logo abaixo do <a>, crie um boto de ativao. O boto
apenas o texto "menu" mas possui a classe navbar-toggle. Alm disso, dois
outros parmetros configuram seu funcionamento com o collapse que usamos
antes:
<button class="navbar-toggle" type="button"
data-target=".navbar-collapse" data-toggle="collapse">
menu
</button>

Se testar agora, vai notar que o menu aparece mas no funciona quando clicado.
porque essa funcionalidade no Bootstrap implementada com JavaScript. A boa
notcia que no precisamos escrever uma linha de cdigo JS sequer, mas para
tudo funcionar precisamos adicionar o JavaScript do Bootstrap.
No fim da pgina, logo antes de fechar o </body>, chame o arquivo do Bootstrap e
do jQuery:

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

63/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

<script src="js/jquery.js"></script>
<script src="js/bootstrap.js"></script>

Teste novamente e veja o plugin funcionando. Usamos o JavaScript do Bootstrap


implicitamente.

Atributos customizados no HTML5


At a verso 4 do HTML, no havia uma forma padronizada de colocar
atributos customizados.
A partir do HTML5, atributos comeando com data-em qualquer tag so
considerados atributos customizados e no quebram a validade do nosso
cdigo HTML. Esses atributos so bastante teis para passar informao
para um cdigo Javascript, como fizemos agora, passando informao para o
cdigo do Bootstrap.

5. H muitas opes possveis para o navbar. Por exemplo, podemos inverter as


cores e usar um esquema mais escuro apenas trocando a classe navbar-default
pela classe navbar-inverse.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

64/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Para saber mais sobre o navbar: http://getbootstrap.com/components/#navbar


6. Por falar em customizaes, uma grande vantagem do Bootstrap seu imenso
suporte na comunidade. Isso se traduz em muitas ferramentas e complementos
desenvolvidos pra ele, como novos temas.
Deixamos no projeto um tema chamado flatly, open source. Para us-lo, basta
trocar o bootstrap.css pelo arquivo dele no head:
<link rel="stylesheet" href="css/bootstrap-flatly.css">

7. (opcional) Use cones do glyphicons no menu. Basta coloc-los dentro dos itens
que quiser. Algumas sugestes:
<span class="glyphicon glyphicon-home"></span>
<span class="glyphicon glyphicon-question-sign"></span>
<span class="glyphicon glyphicon-list-alt"></span>
<span class="glyphicon glyphicon-bullhorn"></span>

Outra sugesto trocar a palavra "menu" que usamos no navbar colapsado pelo
cone do sanduche:
<span class="glyphicon glyphicon-align-justify"></span>

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

65/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

Se quiser
mudar
a cor do cone,
basta
usar CSS
CSSE JAVASCRIPT
e a propriedade color:
APOSTILA
DESENVOLVIMENTO
WEB
COM HTML,
.navbar .glyphicon {
color: yellow;
}

Consulte outros na documentao:


http://getbootstrap.com/components/#glyphicons
8. (opcional) Troque a classe navbar-static-top pela navbar-fixed-top. Repare
que o menu fica fixo no topo mesmo com scroll.
Voc talvez queira aplicar um padding no body pro contedo no subir:
body { padding-top: 70px; }

9. (opcional) No navbar-header, use um logo da Mirror Fashion em vez de texto.

Voc pode tambm fazer o curso WD-43 dessa apostila na Caelum


Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

66/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

dvidas dos exerccios? Ouvir explicaes detalhadas com um


instrutor?
A Caelum oferece o curso WD-43 presencial nas cidades de So
Paulo, Rio de Janeiro e Braslia, alm de turmas incompany.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e
JavaScript.

11.18 - PARA SABER MAIS: OUTROS FRAMEWORKS CSS


O Bootstrap no o nico framework CSS do mercado. talvez o mais famoso e
com mais usurios, mas h muitas outras opes que s vezes podem ser at
melhores para seu caso.
Trs opes famosas:
Foundation: Da Zurb, fortemente baseado em mobile e responsivo.
http://foundation.zurb.com/
Semantic UI: tem nomes de classes mais simples e semnticos que os outros.
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

67/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

http://semantic-ui.com/
Pure: Do Yahoo, outra alternativa, mais recente. http://purecss.io/
De maneira geral, esses frameworks permitem fazer as mesmas coisas, mas
cada um com seu estilo. Um boto principal por exemplo:
<!-- Bootstrap -->
<button class="btn btn-primary btn-lg">Clique aqui</button>
<!-- Foundation -->
<button class="large button">Clique aqui</button>
<!-- Semantic UI -->
<button class="large ui button">Clique aqui</button>
<!-- Pure -->
<button class="pure-button pure-button-primary pure-button-large">
Clique aqui
</button>

11.19 - DISCUSSO EM AULA: OS PROBLEMAS DO BOOTSTRAP E QUANDO NO


US-LO
http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

68/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

CAPTULO ANTERIOR:

PRXIMO CAPTULO:

PHP: parmetros e bancos de

jQuery

dados

Voc encontra a Caelum tambm em:

Blog Caelum

Cursos Online

Facebook

Newsletter

Casa do Cdigo

Twitter

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

69/70

15/8/2014

Bootstrap e formulrios HTML5 - Desenvolvimento Web com HTML, CSS e JavaScript

http://www.caelum.com.br/apostila-html-css-javascript/bootstrap-e-formularios-html5/#11-19-discussao-em-aula-os-problemas-do-bootstrap-e-quando-nao-usa-lo

70/70