Curso Completo de HTML (5), CSS (3), Java Script e PHP PDF
Curso Completo de HTML (5), CSS (3), Java Script e PHP PDF
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.
http://www.guj.com.br
1.5 - Bibliografia
Alm do conhecimento disponvel na Internet pela da comunidade, existem muitos
livros interessantes sobre o assunto. Algumas referncias:
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
http://www.caelum.com.br/cursos-rails/
http://www.caelum.com.br/cursos-java/
http://www.caelum.com.br/cursos-dotnet/
Captulo 2
Parece que obtemos um resultado um pouco diferente do esperado, no? Apesar de ser
capaz de exibir texto puro em sua rea principal, algumas regras devem ser seguidas
caso desejemos que esse texto seja exibido com alguma formatao, para facilitar a
leitura pelo usurio final.
Usando o resultado acima podemos concluir que o navegador por padro:
Para que possamos exibir as informaes desejadas com a formatao, necessrio que
cada trecho de texto tenha uma marcao indicando qual o significado dele. Essa
marcao tambm influencia a maneira com que cada trecho do texto ser exibido. A
seguir listado o texto com uma marcao correta:
<!DOCTYPE html>
<html>
<head>
<title>Mirror Fashion</title>
<meta charset="utf-8">
</head>
<body>
<h1>Mirror Fashion.</h1>
<h2>Bem-vindo Mirror Fashion, sua loja de roupas e
acessrios.</h2>
<ul>
<li>Confira nossas promoes.</li>
Reproduza o cdigo anterior em um novo arquivo de texto puro e salve-o como index2.html. No se preocupe com a sintaxe, vamos conhecer detalhadamente cada
caracterstica do HTML nos prximos captulos. Abra o arquivo no navegador.
Agora, o resultado exibido de maneira muito mais agradvel e legvel. Para isso,
tivemos que utilizar algumas marcaes do HTML. Essas marcaes so chamadas de
tags, e elas basicamente do significado ao texto contido entre sua abertura e
fechamento.
Apesar de estarem corretamente marcadas, as informaes no apresentam nenhum
atrativo esttico e, nessa deficincia do HTML, reside o primeiro e maior desafio do
programador front-end.
O HTML foi desenvolvido para exibio de documentos cientficos. Para termos uma
comparao, como se a Web fosse desenvolvida para exibir monografias redigidas e
formatadas pela Metodologia do Trabalho Cientfico da ABNT. Porm, com o tempo e
a evoluo da Web e de seu potencial comercial, tornou-se necessria a exibio de
informaes com grande riqueza de elementos grficos e de interao.
Note a sintaxe. Uma tag definida com caracteres < e >, e seu nome (H1 no caso).
Muitas tags possuem contedo, como o texto do ttulo ("Mirror Fashion"). Nesse caso,
para determinar onde o contedo acaba, usamos uma tag de fechamento com a barra
antes do nome: </h1>.
Algumas tags podem receber atributos dentro de sua definio. So parmetros usando
a sintaxe de nome=valor. Para definir uma imagem, por exemplo, usamos a tag <img>
e, para indicar qual imagem carregar, usamos o atributo src:
<img src="../imagens/casa_de_praia.jpg">
Repare que a tag img no possui contedo por si s. Nesses casos, no necessrio usar
uma tag de fechamento como antes no h1.
A tag <head>
A tag <head> contm informaes sobre nosso documento que so de interesse somente do
navegador, e no dos visitantes do nosso site. So informaes que no sero exibidas na rea
do documento no navegador.
A tag <body>
A tag <body> contm o corpo do nosso documento, que exibido pelo navegador em sua
janela. necessrio que o <body> tenha ao menos um elemento "filho", ou seja, uma ou mais
tags HTML dentro dele.
<html>
<head>
<title>Mirror Fashion</title>
<meta charset="utf-8">
</head>
<body>
<h1>A Mirror Fashion</h1>
</body>
</html>
O DOCTYPE no uma tag HTML, mas uma instruo especial. Ela indica para o
navegador qual verso do HTML deve ser utilizada para renderizar a pgina.
Utilizaremos <!DOCTYPE html>, que indica para o navegador a utilizao da verso
mais recente do HTML - a verso 5, atualmente.
H muitos comandos complicados nessa parte de DOCTYPE que eram usados em verses
anteriores do HTML e do XHTML. Hoje em dia, nada disso mais importante. O
recomendado sempre usar a ltima verso do HTML, usando a declarao de
DOCTYPE simples:
<!DOCTYPE html>
Quando queremos indicar que um texto um ttulo em nossa pgina, utilizamos as tags
de heading em sua marcao:
<h1>Mirror Fashion.</h1>
<h2>Bem-vindo Mirror Fashion, sua loja de roupas e acessrios.</h2>
Quando exibimos qualquer texto em nossa pgina, recomendado que ele seja sempre
contedo de alguma tag filha da tag <body>. A marcao mais indicada para textos
comuns a tag de pargrafo:
<p>Nenhum item na sacola de compras.</p>
Se voc tiver vrios pargrafos de texto, use vrias dessas tags <p> para separ-los:
<p>Um pargrafo de texto.</p>
<p>Outro pargrafo de texto.</p>
Marcaes de nfase
Quando queremos dar uma nfase diferente a um trecho de texto, podemos utilizar as
marcaes de nfase. Podemos deixar um texto "mais forte" com a tag <strong> ou
deixar o texto com uma "nfase acentuada" com a tag <em>. Tambm h a tag <small>,
que diminui o tamanho do texto.
Por padro, os navegadores renderizaro o texto dentro da tag <strong> em negrito e o
texto dentro da tag <em> em itlico. Existem ainda as tags <b> e <i>, que atingem o
mesmo resultado visualmente, mas as tags <strong> e <em> so mais indicadas por
definirem nossa inteno de significado ao contedo, mais do que uma simples
indicao visual. Vamos discutir melhor a questo do significado das tags mais adiante.
<p>Compre suas roupas e acessrios na <strong>Mirror
Fashion</strong>.</p>
2.5 - Imagens
A tag <img> define uma imagem em uma pgina HTML e necessita de dois atributos
preenchidos: src e alt. O primeiro aponta para o local da imagem e o segundo, um
texto alternativo para a imagem caso essa no possa ser carregada ou visualizada.
O HTML 5 introduziu duas novas tags especficas para imagem: <figure> e
<figcaption>. A tag <figure> define uma imagem com a conhecida tag <img>. Alm
disso, permite adicionar uma legenda para a imagem por meio da tag <figcaption>.
<figure>
<img src="img/produto1.png" alt="Foto do produto">
<figcaption>Fuzz Cardigan por R$ 129,90</figcaption>
</figure>
Muitas vezes, um site servido por meio de uma aplicao Web e, nesses casos, a
estrutura dos arquivos depende de como a aplicao necessita dos recursos para
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.
Em casa
Voc pode baixar um ZIP com todos os arquivos necessrios para o curso aqui:
http://mirrorfashion.net/caelum-arquivos-curso-web.zip
2. Dentro da pasta mirror-fashion, vamos criar o arquivo sobre.html com a
estrutura bsica contendo o DOCTYPE e as tags html, head e body:
3. <!DOCTYPE html>
4. <html>
5.
<head>
6.
<meta charset="utf-8">
7.
<title>Sobre a Mirror Fashion</title>
8.
</head>
9.
<body>
10.
</body>
11. </html>
12. A pgina deve ter uma imagem com o logo da empresa, um ttulo e um texto
falando sobre ela.
13. Um texto corrido sem nfases difcil de ler. Use negritos e itlicos para
destacar partes importantes.
Use a tag <strong> para a nfase mais forte em negrito, por exemplo para
destacar o nome da empresa no texto do primeiro pargrafo:
<p>A <strong>Mirror Fashion</strong> a maior empresa comrcio
eletrnico.......</p>
Use tambm a nfase com <em> que deixar o texto em itlico. Na parte da
Histria, coloque os nomes das pessoas e da famlia em <em>.
14. A pgina deve ter duas imagens. A primeira apresenta o centro da Mirror
Fashion e deve ser inserida aps o segundo pargrafo do texto. A outra, uma
imagem da Famlia Pelho e deve ser colocada aps o subttulo da Histria.
As imagens podem ser carregadas com a tag <img>, apontando seu caminho.
Alm disso, no HTML5, podemos usar as tags <figure> e <figcaption> para
destacar a imagem e colocar uma legenda em cada uma.
A imagem do centro de distribuio est em img/centro-distribuicao.png:
<figure>
<img src="img/centro-distribuicao.png">
<figcaption>Centro de distribuio da Mirror
Fashion</figcaption>
</figure>
<img src="img/familia-pelho.jpg">
<figcaption>Famlia Pelho</figcaption>
</figure>
Alm da tag font, vrias outras tags de estilo existiam. Mas isso passado. Tags
HTML para estilo so m prtica hoje em dia e jamais devem ser usadas.
Em seu lugar, surgiu o CSS, que uma outra linguagem, separada do HTML, com
objetivo nico de cuidar da estilizao da pgina. A vantagem que o CSS bem mais
robusto que o HTML para estilizao, como veremos. Mas, principalmente, escrever
formatao visual misturado com contedo de texto no HTML se mostrou algo bem
impraticvel. O CSS resolve isso separando as coisas; regras de estilo no aparecem
mais no HTML, apenas no CSS.
O elemento que receber essas propriedades ser exibido com o texto na cor azul e com o
fundo amarelo. Essas propriedades podem ser declaradas de trs maneiras diferentes.
Atributo style
A primeira delas como um atributo style no prprio elemento:
<p style="color: blue; background-color: yellow;">
O contedo desta tag ser exibido em azul com fundo amarelo no
navegador!
</p>
Mas tnhamos acabado de discutir que uma das grandes vantagens do CSS era manter as
regras de estilo fora do HTML. Usando esse atributo style no parece que fizemos
isso. Justamente por isso no se recomenda esse tipo de uso na prtica, mas sim os que
veremos a seguir.
A tag style
A outra maneira de se utilizar o CSS declarando suas propriedades dentro de uma tag
<style>.
color: blue;
}
</style>
</head>
<body>
<p>
O contedo desta tag ser exibido em azul com fundo amarelo!
</p>
<p>
<strong>Tambm</strong> ser exibido em azul com fundo amarelo!
</p>
</body>
</html>
O cdigo anterior da tag <style> indica que estamos alterando a cor e o fundo de todos
os elementos com tag p. Dizemos que selecionamos esses elementos pelo nome de sua
tag, e aplicamos certas propriedades CSS apenas neles.
Arquivo externo
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.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e JavaScript.
Em nosso projeto, vemos que as fontes no tm ornamentos. Ento vamos declarar essa
propriedade para todo o documento por meio do seu elemento body:
body {
font-family: "Arial", "Helvetica", sans-serif;
}
Nesse caso, o navegador verificar se a fonte "Arial" est disponvel e a utilizar para
renderizar os textos de todos os elementos do nosso documento que, por cascata,
herdaro essa propriedade do elemento body.
Caso a fonte "Arial" no esteja disponvel, o navegador verificar a disponibilidade da
prxima fonte declarada, no nosso exemplo a "Helvetica". Caso o navegador no
encontre tambm essa fonte, ele solicita qualquer fonte que pertena famlia "sansserif", declarada logo a seguir, e a utiliza para exibir o texto, no importa qual seja ela.
Temos outras propriedades para manipular a fonte, como a propriedade font-style,
que define o estilo da fonte que pode ser: normal (normal na vertical), italic
(inclinada) e oblique (oblqua).
O exemplo anterior determina que todos os pargrafos da nossa pgina tenham o texto
alinhado para a direita. Tambm possvel determinar que um elemento tenha seu
contedo alinhado ao centro ao definirmos o valor center para a propriedade textalign, ou ento definir que o texto deve ocupar toda a largura do elemento aumentando
o espaamento entre as palavras com o valor justify. O padro que o texto seja
alinhado esquerda, com o valor left, porm importante lembrar que essa
propriedade propaga-se em cascata.
possvel configurar tambm uma srie de espaamentos de texto com o CSS:
p {
line-height: 3px; /* tamanho da altura de cada linha */
letter-spacing: 3px; /* tamanho do espao entre cada letra */
word-spacing: 5px; /* tamanho do espao entre cada palavra */
text-indent: 30px; /* tamanho da margem da primeira linha do texto
*/
}
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.
2.15 - Bordas
As propriedades do CSS para definirmos as bordas de um elemento nos apresentam
uma srie de opes. Podemos, para cada borda de um elemento, determinar sua cor,
seu estilo de exibio e sua largura. Por exemplo:
body {
border-color: red;
border-style: solid;
border-width: 1px;
}
Para que o efeito da cor sobre a borda surta efeito, necessrio que a propriedade
border-style tenha qualquer valor diferente do padro none.
Conseguimos fazer tambm comentrios no CSS usando a seguinte sintaxe:
/* deixando o fundo ridculo */
body {
background: gold;
}
Para a tag <body>, altere a sua cor e sua fonte base por meio das propriedades
color e font-family:
body {
color: #333333;
font-family: "Lucida Sans Unicode", "Lucida Grande", sansserif;
}
O ttulo principal deve ter um fundo estampado com a imagem img/sobrebackground.jpg. Use a propriedade background-image pra isso. Aproveite e
coloque uma borda sutil nos subttulos, para ajudar a separar o contedo.
h1 {
background-image: url(../img/sobre-background.jpg);
}
h2 {
border-bottom: 2px solid #333333;
}
Acerte tambm a renderizao das figuras. Coloque um fundo cinza, uma borda
sutil, deixe a legenda em itlico com font-style e alinhe a imagem e a legenda
no centro com text-align.
figure {
background-color: #F2EDED;
border: 1px solid #ccc;
text-align: center;
}
figcaption {
font-style: italic;
}
h1 {
color: red;
}
h2 {
background: yellow;
}
O difcil acertar a exata variao de cor que queremos no design. Por isso, bem
incomum usarmos cores com seus nomes. O mais comum definir a cor com base em
sua composio RGB.
RGB um sistema de cor bastante comum aos designers. Ele permite especificar at 16
milhes de cores como uma combinao de trs cores base: Vermelho (Red), Verde
(Green), Azul (Blue). Podemos escolher a intensidade de cada um desses trs canais
bsicos, numa escala de 0 a 255.
Um amarelo forte, por exemplo, tem 255 de Red, 255 de Green e 0 de Blue (255, 255,
0). Se quiser um laranja, basta diminuir um pouco o verde (255, 200, 0). E assim por
diante.
No CSS, podemos escrever as cores tendo como base sua composio RGB. Alis, no
CSS3 - que veremos melhor depois - h at uma sintaxe bem simples pra isso:
h3 {
color: rgb(255, 200, 0);
}
Essa sintaxe funciona nos browsers mais modernos mas no a mais comum na prtica,
por questes de compatibilidade. O mais comum a notao hexadecimal, que
acabamos usando no exerccio anterior ao escrever #F2EDED. Essa sintaxe tem suporte
universal nos navegadores e mais curta de escrever, apesar de ser mais enigmtica.
h3 {
background: #F2EDED;
}
No fundo, porm, a mesma coisa. Na notao hexadecimal (que comea com #),
temos 6 caracteres. Os primeiros 2 indicam o canal Red, os dois seguintes, o Green, e os
dois ltimos, Blue. Ou seja, RGB. E usamos a matemtica pra escrever menos, trocando
a base numrica de decimal para hexadecimal.
Na base hexadecimal, os algarismos vo de zero a quinze (ao invs do zero a nove da
base decimal comum). Para representar os algarismos de dez a quinze, usamos letras de
A a F. Nessa sintaxe, portanto, podemos utilizar nmeros de 0-9 e letras de A-F.
H uma conta por trs dessas converses, mas seu editor de imagens deve ser capaz de
fornecer ambos os valores para voc sem problemas. Um valor 255 vira FF na notao
hexadecimal. A cor #F2EDED, por exemplo, equivalente a rgb(242, 237, 237), um
cinza claro.
Vale aqui uma dica quanto ao uso de cores hexadecimais, toda vez que os caracteres
presentes na composio da base se repetirem, estes podem ser simplificados. Ento um
nmero em hexadecimal 3366FF, pode ser simplificado para 36F.
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.
Note que, para cada item da lista no-ordenada, utilizamos uma marcao de item de
lista <li>. No exemplo acima, utilizamos uma estrutura composta na qual o segundo
item da lista contm uma nova lista. A mesma tag de item de lista <li> utilizada
quando demarcamos uma lista ordenada.
<ol>
<li>Primeiro item da lista</li>
<li>Segundo item da lista</li>
<li>Terceiro item da lista</li>
<li>Quarto item da lista</li>
<li>Quinto item da lista</li>
</ol>
As listas ordenadas tambm podem ter sua estrutura composta por outras listas
ordenadas como no exemplo que temos para as listas no-ordenadas. Tambm
possvel ter listas ordenadas aninhadas em um item de uma lista no-ordenada e viceversa.
Existe um terceiro tipo de lista que devemos utilizar para demarcar um glossrio,
quando listamos termos e seus significados. Essa lista a lista de definio.
<dl>
<dt>HTML</dt>
<dd>
HTML a linguagem de marcao de textos utilizada
para exibir textos como pginas na Internet.
</dd>
<dt>Navegador</dt>
<dd>
Navegador o software que requisita um documento HTML
atravs do protocolo HTTP e exibe seu contedo em uma
janela.
</dd>
</dl>
padding-top
padding-right
padding-bottom
padding-left
Essas propriedades aplicam uma distncia entre o limite do elemento e seu contedo
acima, direita, abaixo e esquerda respectivamente. Essa ordem importante para
entendermos como funciona a shorthand property do padding.
Podemos definir todos os valores para as subpropriedades do padding em uma nica
propriedade, chamada exatamente de padding, e seu comportamento descrito nos
exemplos a seguir:
Se passado somente um valor para a propriedade padding, esse mesmo valor aplicado
em todas as direes.
p {
padding: 10px;
}
Se passados dois valores, o primeiro ser aplicado acima e abaixo (equivalente a passar
o mesmo valor para padding-top e padding-bottom) e o segundo ser aplicado
direita e esquerda (equivalente ao mesmo valor para padding-right e paddingleft).
p {
padding: 10px 15px;
}
Se passados quatro valores, sero aplicados respectivamente a padding-top, paddingright, padding-bottom e padding-left. Para facilitar a memorizao dessa ordem,
basta lembrar que os valores so aplicados em sentido horrio.
p {
padding: 10px 20px 15px 5px;
}
Margin
A propriedade margin bem parecida com a propriedade padding, exceto que ela
adiciona espao aps o limite do elemento, ou seja, um espaamento alm do
elemento em si. Alm das subpropriedades listadas a seguir, h a shorthand
propertymargin que se comporta da mesma maneira que a shorthand property do
padding vista no tpico anterior.
margin-top
margin-right
margin-bottom
margin-left
H ainda uma maneira de permitir que o navegador defina qual ser a dimenso da
propriedade padding ou margin conforme o espao disponvel na tela: definimos o
valor auto para a margem ou o espaamento que quisermos.
No exemplo a seguir, definimos que um elemento no tem nenhuma margem acima ou
abaixo de seu contedo e que o navegador define uma margem igual para ambos os
lados de acordo com o espao disponvel:
p {
margin: 0 auto;
}
Dimenses
Todos os pargrafos do nosso HTML ocuparo 300 pixels de largura e de altura, com
cor de fundo vermelha.
body {
margin-left: auto;
margin-right: auto;
width: 940px;
}
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
Note que a ncora est demarcando apenas a palavra "Caelum" de todo o contedo do
pargrafo exemplificado. Isso significa que, ao clicarmos com o cursor do mouse na
palavra "Caelum", o navegador redirecionar o usurio para o site da Caelum, indicado
no atributo href.
Outro uso para a tag de ncora a demarcao de destinos para links dentro do prprio
documento, o que chamamos de bookmark.
<p>Mais informaes <a href="#info">aqui</a>.</p>
<p>Contedo da pgina...</p>
<h2 id="info">Mais informaes sobre o assunto:</h2>
<p>Informaes...</p>
De acordo com o exemplo acima, ao clicarmos sobre a palavra "aqui", demarcada com
um link, o usurio ser levado poro da pgina onde o bookmark "info" visvel.
Bookmark o elemento que tem o atributo id.
possvel, com o uso de um link, levar o usurio a um bookmark presente em outra
pgina.
<a href="http://www.caelum.com.br/curso/wd43/#contato">
Entre em contato sobre o curso
</a>
O exemplo acima far com que o usurio que clicar no link seja levado poro da
pgina indicada no endereo, especificamente no ponto onde o bookmark "contato" seja
visvel.
Jacarezinho, no Paran
</a>
Adicione um link inteno na nossa sobre.html apontando para esta pgina que
acabamos de criar. O terceiro pargrafo do texto possui referncia a esta pgina
mas ainda sem link. Crie link l:
... Acesse <a href="index.html">nossa loja</a>...
Repare como apenas envolvemos o texto a ser linkado usando a tag <a>.
Veja o resultado.
3. Se reparar bem, ainda nesse terceiro pargrafo de texto, h referncias textuais
para as outras sees da nossa pgina, em particular para a Histria e os
Diferenciais. Para facilitar a navegao do usurio, podemos transformar essas
referncias em ncoras para as respectivas sees no HTML.
Para isso, adicione um id em cada um dos subttulos para identific- los:
<h2 id="historia">Histria</h2>
...
<h2 id="diferenciais">Diferenciais</h2>
Agora que temos os ids dos subttulos preenchidos, podemos criar uma ncora
para eles:
... Conhea tambm nossa <a href="#historia">histria</a> e
O seletor acima far com que o elemento do nosso HTML que tem o atributo id com
valor "cabecalho" tenha seu texto renderizado na cor branca e centralizado. Note que
no h nenhuma indicao para qual tag a propriedade ser aplicada. Pode ser tanto uma
<div> quanto um <p>, at mesmo tags sem contedo como uma <img>, desde que essa
tenha o atributo id com o valor "cabecalho".
Como o atributo id deve ter valor nico no documento, o seletor deve aplicar suas
propriedades declaradas somente quele nico elemento e, por cascata, a todos os seus
elementos filhos.
Seletor hierrquico
Podemos ainda utilizar um seletor hierrquico que permite aplicar estilos aos elementos
filhos de um elemento pai:
#rodape img {
margin-right: 35px;
vertical-align: middle;
width: 94px;
}
No exemplo anterior, o elemento pai rodape selecionado pelo seu id. O estilo ser
aplicado apenas nos elementos img filhos do elemento com id=rodape.
Adicionando o CSS:
#centro-distribuicao {
margin-left: auto;
margin-right: auto;
width: 550px;
}
Teste no navegador. Compare o resultado com a <figure> de idfamiliapelho que no recebeu o mesmo estilo.
2. Crie um rodap para a pgina utilizando uma <div>, que deve ser inserida como
ltimo elemento dentro da tag <body>:
3. <div id="rodape">
4.
<img src="img/logo.png">
5.
6.
© Copyright Mirror Fashion
7. </div>
Teste o resultado.
8. Assim como fizemos para os ttulos e subttulos, estilize o nosso rodap. Repare
no uso do id via CSS para selecionarmos apenas o elemento especfico que ser
estilizado. Repare tambm no uso do seletor de descendentes para indicar um
elemento que est dentro de outro.
9. #rodape {
10.
color: #777;
11.
margin: 30px 0;
12.
padding: 30px 0;
13. }
14.
15. #rodape img {
16.
17.
18.
19.
margin-right: 30px;
vertical-align: middle;
width: 94px;
}
Isso no acontece por padro. Repare que, observando as tags HTML que usamos at
agora, os elementos da pgina so desenhados um em cima do outro. como se cada
elemento fosse uma caixa (box) e o padro empilhar essas caixas verticalmente. Mais
pra frente vamos entender melhor esse algoritmo, mas agora o importante que ele
atrapalha esse nosso design.
Temos um problema: a tag <figure> ocupa toda a largura da pgina e aparece
empilhada no fluxo do documento, no permitindo que outros elementos sejam
adicionados ao seu lado.
Este problema pode ser solucionado por meio da propriedade float. Esta propriedade
permite que tiremos um certo elemento do fluxo vertical do documento o que faz com
que o contedo abaixo dele flua ao seu redor. Na prtica, vai fazer exatamente o layout
que queremos.
Em nosso exemplo, o contedo do pargrafo tentar fluir ao redor da nossa imagem
com float. Perceba que houve uma perturbao do fluxo HTML, pois agora a nossa
imagem parece existir fora do fluxo.
assim, nosso projeto ser parcialmente compatvel com navegadores obsoletos por conta
da tcnica Progressive Enhancement.
Captulo anterior:
Sobre o curso - o complexo mundo do front-end
Prximo captulo:
HTML semntico e posicionamento no CSS
Captulo 3
Design da Homepage
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.
Note que h um cabealho (uma rea que potencialmente se repetir em mais de uma
pgina) que ocupa uma largura fixa; sendo assim, podemos criar uma seo exclusiva
para o cabealho.
Outra rea que tem uma caracterstica semelhante o rodap, pois pode se repetir em
mais de uma pgina. Podemos notar que o fundo do elemento vai de uma ponta outra
da pgina, porm seu contedo segue a mesma largura fixa do restante da pgina.
A rea central, que contm informaes diferentes em cada pgina, no tem nenhum
elemento ao fundo. Porm, notemos que sua largura limitada antes de atingir o incio e
o fim da pgina. Notemos que, apesar do fundo do rodap ir de uma ponta outra, seu
contedo tambm limitado pela mesma largura do contedo.
No caso da home page, o miolo da pgina pode ainda ser visto como dois blocos
diferentes. H o bloco principal inicial com o menu de navegao e o banner de
destaque. E h outro bloco no final com dois painis com listas de produtos.
Poderamos definir essas reas da seguinte maneira:
<body>
<header>
<!-- Contedo do cabealho -->
</header>
<section id="main">
<!-- Contedo principal -->
</section>
<section id="destaques">
<!-- Painis com destaques -->
</section>
<footer>
<!-- Contedo do rodap -->
</footer>
</body>
Que tipo de contedo esse? Qual tag usar? apenas uma frase informativa, um
pargrafo de texto. Podemos usar <p>:
<p>
Nenhum item na sacola de compras
</p>
Mas e a imagem com o cone? Como decorativa, pertence ao CSS, como veremos
depois. O HTML no tem nada a ver com isso.
Continuando no header, nossa lista de links pode ser uma lista - <ul> com <li>s.
Dentro de cada item, vamos usar um link - <a> - para a pgina correspondente. Mas h
como melhorar ainda mais: esses links no so links ordinrios, so essenciais para a
navegao do usurio na pgina. Podemos sinalizar isso com a nova tag <nav> do
HTML5, que representa blocos de navegao primrios:
<nav>
<ul>
<li><a
<li><a
<li><a
<li><a
<li><a
</ul>
</nav>
href="#">Sua Conta</a></li>
href="#">Lista de Desejos</a></li>
href="#">Carto Fidelidade</a></li>
href="sobre.html">Sobre</a></li>
href="#">Ajuda</a></li>
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.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e JavaScript.
Mas imagine que podemos ter muitos NAV na pgina e queremos ser mais especficos.
O ID uma soluo:
<nav id="menu-setores">
</nav>
E, no CSS:
#menu-setores {
...
}
Vamos ver uma terceira forma, no uso de classes. O cdigo semelhante mas usa o
atributo class no HTML e o ponto no CSS:
<nav class="menu-setores">
</nav>
E, no CSS:
.menu-setores {
...
}
Pode ser interessante criar uma classe que determina a centralizao horizontal de
qualquer elemento, sem interferir em suas margens superior e inferior como no exemplo
a seguir:
.container {
margin-right: auto;
margin-left: auto;
}
Agora, s adicionar a class "container" ao elemento, mesmo que ele j tenha outros
valores para esse atributo:
<div class="info container">
<p>Contedo que deve ficar centralizado</p>
</div>
1. J temos o arquivo index.html criado. Vamos apagar seu nico pargrafo, pois
adicionaremos contedo que far sentido.
Crie o arquivo estilos.css na pasta css do nosso projeto, que ser onde
escreveremos o CSS visual da nossa pgina. Adicione tambm a tag <link>
apontando para css/estilos.css:
<link rel="stylesheet" href="css/estilos.css">
2. Prximo passo: criar o cabealho. Use as tags semnticas que vimos no curso,
como <header>, <nav>, <ul>, <li>, etc. Crie links para as pginas do menu. E
use <h1> para representar o ttulo da pgina com o logo acessvel.
3. <header>
4.
<h1><img src="img/logo.png" alt="Mirror Fashion"></h1>
5.
6.
<p class="sacola">
7.
Nenhum item na sacola de compras
8.
</p>
9.
10.
<nav class="menu-setores">
11.
<ul>
12.
<li><a href="#">Sua Conta</a></li>
13.
<li><a href="#">Lista de Desejos</a></li>
14.
<li><a href="#">Carto Fidelidade</a></li>
15.
<li><a href="sobre.html">Sobre</a></li>
16.
<li><a href="#">Ajuda</a></li>
17.
</ul>
18.
</nav>
19. </header>
20. J podemos at testar no navegador. Repare como a pgina, embora sem estilo
visual, utilizvel. assim que os clientes no visuais lero nosso contedo.
Qual a importncia de uma marcao semntica?
21. Vamos criar a estilizao visual bsica do nosso contedo, sem nos
preocuparmos com posicionamento ainda. Ajuste as cores e alinhamento dos
textos. Coloque o cone da sacola com CSS atravs de uma imagem de fundo do
pargrafo:
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
.sacola {
background: url(../img/sacola.png) no-repeat top right;
font-size: 14px;
padding-right: 35px;
text-align: right;
width: 140px;
}
.menu-setores ul {
font-size: 15px;
}
.menu-setores a {
color: #003366;
}
body {
color: #333333;
font-family: "Lucida Sans Unicode", "Lucida Grande", sansserif;
}
pouco mais antigos esto presentes e o cdigo totalmente gratuito. Em seu arquivo
"style.css", esto reunidas diversas tcnicas de CSS Reset. Apesar de consistentes,
algumas dessas tcnicas so um pouco complexas, mas um ponto de partida que
podemos considerar.
YUI3 CSS Reset
Criado pelos desenvolvedores front-end do Yahoo!, uma das referncias na rea, esse
CSS Reset composto de 3 arquivos distintos. O primeiro deles, chamado de Reset,
simplesmente muda todos os valores possveis para um valor padro, onde at mesmo
as tags <h1> e <small> passam a ser exibidas com o mesmo tamanho. O segundo
arquivo chamado de Base, onde algumas margens e dimenses dos elementos so
padronizadas. O terceiro chamado de Font, onde o tamanho dos tipos definido para
que tenhamos um visual consistente inclusive em diversos dispositivos mveis.
Eric Meyer CSS Reset
H tambm o famoso CSS Reset de Eric Meyer, que pode ser obtido em
http://meyerweb.com/eric/tools/css/reset/. apenas um arquivo com tamanho bem
reduzido.
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.
.menu-setores ul li {
display: inline;
margin-left: 20px;
}
.sacola {
padding-top: 8px;
}
Vamos usar essa classe container no HTML tambm. Altere a tag header e
passe o class="container" para ela.
Teste a pgina e veja o contedo centralizado. Agora, falta "somente" o
posicionamento dos elementos do header.
O primeiro valor, padro para todos os elementos, o static. Um elemento com posio
static permanece sempre em seu local original no documento, aquele que o navegador
entende como sendo sua posio de renderizao. Se passarmos algum valor para as
propriedades de coordenadas, eles no sero respeitados.
Um dos valores para a propriedade position que aceitam coordenadas o relative.
Com ele, as coordenadas que passamos so obedecidas em relao posio original do
elemento. Por exemplo:
.logotipo {
position: relative;
top: 20px;
left: 50px;
}
Estilo CSS
.quadrado {
background: green;
height: 200px;
width: 200px;
}
.absoluto {
position: absolute;
top: 20px;
right: 30px;
}
Seguindo o exemplo acima, o segundo elemento <div>, que recebe o valor "absoluto"
em seu atributo class, no tem nenhum elemento como seu "pai" na hierarquia do
documento, portanto ele vai alinhar-se ao topo e direita do limite visvel da pgina no
navegador, adicionando respectivamente 20px e 30px nessas direes. Vamos analisar
agora o exemplo a seguir:
Estrutura HTML
<div class="quadrado relativo">
<div class="quadrado absoluto"></div>
</div>
Estilos CSS
.quadrado {
background: green;
height: 200px;
width: 200px;
}
.absoluto {
position: absolute;
top: 20px;
right: 30px;
}
.relativo {
position: relative;
}
Nesse caso, o elemento que recebe o posicionamento absolute "filho" do elemento que
recebe o posicionamento relative na estrutura do documento, portanto, o elemento
absolute vai usar como ponto de referncia para suas coordenadas o elemento relative
e se posicionar 20px ao topo e 30px direita da posio original desse elemento.
O outro modo de posicionamento, fixed, sempre vai tomar como referncia a poro
visvel do documento no navegador, e mantm essa posio inclusive quando h
rolagem na tela. uma propriedade til para avisos importantes que devem ser visveis
com certeza.
Um resumo de position
static
o
o
o
relative
o
o
o
Sua posio dada automaticamente pelo fluxo da pgina: por padro ele
renderizado logo aps seus irmos
No aceita um posicionamento manual (left, right, top, bottom)
O tamanho do seu elemento pai leva em conta o tamanho do elemento static
Por padro o elemento ser renderizado da mesma maneira que o static
Aceita posicionamento manual
O tamanho do seu elemento pai leva em conta o tamanho do elemento
relative, porm sem levar em conta seu posicionamento. O pai no sofreria
alteraes mesmo se o elemento fosse static.
fixed
o
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. A sacola tambm deve estar posicionada a direita e no topo. Use position, top
e right para conseguir esse comportamento. Adicione as regras de
posicionamento ao seletor .sacola que j tnhamos:
12.
13.
14.
15.
.sacola {
position: absolute;
top: 0;
right: 0;
16.
17. Teste a pgina no navegador. Como est nosso cabealho? De acordo com o
design original?
Prximo captulo:
Mais HTML e CSS
Captulo 4
4.2 - Formulrios
Em HTML, temos um elemento chamado <form> criado para esta finalidade: capturar
os dados do usurio e submet-lo a algum servio da internet.
Os dados so passados para o <form> por meio de tag <input>, que pode uma ter dupla
finalidade: receber os dados digitados ou submeter o formulrio.
por meio da propriedade type que definimos essa finalidade. Em nosso caso,
utilizaremos o tipo search para capturar os dados digitados e o tipo image para
submeter o formulrio. Existe tambm o tipo submit, que possui a mesma finalidade do
image, mas renderizado como um boto.
<form>
<input type="search">
<input type="image" src="img/busca.png" class="lupa">
</form>
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
Existe uma propriedade que determina qual vai ser o comportamento de outros
elementos que vm ao redor daquele que a recebe e esto flutuando, e essa propriedade
a clear. A propriedade clear quer dizer "limpe o fluxo do documento ao meu lado" e
pode receber os valores left, right ou both.
O valor left impede que elementos flutuantes fiquem esquerda do elemento que
recebe essa propriedade, o valor right impede que elementos flutuem direita desse, e
o valor both impede que elementos flutuem em ambos os lados do elemento.
importante sabermos que a propriedade clear de um elemento s interfere no layout da
pgina caso outros elementos sua volta estiverem flutuando.
Ao aplicarmos clear:left em nosso menu, ele no ficar ao lado da nossa busca com
propriedade float e ser renderizado na linha seguinte:
.busca,
.menu-departamentos {
float: left;
}
.menu-departamentos {
clear: left;
}
.menu-departamentos {
text-transform: uppercase;
}
Decorao de texto
Existe uma srie de decoraes que o navegador adiciona aos textos, dependendo das
tags que utilizamos. A decorao mais comum o sublinhado nos textos de links (tags
<a> com valor para o atributo "href"). Existem outros tipos de decorao, como por
exemplo, o texto contido na tag <del> (que serve para indicar um texto que foi
removido de uma determinada verso do documento) exibido com uma linha bem no
meio do texto.
muito comum que em alguns casos seja desejvel ocultar a linha inferior nos links,
embora seja recomendado que links dentro de textos sejam decorados para destacaremse do restante, facilitando a usabilidade e navegabilidade. No caso dos menus, onde
temos uma rea especfica e isolada, normalmente estilizada e decorada o suficiente,
normalmente podemos ocultar esse sublinhado, como no exemplo:
.item-menu {
text-decoration: none;
}
Alm do none (nenhuma decorao) ainda poderamos ter configurado underline (com
uma linha embaixo, o padro dos links), overline (com uma linha em cima do texto),
line-through (uma linha no meio do texto) e blink (o texto fica piscando na tela, o
que no muito recomendado).
padding-left: 0;
}
Perceba que o padding do elemento <h1> no foi sobrescrito pelo valor do elemento pai
<div>, ou seja, o valor 40px foi mantido.
Queremos que a imagem preencha todo o espao da <div>, mas as propriedades width
e height no so aplicadas em cascata, sendo assim, somos obrigados a definir o
tamanho da imagem manualmente:
img {
width: 30px;
height: 30px;
}
img {
width: inherit;
height: inherit;
}
O valor inherit indica para o elemento filho que ele deve utilizar o mesmo valor
presente no elemento pai, sendo assim, toda vez que o tamanho do elemento pai for
alterado, automaticamente o elemento filho herdar o novo valor, facilitando assim, a
manuteno do cdigo.
Lembre-se de que o inherit tambm afeta propriedades que no so aplicadas em
cascata.
.busca,
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
.menu-departamentos {
background-color: #dcdcdc;
font-weight: bold;
text-transform: uppercase;
margin-right: 10px;
width: 230px;
}
.busca h2,
.busca form,
.menu-departamentos h2 {
margin: 10px;
}
.menu-departamentos li {
background-color: white;
margin-bottom: 1px;
padding: 5px 10px;
}
.menu-departamentos a {
color: #333333;
text-decoration: none;
}
Na busca, use a propriedade vertical-align
Teste a pgina no navegador e veja como o design est quase pronto, apenas o
posicionamento dos elementos precisa ser acertado.
Repare que o CSS usado foi bastante curto e simples. Mas o conceito do float e
do clear difcil e complexo. Esteja certo de ter compreendido o porqu do uso
dessas propriedades no exerccio antes de prosseguir o curso!
67. Mais acertos de design. Acerte as margens e posicionamentos no menu lateral e
no topo:
68.
69.
70.
71.
72.
73.
74.
.destaque {
margin-top: 10px;
}
.menu-departamentos {
margin-top: 10px;
padding-bottom: 10px;
}
Teste o resultado.
.painel li {
display: inline-block;
vertical-align: top;
width: 140px;
margin: 2px;
padding-bottom: 10px;
}
Como o inline-block faz os elementos se alinharem como numa linha de texto, podemos
controlar o alinhamento vertical dessa linha da mesma forma que fizemos antes com
linhas de texto e imagens simples. Isto , usando a propriedade vertical-align que,
nesse caso, recebeu valor top.
Isso indica que, se tivermos vrios produtos de tamanhos diferentes, eles vo se alinhar
pelo topo.
5. Dentro da div criada acima, criaremos uma nova <section> para cada painel.
A primeira, receber as classes painel e novidades. Ela conter o ttulo em um
<h2> e uma lista ordenada (<ol>) de produtos.
Cada produto deve ser representado como um item na lista (<li>) com um link
para o produto e sua imagem (representado por figure, figcaption e img).
Veja o exemplo com um produto. Ele deve ser includo dentro da section que
voc acabou de criar:
<section class="painel novidades">
<h2>Novidades</h2>
<ol>
<!-- primeiro produto -->
<li>
<a href="produto.html">
<figure>
<img src="img/produtos/miniatura1.png">
<figcaption>Fuzz Cardigan por R$ 129,90</figcaption>
</figure>
</a>
</li>
<!-- coloque mais produtos aqui! -->
</ol>
</section>
Nosso HTML j est ficando grande e complexo, como uma pgina real cheia
de contedo. Cuidado para no se confundir na posio das tags. Recapitulando
essa parte dos painis, a estrutura deve estar assim:
Prximo passo: os itens dos produtos dentro da lista de cada painel. Queremos
que sejam dispostos lado a lado mas com certo tamanho e espaamento para
alinhamento. Conseguimos isso colocando display:inline-block nos
elementos da lista e, para alinhar os produtos pelo topo, com verticalalign:top.
.painel li {
display: inline-block;
vertical-align: top;
width: 140px;
margin: 2px;
padding-bottom: 10px;
}
O posicionamento em si deve estar certo. Mas falta umas regras para estilo,
como tamanho dos ttulos e cores de texto e fundo.
.painel h2 {
font-size: 24px;
font-weight: bold;
text-transform: uppercase;
margin-bottom: 10px;
}
.painel a {
color: #333;
font-size: 14px;
text-align: center;
text-decoration: none;
}
.novidades {
background-color: #f5dcdc;
}
.mais-vendidos {
background-color: #dcdcf5;
}
O seletor acima age em todos os elementos da tag <input> que tm o atributo "value".
Tambm possvel verificar se o atributo tem um valor especfico:
input[type="text"] {
border-radius: 4px;
}
O seletor acima vai agir em todas as tags <div> cujo atributo "class" comece com a
palavra menu seguida de um hfen e qualquer outro valor na sequncia, como por
exemplo menu-principal, menu-departamentos e menu-teste.
Tambm possvel buscar por uma palavra especfica no valor, no importando o valor
completo do atributo. Por exemplo:
input[value~="problema"] {
color: #cc0000;
}
O seletor acima agir sobre todos os elementos da tag <input> que contiverem a
palavra "problema" em seu contedo.
Com o CSS3 possvel utilizar novos operadores com sinais que se assemelham aos das
expresses regulares:
/* busca por inputs com valor de "name" iniciando em "usuario" */
input[name^="usuario"] {
color: 99ffcc;
}
/* busca por inputs com valor de "name" terminando em "teste" */
input[name$="teste"] {
background-color: #ccff00;
}
/* busca por inputs com valor de "nome" contendo "tela" em qualquer
posio */
input[name*="tela"] {
color: #666666;
}
4.11 - Rodap
Para finalizarmos a pgina, precisamos desenvolver o rodap. Visualmente, ele
bastante simples. Mas h algumas questes importantes a serem salientadas.
Semntica
No HTML5, a tag apropriada para rodaps a <footer>, que vamos usar no exerccio.
Alm disso, nosso rodap ainda tem mais 2 contedos: o logo em negativo do lado
esquerdo e cones de acesso a redes sociais do lado direito. Que elementos usar?
O logo no lado esquerdo uma simples imagem:
<img src="img/logo-rodape.png" alt="Logo Mirror Fashion">
J a lista de cones das redes sociais, na verdade, uma lista de links. Os cones so
meramente ilustrativos. Em um leitor de tela, vamos querer que um link seja lido para o
usurio, independentemente do seu cone grfico.
Podemos usar ento uma simples lista com <a>:
<ul class="social">
<li><a href="http://facebook.com/mirrorfashion">Facebook</a></li>
<li><a href="http://twitter.com/mirrorfashion">Twitter</a></li>
<li><a href="http://plus.google.com/mirrorfashion">Google+</a></li>
</ul>
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.
elemento que originalmente foi feito com texto. Perfeito para nosso caso dos cones das
redes sociais.
A ideia bsica :
Posicionamento
Ao colocar o rodap, voc perceber que ele subir na pgina ao invs de ficar em
baixo. Isso porque os elementos anteriores a ele, os painis de destaque, esto flutuando
na pgina e, portanto, saram do fluxo de renderizao. Para corrigir isso, basta usar a
propriedade clear: both no footer.
Dentro do rodap em si, queremos que a lista de cones seja colocada direita. Podemos
acertar isso com posicionamento absoluto, desde que o container do rodap esteja
posicionado (basta dar um position:relative a ele).
J os itens dentro da lista (os 3 links), devem ser flutuados lado a lado (e no um em
cima do outro). fcil fazer com float:left no li.
Estilizao
4.
background-image: url(../img/fundo-rodape.png);
5. }
6.
7. .social li a {
8.
/* tamanho da imagem */
9.
height: 32px;
10.
width: 32px;
11.
12.
/* image replacement */
13.
display: block;
14.
text-indent: -9999px;
15. }
16.
17. .social a[href*="facebook.com"] {
18.
background-image: url(../img/facebook.png);
19. }
20.
21. .social a[href*="twitter.com"] {
22.
background-image: url(../img/twitter.png);
23. }
24.
25. .social a[href*="plus.google.com"] {
26.
background-image: url(../img/googleplus.png);
27. }
Por fim, precisamos fazer os cones das redes sociais fluturarem lado a lado
horizontalmente:
.social li {
float: left;
margin-left: 25px;
}
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.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e JavaScript.
Repare que isso carrega um JavaScript que acionar o hack. Mas a tag script est
dentro de um bloco com uma espcie de if dentro de um comentrio!
Esse recurso do IE chamado de comentrios condicionais e nos permite adicionar
cdigo que somente ser lido pelo IE -- uma excelente soluo para resolver seus bugs e
inconsistncias sem estragar a pgina nos demais navegadores.
Nesse caso, estamos dizendo que o tal script com o hack s deve ser carregado pelas
verses anteriores ao IE9; j que, a partir desta verso, h suporte nativo a HTML5 e
no precisa de hacks.
IE6 e IE7
Ao testar nesses navegadores muito antigos, voc ver que apenas o HTML5shiv no
suficiente. Na verdade, vrios recursos e tcnicas que usamos no nosso CSS no eram
suportados nas verses antigas.
Felizmente, o uso de IE6 e IE7 no Brasil bastante baixo e cai cada vez mais - hoje j
menos de 1% dos usurios. Na Caelum, j no suportamos mais essas verses em nosso
curso e nem em nossos sites.
Prximo captulo:
Captulo 5
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.
+ 13
* 3
- 4
/ 5
% 2
Variveis
Para armazenarmos um valor para uso posterior, podemos criar uma varivel:
var curso = "WD-43";
alert(curso);
No exemplo acima, guardamos o valor WD-43 na varivel curso. A partir desse ponto,
possvel utilizar a varivel para obter o valor que guardamos nela. No JavaScript,
tambm possvel alterar o valor da varivel a qualquer momento, inclusive por valores
de tipos diferentes (por exemplo, um nmero) sem problemas, coisa que no possvel
de se fazer em algumas outras linguagens de programao.
Teste no console:
> var contador = 0;
undefined
> contador++
0
> contador
1
> contador++
1
> contador
2
Tipos
O JavaScript d suporte aos tipos String (letras e palavras), Number (nmeros inteiros,
decimais), Boolean (verdadeiro ou falso) entre outros.
var texto = "Uma String deve ser envolvida em aspas simples ou
duplas.";
var numero = 2012;
var verdade = true;
querySelector vs querySelectorAll
A funo querySelector sempre retorna um elemento, mesmo que o seletor
potencialmente traga mais de um elemento, neste caso, apenas o primeiro elemento da
seleo ser retornado.
A funo querySelectorAll retorna uma lista de elementos compatveis com o seletor
CSS passado como argumento. Sendo assim, para acessarmos cada elemento retornado,
precisaremos passar o seu ndice conforme o exemplo abaixo:
var paragrafos = document.querySelectorAll("div p");
paragrafos[o].textContent = "Primeiro pargrafo da seleo";
paragrafos[1].textContent = "Segundo pargrafo da seleo";
mais comum que as alteraes sejam feitas quando o usurio executa alguma ao,
como por exemplo, clicar em um elemento.
Para suprir essa necessidade, necessrio utilizar de dois recursos do JavaScript no
navegador. O primeiro a a criao de funes:
function mostraAlerta() {
alert("Funciona!");
}
Tambm possvel determinar, por meio de seus argumentos, que a funo vai ter
algum valor varivel que vamos definir quando quisermos execut-la:
function mostraAlerta(texto) {
// Dentro da funo "texto" conter o valor passado na execuo.
alert(texto);
}
// Ao chamar a funo necessrio definir o valor do "texto"
mostraAlerta("Funciona com argumento!");
Existem diversos eventos que podem ser utilizados para que a interao do usurio com
a pgina seja o ponto de disparo de funes que alteram os elementos da prpria pgina:
Existem tambm uma srie de outros eventos mais avanados que permitem a criao
de interaes para drag-and-drop, e at mesmo a criao de eventos customizados.
No prximo exerccio, vamos usar funes JavaScript com eventos para lidar com a
validao do campo de busca da nossa home page. A ideia verificar se o campo foi
preenchido ou se est vazio, quando o usurio clicar em buscar.
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.
Repare que colocamos tambm um id. Ele ser til para depois manipularmos
esse elemento via JavaScript.
Alm disso, o <input> com o texto a ser buscado deve ter o nome de q para ser
compatvel com o Google. Basta fazer:
<input type="search" name="q" id="q">
Teste a pgina e submeta uma busca simples para o Google com o nosso
formulrio.
2. Queremos fazer uma validao: quando o usurio clicar em submeter, verificar
se o valor foi preenchido. Se estiver em branco, queremos mostrar uma
mensagem de erro em um alert.
A validao ser escrita em JavaScript. Portanto, comece criando um arquivo
home.js na pasta js/ do projeto. l que vamos escrever nossos scripts.
Referencie esse arquivo no index.html usando a tag <script> no final da
pgina, logo antes de fechar o </body>:
<script src="js/home.js"></script>
Uma funo um bloco de cdigo JavaScript que executa algum cdigo quando
algum chamar essa funo. Ns podemos chamar a funo explicitamente ou,
melhor ainda, deixar que o navegador chame pra gente quando acontecer algum
evento.
No nosso caso, queremos indicar que a funo anterior deve ser executada
quando o usurio disparar o evento de enviar o formulrio (onsubmit). Coloque
o final do arquivo JavaScript:
// fazendo a associao da funo com o evento
document.querySelector('#form-busca').onsubmit = validaBusca;
5. (opcional) Mostrar uma janela de erro considerado por muitos uma ao muito
agressiva contra o usurio. Talvez um feedback mais sutil seja pintar o fundo do
formulrio de vermelho, indicando um erro.
Na funo de validao, remova a linha do alerta e em seu lugar pinte o fundo
do formulrio de vermelho em caso de erro. Cdigo da funo dever ficar
assim:
function validaBusca() {
if (document.querySelector('#q').value == '') {
document.querySelector('#form-busca').style.background =
'red';
return false;
}
}
uma funo til para, por exemplo, implementar um banner rotativo, como faremos
no exerccio a seguir.
clearInterval
As funes temporais devolvem um objeto que representa o agendamento que foi feito.
possvel us-lo para cancelar a execuo no futuro. especialmente interessante para
o caso do interval que pode ser cancelado de sua execuo infinita:
// agenda uma execuo qualquer
var timer = setInterval(minhaFuncao, 1000);
// cancela execuo
clearInterval(timer);
}
setInterval(trocaBanner, 4000);
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
Com isso, nosso cdigo que controla o pause e play ficaria assim:
var controle = document.querySelector('.pause');
controle.onclick = function() {
if (this.className == 'pause') {
clearInterval(timer);
controle.className = 'play';
} else {
timer = setInterval(trocaBanner, 4000);
controle.className = 'pause';
}
return false;
};
Por fim, podemos estilizar o boto como pause ou play apenas trabalhando com bordas
no CSS:
.destaque {
position: relative;
}
.pause,
.play {
display: block;
position: absolute;
right: 15px;
top: 15px;
}
.pause {
border-left: 10px solid #900;
border-right: 10px solid #900;
height: 30px;
width: 5px;
}
.play {
border-left: 25px solid #900;
border-bottom: 15px solid transparent;
border-top: 15px solid transparent;
}
};
uma forma fcil e portvel de se tratar eventos, mas no muito comum na prtica. O
maior problema do cdigo acima que s podemos atrelar uma nica funo ao evento.
Se tentarmos, em outra parte do cdigo, colocar uma segunda funo para executar no
mesmo evento, ela sobrescrever a anterior.
A maneira mais recomendada de se associar uma funo a eventos com o uso de
addEventListener:
document.querySelector('#destaque').addEventListener('click',
function() {
// tratamento do evento
});
O problema ter que fazer sempre as duas coisas para garantir a portabilidade da nossa
pgina. Essa questo resolvida pelos famosos frameworks JavaScript, como o jQuery,
que veremos mais adiante no curso.
Captulo anterior:
Mais HTML e CSS
Prximo captulo:
CSS Avanado
Captulo 6
CSS Avanado
"Com o conhecimento nossas dvidas aumentam"
Desde o surgimento do CSS, os desenvolvedores front-end utilizam diversas tcnicas
para alterar a exibio dos elementos no navegador. Mesmo assim algumas coisas eram
impossveis de se conseguir utilizando somente CSS. Conhecendo o comportamento dos
navegadores ao exibir um elemento (ou um conjunto de elementos) e como as
propriedade do CSS agem ao modificar um elemento possvel obter resultados
impressionantes.
O CSS3 agora permite coisas antes impossveis como elementos com cor ou fundo
gradiente, sombras e cantos arredondados. Antes s era possvel atingir esses resultados
com o uso de imagens e s vezes at com um pouco de JavaScript.
A reduo do uso de imagens traz grandes vantagens quanto performance e
quantidade de trfego de dados necessria para a exibio de uma pgina.
Veja o seguinte HTML, que simula um texto com vrios pargrafos e ttulos e subttulos
no meio do documento:
<article>
<h1>Ttulo</h1>
<p>Incio</p>
<h2>Subttulo</h2>
<p>Texto</p>
<p>Mais texto</p>
</article>
Como faremos se quisermos estilizar de uma certa maneira todos os pargrafos aps o
subttulo?
O seletor de irmos (siblings) (~) serve pra isso! Ele vem do CSS 3 e funciona em todos
os navegadores modernos (e no IE7 pra frente).
h2 ~ p {
font-style: italic;
}
Isso indica que queremos selecionar todos os p que foram precedidos por algum h2 e
so irmos do subttulo (ou seja, esto sob a mesma tag pai). No HTML anterior, sero
selecionados os dois ltimos pargrafos (Texto e Mais texto).
Seletor de irmo adjacentes
Ainda com o HTML anterior, o que fazer se quisermos selecionar apenas o pargrafo
imediatamente seguinte ao subttulo? Ou seja, um p irmo do h2 mas que aparece logo
na sequncia.
Fazemos isso com o seletor de irmo adjacentes - adjacent sibling:
h2 + p {
font-variant: small-caps;
}
Nesse caso, apenas o pargrafo Texto ser selecionado. um irmo de <h2> e aparece
logo depois do mesmo.
Esse seletor faz parte da especificao CSS 2.1 e tem bom suporte nos navegadores
modernos, incluindo o IE7.
Seletor de filho direto
Queremos deixar o ttulo principal de outra cor. Como fazer? O seletor de nome de tag
simples no vai resolver:
/* vai pegar todos os h1 da pgina */
h1 {
color: blue;
}
Entra a o seletor de filho direto (>) do CSS 2.1 e suportado desde o IE7 tambm.
Negao
Queremos fazer todos os pargrafos de cor cinza, exceto o que tem o texto especial.
Precisamos destac-lo de alguma forma no HTML para depois selecion-lo no CSS.
Uma classe ou ID resolve:
<p>Texto</p>
<p>Outro texto</p>
<p class="especial">Texto especial</p>
<p>Mais texto</p>
Mas como escrever o CSS? Queremos mudar a cor dos pargrafos que no tm a classe
especial. Um jeito seria mudar a cor de todos e sobrescrever o especial depois:
p {
color: gray;
}
p.especial {
color: black; /* restaura cor do especial */
}
No CSS3, h uma outra forma, usando o seletor de negao. Ele nos permite escrever
um seletor que pega elementos que no batem naquela regra.
p:not(.especial) {
color: gray;
}
Isso diz que queremos todos os pargrafos que no tm a classe especial. A sintaxe do
:not() recebe como argumento algum outro seletor simples (como classes, IDs ou tags).
Essa propriedade do CSS3 possui suporte mais limitado no IE, somente a partir da
verso 9 (nos outros navegadores no h problemas).
6.2 - Pseudo-classes
Pegue o seguinte HTML de uma lista de elementos:
<ul>
<li>Primeiro item</li>
<li>Segundo item</li>
<li>Terceiro item</li>
<li>Quarto item</li>
</ul>
fcil agora usar cores diferentes para o primeiro e ltimo itens da lista.
Mas essa tcnica exigiu alterao no HTML e exige que lembremos de colocar a classe
correta, no ponto correto, toda vez que fizermos mudanas nos itens da lista.
O CSS tem um recurso chamado de pseudo-classes que so como classes CSS j prdefinidas para ns. como se o navegador j colocasse certas classes por padro em
certos elementos, cobrindo situaes comuns como essa de selecionar o primeiro ou o
ltimo elemento.
H duas pseudo-classes do CSS3 que representam exatamente o primeiro elemento filho
de outro (first-child) e o ltimo elemento filho (last-child). Essas classes j esto
definidas, no precisamos aplic-las em nosso HTML e podemos voltar para o HTML
inicial:
<ul>
<li>Primeiro item</li>
<li>Segundo item</li>
<li>Terceiro item</li>
<li>Quarto item</li>
</ul>
No CSS, podemos usar pseudo-classes quase da mesma forma que usaramos nossas
classes normais. Repare que para diferenciar um tipo do outro, mudou-se o operador de
ponto para dois pontos:
li:first-child {
color: red;
}
li:last-child {
color: blue;
}
nth-child
Um seletor ainda mais genrico do CSS3 o :nth-child() que nos permite passar o
ndice do elemento. Por exemplo, podemos pegar o terceiro item com:
li:nth-child(3) { color: yellow; }
Porm, o mais interessante que o nth-child pode receber uma expresso aritmtica
para indicar quais ndices selecionar. fcil fazer uma lista zebrada, com itens mpares
de uma cor e pares de outra:
li:nth-child(2n) { color: green; } /* elementos pares */
li:nth-child(2n+1) { color: blue; } /* elementos impares */
Queremos mudar a cor de um link quando o usurio passa o mouse por cima. Ou seja,
queremos mudar seu visual a partir de um evento do usurio (no caso, passar o mouse
em cima).
Uma soluo ingnua seria criar um cdigo JavaScript que adiciona uma classe nos
links quando o evento de mouseover acontece (e remove a classe no mouseout).
Entretanto, o CSS possui excelentes pseudo-classes que representam estados dos
elementos e, em especial, uma que representa o momento que o usurio est com o
mouse em cima do elemento, a :hover.
como se o navegador aplicasse uma classe chamada hover automaticamente quando o
usurio passa o mouse em cima do elemento e depois retirasse a classe quando ele sai.
Tudo sem precisarmos controlar isso com JavaScript.
/* seleciona o link no exato momento em que passamos o mouse por cima
dele */
a:hover {
background-color:#FF00FF;
}
Podemos usar hover em todo tipo de elemento, no apenas links. Mas os links ainda tm
outras pseudo-classes que podem ser teis:
/* seleciona todas as ncoras que tm o atributo "href", ou seja,
links */
a:link {
background-color:#FF0000;
}
/* seleciona todos os links cujo valor de "href" um endereo j
visitado */
a:visited {
background-color:#00FF00;
}
Queremos dar um estilo de revista ao nosso texto e estilizar apenas a primeira letra da
frase com uma fonte maior. Como fazer para selecionar essa letra? A soluo ingnua
seria colocar um elemento ao redor da letra para podermos selecion-la no CSS:
<p><span>A</span> Caelum tem os melhores cursos!</p>
E no CSS:
p:first-letter {
font-size: 200%;
}
Novos contedos
H ainda um outro tipo de pseudo-elemento mais poderoso que nos permite gerar
contedo novo via CSS. Imagine uma lista de links que queremos, visualmente, colocar
entre colchetes:
[ Link 1 ]
[ Link 2 ]
[ Link 3 ]
Podemos, claro, apenas escrever os tais colchetes no HTML. Mas ser que o contedo
semntico? Queremos que esses colchetes sejam indexados pelo Google? Queremos que
sejam lidos como parte do texto pelos leitores de tela?
Talvez no. Pode ser um contedo apenas visual. Podemos ger-lo com CSS usando os
pseudo elementos after e before.
O HTML seria simples:
<a href="...">Link1</a>
<a href="...">Link2</a>
<a href="...">Link3</a>
E no CSS:
a:before {
content: '[ ';
}
a:after {
content: ' ]';
}
Isso pega todos os elementos que a que comeam com http:// e coloca a palavra externo
depois.
Teste a pgina!
2. Repare que os pargrafos nessa pgina Sobre tm uma indentao no incio.
Agora queremos remover apenas a identao do primeiro pargrafo da
pgina.
Poderamos colocar uma classe no HTML. Ou, melhor ainda, sabendo que esse
o primeiro pargrafo (<p>) depois do ttulo (<h1>), usar o seletor de irmos
adjacentes.
Acrescente ao sobre.css:
h1 + p {
text-indent: 0;
}
Teste novamente.
3. Podemos ainda usar o pseudo-elemento :first-line para alterar o visual da
primeira linha do texto. Por exemplo, transformando-a em small-caps usando a
propriedade font-variant:
4. p:first-line {
5.
font-variant: small-caps;
6. }
Teste de novo.
.menu-setores a:hover {
color: #007dc6;
}
.menu-setores a:active {
color: #867dc6;
}
Hoje, o menu um simples <ul> com vrios itens (<li>) com links dentro:
<li><a href="#">Blusas e Camisas</a></li>
}
.menu-departamentos li:hover ul {
display: block;
}
.menu-departamentos ul ul li {
background-color: #dcdcdc;
}
Teste a pgina.
(Veja os opcionais a seguir para outras possibilidades.)
Repare que usamos tambm a propriedade opacity para deixar esse elemento
mais transparente e sutil.
Mais opes do Unicode
Consulte em uma tabela Unicode outros caracteres e seu cdigo hex
correspondente.
http://www.alanwood.net/unicode/dingbats.html
http://www.alanwood.net/unicode/#links
div {
border-radius: 5px;
}
p {
text-shadow: 10px 10px red;
}
possvel at passar mais de uma sombra ao mesmo tempo para o mesmo elemento:
text-shadow: 10px 10px 5px red, -5px -5px 4px red;
Por fim, possvel usar a keyword inset para uma borda interna ao elemento:
box-shadow: inset 0 0 40px black;
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.
Porm, existe uma funo chamada RGBA que recebe um quarto argumento, o
chamado canal Alpha. Na prtica, seria como o opacity daquela cor (um valor entre 0 e
1):
/* branco com 80% de opacidade */
color: rgba(255,255,255, 0.8);
6.10 - Prefixos
Muitos recursos do HTML5 e do CSS3 ainda so experimentais. Isso quer dizer que
foram includos no rascunho da especificao mas ainda no so 100% oficiais. As
especificaes ainda esto em aberto e vai demorar algum tempo at elas serem
fechadas.
Existem recursos mais estveis e menos estveis. Alguns j esto bastante maduros e h
bastante tempo na spec, e no so esperadas mais mudanas. Por outro lado, alguns so
bem recentes e talvez ainda possa haver mudana at a aprovao final da especificao.
Os navegadores desejam implementar os novos recursos antes mesmo da especificao
terminar, para que os desenvolvedores possam comear a usar as novas propriedades e
experiment- las na prtica. Entretanto, como a sintaxe final depois de aprovada pode ser
diferente, os navegadores implementam as novas propriedades instveis usando nomes
provisrios.
A boa prtica pegar o nome da propriedade e colocar um prefixo especfico do
fabricante na frente. Quando a especificao ficar estvel, tira-se esse prefixo e suportase a sintaxe oficial.
As bordas arredondadas, por exemplo, hoje so suportadas em todos os navegadores
modernos com o nome normal da propriedade a border-radius. Mas at o Firefox 3.6,
por exemplo, o suporte da Mozilla era experimental e a propriedade era chamada de moz-border-radius nesse navegador. No Chrome at a verso 3, precisvamos usar o
prefixo deles com -webkit-border-radius.
Os prefixos dos fabricantes mais famosos so:
preciso consultar tabelas de compatibilidade para saber qual navegador suporta qual
propriedade e se necessrio usar prefixos para certas verses. Se quisermos o mximo
de compatibilidade, precisamos colocar vrios prefixos ao mesmo tempo:
p {
/* Chrome at verso 3, Safari at verso 4 */
-webkit-border-radius: 5px;
/* Firefox at 3.6 */
-moz-border-radius: 5px;
/* Todas as verses modernas dos navegadores,
incluindo IE e Opera que nunca precisaram de
prefixo pra isso */
border-radius: 5px;
}
Podemos ainda usar gradientes com angulaes diferentes e diversas paradas de cores:
.gradiente {
background: linear-gradient(45deg, #f0f9ff 0%, #cbebff 47%, #a1dbff
100%);
}
Prefixos
O cdigo anterior indica um gradiente do branco para o azul vindo de cima para baixo.
Mas na verso suportada antes do rascunho dos gradientes, o mesmo cdigo era escrito
com top ao invs de to bottom:
.linear {
background: -webkit-linear-gradient(top, white, blue);
background: -moz-linear-gradient(top, white, blue);
background: -o-linear-gradient(top, white, blue);
}
Pra piorar, verses bem mais antigas do WebKit - notadamente o Chrome at verso 9 e
o Safari at verso 5 -, usavam uma sintaxe ainda mais antiga e complicada:
.linear {
background: -webkit-gradient(linear, left top, left bottom,
color-stop(0%, white), color-stop(100%, blue));
}
Se quiser o mximo de compatibilidade, voc ter que incluir todas essas variantes no
cdigo CSS.
Gambiarras pro IE antigo
O IE s suporta gradientes CSS3 a partir da verso 10, mas desde o IE6 era possvel
fazer gradientes simples usando um CSS proprietrio da Microsoft:
.linear {
filter: progid:DXImageTransform.Microsoft.gradient(
startColorstr='#FFFFFF', endColorstr='#0000FF',GradientType=0);
}
O CSS acima faz um gradiente linear do topo para baixo, como nos outros exemplos,
funcionar no IE6 at IE9. O IE10 j no aceita mais essa gambiarra e exige que voc use
a sintaxe oficial do CSS3 que vimos no incio.
Gerao de gradientes
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.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e JavaScript.
Com CSS3, podemos usar progressive enhancement. No possvel ainda ter um site
que dependa hoje totalmente do CSS3. Mas possvel desenvolver seu site e
acrescentar melhorias progressivamente usando CSS3.
Ou seja, faa um layout que fique usvel com bordas quadradas mas use bordas
redondas para deix-lo melhor, mais bonito, nos navegadores mais modernos.
Saiba mais no blog da Caelum:
http://blog.caelum.com.br/css3-e-progressive-enhancement/
9. No CSS3, podemos usar cores com canal Alpha para translucncia usando a
sintaxe do RGBA. Faa a sombra do ttulo do painel um branco com 80% de
opacidade.
10.
11.
12.
.painel h2 {
text-shadow: 1px 1px 2px rgba(255,255,255,0.8);
}
13. Use gradientes nos painis de produtos na Home. O painel novidade, por
exemplo, poderia ter:
14.
15.
16.
17.
.novidades {
background-color: #f5dcdc;
background: linear-gradient(#f5dcdc, #f4bebe);
}
Prefixos no exerccio
Usamos no exerccio a verso oficial da especificao sem prefixos que funciona
nas ltimas verses do Firefox, Chrome, Opera, Safari e Internet Explorer.
Note que no estamos suportando verses antigas desses navegadores de
propsito. Se quiser, voc pode adicionar as outras variantes de prefixos para
suport-los. Ou usar uma ferramenta como o Collorzilla Gradient Generator para
automatizar:
http://www.colorzilla.com/gradient-editor/
Consulte o suporte nos browsers aqui: http://caniuse.com/css-gradients
Isso funciona, mas o elemento deslocado de uma vez quando passamos o mouse. E se
quisermos algo mais sutil? Uma animao desse valor mudando lentamente, mostrando
o elemento se deslocando na tela? Usamos CSS3 Transitions.
Sua sintaxe possui vrios recursos mas seu uso mais simples, para esse nosso caso, seria
apenas:
#teste:hover {
transition: top 2s;
}
(avanado);
#teste:hover {
transition: top 2s ease;
}
Para explorar o comportamento dos tipos de animaes disponveis, e como criar uma
curva de velocidade customizada para sua animao, existe uma ferramenta que auxilia
a criao do cubic-bezier: http://www.roblaplaca.com/examples/bezierBuilder/
Podemos ainda usar mais de uma propriedade ao mesmo tempo, incluindo cores!
#teste {
position: relative;
top: 0;
color: white;
}
#teste:hover {
top: 30px;
color: red;
transition: top 2s, color 1s ease;
}
all
all
all
all
2s
2s
2s
2s
ease;
ease;
ease;
ease;
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.
Rotate
#menu-departamentos {
transform: rotate(-10deg);
}
Scale
#novidades li {
/* Alterar a escala total do elemento */
transform: scale(1.2);
}
#mais-vendidos li {
/* Alterar a escala vertical e horizontal do elemento */
transform: scale(1, 0.6);
}
Skew
footer {
/* Distorcer o elemento no eixo horizontal */
transform: skewX(10deg);
}
#social {
/* Distorcer o elemento no eixo vertical */
transform: skewY(10deg);
}
rotate(-10deg);
rotate(-10deg);
rotate(-10deg);
rotate(-10deg);
rotate(-10deg);
9. Mais coisas de CSS3! Ainda quando passar o mouse em cima do item do painel,
queremos aumentar o elemento em 20%, dando uma espcie de zoom.
Use CSS transform pra isso, com scale. Adicione na regra anterior (sem
remover o que j tnhamos):
.painel li:hover {
-webkit-transform: scale(1.2);
transform: scale(1.2);
}
Teste e repare como o scale tambm animado suavemente. Isso porque nossa
transio estava com all.
10. Altere a regra anterior do transform pra tambm fazer o elemento rotacionar
suavemente em 5 graus no sentido anti-horrio:
11.
12.
13.
14.
.painel li:hover {
-webkit-transform: scale(1.2) rotate(-5deg);
transform: scale(1.2) rotate(-5deg);
}
16. (opcional) Repare como a animao ocorre apenas quando passamos o mouse
em cima, mas quando tiramos, a volta do efeito no animada.
Podemos habilitar a animao na volta do elemento para o estado normal
movendo as regras de transio para o li em si (e no s no :hover).
.painel li {
-webkit-transition: 0.7s;
transition: 0.7s;
}
0.7s ease-in;
0.7s ease-in;
0.7s ease-out;
0.7s ease-out;
Seletores CSS
p {
color: navy;
}
p {
font-size: 16px;
}
No exemplo anterior, utilizamos o mesmo seletor duas vezes no CSS. Isso faz com que
as propriedades sejam acumuladas em todos os elementos selecionados. No caso, todos
os elementos da tag p em nosso documento sero exibidos da cor "navy" (azul marinho)
e com a fonte no tamanho "16px".
Quando h conflito entre propriedades de seletores equivalentes, ou at mesmo em um
mesmo seletor, aplicada a propriedade declarada depois, como no exemplo a seguir:
p {
color: navy;
font-size: 12px;
}
p {
font-size: 16px;
}
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.
Captulo anterior:
JavaScript e interatividade na Web
Prximo captulo:
Web para dispositivos mveis
Captulo 7
Uma abordagem que vem ganhando bastante destaque a de ter um nico Site,
acessvel em todos os dispositivos mveis. Adeptos da ideia da Web nica (One Web)
consideram que o melhor para o usurio ter o mesmo Site do Desktop normal tambm
Outra forma de declarar os media types separar as regras dentro do prprio arquivo
CSS:
@media screen {
body {
background: blue;
color: white;
}
}
@media print {
body {
background: white;
color: black;
}
}
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
Outra forma de declarar os media types separar as regras dentro do mesmo arquivo
CSS:
@media screen {
body {
font-size: 16px;
}
}
@media (max-width: 480px) {
body {
font-size: 12px;
}
}
Repare como o atributo media agora pode receber expresses complexas. No caso,
estamos indicando que que queremos que as telas com largura mxima de 480px
tenham uma fonte de 12px.
Voc pode testar isso apenas redimensionando seu prprio navegador Desktop para um
tamanho menor que 480px.
7.4 - Viewport
Mas, se voc tentar rodar nosso exemplo anterior em um iPhone ou Android de verdade,
ver que ainda estamos vendo a verso Desktop da pgina. A regra do max-width parece
ser ignorada!
Ainda assim, a experincia desses celulares bem diferente dos Desktops. 1280px em
uma tela de 4 polegadas bem diferente de 1280px em um notebook de 13 polegadas. A
resoluo muda. Celulares costumam ter uma resoluo em dpi bem maior que
Desktops.
Como arrumar nossa pgina?
Os smartphones sabem que considerar a tela como 1280px no ajudar o usurio a
visualizar a pgina otimizada para telas menores. H ento o conceito de device-width
que, resumidamente, representa um nmero em pixels que o fabricante do aparelho
considera como mais prximo da sensao que o usurio tem ao visualizar a tela.
Nos iPhones, por exemplo, o device-width considerado como 320px, mesmo com a
tela tendo uma resoluo bem mais alta.
Por padro, iPhones, Androids e afins costumam considerar o tamanho da tela visvel,
chamada de viewport como grande o suficiente para comportar os Sites Desktop
normais. Por isso a nossa pgina foi mostrada sem zoom como se estivssemos no
Desktop.
A Apple criou ento uma soluo que depois foi copiada pelos outros smartphones, que
configurar o valor que julgarmos mais adequado para o viewport:
<meta name="viewport" content="width=320">
Isso faz com que a tela seja considerada com largura de 320px, fazendo com nosso
layout mobile finalmente funcione e nossas media queries tambm.
Melhor ainda, podemos colocar o viewport com o valor device-width definido pelo
fabricante, dando mais flexibilidade com dispositivos diferentes com tamanhos
diferentes:
<meta name="viewport" content="width=device-width">
2. Nossa pgina hoje tem o tamanho fixo em 940px e centralizada (com o uso do
seletor .container). Para deixarmos a pgina mais flexvel nos celulares,
precisamos remover esse tamanho absoluto e colocar algum que faa mais
sentido em telas menores, onde queremos ocupar quase que a tela toda
(deixando apenas uma pequena margem). Para isso, edite mobile.css:
3. .container {
4.
width: 96%;
5. }
.menu-setores ul li {
display: inline-block;
margin: 5px;
}
Com relao aos produtos nos painis. Vamos precisar redimension-los para
encaixar 3 em cada linha. Uma boa maneira colocar cada elemento com 30%
do painel, totalizando 90%, e deixando espao para as margens.
J a imagem interna de cada produto dever ocupar 100% do seu quadrado (o
<li> que ajustamos), seno as imagens vo estourar o layout em certos
tamanhos.
.painel li {
width: 30%;
}
.painel img {
width: 100%;
}
27. O que acontece em resolues maiores de 320px? Nosso design volta ao padro
de 940px e ficamos com scroll horizontal. A maioria dos smartphones tem
320px de largura, mas nem todos, e nosso layout no se ajusta bem a esses
outros. At mesmo aqueles com 320px de largura, ao girar o aparelho em modo
paisagem, a resoluo maior (480px num iPhone e mais de 500px em muitos
Androids).
O melhor era que nosso layout adaptvel fosse usado no s em 320px mas em
diversas resolues intermedirias antes dos 940px que estabelecemos para o
site Desktop.
Podemos ajustar nossa media query para aplicar o CSS de adaptao a qualquer
tamanho de tela menor que os 940px do Desktop (ou seja, no mximo, 939px):
<link rel="stylesheet" href="css/mobile.css" media="(max-width:
939px)">
.pause, .play {
top: auto;
right: auto;
left: 10px;
bottom: 10px;
}
7.7 - Mobile-first
Nosso exerccio seguiu o processo que chamamos de desktop-first. Isso significa que
tnhamos nossa pgina codificada para o layout Desktop e, num segundo momento,
adicionamos as regras para adaptao a mobile.
Na prtica, isso no muito interessante. Repare como tivemos que desfazer algumas
coisas do que tnhamos feito no nosso layout para desktop: tiramos alguns
posicionamentos e desfizemos diversos ajustes na largura de elementos.
muito mais comum e recomendado o uso da prtica inversa: o Mobile-first. Isto ,
comear o desenvolvimento pelo mobile e, depois, adicionar suporte a layouts desktop.
No cdigo, no h nenhum segredo: vamos apenas usar mais media queries min-width
ao invs de max-width, mais comum em cdigos desktop-first.
A grande mudana do mobile-first que ela permite uma abordagem muito mais
simples e evolutiva. Inicia-se o desenvolvimento pela rea mais simples e limitada, com
mais restries, o mobile. O uso da tela pequena vai nos forar a criar pginas mais
simples, focadas e objetivas. Depois, a adaptao pra Desktop com media queries,
apenas uma questo de readaptar o layout.
A abordagem desktop-first comea pelo ambiente mais livre e vai tentando cortar coisas
quando chega no mobile. Esse tipo de adaptao , na prtica, muito mais trabalhosa.
Ns recomendamos o uso do mobile-first. E usaremos essa prtica no curso a partir
das prximas pginas, assim voc poder comparar os dois estilos.
> ul {
2;
2;
2;
Em telas um pouco maiores, como tablets (um iPad tem 768px por exemplo),
podemos querer fazer outros ajustes com uma media query:
@media (min-width: 720px) {
header h1 {
text-align: left;
}
.menu-setores {
position: absolute;
}
.sacola {
display: block;
}
.painel li {
width: 15%;
}
.busca, .menu-departamentos {
margin-right: 1%;
width: 30%;
}
.menu-departamentos nav > ul {
-webkit-column-count: 1;
-moz-column-count: 1;
column-count: 1;
}
.destaque img {
width: 69%;
}
}
Captulo anterior:
CSS Avanado
Prximo captulo:
Introduo a PHP
Captulo 8
Introduo a PHP
"Medir progresso de programao em linhas de cdigo como medir o progresso da
construo de um avio por seu peso."
falamos que estamos fazendo uma requisio ao servidor. Ou seja, pedimos que certo
contedo seja exibido.
Por exemplo, ao acessar http://www.caelum.com.br/apostilas estamos conectando
via HTTP ao servidor www.caelum.com.br e requisitando a URL /apostilas.
Do outro lado, existe um servidor HTTP esperando novas requisies que
responsvel por servir o que o usurio est pedindo. Esse servidor um programa que
instalamos e fica responsvel por processar as requisies.
A grande questo que esse servidor no precisa ser algo que simplesmente l o
arquivo HTML e envia seu contedo para o cliente. O servidor pode executar cdigo e
gerar HTML na hora pro cliente, dinamicamente. esse processamento de lgica
dinmica no servidor que queremos fazer com PHP.
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.
Nesse comando, a opo -S indica que queremos o servidor embutido dele, o endereo
localhost indica que vamos acessar nosso servidor localmente e o valor 8080 a porta
que o servidor vai rodar.
Depois, basta navegar na URL http://localhost:8080/ e nosso servidor vai responder
normalmente. Como nosso projeto s tem arquivos .html, veremos as pginas no
navegador iguaizinhas como vamos antes, sem novidades.
Mas no precisa ser assim. Para executar cdigo do lado do servidor com PHP, basta
renomear o arquivo de .html para .php. Por exemplo: sobre.php. Com essa extenso,
podemos agora misturar cdigo dinmico PHP no meio do nosso HTML.
Todo cdigo PHP fica dentro de uma tag especial dele, pra diferenciar do cdigo
HTML:
<?php
// cdigo PHP aqui
?>
E podemos misturar isso com HTML normalmente. O que for tag do PHP vai ser
executada pelo servidor PHP. O que no for, vai ser enviado para o browser do jeito que
est.
<h1>HTML aqui</h1>
<?php
// cdigo PHP aqui
?>
<p>Mais HTML</p>
Vamos ver muitas coisas com PHP ao longo do curso. Por enquanto, vamos fazer um
exerccio que apenas mostra o ano atual no rodap da pgina de sobre. Para acessar o
ano atual, podemos fazer:
<?php
print date('Y');
?>
Chamamos a funo date do PHP passando como argumento o formato que queremos a
sada. No caso, Y indica que queremos o ano apenas. Veja outros formatos em:
http://www.php.net/date
A funo date devolve a data mas no mostra na tela. O comando print pega esse
valor e mostra na tela.
Windows
Costumam vir j com o PHP instalado. Verifique apenas se a vero igual ou superior a
5.4, que precisamos pro curso. Se for mais antiga, consulte o gerenciador de pacotes do
seu sistema para atualizar.
7. Repare que no lugar de sair a quantidade de anos, estamos exibindo o ano atual.
Para resolver isso, vamos subtrair o ano atual menos a data de fundao da
Mirror Fashion:
8. Fundada h <?php print date("Y") - 1932; ?> anos,...
9. (opcional) A funo date recebe como parmetro o formato que desejamos
para
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.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e JavaScript.
Mas, usando uma tecnologia no servidor como PHP, podemos fazer esse "copiar e
colar" dinamicamente. Criamos um arquivo .php separado que encapsula o cdigo do
cabealho. Depois, inclumos esse cdigo em todas as pginas usando o comando
include.
<?php
include("_cabecalho.php");
?>
Repare que o HTML final que o browser recebe o mesmo de antes. A incluso do
cabealho acontece no servidor.
Repare que j inclumos algumas tags que vimos antes no curso. Em especial, o
charset como UTF-8, a tag viewport para nossa pgina funcionar bem em mobile
e os arquivos CSS de reset e estilos.
Como todas as pginas fazem parte da Mirror Fashion, muito comum que
tenham o mesmo cabealho. Tnhamos criado um cabealho bacana na
index.php e, para termos o mesmo cabealho no produto.php, teramos que
copiar e colar o cdigo do <header>.
O HTML sozinho no tem recursos muito interessantes para se reaproveitar
pedaos de cdigo entre pginas. Mas no servidor isso bem fcil de resolver.
Com PHP, basta usar a funo include.
2. Primeiro, crie um arquivo chamado _cabecalho.php e coloque o contedo do
cabealho que temos na home com a tag <header>. Esta uma boa hora para
usar o cortar-e-colar:
3. <header class="container">
4.
<h1>
5.
<img src="img/logo.png" alt="Mirror Fashion">
6.
</h1>
7.
<p class="sacola">
8.
Nenhum item na sacola de compras
9.
</p>
10.
<nav class="menu-setores">
11.
<ul>
12.
<li><a href="#">Sua Conta</a></li>
13.
<li><a href="#">Lista de Desejos</a></li>
14.
<li><a href="#">
</a></li>
15.
<li><a href="sobre.html">Sobre</a></li>
16.
<li><a href="#">Ajuda</a></li>
17.
</ul>
18.
</nav>
19.
</header>
<body>
<?php include("_cabecalho.php"); ?>
</body>
<footer>
<div class="container">
<img src="img/logo-rodape.png" alt="Logo Mirror Fashion">
<ul class="social">
<li><a
href="http://facebook.com/mirrorfashion">Facebook</a></li>
31.
<li><a
href="http://twitter.com/mirrorfashion">Twitter</a></li>
32.
<li><a
href="http://plus.google.com/mirrorfashion">Google+</a></li>
33.
</ul>
34.
</div>
35.
</footer>
<body>
<?php include("_cabecalho.php"); ?>
<?php include("_rodape.php"); ?>
</body>
41. O que ganhamos fazendo o include com PHP? Qual o trabalho de editar o logo
da empresa, por exemplo, se tivermos 100 pginas no site?
42. (opcional) Aplique o cabealho e o rodap que acabamos de criar tambm na
Home e na pgina de Sobre. Para isso, transforme esses arquivos em PHP
renomeando suas extenses e use o include.
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.
Agora remova esse pedao do doctype, html, head e body de dentro das pginas
que fazamos include. A ideia que todo esse pedao agora reaproveitvel no
include e no apenas o header em si.
19. Mas algumas partes do HTML que estamos incluindo agora no _cabecalho.php
devem ser dinmicas. O <title> por exemplo no deveria ficar fixo no include,
mas deveria ser diferente para cada pgina.
Uma forma de resolver isso passando variveis entre as pginas.
Na produto.php, antes de incluir o cabealho, defina uma varivel com o ttulo:
<?php
$cabecalho_title = "Produto da Mirror Fashion";
include("_cabecalho.php");
?>
21. Nem todas as pginas precisam de um arquivo .css extra. Do jeito que fizemos,
se a varivel $cabecalho_css no for definida, um erro acontecer. Isso ruim.
Uma forma de evitar tentar imprimir a varivel apenas se ela existir, e ignorar
isso caso ela no esteja definida. Ou seja, a varivel opcional.
Podemos fazer isso no PHP indicando que o erro de varivel no encontrada
pode ser ignorado. Para isso, usamos o @ na frente da varivel:
<?php print @$cabecalho_css; ?>
Captulo anterior:
Web para dispositivos mveis
Prximo captulo:
Progressive enhancement e mobile-first
Captulo 9
Esquea por um instante o design que vimos antes e pense na funcionalidade que
estamos tentando implementar. Queremos uma maneira do usurio escolher entre
diversas opes e enviar sua escolha para o servidor. Falando assim, quase bvio
que estamos descrevendo um <form>.
Mais: se queremos escolher, por exemplo, a cor da roupa dentre 3 opes possveis,
temos componentes especficos de formulrio para isso. Podemos fazer um combobox
com <select> ou implementar com 3 radio buttons. Vamos fazer esse ltimo.
<form>
<input type="radio" name="cor"> Verde
<input type="radio" name="cor"> Rosa
<input type="radio" name="cor"> Azul
</form>
Muito simples e funciona. Mas tem vrias falhas de acessibilidade e HTML semntico.
O texto que descreve cada opo, por exemplo, no deve ficar solto na pgina. Devemos
usar o elemento <label> para representar isso. E associar com o respectivo input.
<form>
<input type="radio" name="cor" id="verde">
<label for="verde">Verde</label>
<input type="radio" name="cor" id="rosa">
<label for="rosa">Rosa</label>
<input type="radio" name="cor" id="azul">
<label for="azul">Azul</label>
</form>
Mais ainda, repare que temos que explicar para o usurio o que ele est escolhendo com
esses radio buttons. a frase "Escolha a cor" que vemos no design. Como escrev-la no
HTML? Um simples <p>? No.
Semanticamente, esses 3 inputs representam a mesma coisa e devem ser agrupados em
um <fieldset> que, por sua vez, recebe um <legend> com a legenda em texto
apropriada.
<form>
<fieldset>
<legend>Escolha a cor</legend>
<input type="radio" name="cor" id="verde">
<label for="verde">Verde</label>
<input type="radio" name="cor" id="rosa">
<label for="rosa">Rosa</label>
<input type="radio" name="cor" id="azul">
<label for="azul">Azul</label>
</fieldset>
<input type="submit" class="comprar" value="Comprar">
</form>
Podemos ainda melhorar mais. Em vez de mostrar s o nome da cor ("Verde") no label,
podemos colocar a foto de verdade da roupa naquela cor. Uma imagem vale mais que
mil palavras. Mas, claro, isso para quem enxerga. Para leitores de tela e outros browsers
no visuais, vamos usar o atributo alt= na imagem para manter sua acessibilidade.
<form>
<fieldset>
<legend>Escolha a cor</legend>
<input type="radio" name="cor" id="verde">
<label for="verde">
<img src="produto-verde.png" alt="Produto na cor verde">
</label>
<input type="radio" name="cor" id="rosa">
<label for="rosa">
<img src="produto-rosa.png" alt="Produto na cor rosa">
</label>
<input type="radio" name="cor" id="azul">
<label for="azul">
<img src="produto-azul.png" alt="Produto na cor azul">
</label>
</fieldset>
<input type="submit" class="comprar" value="Comprar">
</form>
17.
18.
19.
20.
21.
22.
<label for="rosa">
<img src="img/produtos/foto2-rosa.png"
alt="rosa">
</label>
<input type="radio" name="cor" value="azul"
id="azul">
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<label for="azul">
<img src="img/produtos/foto2-azul.png"
alt="azul">
</label>
</fieldset>
<input type="submit" class="comprar" value="Comprar">
</form>
</div>
33. Teste o HTML do exerccio anterior. Veja seu funcionamento sem interferncia
do CSS e do JS que faremos depois.
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.
para o desktop. O resultado final deve ser um site que funciona tanto no desktop quanto
no mobile, como antes, s mudamos a ordem do fluxo de desenvolvimento.
Na prtica, o que muita gente descobriu que criar pensando no ambiente mais
restritivo (o mobile) e depois adaptar para o ambiente mais poderoso (desktop) mais
fcil que fazer o contrrio. desktop-first acaba sendo difcil por colocar o mobile, que
complicado, s no final do projeto.
Um exemplo prtico que passamos na nossa home page. Fizemos antes um menu com
CSS usando hover para abrir subcategorias. Isso algo super comum e funciona muito
bem no desktop. Mas um desastre no mobile, onde no existe hover. Podemos agora
repensar nossa home para ser compatvel com mobile. Mas se tivssemos, desde o
incio, pensando em mobile, talvez nem crissemos o menu hover.
Outro exemplo: os links do menu so bastante inacessveis em mobile. As opes esto
muito prximas uma das outras e tocar na opo certa com o dedo (gordo!) muito
difcil. No desktop no h esse problema pois usamos mouse, por isso no pensamos
nisso antes.
Se tivssemos comeado pelo mobile, j teramos feito os links maiores e mais
espaados pensando nos dedos gordos (costuma-se recomendar um valor mdio de 50px
para cada item clicvel).
E, fazendo tudo maior e mais espaado, assim como evitando o hover, o site funciona
bem no mobile mas, no s isso, funciona muito bem no desktop. Um site bem feito
para mobile funciona perfeito no desktop mas o contrrio nem sempre verdade. Por
isso o mobile-first.
Repare que o designer j mandou a pgina de produtos para ns pensando em mobilefirst: pouca informao, s o essencial, prioritrio. Botes grandes e espaados.
Nenhum efeito de hover. Tudo numa coluna s de informaes para dar scroll, j que a
tela pequena.
Nem sabemos ainda como ser a verso desktop, e no interessa por enquanto.
Mais sobre mobile-first
No vamos nos estender no assunto aqui no curso mas, se interessar, existe um livro s
sobre o tema, chamado Mobile-first de Luke Wroblewski. Em portugus, voc pode ler
mais no livro A Web Mobile do instrutor da Caelum Srgio Lopes.
O CSS e o visual dele so uma segunda camada, que vem em cima do HTML semntico
e bem construdo. Depois, vamos ver at que um pouco de JavaScript necessrio para
implementar outro recurso da pgina. Mas ele opcional. S o HTML, sozinho, seria
suficiente para uma experincia completa e funcional da pgina.
Esse tipo de pensamento o progressive enhancement novamente. Construir uma base
slida, simples, portvel e acessvel e, depois, progressivamente, incrementar a pgina
com recursos mais avanados tanto de estilo com CSS quanto de comportamento com
JavaScript.
Hoje no mercado h muita falta de profissionais com experincia e completo
entendimento das implicaes de progressive enhancement. Amadores focam em olhar
o design do Photoshop e copiar na pgina. Profissionais focam em experincias Web
acessveis, semnticas e portveis, onde o design tem um papel decorativo.
Box-sizing
Os primeiros a perceberem que o box model do CSS era esquisito foi a Microsoft. J no
IE6 em quirks mode eles trocaram o box model para que o width significasse o tamanho
total at a borda. A ideia era boa mas o problema foi eles atropelarem a especificao da
poca, o que acabou criando boa parte dos problemas de incompatibilidade entre
navegadores. O IE em standards mode usa o box model oficial e esse o padro a partir
do IE8.
Mas como a ideia, no fim, era boa, isso acabou se transformando no box-sizing do
CSS3, que nos permite trocar o box model que queremos usar.
Por padro, todos os elementos tm o valor box-sizing: content-box o que indica
que o tamanho dele definido pelo seu contedo apenas -- em outras palavras, o tal
box model padro que vimos antes. Mas podemos trocar por box-sizing: border-box
que indica que o tamanho agora levar em conta at a borda ou seja, o width ser a
soma do contedo com a borda e o padding.
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
display: block;
border-radius: 50%;
width: 50px;
height: 50px;
}
label[for=verde]:after {
background-color: #33CC66;
}
label[for=rosa]:after {
background-color: #FF6666;
}
label[for=azul]:after {
background-color: #6666FF;
}
Para fechar a funcionalidade de escolha das cores, falta apenas exibir apenas a
imagem atualmente selecionada. Outra forma de falar isso que devemos
esconder as imagens dos radios no selecionados. Podemos usar um seletor
avanado para isso:
.cores input:not(:checked) + label img {
display: none;
}
Reflita sobre esse ltimo seletor. O que ele faz exatamente? Esteja certo de ter
entendido cada parte dele antes de prosseguir.
25. Teste a pgina. A troca de imagens deve estar funcionando, apesar das coisas
no estarem ainda posicionadas corretamente.
.cores label:after {
position: absolute;
}
As bolinhas vo ser posicionadas com relao ao fieldset cores, ento ele precisa
estar posicionado. O padding superior para abrir espao para as bolinhas:
.cores {
position: relative;
padding-top: 80px;
}
Teste o resultado.
30. Um ponto importante de uma soluo responsiva que as imagens se adaptem
ao tamanho da tela. s vezes, usamos imagens maiores e, quando a tela
pequena, a imagem fica "vazando" para fora do elemento pai.
Uma forma de corrigir esse problema garantir que ela nunca passe o tamanho
do pai com max-width:
.cores label img {
display: block;
max-width: 100%;
}
Bug no Firefox
Nosso max-width: 100% no vai funcionar se voc usar um Firefox antigo.
Neste navegador, o elemento fieldset no respeitava o comportamento correto
32. (opcional) Quando selecionamos a bolinha, uma borda escura aparece. Use
transition para fazer a borda aparecer suavemente, como um fadein.
Adicione o seletor no incio de produto.css:
.cores label:after {
border: 6px solid rgba(0,0,0,0);
transition: 1s;
}
esses valores de media queries no garante que seu design funcionar em todos os
dispositivos, mas apenas nos dispositivos "padres" -- seja l o que for isso.
Prefira breakpoints com valores baseados no seu contedo. Ou seja, achar suas media
queries a partir do seu contedo e do seu design. Fica bem mais fcil garantir que sua
pgina funciona em todos os dispositivos.
Na prtica, faa seu design mobile-first, abra no navegador pequeno, v
redimensionando a janela at achar um ponto que o design quebra ou fica feio; anote o
tamanho da janela e crie um breakpoint l. No precisa ser um valor bonitinho como
600px. s vezes sua pgina vai quebrar justo em 772px. No tem problema.
Vamos usar media queries para ajustar o design para um estilo duas colunas.
Todo o CSS dos exerccios seguintes estar dentro de uma media query que s
vai disparar em telas maiores.
8. Edite produto.css e adicione a media query em seu final:
9. @media (min-width: 630px) {
10.
11. }
.produto {
/* a foto vai se posicionar absolutamente com relao
a esse elemento, por isso preciso estar posicionado
*/
position: relative;
/* deixo 40% de espao em branco na esquerda para foto ocupar
*/
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
padding-left: 40%;
}
.cores {
/* eu era relative antes; reinicio para static para evitar
que a foto se posicione com relao a mim
*/
position: static;
Teste a pgina e veja que a imagem deixa a desejar, pois ainda no est
posicionada corretamente. Apesar disso, o restante j comea a ficar no lugar.
46. As prximas regras devem ser adicionadas dentro da media query anterior.
Voc pode at escrever apenas as propriedades dentro dos seletores existentes
na media query.
Primeiro, para evitar que a imagem vaze para fora do espao que lhe foi
determinado, vamos usar as propriedades max-width e max-height:
.cores label img {
max-width: 35%;
max-height: 100%;
}
O legal de componentes HTML5 que eles so nativos dos browsers. Isso significa que
no precisamos de trabalho para us-los ou estiliz- los. Eles j vm com estilo padro
do navegador em questo o que bem interessante. A interface padro familiar para o
usurio.
9.12 - Tabelas
O uso de tabelas era muito comum h alguns anos para a definio de reas. Seu uso
para essa finalidade acabou se tornando prejudicial pela complexidade da marcao, o
que dificulta bastante a manuteno das pginas. Alm disso havia uma implicao
direta na definio de relevncia do contedo das tabelas para os indexadores de
contedo por mecanismos de busca.
Ainda assim, hoje, quando queremos exibir uma srie de dados tabulares, indicado o
uso da tag de tabela<table>.
<table>
<tr>
<th>Ttulo da primeira coluna</th>
<th>Ttulo da segunda coluna</th>
</tr>
<tr>
<td>Linha 1, coluna 1.</td>
<td>Linha 1, coluna 2.</td>
</tr>
<tr>
<td>Linha 2, coluna 1.</td>
<td>Linha 2, coluna 2.</td>
</tr>
</table>
Note que na primeira linha <tr> da tabela, as clulas so indicadas com a tag <th>, o
que til para diferenciar seu contedo das clulas de dados.
Existem diversas maneiras de se alterar uma estrutura de uma tabela, como por exemplo
indicamos que uma clula <td> ou <th> ocupa mais de uma linha de altura por meio do
atributo rowspan, ou ento que ela ocupa mais de uma coluna de largura com o uso do
atributo colspan.
Podemos adicionar um ttulo nossa tabela com a tag <caption>.
Ainda existem as tags <thead>, <tfoot> e <tbody>, que servem para agrupar linhas de
nossa tabela. Vale ressaltar que dentro do grupo <thead> devemos ter apenas linhas
contendo a tag <th> como clula.
Outra tag de agrupamento que temos na tabela a que permite que sejam definidas as
colunas, a tag <colgroup>. Dentro dessa tag definimos uma tag <col> para cada
coluna, e dessa maneira podemos adicionar alguns atributos que influenciaro todas as
clulas daquela coluna.
A seguir um exemplo completo de como utilizar essas tags dentro de uma tabela.
<table>
<caption>Quantidade e preo de camisetas.</caption>
<colgroup>
<col width="10%">
<col width="40%">
<col width="30%">
<col width="20%">
</colgroup>
<thead>
<tr>
<th rowspan="2">
<th colspan="2">Quantidade de Camisetas</th>
<th rowspan="2">Preo</th>
</tr>
<tr>
<th>Amarela</th>
<th>Vermelha</th>
</tr>
</thead>
<tfoot>
<tr>
<td>
<td>Total de camisetas amarelas: 35</td>
<td>Total de camisetas vermelhas: 34</td>
<td>Valor total: $45.00</td>
</tr>
</tfoot>
<tbody>
<tr>
<td>Polo</td>
<td>12</td>
<td>5</td>
<td>$30.00</td>
</tr>
<tr>
<td>Regata</td>
<td>23</td>
<td>29</td>
<td>$15.00</td>
</tr>
</tbody>
</table>
15. O estilo bastante simples, apenas para deixar o texto mais bonito:
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
.detalhes {
padding: 2em 0;
}
.detalhes h2 {
font-size: 1.5em;
line-height: 2;
}
.detalhes p {
margin: 1em 0;
font-size: 1em;
line-height: 1.5;
max-width: 36em;
}
@media (min-width: 500px) {
.detalhes {
font-size: 1.2em;
}
}
35. Crie uma tabela com caractersticas do produto contendo informaes tcnicas.
Adicione dentro da div detalhes:
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
<table>
<thead>
<tr>
<th>Caracterstica</th>
<th>Detalhe</th>
</tr>
</thead>
<tbody>
<tr>
<td>Modelo</td>
<td>Cardig 7845</td>
</tr>
<tr>
<td>Material</td>
<td>Algodo e poliester</td>
</tr>
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
<tr>
<td>Cores</td>
<td>Azul, Rosa e Verde</td>
</tr>
<tr>
<td>Lavagem</td>
<td>Lavar a mo</td>
</tr>
</tbody>
</table>
62. Estilize a tabela para deix-la mais agradvel. Use o seletor de filhos mltiplos
para um estilo zebrado.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
table {
border-spacing: 0.2em;
border-collapse: separate;
}
thead {
background-color: #999;
}
thead th {
font-weight: bold;
padding: 0.3em 1em;
text-align: center;
}
td {
padding: 0.3em;
}
tr:nth-child(2n) {
background-color: #ccc;
}
td:first-child {
font-style: italic;
}
2. O estilo bastante simples, apenas usando uma cor e bordas sutis para criar um
efeito mais elegante:
3. .produto-back {
4.
background-color: #F2F2F2;
5.
margin-top: 1em;
6.
border-top: 2px solid #ccc;
7. }
8. .cores label img {
9.
border: 2px solid #ccc;
10. }
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.
Captulo anterior:
Introduo a PHP
Prximo captulo:
PHP: parmetros e bancos de dados
Captulo 10
H ainda um outro atributo do form que indica a maneira como os dados so enviados.
o atributo method que pode receber dois valores: GET ou POST. Ambos os mtodos
enviam os dados do formulrio ao servidor, mas o GET faz isso via parmetros na URL
enquanto o POST envia os dados no corpo da requisio (e, portanto, no visvel na
barra de endereos).
<form action="checkout.php" method="POST">
Mas o PHP permite uma sintaxe mais curta para declarar um bloco de cdigo quando a
nica ao imprimir algo e no h vrias linhas de cdigo.
<?= $dado ?>
uma sintaxe mais curta que a primeira e tem exatamente o mesmo efeito.
No prximo exerccio, vamos criar uma pgina simples de checkout que, por enquanto,
apenas mostra uma mensagem de confirmao para o usurio seguida dos parmetros
que foram submetidos no formulrio.
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.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e JavaScript.
</dl>
No vamos usar o menu da Mirror Fashion nessa pgina, para criar uma
experincia de checkout mais imersiva.
17. O formulrio na pgina de produto precisa enviar os dados escolhidos para a
pgina de checkout. Para isso, nosso formulrio deve indicar para onde ser
submetido.
Altere a tag <form> no arquivo produto.php para apontar para nossa nova
pgina adicionando o atributo action:
<form action="checkout.php">
<h2>Sua compra</h2>
<dl>
<dt>Cor</dt>
<dd><?= $_POST["cor"] ?></dd>
<dt>Tamanho</dt>
<dd><?= $_POST["tamanho"] ?></dd>
</dl>
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.
Para manipular os dados dessa tabela, usamos uma linguagem separada conhecida como
SQL. Seu papel permitir que faamos buscas nas tabelas por certos tipos de dados e
que possamos inserir, remover e atualizar dados.
uma linguagem a mais pra aprender, mas bem diferente das que vimos at agora como
PHP ou JavaScript. O SQL serve apenas para acessar bancos de dados e bem mais
simples.
Por exemplo, se queremos acessar todas as informaes da tabela com nome produtos,
fazemos:
SELECT * FROM produtos
O comando SELECT indica que estamos selecionamos dados. O asterisco indica que
queremos todos os dados. E o FROM produtos aponta o nome da tabela.
Podemos selecionar apenas um dado especfico. Por exemplo, apenas os nomes dos
produtos:
SELECT nome FROM produtos
Vamos ver outros recursos do SQL mais pra frente. Mas no foco do curso. Para se
aprofundar no tema, recomendamos esse curso online do Alura:
http://www.alura.com.br/cursos-online-introducao/banco-de-dados-sql
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.
Essa funo recebe onde de conectar (localhost), o usurio (root), a senha (em branco) e
o nome do banco de dados disponvel (wd43). Ela abre a conexo se tudo der certo e
devolve uma varivel $conexao que representa a conexo aberta.
A busca
Prximo passo mandar o MySQL processar um certo comando SQL, como nossa
busca SELECT de antes. Pra isso, usamos a funo mysqli_query que recebe a
conexo (que abrimos antes) e o SQL da busca:
$dados = mysqli_query($conexao, "SELECT * FROM produtos");
Essa funo devolve uma varivel $dados com o retorno que a busca der.
Dados no PHP
ltimo passo transformar os dados da tabela em algo usvel no PHP. Uma maneira
comum transformar os dados num array com mysqli_fetch_array:
$produto = mysqli_fetch_array($dados);
Esse cdigo devolve todas as colunas do produto cujo id for 4, e apenas ele.
Dentro dela, rode um servidor PHP em uma porta diferente, como 8000:
$ php -S 0.0.0.0:8000
3. A primeira tela do phpMyAdmin pode ser assustadora de tantas opes. Ele tem
muitos recursos.
Na parte esquerda ficam os bancos de dados disponveis na mquina. Localize e
clique no banco WD43 que corresponde aos dados do nosso curso.
Podemos importar os dados do curso pra esse banco. Eles esto no arquivo
dados.sql na pasta do curso. Para importar, v no menu Import no topo do
phpMyAdmin. Clique em Browse para selecionar o arquivo no seu computador
e depois clique em Go.
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
Repare que criamos uma varivel $produto no PHP que contm os dados do
produto. Ela um array e podemos acessar as diferentes colunas atravs do
nome.
Altere os ttulos na pgina para usar os dados dinmicos do banco:
<h1><?= $produto["nome"] ?></h1>
<p>por apenas <?= $produto["preco"] ?></p>
Mas tambm podemos restringir o nmero de resultados. Imagine que a tabela imensa,
de milhares de registros, mas queremos apenas os primeiros 10 agora. No MySQL, isso
pode ser feito com o comando LIMIT na busca:
SELECT * FROM produtos LIMIT 0, 10
Isso significa que queremos 10 resultados contando a partir do primeiro (0). Podemos
trocar o primeiro nmero pra acessar informaes em outras partes do banco.
Repare como refizemos o <li> de antes mas usando todos os dados dinmicos
do banco de dados.
Teste a home no navegador e veja a busca dinmica acontecendo. Confira o
cdigo fonte HTML gerado, igual ao que tnhamos antes.
2. A busca que fizemos antes com o SELECT traz todos os dados da tabela. Isso
potencialmente bem grande numa loja de verdade. O ideal restringir a busca
apenas pelos dados necessrios. Pra isso, no MySQL, podemos usar o comando
LIMIT passando o mximo de resultados que estamos interessados.
Altere o cdigo anterior para incluir o LIMIT no SQL da busca:
SELECT * FROM produtos LIMIT 0, 6
Prximo captulo:
Bootstrap e formulrios HTML5
Captulo 11
Reset CSS
Estilo visual base pra maioria das tags
cones
Grids prontos pra uso
Componentes CSS
Plugins JavaScript
Tudo responsivo e mobile-first
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.
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>
</div>
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
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 panel que acabamos de criar e veja
como ele fica melhor posicionado no centro da tela.
<div class="container">
<!-- ... panel aqui ... -->
</div>
Com Bootstrap, podemos ainda acrescentar algumas classes nessa imagem para
obter resultados interessantes. A classe img-responsive faz a imagem ficar
flexvel e nunca estourar o tamanho do pai. E a classe img-thumbnail faz a
imagem ficar centralizada com uma borda de destaque.
Adicione a imagem do produto logo acima da lista <dl> dentro do div panelbody:
<img src="img/produtos/foto<?= $_POST["id"] ?>-<?= $_POST["cor"]
?>.png"
class="img-thumbnail img-responsive">
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.
Componentes
Label
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 inputs so 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">
formulrio com algum tipo de script, para validar o contedo por exemplo, necessrio
obter o contedo da propriedade value do 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 input do 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.
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
<label
</p>
<p>
<input
<label
</p>
<p>
<input
<label
</p>
<p>
<input
<label
</p>
Quando desejamos que o usurio escolha somente uma entre uma srie de opes,
podemos utilizar elementos input do 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!">
file
<input type="file" name="anexo">
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 input do 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>
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 select exibe 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>
number
<input type="number" max="100" step="5">
url
<input type="url" name="endereco">
O elemento input com tipo url permite que os dispositivos exibam um teclado como,
no exemplo do iPhone, opes como www e .com.
range
<input type="range" name="volume">
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:
Ou o iPhone:
color
<input type="color" name="cor_olhos">
O elemento input do tipo color permite que seja exibido um "color picker" para o
preenchimento do seu valor. O Chrome no Mac, por exemplo, exibe o color picker
padro do sistema:
search
<input type="search" results="10">
O input do 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).
tel
<input type="tel" name="telefone">
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">
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.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e JavaScript.
So 180 cones no total, das mais diversas razes. Basta olhar o nome da documentao
e usar na pgina.
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.
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 email do HTML5.
<fieldset>
<legend>Dados pessoais</legend>
<div class="form-group">
<label for="nome">Nome completo</label>
<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-group do Bootstrap. Cada input deve ter uma classe form-control.
Teste a pgina e observe o estilo padro que ganhamos apenas por usar o
Bootstrap.
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 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">
<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:
5. <input type="email" class="form-control" id="email" name="email"
6.
placeholder="[email protected]">
7.
8. ...
9.
10. <input type="text" class="form-control" id="cpf" name="cpf"
11.
placeholder="000.000.000-00">
12. 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:
13.
14.
15.
16.
<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">
</div>
</div>
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>
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.
Captulo anterior:
PHP: parmetros e bancos de dados
Prximo captulo:
Componentes complexos do Bootstrap e mais HTML5
Captulo 12
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>
<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 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:
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.
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.
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 formul rio.
:invalid {
outline: 1px solid #cc0000;
}
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 submit e deix-lo desabilitado caso seja possvel selecionar
algum elemento por essa pseudo-classe no formulrio. Essa verificao e alterao do
elemento submit pode ser feita por JavaScript e jQuery de maneira simples.
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 novalidate na 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");
}
};
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
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>
.navbar {
margin: 0;
}
</style>
Se voc testar agora, vai notar que o menu some nas telas menores. Para exibilo, 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:
<script src="js/jquery.js"></script>
<script src="js/bootstrap.js"></script>
7. (opcional) Use cones do glyphicons no menu. Basta coloc-los dentro dos itens
que quiser. Algumas sugestes:
8. <span class="glyphicon glyphicon-home"></span>
9. <span class="glyphicon glyphicon-question-sign"></span>
10. <span class="glyphicon glyphicon-list-alt"></span>
11. <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>
Captulo anterior:
Bootstrap e formulrios HTML5
Prximo captulo:
jQuery
Captulo 13
jQuery
"O primeiro problema para todos, homens e mulheres, no aprender, mas
desaprender"
Por conta das dificuldades enfrentadas pelos programadores JavaScript para pginas
Web, foi criada uma biblioteca que traz diversas funcionalidades voltadas soluo dos
problemas mais difceis de serem contornados com o uso do JavaScript puro.
A principal vantagem na adoo de uma biblioteca de JavaScript permitir uma maior
compatibilidade de um mesmo cdigo com diversos navegadores. Uma maneira de se
atingir esse objetivo criando funes que verificam quaisquer caractersticas
necessrias e permitam que o programador escreva um cdigo nico para todos os
navegadores.
Alm dessa vantagem, o jQuery, que hoje a biblioteca padro na programao frontend para Web, traz uma sintaxe mais "fluida" nas tarefas mais comuns ao programador
que so: selecionar um elemento do documento e alterar suas caractersticas.
Existem diversas funes que o jQuery permite que utilizemos para alterar os elementos
que selecionamos pela funo $, e essas funes podem ser encadeadas, por exemplo:
$("#cabecalho").css({"margin-top": "20px", "color": "#333333"})
.addClass("selecionado");
Mais exemplos:
$('div > p:first'); // o primeiro elemento <p> imediatamente filho de
um <div>
$('input:hidden'); // todos os inputs invisveis
$('input:selected'); // todas as checkboxes selecionadas
$('input[type=button]'); // todos os inputs com type="button"
Lembre-se de que a funo que chamamos aps o seletor aplicada para todos os
elementos retornados. Veja:
// forma ineficiente
alert($('div').text() + $('p').text() + $('ul li').text());
// forma eficiente :D
alert($('div, p, ul li').text());
A funo text() chamada para todos os <div>s, <p>s, e <li>s filhos de <ul>s.
O jQuery traz tambm entre suas diversas funcionalidades, uma funo que facilita a
iterao em elementos de um Array com uma sintaxe mais agradvel:
$("#menu-departamentos li").each(function (index, item) {
alert(item.text());
});
A funo each chamada logo aps um seletor executa a funo que passamos como
argumento para cada um dos itens encontrados. Essa funo precisa de dois argumentos.
O primeiro ser o "ndice" do elemento atual na coleo (0 para o primeiro, 1 para o
segundo e assim por diante), e o segundo ser o prprio elemento.
Tambm possvel utilizar a funo each do jQuery com qualquer Array:
var pessoas = ["Joo", "Jos", "Maria", "Antnio"];
$.each(pessoas, function(index, item) {
alert(item);
})
Nesse caso, chamamos a funo each diretamente aps o $, pois essa implementao
um mtodo do prprio objeto $. Passamos dois argumentos, o primeiro o Array que
queremos percorrer e o segundo a funo que desejamos executar para cada um dos
itens do Array.
Por isso necessrio que a tag <script> do jQuery seja a primeira de todas na ordem
de nosso documento:
<script
<!-- s
<script
<script
src="scripts/jquery.js"></script>
podemos utilizar o jQuery aps sua importao -->
src="scripts/meuscript.js"></script>
src="scripts/meuoutroscript.js"</script>
$("#cabecalho").css({"background-color": "#000000"});
})
Essa funo $ que recebe uma funo annima como argumento garante que o cdigo
dentro dela s ser executado ao fim do carregamento de todos os elementos da pgina.
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.
No estilos.css, esconda esse boto por padro. Ele s vai ser exibido quando os
produtos adicionais estiverem colapsados.
.painel button {
display: none;
}
Essa classe, claro, s vai fazer efeito se adicionarmos ela na pgina. Para testar,
v no div com classe painel e adicione a classe painel-compacto do lado.
5. Estamos sem JavaScript ainda na pgina. E, j que adicionamos a classe
painel-compacto direto no HTML, quebramos a experincia do usurio nesse
caso. Perceba que os produtos adicionais ficam escondidos e boto aparece.
Mas nada funciona! Pssima experincia.
Claro que, nesse caso, porque no implementamos ainda. Mas imagine o
cenrio onde, mesmo com tudo implementado, o JavaScript no carrega,
acontece um erro ou o usurio desabilitou.
Teste a funcionalidade.
11. (opcional) Implemente a mesma funcionalidade para o painel da direita, o maisvendidos.
12. (opcional trabalhoso) Podemos estilizar o boto de mostrar mais produtos com
regras CSS3 que aprendemos. Uma sugesto:
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
.painel button {
/* posicionamento */
float: right;
margin-right: 10px;
padding: 10px;
/* estilo */
background-color: #333;
border: 0;
border-radius: 4px;
box-shadow: 1px 1px 3px rgba(30,30,30,0.5);
color: white;
font-size: 1em;
text-decoration: none;
text-shadow: 1px 0 1px black;
/* animao*/
transition: 0.3s;
}
.painel button:hover {
background-color: #393939;
box-shadow: 1px 0 20px rgba(200,200,120,0.9);
}
.painel button {
color: white;
position: relative;
margin-bottom: 10px;
}
.painel button:after {
/* elemento vazio */
content: '';
display: block;
height: 0;
width: 0;
/* triangulo */
border-top: 10px solid #333;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
/* posicionamento */
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
/* animao */
transition: 0.3s;
}
.painel button:hover:after {
border-top-color: #393939;
}
Visualmente, como se fosse um DIV simples. Depois vamos estilizar esse componente
do jeito que quisermos com CSS. A grande sacada o valor semntico da tag e o que
ela representa.
O valor em si est como 42 estaticamente. O que precisamos atualizar esse valor toda
vez que o valor do input range mudar. Pra isso, precisamos de JavaScript. E vamos
implementar com jQuery no exerccio a seguir.
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.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e JavaScript.
Repare que esse elemento no tem visual especfico e tambm no atualiza seu
valor sozinho. Vamos implementar isso via JavaScript, usando jQuery.
3. O preenchimento inicial e atualizao do valor no output deve ser feita via
JavaScript. bastante simples: quando o input range mudar de valor (evento
oninput), pegamos seu valor e jogamos no output.
Para escrever o JavaScript, voc pode criar um novo arquivo produto.js e
import-lo na pgina. Ou, como o cdigo bem pequeno, se preferir, pode
escrever direto num elemento <script> na pgina.
O importante importar o jQuery antes do nosso cdigo, como fizemos antes:
<script src="js/jquery.js"></script>
O nosso cdigo :
$('[name=tamanho]').on('input', function(){
$('[name=valortamanho]').val(this.value);
});
4. Estilize o output para ter um design mais ajustado a nossa pgina de produto:
5. .tamanhos output {
6.
display: inline-block;
7.
height: 44px;
8.
width: 44px;
9.
10.
line-height: 44px;
11.
text-align: center;
12.
13.
border: 3px solid #666;
14.
border-radius: 50%;
15.
color: #555;
16. }
2. Cada campo que for usar uma mscara numrica precisa definir o atributo datamask com o formato a ser usado.
No <input> do CPF, adicione o atributo:
data-mask="999.999.999-99"
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.
Prximo captulo:
Integraes com servios Web
Captulo 14
14.2 - iframes
Uma das formas de se fazer esse tipo de integrao com o uso da tag <iframe>. Ela
nos permite embutir o contedo de uma outra pgina no meio da nossa muito
facilmente:
<iframe src="outrapagina.html"></iframe>
Podemos incluir pginas internas ou externas. E quando se trata das externas, fcil
usar esse recurso para incluir componentes reaproveitveis de outros servios. Como
mapas.
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.
Copie o cdigo do iframe e cole na pgina Sobre onde achar melhor. Teste a
pgina.
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
Boa parte dos sites atuais possui a funcionalidade de curtir do Facebook. um boto
simples mas integrado com a rede social que permite aos usurios curtirem a pgina
atual e compartilhar essa informao em seus perfis.
uma poderosa ferramenta de marketing, j que permite a recomendao pessoal de
produtos e servios de maneira viral.
Incluir essa funcionalidade no nosso site bastante simples. O Facebook prov um
cdigo JavaScript e HTML para copiarmos na nossa pgina, onde podemos passar
diversas configuraes.
Mas s esse div vazio, obviamente, no far o boto aparecer. Precisamos tambm
importar um arquivo JavaScript deles e rod-lo:
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "http://connect.facebook.net/pt_BR/all.js#xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
Esse cdigo colocado uma vez s no final da pgina. Podemos ter vrios botes na
mesma pgina.
Melhor que digitar esse cdigo usar a documentao no site do Facebook que nos
permite customizar o boto e j d o cdigo pronto para ser copiado:
https://developers.facebook.com/docs/reference/plugins/like/
7.
js.src = "http://connect.facebook.net/pt_BR/all.js#xfbml=1";
8.
fjs.parentNode.insertBefore(js, fjs);
9. }(document, 'script', 'facebook-jssdk'));</script>
10. O boto em si um div que devemos colocar na pgina onde queremos exibi-lo.
content="http://mirrorfashion.net/loja/img/produto-detalhe1.png">
rel='stylesheet'>
Captulo 15
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.
Abra o Firebug e clique no YSlow. Ele te mostra uma nota para as otimizaes da
pgina e sugestes do que melhorar.
D uma olhada nas regras. Note que h algumas que envolvem programao no
servidor, como configurar compresso GZIP ou acertar os headers HTTP. uma boa
conversar com os programadores do projeto para tambm fazerem esses acertos no
servidor, alm do que voc j vai fazer no client-side.
Vrias regras dizem respeito a otimizaes que j podemos implementar como
comprimir/minificar nossos CSS e JavaScript, algo que veremos no tpico seguinte.
PageSpeed
Abra o Firebug e v na aba do PageSpeed. Ele lhe mostra uma nota para a pgina e
diversas prticas de otimizao. Aquelas que esto em vermelho so as que voc deveria
fazer mas no fez. Amarelos so algumas sugestes e verdes so as que voc est bem mas s vezes h mais sugestes at nessas.
H diversas ferramentas para compresso de CSS e JavaScript. Uma das mais famosas
o YUI Compressor do Yahoo!. Por ser em Java, multiplataforma e fcil de se usar.
Ele comprime tanto cdigo CSS quanto cdigo JavaScript.
Voc pode baix-lo em http://developer.yahoo.com/yui/compressor/
Ele uma ferramenta de linha de comando, o que torna muito fcil automatizar sua
execuo antes do site ser colocado no ar, por exemplo.
Us-lo bem simples:
java -jar yuicompressor-x.y.z.jar script.js -o script-min.js
Este comando vai ler o arquivo script.js, minificar seu contedo e gravar o resultado
em script-min.js. O mesmo poderia ser feito com arquivos CSS.
Testando online
Diversos sites oferecem uma interface Web para o YUI - e outros compressores. So
teis para voc testar e ver logo o impacto sem instalar nada, mas so mais chatos para
se automatizar.
http://refresh-sf.com/yui/
Otimizaes lossy
A otimizao mais direta relacionada a isso diminuir a qualidade das imagens. Quando
voc salva um JPG, pode escolher o grau de compresso, obtendo imagens menores mas
sacrificando um pouco a qualidade. Chamamos esse tipo de otimizao de lossy, pois h
perda de qualidade.
preciso avaliar at que ponto se pode sacrificar a qualidade do design em prol da
performance. No entanto, tenha em mente que muitas otimizaes podem acabar sendo
imperceptveis para o olho humano - ainda mais o olho gil e desatento dos usurios
Web que varrem as pginas rapidamente e podem nem perceber que uma imagem est
com menos definio.
Voc pode otimizar fotos JPG manualmente no seu editor de imagens favorito e chegar
a um meio termo entre qualidade e tamanho final. Ou ento, pode tentar o excelente
servio online JPEGMini que promete diminuir o tamanho das suas imagens
diminuindo a qualidade de maneira praticamente imperceptvel. Eles usam um
algoritmo que promete simular as caractersticas da percepo do olho humano, o que
lhes permite piorar a qualidade da imagem apenas em pontos que so pouco percebidos
pelo nosso olhar.
http://www.jpegmini.com/
Design otimizado
Outra estratgia boa pensar bem na hora de fazer o design - ou convencer o designer a
pensar bem. Ser que realmente precisamos daquele monte de imagens na pgina? Ser
que aquele cone precisa ser truecolor ou podia ser salvo em grayscale?
Um ponto importante que o crescimento e adoo de CSS3 tem trazido novas
possibilidades de design em CSS puro que antes s eram possveis com imagens.
Bordas redondas, gradientes, sombras, etc. Usando CSS, conseguimos o mesmo efeito
evitando colocar mais imagens na pgina.
Pense bem no seu design e na forma como o codifica. Ele pode ser um fator de peso na
performance da sua pgina.
Otimizaes lossless
Tudo isso pode ser interessante para se organizar os arquivos pessoais, montar seus
lbuns etc. Mas so completamente irrelevantes para a renderizao na pgina.
Podemos usar ferramentas automticas para retirar esses bytes extra de imagens sem
perda alguma de qualidade. A ferramenta mais famosa o Smush.it do Yahoo:
http://smush.it
E o prprio JPEGMini j faz isso tambm para nossas fotos JPEG.
E offline?
Usar o Smush.it uma das formas mais simples e eficientes de se otimizar as imagens.
Caso voc queira usar algo direto no computador, recomendamos dois programas com
interfaces grficas locais:
MAC: http://imageoptim.pornel.net/ Windows: http://luci.criosweb.ro/riot/
Se o objetivo automatizar a otimizao, voc provavelmente vai querer ferramentas de
linha de comando. E h vrias delas disponveis (inclusive as usadas pelo Smush.it).
Procure por: optipng, pngout, pngcrush, advpng, jpegoptim, gifsicle.
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.
Consulte as vantagens do curso Desenvolvimento Web com HTML, CSS e JavaScript.
Ou seja, mesmo com 8 conexes simultneas, o volume de requests bem maior o que
vai atrasar o carregamento total da pgina. Em alguns casos (como arquivo JS), o
navegador fica travado at que todos os downloads terminem.
Diminuir o nmero de requisies essencial.
Criar a imagem o primeiro passo, e um dos mais chatos. H algumas ferramentas que
tentam automatizar (como o sprite.me), mas em geral o processo bastante manual.
Abre-se um editor de imagens e se posicionam as imagens para obter o resultado final.
E, principalmente, nesse processo de juntar as imagens no editor, devemos prestar
bastante ateno no posicionamento que precisa ser anotado precisamente. A posio
(X,Y) de cada imagem dentro da sprite, alm do tamanho (width, height) de cada uma.
Essas informaes sero valiosas para escrever o CSS.
Utilizamos a propriedade background do CSS do elemento como na tcnica de Image
Replacement, mas preciso especificar a posio da imagem em relao ao ponto
inicial do elemento.
Para saber mais - Data URI
Isso vai causar uma requisio para o arquivo logo-caelum.png. Usando data URIs,
vamos embutir o cdigo base64 da imagem direto na tag HTML:
<img
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKEAAAAyCAQAAACeqnP
QAAA
JAUlEQVRo3u3baZBVxRXA8d8wbAO4oiKKC4pGo7hQYpByCcYF3LXigiAhBgWNWmiMUVFBQ
EstU4UEIz
GKC6jjluAeDaWJo5aCREARcIuAiCiMghGBYTj58C6P++C9YWAWBDn3w3u3u2/f7v/te/qc
032hicEmq
xC1fFSYbLAmNnlpYmKtw0sfEzd9iINrB1XzOD5uibdieayU72N07BnC4Gq1o73rParMx2Z
5we16O0Tj
WuxnS93d6sC6QDi5pvCOiKHxeiyLfDI6hMlraUGJa32Ut+5P9VBUS/08Rwhd6wJhjg5svU
7wWsRF8V5
UJd9ndGJV0svsVJ2V5vl8NUVw9A8dYaq5e8eYauP7SQyPhbF2EaIKPTwmW2OZ/tppmLx0X
fT3mBVJ3i
UbBcLd4rV4P5bEa3HdWvEdGi/FiqieVIGwpdeSGhc4K2+JTt4RvtVqIxmF/SIiYnY0rBLf
1nFXVEb1p
SDCYuOSOp/TumDril3myo3kRa7eKOwZ82LdpCDCm5M6f6t+5IegC/eJl2PdpQDCjomeu49
NCmFVM/Kl
sTSi9hD+QwhzbL3JIcx/FMfwWF/Ji7BzUvPJ/CgQtohnI2oX4V1CeJIfBcI2MSmithFmjO
kLfhQIO8S
ciNpGuH9S+yE/AoTtY1FE7SM8JQmFNdnkEbaKmRF1gfBCIUxZz/YeZpC73Ki7HfLml+isv
xF+7ySNqk
BY4md2Xu3atg5Pne3scOzlEnc4x1bZ6452o5udkTijhRGWxFsRdYPwGiE8sZ4In8u2cYGz
V8srdoNlq
V7M1KcAwp9bLpyWc/VE4c3s2ShhqkGWJnWV64COyrO1T9K+CoRF8XhEXSHsJ4R31gtgkX8
b540kvrRU
21TebonPvcIM48xM+nJHEi7LRdhVrIFweg7C0jWolOtrYU7KLNsWRHhzRN0hPFUIy2oUUN
3SQCHclk1
pYqpQ6U7bJSnHmiWEq2uAcIVb7KyNodmo0UeOtqWjTBXC8AIIe0fUJcIDk/scXCMd3szXw
uPZ85uFyp
SuK9Ldf4Xwne3XG+Ffsuejkwe/d1ZvLhMm5EW4eyyuW4RFvhDC+esBbjeXeshwPTTylPBK
kr6X5cI12
XJHmZD053kH1GAU7pc97yaEZ1Lly4QleRGOjahbhNwrhIfWGeB5FmXb+R/vCP9KcvoIFZq
BfT2dlBmv
S4HppHoIK1PKZh8h3J4q//DKvq0G8ISIukd4THK3dQvpn5FV4h9m27sS4UhhPFoZabkQPn
RWzrrL+iB
cksrdXQiDUin350XYND6qD4S8KoRPNK82wK18LsxNLLd9vZ+D8FXhJTf4VgjzXJxjE9Ynw
oER9YPwiO
SOw6qN8HQh9Mue/zwH4X3ZPnxroBZ5rq8fhG3j+/pCyPBkxe6X1UQ4RFhim9Sk9GkK4cXJ
fDmigM9SH
YTzawHhoxH1h7CRN5L7PpB1nvLJKQaCW4XFtkzlfJRCmDGUXl3j9S2E8Egh3JLK30PUGOG
OUVGfCGlt
UnLv2Y7NW6KDV4TQBWcKkXLYDs95kVfO8mNWW7pvrkFehFtZIcxKlX6kFhBeE1G/CGmRNT
/CM3pn/Yo
SHV2gNOsRPIotzBU+S7Z07JrgX4Vwa3MS37tbYoq0NMBX9s+LMKP5wjAt0DYxUGqGsCg+q
X+ENHCZ+S
llstAM0xKzJJJZu3syVnomLtcUE1QIK3IQcmjijYSFXk6cu9C7AMKuKhNt/LUQlptXQ4TH
RWwIhJnxc
5t5eX31+S7P8aT7WJLNm+Ci1RCyRdKtVdtLntGhAEIuTkygTNTnGGNriPCJDYcwMxqP8Ec
vetcCC73h
bpfqYos1yu2tv8fd7dcaa+v0PPPvns41zLNGuMSuqfR9dbffqhgfaOVapR7UR2uc5DjbZ/
NOcKJdcuz
S3+ioJJVyvJMyd6jDqWQdEG7UkqwSx2aENUNYuhlhTRHO3oywZgh3iahvhP2zR6cqW3dIj
fYWbuvqTGi
+FqSxgxXbI98utBDn1D/CUKZUqdK1+Mhne74G3d5H2KeWEL7pJXNM1yYvwuEbAuFpa6Q1z
f4ryrtdqTj
HJGmWd6RUhbBpKqco50xOTrqWFkm5Btoq1iyV11hxCuHbGxphmUHeV+Fvyciba7xJ2qCXM
nTwmSt8rVx
PcIDplvhstYX1O80zLWdUr0Q4wIOesswMuyVqZIHFXrGjYtOcAAa4H0PM9aV7NEaxMcr9z
1VglHnmJMt
dDY2x0HdGZsIaoc5swioR3pvowm0w3ccOtJ/lOmtisb64yvXoZzo6CaNsY6gPwFRDNXeTu
akwwXne1Ng
RylPRnJUIb1HpLC1NNATtLXKUnbxqGO5zN5joV3b1thIlvtINV3hNc+0st6dOXtDQDioch
N+ZpK1Dzc8
MhBCxIRC+ZayxxtoZ010OPtADE43IBq1WIdwGnVXIuFrbo3XOKuCj7neYQyzVOQ/CF8Fwo
3GlceBSM9D
NHOxgSVZ5/MIyvTEuaVUnLZOXuUfiIo5zHXgqs8K3oRCmX+TpSTR6ur7YV6m5HvHTHIRNk
98mzrUguW6
BXtk6pvg0eSj5EI4Fw/wdj7sTmRWcxhopd7Ceydrchd4zyhf64hPdU238g2lGWOxUfOtMc
JM3fngI+2X
V+LPmKMqDsKnjhO3QQqXjsnWUGgIOTUW210Q4Fn/1T3C+8kTLXe9hvXC27+yNmfphYrKo2
sfu+vvKjhp
Y4jR8YgB4MKO9K9RBuH+lFPx0J1zuIAc5SOvVEDY0y2G43sd5R2FT21roVi0MsSg1c/czw
dZ2tzi12Sg
/wh4WOdYuyjwGunrbXFvhahPQUbgIVxpvR0daaid/9iROSx79KFPspbO5+sJkMbrOEBb8g
OxrC8z3pXk
GoCx5ITO/p3jdDO9on5qRv9Ak9Xuybyz1jdNzDJonlfvYOam0dr7QDgOSbfGD3YcG/qTSU
m8nkZxGPkj
WtNuZapqnXWO8EiVGKleuHzr60LtGu82LaKXMMpUeyOjswWLPGF0HI3EdP2PMlbXtPSzWZ
pVdltfyq1q
aF/wcqGXqfyNPprynXD9nu1WhuM0f0xaWZrr6vjoPZvMn3YXkRPe4bG2F/g9S7CNMkQtgR
wAAAABJRU5
ErkJggg==">
O resultado assustador e parece at pior com relao a tamanho, mas lembre-se de que
estamos economizando os bytes da imagem. E essa string dentro do HTML, aps o
GZIP, costuma ter um tamanho muito prximo ao que seria a imagem binria original.
Voc pode usar essa tcnica tambm em arquivos CSS, dentro de background-image
por exemplo.
O maior problema dessa tcnica que ela no suportada em todos os navegadores.
Todos os mais modernos suportam, j o IE6 e IE7 e mesmo o IE8 possui algumas
limitaes. Alm disso, o processo de gerao dessa string base64 costuma exigir um
pouco de conhecimento de programao no servidor.
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.
Prximo captulo:
Apndice - LESS
Captulo 16
Apndice - LESS
"No podemos solucionar problemas usando a mesma forma de raciocnio que usamos
quando os criamos."
LESS uma linguagem baseada em CSS (mesma ideia, sintaxe familiar) com recursos
que fazem falta no CSS em algumas situaes. tambm chamado de pr-processador
pois, na verdade, usado para gerar um arquivo CSS no fina l.
Alguns dos recursos apresentados pela linguagem so variveis, suporte a operaes
aritmticas, sintaxe mais compacta para representar hierarquias e mixins.
16.1 - Variveis
Voc j precisou usar a mesma cor no CSS em vrios pontos diferentes? Um ttulo e um
boto com mesma cor, por exemplo? O CSS tem uma soluo pra evitar copiar e colar,
que seria o uso de classes. Mas, muitas vezes, usar essa mesma classe em tantas tags
diferentes no uma boa ideia.
Programadores esto acostumados com variveis pra isso, mas o CSS no tem nada
parecido. Mas o LESS sim!
@corprincipal: #BADA55;
#titulo {
font-size: 2em;
color: @corprincipal;
}
button {
background-color: @corprincipal;
color: white;
}
Repare no uso da @corprincipal que no CSS puro, mas tem uma sintaxe bem
parecida e familiar. Depois de compilado, o LESS vira esse CSS:
#titulo {
font-size: 2em;
color: #BADA55;
}
button {
background-color: #BADA55;
color: white;
}
16.2 - Contas
Sabe quando voc tem aquele elemento principal com 960px mas que precisa de um
padding de 35px e duas colunas l dentro de tamanhos iguais mas deixando 20px entre
elas? Qual o tamanho de cada coluna mesmo? 435px. A voc coloca no CSS:
.container {
padding: 35px;
width: 960px;
}
.coluna {
width: 435px;
}
E quando algum mudar o tamanho do padding, voc torce pra lembrarem de refazer a
conta da coluna - que, alis, seria (960px 35px * 2 20px) / 2 = 435px. No LESS,
voc pode fazer a conta direito na propriedade e o resultado final calculado:
.coluna {
width: (960px - 35px * 2 - 20px) / 2;
}
Melhor ainda, junte com as variveis que vimos antes e voc nem copia e cola valores!
@total: 960px;
@respiro: 35px;
@espacamento: 20px;
.container {
padding: @respiro;
width: @total;
}
.coluna {
width: (@total - @respiro * 2 - @espacamento) / 2;
}
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.
16.3 - Hierarquia
Voc tem um #topo com um ttulo h1 dentro e uma lista ul de links. E quer estilizar
todos esses elementos. Algo assim:
#topo {
width: 100%;
}
#topo h1 {
font-size: 2em;
}
#topo ul {
margin-left: 10px;
}
Podemos usar vrios nveis de hierarquia (mas no abuse!), deixando nosso cdigo mais
estruturado, flexvel e legvel.
color: @corbase;
}
button {
background: saturate(@corbase, 10%);
}
Voc ainda tem: darken, desaturate, fadein, fadeout, spin, mix e at funes
matemticas como round.
Parece uma classe CSS mas ele recebe uma varivel como parmetro (que pode ter um
valor default tambm). E voc pode usar esse mixin facilmente:
.painel {
.arredonda(10px);
}
.container {
.arredonda;
width: 345px;
}
-webkit-border-radius:5px;
-moz-border-radius:5px;
border-radius:5px;
width:345px;
}
Querendo aprender ainda mais sobre HTML, CSS e JavaScript? Esclarecer 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.
Com isso, podemos incluir diretamente nosso arquivo .less usando uma tag <link>,
colocada antes da tag que carrega o less.js:
<link rel="stylesheet/less" type="text/css" href="styles.less" />
Para melhor performance, o ideal seria gerar o CSS antes usando o compilador. H uma
verso em linha de comando usando Node.JS, mas como JavaScript, voc pode rodlo em qualquer canto - at no Java com Rhino.
H tambm programas visuais pra instalar, como o LESS.app e d pra testar cdigo
rapidamente online mesmo no LessTester.com.
No Windows, voc pode usar o WinLESS que um compilador com interface grfica e
bem fcil de usar: http://winless.org/
por
<link rel="stylesheet/less" href="less/estilos.less">
E inclua a seguinte linha antes de fechar a tag body para carregar o prprocessador LESS:
<script src="js/less.js"></script>
9.
10.
11.
12.
&:nth-child(2n) {
/* regras que estavam em .painel li:nthchild(2n):hover {...} */
13.
}
14.
}
15.
}
16.
17.
h2 {
18.
/* regras que estavam em .painel h2 {...} */
19.
20.
&:before {
21.
/* regras que estavam em .painel h2:before {...} */
22.
}
23.
}
24.
25.
a {
26.
/* regras que estavam em .painel a {...} */
27.
}
28.
29.
.mostra-mais {
30.
/* regras que estavam em .painel .mostra-mais {...} */
31.
}
32. }
@escuro: #333333;
Procure os lugares que usam a cor e use a varivel no lugar. Por exemplo:
body {
color: @escuro;
/* outras regras */
}
.mostra-mais {
background: @escuro;
/* outras regras */
}
.transicao(@propriedades, @tempo) {
-webkit-transition: @propriedades @tempo;
-moz-transition: @propriedades @tempo;
-ms-transition: @propriedades @tempo;
-o-transition: @propriedades @tempo;
transition: @propriedades @tempo;
}
Agora altere o cdigo que escala e rotaciona as fotos dos produtos quando o
mouse passa em cima: apague as declaraes transition e coloque no lugar
.transicao(all, 0.7s);
.gradiente-automatico(@cor1) {
.gradiente(@cor1, darken(@cor1, 10%));
}
Faa o teste nos gradientes dos painis: use essa verso do mixin e veja o efeito
ser aplicado automaticamente.
Captulo anterior:
Apndice - Otimizaes de front-end
Prximo captulo:
Apndice - Subindo sua aplicao no cloud
Captulo 17
Em instantes voc vai receber um email com seu login, senha e uma URL pra iniciar o
uso da plataforma. Abra esse email e clique no link de ativao. Voc deve cair no
Painel de Controle principal. Clique no boto no topo que diz Criar ambiente.
Na janela de criao, selecione a aba PHP e o servidor Apache com o armazenamento
MySQL. D tambm um nome a esse ambiente:
Dentro de alguns instantes seu ambiente ser criado e voc vai receber um email de
confirmao. Esse email importante por conter a senha de acesso ao MySQL.
Tudo dando certo, voc deve ver o banco de dados WD43 criado na coluna da esquerda,
com nossa tabela produtos populada.
Cuidado que o endereo a ser usado no possui http na frente, apenas o nome do
servidor. E cuidado com o ultimo argumento, o nome do banco, pra ser em maiscula.
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.
Indique o endereo do ZIP que criou com seu projeto e d um nome a esse upload,
como Site da Mirror Fashion:
Uma janela se abre perguntando qual "contexto" voc quer instalar. Isso quer dizer se
queremos criar uma subpasta no servidor s pra esse projeto. Voc pode deixar em
branco pra criar na raiz do servidor mesmo. Clique em Instalar:
Prximo captulo:
Apndice - Envio de emails com PHP
Captulo 18
7. ?>