└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Aprenda HTML e CSS 2 | 3 | Leia em uma página separada se achar melhor em https://estevanmaito.github.io/aprenda-html-css 4 | 5 | ### ⚠️⚠️⚠️ ATENÇÃO ⚠️⚠️⚠️ 6 | 7 | Os exercícios ainda estão sendo recriados. Para receber atualizações desse repo, clique em **Watch** ao lado do **Star** (pode clicar nesse tb 😏). 8 | 9 | #### Sumário 10 | - Parte 1: HTML 11 | - 1 - Escrevendo HTML 12 | - 2 - Apresentando HTML 13 | - 3 - Olá mundo! 14 | - 4 - Estrutura básica 15 | - 5 - Parágrafos 16 | - 6 - Cabeçalhos 17 | - 7 - Imagens 18 | - 8 - Tamanho e acessibilidade em imagens 19 | - 9 - Listas 20 | - 10 - Links 21 | - 11 - Tabelas 22 | - 12 - Tabelas avançadas 23 | - 13 - Formulários 24 | - 14 - Formulários: entrada de texto curta 25 | - 15 - Formulários: entrada de texto longa 26 | - 16 - Formulários: radio buttons 27 | - 17 - Formulários: checkboxes 28 | - 18 - Formulários: select 29 | - 19 - Formulários: envio 30 | - 20 - Formulários: grupos 31 | - 21 - Indentação 32 | - 22 - Comentários 33 | - 23 - Seções 34 | - 24 - Seções: cabeçalho e navegação 35 | - 25 - Seções: principal e secundária 36 | - 26 - Seções: artigos e seções genéricas 37 | - 27 - Seções: rodapé e divs 38 | - 28 - ID 39 | - 29 - Links internos 40 | - 30 - Áudio e vídeo 41 | - 31 - Iframes 42 | - 32 - Blocos e linhas 43 | - 33 - Mais texto 44 | - 34 - Meta tags 45 | - 35 - Validando HTML 46 | 47 | - Parte 2: CSS 48 | - 36 - Escrevendo CSS 49 | - 37 - Escrevendo CSS: no HTML com style 50 | - 38 - Escrevendo CSS: no HTML em linha 51 | - 39 - Escrevendo CSS: em arquivo externo 52 | - 40 - Estrutura das regras 53 | - 41 - Classes 54 | - 42 - Seletores de tipo 55 | - 43 - Seletores de classe 56 | - 44 - Seletores de id 57 | - 45 - Cascata 58 | - 46 - Cores 59 | - 47 - Herança 60 | - 48 - Medidas 61 | - 49 - Caixas (box-model) 62 | - 50 - Padding 63 | - 51 - Bordas 64 | - 52 - Margem 65 | - 53 - Texto 66 | - 54 - Fontes 67 | - 55 - Listas 68 | - 56 - Tabelas 69 | - 57 - Imagens de fundo 70 | - 58 - Posicionamento 71 | - 59 - Ordem (z-index) 72 | - 60 - Seletores de atributos 73 | - 61 - Combinando seletores 74 | - 62 - Especificidade 75 | - 63 - Pseudo classes 76 | - 64 - Acessibilidade 77 | - 65 - Media queries 78 | - 66 - Breakpoints 79 | - 67 - Viewport 80 | - 68 - Validando CSS 81 | - 69 - Flexbox 82 | - 70 - Flexbox: linhas e colunas 83 | - 71 - Flexbox: quebras 84 | - 72 - Flexbox: justificar conteúdo 85 | - 73 - Flexbox: alinhar itens 86 | - 74 - Flexbox: alinhar conteúdo 87 | - 75 - Flexbox: tamanho dos itens 88 | 89 | - Parte 3: BÔNUS 90 | - 76 - Ferramentas 91 | - 77 - Planejamento do projeto 92 | - 78 - Estrutura dos arquivos 93 | - 79 - HTML padrão 94 | - 80 - Desenvolvimento HTML 95 | - 81 - Desenvolvimento CSS 96 | - 82 - Fim 97 | 98 | # Público alvo 99 | 100 | Este livro é para você se: 101 | 102 | - O único contato que você teve com um site até hoje foi navegando nele pela internet. Você não faz ideia de como funciona um site. Ou 103 | 104 | - você já teve contato com HTML e CSS, talvez já tenha escrito códigos através de outros livros ou aulas, mas não se acostumou às particularidades de cada linguagem ou não entendeu direito como HTML e CSS estão ligados. Ou 105 | 106 | - você tem experiência com HTML e CSS mas gostaria de atualizar seus conceitos nas linguagens ou procura apenas uma referência rápida para sair colocando em prática. As chances são grandes de que você ache o que procura para sair usando em um dos mais de 70 capítulos que vão direto ao ponto. Ou 107 | 108 | - você só quer testar seus conhecimentos e fazer alguns exercícios. 109 | 110 | Este livro não é para você se: 111 | 112 | - Você não sabe ler. Ou 113 | 114 | - está procurando um livro técnico com a especificação de cada linguagem. Ou 115 | 116 | - está buscando pelas novas APIs do HTML5, animações e efeitos complexos com CSS. 117 | 118 | 119 | # Introdução 120 | 121 | Este livro se baseia na premissa de que uma das melhores formas de aprender é fazendo. 122 | 123 | As pessoas retém, em média: 124 | 125 | - 5% escutando (aulas) 126 | - 10% lendo 127 | - 20% audiovisual 128 | - 30% demonstrando 129 | - 50% discutindo 130 | - 75% praticando 131 | - 90% ensinando 132 | 133 | Fonte: Learning pyramid 134 | 135 | A cada capítulo vou te levar de 10% a 75%. 136 | 137 | Isso será alcançado através de capítulos curtos, direto ao ponto, seguidos de exemplos que você mesmo deve executar e exercícios baseados no que foi lido há pouco. 138 | 139 | Li ótimos livros quando comecei a estudar estas tecnologias há alguns anos, mas nenhum foi além da leitura. Você termina de ler e não sabe como aplicar o conteúdo ou como estruturar uma página. 140 | 141 | O melhor conceito que vi foi o aplicado por Mark Myers, autor americano, num livro de introdução ao Javascript. Capítulos curtos e muitos exercícios para praticar ao final de cada leitura. Ainda assim, ao final do livro eu não sabia onde usar ou o que construir com o que recém tinha acabado de aprender. 142 | 143 | Decidi, portanto, criar o material de estudo que eu gostaria de ter lido e praticado em 2013. HTML e CSS não são a mesma coisa e não devem ser ensinados ao mesmo tempo. Imagine só, você querendo aprender a criar um parágrafo e eu te ensino a criar um parágrafo, alterar a cor e tamanho das fontes além de aumentar as margens. 144 | 145 | Tenho certeza de que, ao final desta leitura, você será capaz de criar produtos incríveis além de estar direcionado para onde continuar a partir daqui. 146 | 147 | 148 | # Exercícios 149 | 150 | Cada capítulo acompanha alguns exercícios para afixar o conteúdo recém lido. Sugiro fortemente que você realize todos. Do contrário, estará desperdiçando tempo e não reterá a maioria das informações. 151 | 152 | Os desafios, em alguns momentos, podem parecer simples demais, e a minha intenção é que você sinta exatamente isso. O objetivo aqui é construir cada capítulo e seus exercícios sobre o que foi visto anteriormente, de modo que tudo se encaixe e pareça trivial. 153 | 154 | Você também pode, a qualquer momento, voltar e refazer os exercícios para algum capítulo específico, caso queira relembrar os conceitos. 155 | 156 | Não esqueça, a prática leva à perfeição. 157 | 158 | BOA LEITURA! 159 | 160 | 161 | # 1 - Escrevendo HTML 162 | 163 | HTML (Hypertext Markup Language) é uma linguagem que instrui o navegador (Firefox, Chrome, Edge, Safari, Opera, etc.) como montar uma página. Essas instruções basicamente dizem ao navegador **onde** cada parte da página deve ficar, seja um parágrafo, uma imagem ou um cabeçalho. 164 | 165 | Apesar de as páginas que costumamos ver pela internet geralmente serem compostas por várias cores, fontes e formatos, o HTML em si é responsável apenas pela *estrutura e conteúdo* delas (textos, imagens, vídeo, links), enquanto que o CSS (mais detalhes na parte 2) é o responsável pela *apresentação* (instruções sobre como apresentar cada conteúdo, como cores, tamanhos e disposição). 166 | 167 | Para que o navegador possa interpretar corretamente o que queremos que seja apresentado para quem for visualizar nossas páginas, precisamos escrever instruções específicas em HTML. Essas instruções são **textos** e podem ser escritas em qualquer editor de texto como o Notepad (bloco de notas) disponível no Windows ou TextEdit no Mac, que já vêm instalados com o sistema operacional ou um editor próprio para código, como Brackets, Sublime, Atom, Dreamweaver e mais uma infinidade que você pode conferir fazendo uma busca no Google por "editores de código". 168 | 169 | Cada documento HTML cria uma página para o navegador. Ou seja, se tivermos vinte documentos, teremos vinte páginas no site. 170 | 171 | Documentos HTML são identificados através de uma extensão própria. O nome do arquivo termina com ```.html```, como em ```sobre.html``` ou ```contato.html```. 172 | 173 | Durante o curso deste livro, nos restringiremos aos seguintes caracteres quando nomearmos um documento HTML (porém, saiba que existem mais possibilidades): 174 | 175 | - apenas caracteres minúsculos; 176 | - sem espaços; 177 | - caracteres de 0-9, de a-z e - (hífen). 178 | 179 | Faça os exercícios propostos para este capítulo em: 180 | 181 | 182 | 183 | 184 | # 2 - Apresentando HTML 185 | 186 | Geralmente, quando olhamos para a barra de endereços do navegador podemos ver o nome do arquivo HTML ao qual aquela página se refere: 187 | 188 | ![ch02](http://i.imgur.com/yrGsQ05.png) 189 | 190 | Ou seja, quando este endereço é solicitado ao navegador, o arquivo ```index.html``` é carregado e apresentado na tela do usuário. 191 | 192 | Para que um arquivo HTML seja apresentado ao usuário, ele deve estar presente no *servidor* onde o site está *hospedado*. Assim, por exemplo, o navegador solicita o arquivo ```x.html``` ao servidor que fará uma busca por este nome. Existindo um documento HTML que tenha o nome de ```x```, o servidor envia ao navegador o documento correspondente, caso contrário, uma mensagem de erro será apresentada ao usuário dizendo que o arquivo solicitado não foi encontrado. 193 | 194 | Faça os exercícios propostos para este capítulo em: 195 | 196 | 197 | 198 | 199 | # 3 - Olá mundo! 200 | 201 | A partir deste capítulo você já poderá se considerar um desenvolvedor web! É o que diz a Wikipedia: 202 | 203 | > Desenvolvimento web é o termo utilizado para descrever o desenvolvimento de sites 204 | 205 | Vamos criar nosso primeiro site: 206 | 207 | 1. Na área de trabalho do seu computador, crie uma pasta chamada "meu-site" (note que estamos utilizando as mesmas regras de nomes para arquivos HTML aqui); 208 | 209 | 2. Abra seu editor de texto e crie um novo arquivo; 210 | 211 | 3. Copie o seguinte código dentro deste arquivo: 212 | 213 | ```html 214 | 215 | 216 | 217 | Site do Estevan Maito 218 | 219 | 220 | Eu sou um desenvolvedor web! 221 | 222 | 223 | ``` 224 | 225 | 4. Altere o título para o seu nome; 226 | 227 | 5. Salve o arquivo como ```index.html```; 228 | 229 | 6. Abra a pasta "meu-site" se já não estiver aberta e abra o arquivo ```index.html``` (com dois cliques ou selecione um navegador para *abrir com*). 230 | 231 | Aí está! Sua primeira página para o mundo! 232 | 233 | Mas o que está acontecendo aqui? Por que preciso escrever tantos "<", "/" e ">"? 234 | 235 | Tags, leitor. Leitor, tags. 236 | 237 | Tags são usadas em HTML para criar elementos e, assim, **estruturar uma página**. Geralmente, as tags aparecem em pares, uma tag de abertura e outra de fechamento. A tag de abertura consiste no nome do elemento (```title```, por exemplo) cercado por ```<``` e ```>```, resultando em ``````, enquanto que a tag de fechamento é praticamente igual, com a exceção de que o nome do elemento (no nosso caso ainda é o ```title```) é precedido por ```/```, resultando em ``````. 238 | 239 | Tudo o que estiver entre o ```<``` da tag de abertura e o ```>``` da tag de fechamento é considerado um **elemento**. No exemplo acima, ```Site do Estevan Maito``` é o nosso elemento ```title```. 240 | 241 | Faça os exercícios propostos para este capítulo em: 242 | 243 | 244 | 245 | 246 | # 4 - Estrutura básica 247 | 248 | No capítulo anterior vimos a seguinte estrutura, que é o mínimo para termos um documento HTML: 249 | 250 | ```html 251 | 252 | 253 | 254 | Site do Estevan Maito 255 | 256 | 257 | Eu sou um desenvolvedor web! 258 | 259 | 260 | ``` 261 | 262 | Você já conhece as tags e sabe que uma de suas funções é prover estrutura para a página web, então vamos analisar linha a linha qual o papel de cada tag no documento HTML. 263 | 264 | 1. ``````: é **sempre** a primeira linha e diz ao navegador qual o tipo de documento que ele deve apresentar na tela para o usuário. Nesse caso, nossa tag significa que este é um documento HTML5, a versão mais recente e compatível com todos navegadores modernos; 265 | 266 | 2. `````` e ``````: todo o conteúdo de uma página deve ficar entre a tag de abertura e fechamento ```html```; 267 | 268 | 3. `````` e ``````: o conteúdo desse elemento, com exceção do elemento ```title``` (que fica visível na janela do navegador, como na imagem do capítulo 2), não aparece para o usuário e geralmente é usado para inserir estilo e códigos relativos ao funcionamento do site, que se comunicam diretamente com o navegador; 269 | 270 | 4. `````` e ``````: título da página, visível no nome da aba/janela do navegador; 271 | 272 | 5. `````` e ``````: habitat de todos os elementos que são visíveis na tela do usuário. Menus, imagens, links, enfim, tudo que você vê na tela fica aqui dentro. 273 | 274 | Nenhum desses elementos pode ser repetido. 275 | 276 | Faça os exercícios propostos para este capítulo em: 277 | 278 | 279 | 280 | 281 | # 5 - Parágrafos 282 | 283 | Abra o arquivo ```index.html``` que você criou no capítulo anterior e adicione uma linha abaixo de "Eu sou um desenvolvedor web!" dizendo "E eu sou incrível!". Você deverá ter isso dentro do elemento ```body```: 284 | 285 | ```html 286 | Eu sou um desenvolvedor web! 287 | E eu sou incrível! 288 | ``` 289 | 290 | Agora execute novamente o arquivo ```index.html```, da mesma forma que foi realizado no passo 6 do capítulo anterior. 291 | 292 | Você escreveu exatamente como eu mostrei, não foi? E por que o navegador está mostrando: 293 | 294 | > Eu sou um desenvolvedor web!E eu sou incrível! 295 | 296 | O problema é que o navegador não reconhece uma nova linha da mesma forma com a qual estamos acostumados em editores de texto (como o Word, por exemplo). Ele simplesmente elimina todos os espaços entre os elementos e apresenta o resultado na tela. 297 | 298 | Se você quiser mostrar dois parágrafos, terá que criar dois elementos que digam isso ao navegador. Faremos isso colocando nossas frases dentro das tags ```

``` e ```

```, que compõem o elemento **parágrafo**. 299 | 300 | Altere as duas frases dentro do elemento ```body```, no arquivo ```index.html```, para que se pareçam com isso: 301 | 302 | ```html 303 |

Eu sou um desenvolvedor web!

304 |

E eu sou incrível!

305 | ``` 306 | 307 | Execute o arquivo ```index.html``` para ver o resultado. 308 | 309 | Talvez você já tenha percebido: 310 | - Escrevemos as tags sempre em letras minúsculas; 311 | - Não há espaços entre as tags e o conteúdo delas; 312 | - A menos que o elemento utilizado tenha apenas umas tag, sempre adicione a tag de fechamento. 313 | 314 | Faça os exercícios propostos para este capítulo em: 315 | 316 | 317 | 318 | 319 | # 6 - Cabeçalhos 320 | 321 | Já sabemos escrever parágrafos, mas imagine se um jornal, um trabalho escolar ou um site tivessem *todo* o seu conteúdo escrito em um mesmo tamanho de fonte. Seria praticamente impossível de localizar diferentes seções no texto. É por isso que utilizamos cabeçalhos. 322 | 323 | Cabeçalhos estão disponíveis em HTML em seis níveis, sendo ```h1``` o mais importante (e maior) e ```h6``` o menos (e menor). 324 | 325 | É aconselhável ter um ```h1``` por página. Nenhum ou mais que um poderia deixar confuso um visitante sobre qual o tema ou título principal da página. Além disso, buscadores como Google e Bing utilizam os cabeçalhos para criar uma estrutura da página e isso é importante no ranking dos resultados. Com exceção dessa regra, você pode ter quantos cabeçalhos de outros níveis precisar. 326 | 327 | Vamos alterar o código do nosso site, no arquivo ```index.html```, para mostrar alguns cabeçalhos. Antes da primeira frase, insira um elemento ```h1``` e, antes da segunda frase, insira um elemento ```h2``` com o conteúdo que você quiser. O resultado dever ser parecido com isso: 328 | 329 | ```html 330 |

Seja bem-vindo ao meu site!

331 |

Eu sou um desenvolvedor web!

332 |

Sobre mim

333 |

E eu sou incrível!

334 | ``` 335 | 336 | Veja o resultado no navegador. 337 | 338 | Faça os exercícios propostos para este capítulo em: 339 | 340 | 341 | 342 | 343 | # 7 - Imagens 344 | 345 | Ao inserir um elemento de imagem no documento HTML, não estamos adicionando a imagem em si, e sim um *caminho* para ela. É como se disséssemos ao navegador: "por favor, coloque neste espaço a seguinte imagem que está disponível neste caminho". 346 | 347 | O caminho pode ser a URL para uma imagem em outro site ou a localização dela dentro do nosso servidor. Nesse último caso, digamos que dentro da pasta "meu-site" haja outra pasta chamada "imagens", e dentro dela tenhamos todas as imagens de nosso site. Poderíamos adicionar uma dessas fotos ao documento HTML da seguinte forma: 348 | 349 | ```html 350 | 351 | ``` 352 | 353 | Onde quer que adicionemos esta imagem, é lá que ela irá aparecer quando apresentada ao usuário, ou seja, será respeitada a ordem em que ela se encontra dentro do documento. 354 | 355 | Note que o elemento ```img``` não possui tag de fechamento! Além disso, este elemento possui um componente que não havia aparecido até agora, o **atributo** ```src```. Veremos muitos outros atributos ao longo deste livro, mas saiba por ora que atributos estendem a funcionalidade de um elemento. Nesse caso, além de indicarmos que queremos uma imagem naquele local, estamos dizendo que "queremos esta imagem especificamente". 356 | 357 | Crie uma pasta chamada "imagens" dentro da pasta "meu-site", salve a seguinte imagem nela e insira-a no documento HTML com um elemento ```img```. Depois, veja o resultado no navegador. 358 | 359 | http://i.imgur.com/ixsAXVk.jpg 360 | 361 | Também é possível adicionar a imagem inserindo a URL acima diretamente no atributo ```src```. 362 | 363 | Faça os exercícios propostos para este capítulo em: 364 | 365 | 366 | 367 | 368 | # 8 - Tamanho e acessibilidade em imagens 369 | 370 | Agora que temos uma imagem em nosso site, vamos acrescentar alguns detalhes. Começaremos pelo indispensável atributo ```alt```. Este atributo é responsável por fornecer ao navegador um texto **alt**ernativo à imagem, dessa forma, caso o navegador falhe em apresentar a imagem ou alguém visite seu site através de um leitor de tela (muito comum entre portadores de deficiências visuais), este texto será apresentado no lugar da imagem. Forneça sempre uma breve descrição da imagem, o suficiente para saber do que se trata sem vê-la. 371 | 372 | A imagem anterior ficará assim em nosso site: 373 | 374 | ```html 375 | Foto do autor do site 376 | ``` 377 | 378 | Os dois atributos que compõem nossa imagem atualmente (```src``` e ```alt```) estarão presentes **sempre** em nossas imagens, mas além deles, podemos ter outros atributos opcionais, como altura (```height```) e largura (```width```), que dizem ao navegador qual o tamanho adequado para mostrar a imagem (implicitamente a medida utilizada é o pixel). 379 | 380 | Não é aconselhável redimensionar imagens no navegador pois isso afeta a performance do carregamento do site como um todo. Por exemplo, se o arquivo "minha-foto.jpg" tem 100 pixels de altura e 50 pixels de largura e eu gostaria de apresentá-lo com a metade do tamanho, poderia inserí-la no documento HTML da seguinte forma: 381 | 382 | ```html 383 | Foto do autor do site 384 | ``` 385 | 386 | Note alguns detalhes nesse exemplo: 387 | 388 | - O tamanho foi reduzido proporcionalmente; 389 | - Tome cuidado ao trabalhar com alturas e larguras para que a imagem não fique distorcida; 390 | - Fornecendo uma largura e uma altura às imagens, o navegador "reservará" um espaço exatamente daquele tamanho para a imagem enquanto ela não carrega, o que melhora a performance no carregamento do site. 391 | 392 | Faça os exercícios propostos para este capítulo em: 393 | 394 | 395 | 396 | 397 | 398 | # 9 - Listas 399 | 400 | Em HTML há duas opções de listas: 401 | 402 | - ordenadas (**o**rdered **l**ists): listas numeradas automaticamente e identificadas pela tag ```
    ```; e 403 | - desordenadas (**u**nordered **l**ists): listas com marcadores e identificadas pela tag ```