HTML5 e CSS3 - Capítulo 2 | Os primeiros passos com o nosso site
Capítulo 2 • Os primeiros passos com o nosso site
Lucas Mazza • Casa do Código
🌐

HTML5 e CSS3

Capítulo 2: Os primeiros passos com o nosso site
📖 Antes de mergulharmos de cabeça

Antes de mergulharmos de cabeça em técnicas específicas, propriedades de CSS e combinações de tags e estilos, vamos praticar um pouco de front-end arroz com feijão para garantir que estamos prontos para os demais assuntos e que as bases de desenvolvimento web estejam bem claras para você.

💡 Projeto do capítulo: Vamos criar o "O que eu mais gosto em São Paulo", um site de uma página só para falar sobre alguns lugares da cidade. A página terá uma lista de 3 lugares de maior importância, com uma breve descrição, uma foto, e uma lista adicional de mais coisas a se ver na cidade.
📍 O que eu mais gosto em São Paulo
Um site de uma página sobre os melhores lugares da cidade
Passear na Avenida Paulista!

Um dos principais centros financeiros da cidade, a avenida Paulista também possui diversas opções de entretenimento...

Os bares da Vila Madalena

Depois de um dia de trabalho, nada melhor do que um bom chopp, um petisco e uma conversa em uma mesa de bar...

O Parque do Ibirapuera

Um dos cartões postais da cidade, o parque dispõe de mais de 1,5 km² de área verde...

💡 Versão final: A versão final da nossa página também está disponível online em http://saopaulo.herokuapp.com.
2.1 Escrevendo HTML, de dentro para fora

Vamos começar pela parte mais importante da página, o conteúdo. Que no caso, são os 3 lugares que você não pode deixar de visitar em São Paulo. O primeiro, a Avenida Paulista, ficará assim:

<h2>Passear na Avenida Paulista!</h2> <p> Um dos principais centros financeiros da cidade, a avenida Paulista também possui diversas opções de entretenimento. Endereço do Museu de Arte de São Paulo, <em>MASP</em>, do Teatro Gazeta e muitos outros, a região é de fácil acesso graças as diversas linhas de ônibus que cruzam a avenida e a linha de metrô que passa por baixo dela. </p> <p> A Avenida Paulista sempre é assunto. O que será que estão falando a respeito no <a href='https://twitter.com/#!/search/Avenida%20Paulista' target='_blank'>Twitter</a>? </p>

📌 O que temos aqui?

Primeiro, um título secundário utilizando a tag h2, acompanhado de dois parágrafos com texto, delimitados pela tag p.

💪 Tags de ênfase

A tag em é utilizada para indicar ênfase, que terá o seu texto exibido em itálico na página.

🔗 Links

O link é criado pela tag a (derivada de anchor — âncora). O atributo href indica o endereço que o link aponta, e o target indica que o link deve ser aberto em uma nova página.

Seguindo em frente, podemos adicionar o resto do nosso conteúdo, outros 2 lugares. Um deles é a região da Vila Madalena, e o último é o Parque do Ibirapuera.

<h2>Os bares da Vila Madalena</h2> <p> Depois de um dia de trabalho, nada melhor do que um bom chopp, um petisco e uma conversa em uma mesa de bar. Opções de sobra na região das ruas Aspicuelta, Fradique Coutinho e Wisard. </p> <p> Veja quais os melhores bares e restaurantes da região no <a href='http://vejasp.abril.com.br/busca?chn=bares&qu=&nbh=Pinheiros%20/%20Vila%20Madalena' target='_blank'> Guia da VEJA São Paulo. </a> </p> <h2>O Parque do Ibirapuera</h2> <p> Um dos cartões postais da cidade, o parque dispõe de mais de 1,5 km² de área verde, lagos artificiais e pistas de cooper e ciclismo. E se isso não fosse o suficiente, o parque costuma ser palco de diversos eventos culturais ao longo do ano. </p> <p> Veja no <a href='http://goo.gl/maps/HoH8' target='_blank'>mapa</a> como chegar ao parque. </p>

Com a parte principal no seu lugar, vamos continuar na lista de melhorias a fazer para a nossa página. Todo site precisa de um título, certo? Para isso vamos utilizar a tag h1, que representa um título principal. Além disso, dentro do elemento head, podemos preencher a tag title com um título para a janela do navegador.

<!doctype html> <html lang='pt-BR'> <head> <!-- outras tags do head aqui --> <title>O que eu mais gosto em São Paulo</title> </head> <body> <h1>O que eu mais gosto em São Paulo</h1> <!-- o nosso conteúdo aqui ... --> </body> </html>
Ótimo! Já podemos dizer que estamos com uma página em mãos, certo? Bem, o HTML está no seu lugar, mas precisamos de um pouco de CSS para melhorar a apresentação do nosso conteúdo.
2.2 Adicionando formatações básicas

Para começar o CSS da nossa página vamos fixar a largura disponível para o conteúdo e centralizar o mesmo na página, deixando um espaço em branco nas laterais. Para isso, adicionamos uma tag div em volta de todo o HTML que criamos dentro do body, com uma classe chamada container.

<div class='container'> <!-- Todo o corpo da página vem aqui ... --> </div>

E o CSS para centralizar esta div na página:

.container { margin: 0 auto; width: 960px; }

📐 width: 960px

Fixa a largura para 960px, adequando o conteúdo a telas de pelo menos 1024px de largura, como tablets e netbooks.

↔️ margin: 0 auto

A margem superior e inferior está com 0, e as margens laterais em auto cuidam de centralizar o elemento na página.

O próximo passo é melhorar a exibição dos textos, ajustando um pouco o estilo das fontes:

body { font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif; line-height: 1.6; }
💡 Como funciona a lista de fontes: Estamos trocando a família de fontes utilizadas para uma lista de 4 fontes diferentes que são utilizadas da seguinte maneira: caso a primeira fonte listada não esteja disponível no sistema operacional do usuário, o navegador tentará utilizar a próxima e assim sucessivamente.

🍎 Lucida Grande

Será a fonte utilizada pelo Mac OS X ao exibir a nossa página.

🪟 Lucida Sans Unicode

Será vista por usuários do Windows, já que este sistema operacional não possui a primeira fonte da nossa lista.

📱 Verdana / sans-serif

Em casos mais extremos, Verdana será utilizado ou o navegador irá exibir uma fonte sem serifa por padrão.

💡 line-height: 1.6: O line-height de 1.6, sem nenhuma medida específica — como px ou em — indica para a altura das linhas ficarem com 160% da altura da fonte. Caso ela esteja em 16px, o line-height será 25px. Caso a altura da fonte mude, a altura da linha de texto irá acompanhar essa mudança.
2.3 Bordas e margens

Se analisarmos com mais detalhe o nosso conteúdo, estamos falando sobre 3 lugares diferentes, onde cada um possui um título e uma descrição. Para essa definição transparecer no nosso código, podemos colocar os elementos de cada lugar dentro de um novo elemento, para agrupar cada um.

<div class='place'> <!-- O título e a descrição da Avenida Paulista ... --> </div> <div class='place'> <!-- O título e a descrição da Vila Madalena ... --> </div> <div class='place'> <!-- O título e a descrição do Parque do Ibirapuera ... --> </div>

Esta alteração não tem impacto nenhum no visual da nossa página, mas nos dá por onde adicionar um estilo para cada um dos 3 lugares, já que agora existe um elemento específico que engloba o seu conteúdo. Assim, adicionamos um pouco de espaçamento e bordas a cada um deles.

.place { border-color: #CCC #999 #999 #CCC; border: 1px solid #CCC; margin-bottom: 20px; padding: 10px; }

🖼️ border

Borda sólida — uma linha — de 1px. A princípio todas as bordas são do mesmo tom de cinza.

📏 margin-bottom: 20px

Coloca 20px abaixo de cada um dos elementos, adicionando espaço entre eles e ao término da lista.

📦 padding: 10px

Adiciona o espaçamento dentro do elemento, que no caso é de 10px em todos os lados.

🎨 border-color

Muda as bordas da direita e de baixo para outro tom de cor, repetindo o mesmo cinza para as outras bordas.

💡 Como funcionam padding, margin e border: As três propriedades funcionam de maneira similar, sendo possível definir um valor específico para cada um dos 4 lados do elemento. Caso você queria definir o valor para apenas um deles, é possível utilizar a variação -top/right/bottom/left, como o margin-bottom.

Para ajustar o espaçamento, podemos remover a margem do h2 completamente. De brinde, adicionamos uma borda verde abaixo do título.

.place h2 { border-bottom: 1px dashed #7E9F19; margin: 0; }
💡 Destaque: Este estilo só se aplicará as ocorrências de h2 dentro de outro elemento, que possua a classe place. E diferente da borda sólida de antes, utilizamos o dashed no lugar de solid, para criar um efeito tracejado.
2.4 Um pouco de cor sempre é bom

Hora de trocar o preto e branco da nossa página e colocar algumas cores. Primeiro, cuidaremos do fundo da página. Além de uma nova cor, vamos combinar isso com uma imagem com um efeito de ruído, que será aplicado em cima da cor de fundo, assim:

body { background: #FFF1D6 url(images/noise.png); font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif; line-height: 1.6; }
⚠️ Importante: Lembre-se de ter a imagem noise.png no caminho correspondente ao que está no código — no nosso caso, em um diretório images que está junto ao arquivo .html da página. Você pode baixar este arquivo em http://saopaulo.herokuapp.com/images/noise.png.

Agora, os elementos .place precisam de um fundo diferente, para ajudar a leitura dos textos. Podemos então colocar um fundo branco neles.

.place { background-color: #FFF; border: 1px solid #CCC; border-color: #CCC #999 #999 #CCC; margin-bottom: 20px; padding: 10px; }

Podemos também mudar a cor dos links existentes no nosso conteúdo. Podemos trocar o tom de azul (cor padrão dos navegadores para links), e mudar os links para negrito.

.place a { color: #2C88A7; font-weight: bold; }

É comum adicionar um link ao título da página que leve para a página principal do site, que no nosso caso é a própria página em que estamos. Vamos mudar o código HTML do nosso h1 para adicionar um link.

<h1><a href=''>O que eu mais gosto em São Paulo</a></h1>

E é claro, uma cor especial para este link:

h1 a { color: #7E9F19; text-decoration: none; }

Também podemos mudar a cor do link para quando se posicionar o cursor em cima dele, utilizando um pseudo-seletor do estado hover do elemento.

h1 a:hover { background-color: #7E9F19; color: #FFF; }

🖱️ :hover

Para quando o cursor do mouse está sobre o elemento.

⌨️ :focus

Para elementos que estejam focados pelo teclado, como links ou campos de um formulário.

🔗 :visited

Para endereços já visitados pelo usuário.

👆 :active

Para o instante onde o elemento está sendo pressionado pelo mouse.

2.5 Primeiro contato com imagens

Um dos elementos clássicos que não utilizamos até agora é o img, utilizado para exibir imagens que fazem parte do seu conteúdo — diferentes de imagens utilizadas no estilo da sua página, que são aplicadas utilizando a propriedade background via CSS.

Vamos adicionar uma tag img entre cada h2 e os parágrafos de cada um dos elementos .place.

<div class='place'> <h2>Passear na Avenida Paulista!</h2> <img src='images/paulista.jpg' alt="O céu da avenida Paulista, foto por http://www.flickr.com/photos/jairo_abud"> <!-- os parágrafos vem aqui ... --> </div>

🖼️ src

O atributo src deve conter o caminho para o arquivo da imagem.

📝 alt

O alt é um texto alternativo para a imagem caso ela não seja carregada pelo navegador. Este mesmo texto pode vir a ser usado no atributo title.

📐 width / height

Também podemos fixar esses valores com os atributos width e height — caso o tamanho real da imagem seja diferente, o navegador irá redimensionar a imagem conforme o necessário.

⚠️ Atenção aos tamanhos: Imagens de tamanho muito grande são um dos principais responsáveis por problemas de performance na web. Mesmo se você fixar um tamanho para as suas imagens que seja menor do que o seu tamanho real, o arquivo original será transferido pela rede e pode causar uma certa lentidão. Não deixe de comprimir as suas imagens para economizar diversos bytes de tráfego.
💡 Ferramenta recomendada: Caso você utilize o Mac OS X, aconselho a usar o ImageOptim (http://imageoptim.com/) para comprimir imagens.

Para resolver o problema de layout com as imagens, vamos aplicar alguns estilos e utilizar a propriedade float para alinhar os elementos horizontalmente.

.place img { border: 1px solid #7E9F19; float: left; margin: 10px 10px 0 0; padding: 2px; }

E para resolver o problema de "vazamento" das imagens, vamos adicionar um elemento vazio com a classe .clear:

.clear { clear: both; }
💡 Sobre o float: Este é um truque bastante conhecido e utilizado, mas não sou muito fã dele devido ao elemento vazio extra que é adicionado ao HTML, sem nenhum valor semântico, que existe apenas para resolver um problema do estilo da página. Vamos voltar a este assunto sobre o float e aprender uma solução mais prática e elegante para isto.
2.6 Adicionando elementos secundários

Bem, já temos todo o conteúdo da nossa página no seu devido lugar com um pouco de CSS para deixar tudo mais apresentável. Precisamos agora de mais alguns elementos adicionais para complementar a nossa página, como um rodapé e uma barra lateral com mais conteúdo.

Vamos primeiro ao rodapé:

<div class='footer'> <p>Parte do livro "HTML5 e CSS3: Domine a web do futuro."</p> </div>
.footer { font-size: 12px; text-align: center; }

O próximo da nossa lista é a barra lateral:

<div class='sidenote'> <h3>E existem muitos outros lugares interessantes na cidade ...</h3> <ol> <li>O Mercado Municipal.</li> <li>A Sala São Paulo.</li> <li>Os estádios dos principais times de futebol da cidade.</li> <li>Diversos museus, como o Memorial da América Latina, Museu da Língua Portuguesa e o Museu do Ipiranga.</li> <li>E mais!</li> </ol> </div>

Mais uma div, um título em um h3 e uma lista ordenada, a tag ol, com alguns itens a mais. E é claro que este elemento acompanha um pouco de CSS.

.sidenote { background-color: #FFFBE4; border: 1px solid #C9BC8F; padding: 10px; } .sidenote h3 { font-size: 14px; margin-top: 0; } .sidenote ol { font-size: 12px; }

Por ser uma barra lateral, ela não deveria pegar toda a largura disponível, e se encaixar ao lado do nosso conteúdo principal. Outro caso de uso para o float.

.places { float: left; width: 660px; } .sidenote { background-color: #FFFBE4; border: 1px solid #C9BC8F; float: right; padding: 10px; width: 260px; }
💡 Resultado: Com a propriedade float: right, a barra lateral vai ficar sempre no lado direito, enquanto o conteúdo está a esquerda. A largura fixa, que é menos do que o espaço restante da página, deixa um espaço a mais entre os elementos e garante que as suas bordas não vão se juntar.
2.7 Faça para sua cidade também!
🏙️ "Foi simples, não?"
Após apenas algumas páginas, já temos um exemplo simples, elegante e funcional de um layout com uma pequena pitada de CSS.

Caso você esteja começando nesse mundo de HTML e CSS, que tal implementar uma página similar para a sua cidade? Coloque-a no ar e eu ficarei muito contente de fazer um link para ela.

Compartilhe seu projeto: Apenas me conte por e-mail o endereço da sua página. Você pode enviar para casadocodigohtmlcss@gmail.com.
💡 O que aprendemos neste capítulo:
  • ✅ Estrutura básica de HTML com tags semânticas (h1, h2, p, a, img, div, ol)
  • ✅ CSS básico: font-family, line-height, margin, padding, border, background
  • ✅ Uso de classes para estilizar elementos
  • ✅ Pseudo-seletores como :hover
  • ✅ Propriedade float para criar layouts com colunas
  • ✅ Imagens e atributos src e alt
  • ✅ Problemas comuns de layout e suas soluções
Resumo do Capítulo 2
📋 Pontos fundamentais do Capítulo 2:
  • HTML semântico — use as tags certas para cada tipo de conteúdo (h1, h2, p, a, img, ol, div).
  • CSS de formatação — font-family, line-height, margin, padding, border, background.
  • Classes — use classes para aplicar estilos a grupos de elementos.
  • Pseudo-seletores — :hover, :focus, :visited, :active para interações.
  • Float — alinhe elementos horizontalmente com float: left ou right.
  • Imagens — use a tag img com src e alt, e comprima suas imagens para performance.
  • Limpeza de float — use clear: both para resolver problemas de layout.
  • Centralização — margin: 0 auto com largura fixa.
🌐 "Caso você esteja começando nesse mundo de HTML e CSS, que tal implementar uma página similar para a sua cidade?"
📖 HTML5 e CSS3 • Capítulo 2 🌐 Os primeiros passos com o nosso site 🏙️ Lucas Mazza • Casa do Código

HTML5 e CSS3 — Domine a web do futuro | Capítulo 2: Os primeiros passos com o nosso site | Lucas Mazza • Casa do Código

Postar um comentário

0 Comentários