JOGOS HTML5 Módulo 1 Seja bem vindo ao curso de HTML da AprendaMais. Neste curso você aprenderá como desenvolver para web com HTML, a linguagem mais básica do desenvolvimento de páginas / sites para a Internet. No entanto, antes de começarmos com o HTML, para que você possa se familiarizar com a linguagem, vamos falar um pouco sobre o desenvolvimento Web. Se você já é familiarizado com o desenvolvimento Web de uma forma geral, pode pular alguns dos tópicos a seguir. Desenvolvimento web O WWW ou World Wide Web, é uma ferramenta de comunicação, utilizada para publicação de informações na Internet. Se você ou sua empresa ainda não estão na Internet, certamente vão querer estar muito em breve, pois a Internet é a mais poderosa forma de comunicação existente no mundo. Uma página Web é um arquivo que é armazenado em um servidor de dados (computador) e é recebido peloWeb Browser (software navegador, como Internet Explorer, Firefox, Chrome, Opera, Safari, etc). Se você chegou a este curso, certamente já viu várias páginas na web, inclusive está lendo este conteúdo dentro de uma página web, neste caso a AprendaMais, armazenada nos servidores da AprendaMais. No entanto, o que você pode não ter notado, é que a grande maioria destas páginas web utilizam-se doHTML ou sua evoluções / derivados para exibir estas informações. Por exemplo, você precisa criar uma apresentação para sua empresa. Da mesma forma que faria no Power Point, por exemplo, você agora vai criar uma apresentação, só que na web. Você quer exibir o perfil da empresa na primeira página e os recursos/serviços oferecidos na segunda e na terceira páginas. Para isto, você primeiro deve criar três páginas web. Em seguida, você interliga estas páginas. Juntas, as três páginas web formam uma apresentação para sua empresa, ou se preferir chamar assim, formam o website da sua empresa. Para criação deste website, além de imagens e informações da empresa, você precisa utilizar um linguagem que "traduza" ao web browser (navegador, como Firefox, Internet Explorer, etc) o conteúdo que você deseja exibir ao usuário, dando formas, cores, locais, etc a estes conteúdos. Antes de projetar uma página web, você deve definir seu propósito. Você projeta a aparência e a funcionalidade da sua página, baseando-se neste propósito. Vamos supor que você quer projetar uma página que contenha receitas diversas. Para isto, inicialmente, você deve projetar páginas web que se pareçam com as páginas de um livro de receitas, para que a navegação fique mais agradável. Este projeto pode ser "rabiscado" à mão, pegue um lápis e um papel e desenhe/projete sua página web. As imagens abaixo mostram alguns exemplos destesprojetos / rascunhos de websites: Depois que você projetar a aparência das páginas, você precisa decidir o conteúdo delas. O conteúdo é baseado no público-alvo. Por exemplo, você não precisa ensinar receitas fáceis para chefes de cozinha. Entretanto, se o seu público-alvo inclui pessoas iniciantes na cozinha, você precisa também ter o conteúdo básico. Navegando pela web, você já deve ter visto várias páginas, e deve ter notado que estas páginas são compostas de vários elementos: títulos, rótulos, links, textos, imagens, animações, etc. Os títulos, rótulos, links e imagens são os elementos básicos de uma página web. O design da sua página web está diretamente ligado à forma como você vai utilizar estes elementos. A imagem abaixo mostra alguns exemplos: Títulos Você deve especificar títulos para todas as páginas web que criar. Os títulos ajudam os internautas a identificar uma página web, fazer procuras mais precisas em um banco de dados, e, também, a gerenciar as informações. Rodapés Você pode também, adicionar rodapés às sua páginas web para fornecer informações adicionais para seus internautas. Usando rodapés você pode exibir informações sobre o autor da página, mensagens de copyright e links para outras páginas assim como a imagem abaixo: Tabelas As tabelas são utilizadas, principalmente, para organizar a apresentação das informações tabulares na página, o que torna a leitura muito mais fácil e agradável. Menus/Índices e links de navegação Para que os internautas encontrem facilmente as páginas de seu site, você deve adicionar menus e/ou links para esta navegação. Existem vários tipos padrão de menus, apesar de não aconselhável, você não precisa seguir estes padrões. Vamos falar um pouco mais sobre este assunto em seguida, no tópico de organização de conteúdo. Outros elementos Além dos títulos, rótulos, rodapés, tabelas, menus, etc, você pode também adicionar imagens, áudio e vídeo à sua página web para deixá-la mais atraente, mas é claro, com moderação e sem se esquecer da usabilidade e acessibilidade. Também é possível adicionar formulários à sua página web para torná-la interativa. Assim, você pode receber comentários, cadastros, etc de outros internautas. Organizando o conteúdo Como você observou, é possível adicionar imagens, links, tabelas, etc para organizar a informação em cada página web de maneira eficaz. Não importa qual a organização de sua página web e nem como os elementos estão disponíveis, você deve sempre adicionar um índice (ou se preferir, pode chamar de menu) para divulgar o propósito de seu web site, bem como ajudar os usuários e motores de busca a encontrarem suas páginas facilmente. Normalmente, você exibe este índice na página principal (também conhecida como home ou página inicial), que é a primeira página da seu web site, e muitas vezes exibe este mesmo índice nas páginas subsequentes, conforme imagem abaixo: Formas de navegação Existem algumas maneiras de criar um fluxo para visualização de um web site. Você deve sempre ter em mente, que a maioria dos visitantes de seu web site, nunca o viram anteriormente, e por isso, você deve facilitar ao máximo a forma como estes visitantes irão encontrar suas páginas web. Para isso, você usa alguns tipos de conceitos de navegação. Um dos mais comuns, a navegação linear, é utilizada para apresentar informações que possuam uma sequência que deve ser obedecida. Por exemplo, uma apresentação web sobre a instalação de uma aplicação, contém uma série de passos sequenciais que o usuário deve seguir, de forma que ele pode se perder na instalação desta aplicação, caso não obedeça a sequência exata, o mesmo se aplica aos cursos Aprendamais, que devem ser visualizados na sequencia correta. Para que os internautas naveguem linearmente pelas páginas Web, você precisa fornecer alguns links básicos, os quais relacionamos na imagem abaixo: Vamos imaginar um exemplo básico de um site sobre a instalação de um software em um computador com sistema operacional Windows e o mesmo software em um computador com Linux. O procedimento para a instalação do software consiste em dez passos. Destes dez passos, oito são comuns tanto para o Windows quanto para o Linux. Por isso, os usuários precisam, obrigatoriamente, ver os oito passos sequencialmente (Utilizamos então a navegação linear). Em seguida, dependendo do tipo de sistema operacional (Windows ou Linux), eles irão para a página correspondente, pois os dois últimos passos são específicos. Neste caso, ainda é utilizada a navegação linear porém com alternativas que contém tanto passos comuns quanto específicos. Ou seja, ao chegar no passo oito, você deve dar alternativas ao visitante: Outro tipo de navegação muito comum é a navegação hierárquica, utilizada para demonstrar informações estruturadas. Neste tipo de navegação, você específica as informações gerais no topo da hierarquia e as informações específicas por último. Por exemplo, vamos supor que você queira criar uma apresentação web sobre animais. Na sua apresentação, você deseja separar, por categorias, os animais carnívoros e os herbívoros. Para projetar uma apresentação web sobre animais, você precisa criar, em primeiro lugar, um índice. Em uma navegação hierárquica, você fornece os mesmos links que usa em uma navegação linear. Entretanto, na navegação hierárquica, um link para a próxima página está conectado ao próximo nível da hierarquia, da mesma forma como um link para a página anterior está conectado ao nível anterior da hierarquia. Vamos supor que os internautas estejam visualizando uma página que possui links para os tipos de animais carnívoros. Um destes links conecta a uma página de crocodilos. Neste exemplo, a página dos tipos de animais carnívoros está no segundo nível da hierarquia e a página dos crocodilos corresponde ao terceiro nível da hierarquia. Se você usa vários níveis de hierarquia, os internautas podem se esquecer da página por onde começaram. Com isso, eles poderão ficar confusos durante a visualização do seu site. Na navegação hierárquica, você deve restringir seu site para três níveis de hierarquia. Com isso, o risco de gerar confusão, por parte dos internautas, é bem menor. Em uma navegação hierárquica, os internautas não podem navegar de uma página, que pertence a uma categoria, para uma outra página, de outra categoria. Por exemplo, um internauta não pode acessar uma página de animais herbívoros quando estão em uma página de carnívoros. Para acessar a página dos herbívoros, o internauta deve voltar para o índice e selecionar herbívoros. Pode ser que você queira deixar que os internautas naveguem por páginas pertencentes a outras categorias sem ter de voltar ao índice. Para isto, você precisa usar uma combinação de navegação hierárquica e linear. Navegando tanto sequencialmente quanto pela hierarquia Uma combinação de navegação linear e hierárquica permite aos internautas navegarem tanto sequencialmente quanto pela hierarquia. O índice da sua apresentação web está listado na página principal. Um internauta seleciona a categoria dos carnívoros e visualiza a página dos tigres. Em seguida, ele deseja ver a página dos herbívoros. Em uma combinação de navegação linear e hierárquica, os internautas podem navegar para a página dos herbívoros de duas maneiras: Voltar para a página principal e selecionar a categoria dos herbívoros (esta é a navegação hierárquica). Usar o link para a próxima tela (esta é a navegação linear). Uma combinação de navegação linear e hierárquica permite ao internauta navegar tanto sequencialmente quando hierarquicamente pela sua apresentação web. Isto pode deixá-los perdidos, porque eles podem navegar para a mesma página de várias formas. Alias, se você também está um pouco perdido, não se preocupe pois em muito breve todos estes conceitos estarão bem claros para você. Enfim, vamos partir para o HTML. HTML As pessoas imaginam que é muito difícil construir um website. Mas isso não é verdade! Qualquer um pode aprender a construir umwebsite. É necessário apenas que você estude, pratique e consolide os ensinamentos aqui contidos. Com certeza, em breve, você estará criando seu próprioWebSite! WWW Antes de iniciar o estudo do HTML, você deverá conhecer alguns conceitos sobre a Internet, fundamentais ao seu aprendizado. Você sabe o que significa WWW? World Wide Web (www) é, sem dúvida, um dos mais importantes sistemas de informação que operam atualmente na Internet. Ele reúne as seguintes propriedades: Recursos multimídia. Recursos HyperTexto. Interface Gráfica. Dentre as diversas aplicações possíveis de serem executadas, pelo WWW, pode-se destacar: Divulgação de produtos por parte das empresas. Vendas e compras de produtos por transações online. Revistas eletrônicas. Jornais Online. Informações Turísticas. Pesquisas etc. Por trás da tela do seu computador existe uma complexa estrutura de clientes e servidores, trabalhando em conjunto (através de protocolos) para atingir os objetivos propostos e levar até você a informação desejada. Uma página da WEB é formada por um sistema HyperTexto textos que possuem links (também chamados de vínculos) para outros documentos. Esses documentos, na WEB, são escritos em linguagem HTML. Para que o usuário tenha acesso a um documento HTMLé preciso utilizar um aplicativo que possa apresentá-lo. Esse programa é chamado de "Navegador" ou "WebBrowser". O usuário precisa informar ao navegador qual protocolo será usado, a localização do arquivo que deseja ver: em que servidor está, em qual diretório dentro desse servidor e, por último, o nome do arquivo desejado. Essa informação é chamada de URL (Uniform Resource Locator) e é única para cada arquivo em um Servidor. O cliente requisita a URL e o servidor fornece os documentos. Através da URL o servidor irá encontrar o arquivo registrado e enviá-lo para o cliente (Browser) que é encarregado de exibir o documento formatado ao usuário, ou seja: acabado visualmente, com figuras, cores etc. HTTP (Hyper Text Transfer Protocol) é um protocolo de transferência de documentos da WEB e base de toda a funcionalidade. É um protocolo leve e veloz, construído sobre TCP/IP e orientado à conexão. Na verdade, o protocolo HTTP permite que os browsers(clientes) conversem com os servidores WEB, façam pedidos e recebem a resposta em forma de documento, através de uma conexão Internet feita por um provedor de acesso. HTML - Linguagem da WEB O que é HTML? HTML é a abreviatura de "HyperText Markup Language". Resumindo uma longa história, o HTML foi inventado em 1990, por um cientista chamado Tim Berners-Lee. A finalidade inicial era a de tornar possível o acesso e a troca de informações, de documentação e pesquisas, entre cientistas de diferentes universidades. O projeto inicial tornou-se um sucesso jamais imaginado por Tim Berners-Lee. HTML é uma linguagem que possibilita apresentar informações (documentação de pesquisas científicas) naInternet. Aquilo que você vê quando abre uma página na Internet é a interpretação que seu navegador faz doHTML. Para visualizar o código HTML de uma página use o menu "Exibir" no topo do seu navegador e escolha a opção "Código Fonte" (Código fonte). Para quem não conhece, o código HTML pode parecer complicado, mas é bem simples. HTML Estruturado (XHTML) Você aprenderá um HTML estruturado, de acordo com algumas regras dos padrões WEB(W3C). Para começar, um esclarecimento: o XHTML (Extensible HyperText Markup Language) nada mais é do que uma maneira mais bem estruturada de escrever HTML. O conteúdo integral sobre XHTML não será apresentado aqui por ser inviável: é preciso, primeiramente, dominar os conteúdos básicos do HTML. Há um treinamento específico para XHTML e sugerimos que você, ao concluir este curso, faça um treinamento de XHTMLconosco, para se atualizar com os padrões WEB. Ambiente de trabalho É muito provável que você já tenha as ferramentas necessárias. Você tem um "navegador". Navegador é um programa que permite visualizar e navegar por páginas na Internet. Não importa qual navegador você utiliza (Mozilla Firefox, Google Chrome, Opera, Safari, Internet Explorer). Você já deve ter ouvido falar, ou até mesmo ter usado, programas como Microsoft FrontPage e Dreamweaverque podem - pelo menos assim anunciam - criar websites para você. Esqueça-os, por enquanto! Eles não têm qualquer utilidade na tarefa de codificar o website. Você precisará de um editor simples de textos. Neste curso recomenda-se o NotePad++, pois ele colore as sintaxes dos códigos. Notepad++ Notepad++ é um editor de texto que suporta as mais diversas linguagens de programação: C, C++, Java, C#, XML, HTML, PHP, Javascript, ASCII art, doxygen, ASP, VB/VBS, SQL, Objective-C, CSS, Pascal, Perl, Python, Lua, TeX, TCL, Assembler, Ruby, Lisp, Scheme, Properties, Diff, Smalltalk, Postscript, VHDL, Ada, Caml, AutoIt, KiXtart, Matlab, Verilog, Haskell e InnoSetup. Site para download do NotePad++: http://notepad-plus-plus.org/download/ Resumindo Um navegador e um "Editor de Textos": é tudo o que você precisa para acompanhar este treinamento e aprender a programar HTML. Tags são rótulos usados para informar ao navegador como o website deve ser apresentado. Todas as tags têm o mesmo formato: começam com um sinal de menor "<" e acabam com um sinal de maior ">". Genericamente falando, existem dois tipos de tags: tags de abertura e tags de fechamento . A diferença entre elas está na barra "/" existente na tag de fechamento. Tudo o que estiver contido entre uma tag de abertura e uma tag de fechamento será processado segundo o comando de cada uma. Mas como toda regra tem a sua exceção, a do HTML é que para algumas tags a abertura e o fechamento se dão na mesma tag. Elas contêm comandos que não precisam ter conteúdo para serem processados; isso é: são tags de comandos isolados como, por exemplo, um pulo de linha: Aprender HTML é aprender a usar as diferentes tags. Exemplo: A tag < b > informa ao navegador que o texto colocado entre < b > e < /b > deve ser mostrado em negrito (o comando "b" é uma abreviação para "bold" - negrito). Abra o editor Notepad++, clicando no botão Iniciar, Todos os Programas, selecione a pasta NotePad++, escolha NotePad++. Vamos configurar o NotePad para a linguagem HTML. Clique no menu Linguagens e escolha a opção HTML. Vamos configurar agora UTF-8, é um tipo de codificação Unicode de comprimento variável criado por Ken Thompson e Rob Pike. Pode representar qualquer carácter universal no padrão do Unicode, sendo também compatível com o ASCII. Por esta razão, está sendo adotado como tipo de codificação padrão para e-mail, páginas web, e outros locais onde os caracteres são armazenados. Siga as instruções abaixo: exemplo1.htm Para ver como ficou o código na página HTML, clique no menu Executar do Notepad e escolha Launch in Chrome, ou qualquer outro navegador. Será apresentado no navegador, desta forma: As tags < h1 >, < h2 >, < h3 >, < h4 >, < h5 > e < h6 > informam ao navegador que se trata de um cabeçalho (h vem de "heading" cabeçalho): < h1 > é o cabeçalho de primeiro nível e apresentado com o maior tamanho de texto; < h2 > é o cabeçalho de segundo nível e apresentado com tamanho de texto um pouco menor; e assim sucessivamente até< h6 >, cabeçalho de sexto nível e apresentado com o menor tamanho de texto. Exemplo2.htm As tags devem ser escritas com letras maiúsculas ou minúsculas? Para a maioria dos navegadores é indiferente se você usa letra maiúscula, minúscula ou mesmo uma mistura delas. Contudo, de acordo com as regras de padrões web, a maneira correta é usar minúsculas. Então, crie o hábito de escrever suas tags com letras minúsculas, SEMPRE! Criando sua primeira página Você viu inicialmente que é necessário ter, para construir um website: um navegador e um editor de textos. Então, abra o seu editor de textos. Você irá criar uma página simples, uma página que "diga": "Estou aprendendo HTML na AprendaMais !!!". HTML é simples e lógico. O navegador lê HTML da mesma forma que você lê um texto qualquer: de cima para baixo e da esquerda para a direita. A primeira coisa a fazer é informar ao navegador que você vai "falar" com ele na linguagem HTML. Isso é feito com a tag < html >. Então, antes de qualquer coisa, digite "< html >" na primeira linha do documento, em seu editor de textos. Como você já sabe, < html > é uma tag de abertura e deve ser encerrada com a de fechamento ao acabar-se de digitar o documento. Para você ter certeza de que não irá esquecer-se de fechar a tag HTML, faça isso agora mesmo digitando "< /html >" algumas linhas para baixo, assim você irá escrever e preencher seu documento entre as tags digitadas < html > e < /html >. A próxima coisa que o documento precisa é um "head" (cabeça), que fornece informações sobre o documento, e um "body" (corpo), que abriga o conteúdo do documento. Como HTML nada seria se não fosse lógico, a "cabeça" (< head > e < /head >) fica em cima do "corpo" (< body > e < /body >). Seu documento deverá ter a seguinte estrutura: Estrutura de um documento HTML Esta é a estrutura que todo documento HTML deve ter: Veja como o código foi estruturado em linhas diferentes (usar a tecla Enter para pular para a próxima linha) e também com identação (recuos) do código (usar a tecla Tab para identar). A princípio, a maneira como você estrutura (linhas e recuos) seu documento HTML, não faz qualquer diferença. Mas um código bem estruturado é mais fácil de ler e entender. É altamente recomendado que você adote uma estrutura clara e nítida para seu HTML, usando linhas e identação (recuos), como o que foi mostrado no exemplo acima. Se o seu documento está como o exibido acima, você construiu sua primeira página web! Esse será o padrão para os futuros documentos HTML. Como colocar conteúdo em minha página? Como você já aprendeu, um documento HTML é composto de duas partes: um head e um body. Na seção head você escreverá as informações sobre a página; e na seção body colocará as informações que constituem a página. Por exemplo, para dar um título ao documento - título este que apareça no topo da barra de título do navegador - você deverá usar a seção "head". A tag para acrescentar um título é < title >: Deverá ser colocado na seção "Head": O título não aparece na página, no documento ou no corpo da página, mas sim na barra de título do navegador. Ou seja: tudo o que você quiser que apareça na página, e for conteúdo, deverá ser colocado entre as tags "body". Então escreva um texto, como conteúdo da página, e que deverá ser colocado na seção body. Digite na seção body o seguinte: A letra p na tag < p > é a abreviatura para "paragraph" (parágrafo)"; ou seja: o texto é um texto-parágrafo. Parabéns, você da WEB !!! acabou de construir sua primeira página Agora salve a página: Com o Notepad++ aberto, vá ao menu "Arquivo" e escolha a opção "Salvar como...". Em "salvar como" escolha HTML. Salve seu documento com o nome "pagina1.html" (a extensão ".html" indica que se trata de um documento HTML. A extensão ".htm" dá o mesmo resultado) Agora, dê dois clicks na página salva: ela abrirá com seu navegador padrão. Veja a página aberta no navegador: Estrutura de uma página HTML Sempre que for criar uma página, faça primeiro a estrutura. É uma dica! Veja a estrutura: Siga sempre a estrutura acima: a partir de agora ela é o "padrão" para a criação das páginas. Na seção < body > escreva o conteúdo da página. Veja um exemplo: Exemplo3.htm Lembre-se, o único caminho para aprender HTML é a prática. Outras TAGs Você já sabe que pode obter negrito com a tag < b >; para obter itálico - letras inclinadas - use a tag < i > ("i" vem de "italic"). Exemplo4.htm Em execução: Retomando: existem tags que são abertas e fechadas em uma única tag. Elas são comandos isolados, ou seja: não precisam conter texto dentro delas para funcionar. Um exemplo é a tag < br / > que serve para criar uma quebra de linha (pular uma linha). Sem a tag < br / > o exemplo acima seria visualizado desta forma: Tag < small > Com esta TAG o texto fica com letras menores que o normal. Veja o exemplo: Exemplo5.htm Em execução: Exemplo6.htm Em execução: Você pode usar várias tags simultaneamente, desde que as aninhe corretamente. Veja como fazer isto no exemplo abaixo: E não assim: Observe que, no primeiro exemplo, a primeira tag de abertura <b> corresponde à última tag de fechamento< /b > e o aninhamento está certo. Isso evita confusão para quem escreve o código e para o navegador que lê o código (em XHTML isso é um ERRO). Você deve sempre ter boas práticas, ou seja: aninhe corretamente suas TAGS. Tag < hr / > Esta tag serve para definir uma linha horizontal no documento. Veja o exemplo: Exemplo7.htm Em execução: Itens de lista Os itens de uma lista não ordenada são identificados pelos elementos: < ul > que serve para "abrir" uma lista; e < li >, que se trata dos itens dessa lista. Listas não ordenadas Exemplo8.htm Em execução: Listas ordenadas Exemplo9.htm Em execução: Tag < blockquote > Utilizado para criar citações, que insere uma linha antes e depois do texto, assim como um nível de identação. Exemplo10.htm Atributos Você pode adicionar atributos às tags. O que é atributo? Lembrando: uma tag é um comando para o navegador (por exemplo, < br / > é o comando para pular uma linha). Em algumas tags você pode ser mais específico, acrescentando informações extras de comando. Isso é feito através dos atributos. Atributos são escritos dentro da tag, seguidos pelo sinal de igual e, depois, entre aspas declaram-se as informações do atributo - neste exemplo, dentro do atributo Style. As informações, quando mais de uma, devem ser separadas por ponto e vírgula. Esse assunto será retomado adiante. Como? Existem vários atributos. O primeiro que você aprenderá é o atributo style. Com o atributo style você pode adicionar estilização e layout ao seu website. Por exemplo, uma cor de fundo: Exemplo11.htm O código acima renderiza uma página com cor de fundo cinza. A seguir você aprenderá como funcionam as cores. Veja que algumas tags e atributos têm nomes no idioma inglês, dos E.U.A. É muito importante que você digite os nomes exatamente como o ensinado neste treinamento - se você mudar uma letra sequer, o navegador não entenderá o código. É importante também que você não se esqueça de fechar as aspas nas informações do atributo. Cores Como, no exemplo acima, a página ficou cinza? No exemplo acima foi usado o código "#E9E9E9" para fazer a página na cor cinza. Este é o código para a cor cinza no sistema chamado de números hexadecimal (HEX). Cada cor é representada por um número hexadecimal. Veja a seguir uma tabelinha com centenas de cores: Um código hexadecimal para cores é formado por um sinal # seguido de seis dígitos e/ou letras. Existe mais de 1000 códigos HEX e não é fácil decorar o código para todas as cores. Veja como usar a tabela de cores acima: Imagine que você quer colorir o fundo de uma página com a cor verde; então, procure a cor na tabela de cores: O código hexadecimal para essa cor é: #66ff00. Para colorir o fundo da página com a cor verde, você deve fazer o seguinte: Veja que o atributo style é empregado na tag body, pois você quer colorir o fundo do documento e, body, é o corpo do documento. Você também pode usar o nome das cores em inglês (white, black, red, blue, green e yellow). Exemplo: Quais tags podem usar atributos? Atributos podem ser aplicados à maioria das tags. Você usará atributos mais frequentemente em algumas tags, como a body; e raramente usará em outras, como a < br >, por exemplo, que é um comando para pular linha e não precisa de informação adicional. Assim como existem muitas tags, também existem muitos atributos. Alguns atributos são empregados em tags específicas, enquanto outros servem para várias. E vice-versa: algumas tags podem conter somente um tipo de atributo, enquanto outras podem conter vários tipos. Isso pode parecer um pouco confuso, mas à medida que você for praticando vai constatar que é fácil e lógico, assim como constatará as inúmeras possibilidades que os atributos oferecem. Exemplo12.htm Links Para construir um link você deverá usar o que tem usado até agora: uma tag. Uma simples e pequenina tag, com um elemento e um atributo, é o suficiente para você construir os links dirigidos para onde quiser. A seguir um exemplo de link para o site do google: No navegador ficaria assim: O elemento a refere-se a "anchor" - âncora. O atributo href é abreviação para "hypertex No exemplo acima, o atributo href tem o valor "http://www.google.com.br", que é o endereço completo do site Google e é chamado de URL (Uniform Resource Locator). Atenção: "http://" deve sempre ser incluído nas URLs. Lembrese de fechar a tag com um < /a >. Imagem como link Imagens também podem ser links, ou seja: ao clicar na imagem, acessa "X" endereço. Exemplo13.htm Ao invés de inserirmos um conteúdo textual dentro da tag de link, inserimos uma imagem no lugar. Como são os links entre minhas próprias páginas? Se você quer construir links entre páginas de um mesmo website não precisa escrever o endereço completo de cada página (URL). Por exemplo: se você tem duas páginas (suponha pagina1.html epagina2.html) salvas em um mesmo diretório, basta construir um link de uma para a outra, usando somente o nome do arquivo no link. Ou seja: um link dapagina1.html para a pagina2.html, como o mostrado abaixo: Pagina1.htm Pagina2.htm Execute em seu navegador o arquivopagina1.html, e clique no link para ir para página 2, e quando estivar na página2 clique para voltar a página1. Crie dentro de sua pasta uma subpasta com o nome de produtos e mova o arquivo pagina2.html para dentro desta pasta. Como o arquivo pagina2.html foi colocado subpasta produtos o link na pagina1.html precisa para: dentro da ser alterado "../" (dois pontos final) = aponta para o diretório um nível acima do arquivo onde foi feito o link. Seguindo o mesmo princípio, você pode apontar para dois (ou mais) níveis acima, escrevendo "../../". Como alternativa você pode usar o endereço completo do arquivo (URL), mas essa não é uma prática recomendada, pois, trocando o servidor, você terá um retrabalho na alteração dos links. Links internos Você pode criar links internos, dentro da própria página. Por exemplo, uma tabela de conteúdos ou um índice com links para cada capítulo em uma página. Tudo o que você precisa é usar o atributo id e o símbolo "#". Use o atributo id para marcar o elemento: o atributo id é a identificação, o "nome" do elemento. No caso do exemplo acima ele é usado para marcar o elemento que é o destino do link. Veja: Você agora pode criar um link, que leve àquele elemento, usando o símbolo "#" no atributo do link. Ele ("#") informa ao navegador para ficar na mesma página em que está. O símbolo "#"deve ser seguido pelo valor atribuído a id para onde olink vai. Por exemplo: Exemplo14.htm Execute este arquivo no browser. Link para endereço de email Você pode criar link para um endereço de email. Isso é feito de modo semelhante aos links para páginas da web. Exemplo15.htm A única diferença é que no lugar do endereço do documento, você escreve mailto: seguido pelo endereço de email. Quando o link é clicado, o programa de email padrão do usuário é aberto, com o endereço do link já digitado na linha do destinatário. Mas, atenção, isso só funcionará se o usuário tiver um programa de email instalado na máquina. Faça uma experiência com este tipo de link em seu computador. Exemplos de Links Aqui você encontrará um exemplo completo de Links. Digite o código, analise e estude. Index.html Teste.html A página teste.html deve ficar dentro da pasta teste. Veja abaixo: Copie a figura w3c.jpg para junto do arquivoindex.html. Atributo title O atributo title é usado para fornecer uma breve descrição do link. Basta colocar o cursor do mouse sobre o link e será exibido o texto entre aspas " ". Exemplo16.htm Imagens Exemplo17.htm Para adicionar uma imagem em sua página utiliza-se a tag img. Veja como é fácil: O atributo alt empregado nesta imagem indica a descrição da imagem. Caso o navegador por algum motivo não consiga carregar a imagem, por exemplo, por algum problema no servidor onde ela está hospedada, o texto desse atributo alt aparece. É sempre uma boa prática descrever imagens importantes em significado para o site. O que você tem a fazer é dizer ao navegador que quer inserir uma imagem (img localizada (src, abreviatura para "source" - local de armazenagem). Veja que a tag imagem é do tipo comando isolado, isto é, uma só tag de abertura e de fechamento. Ela é semelhante a tag < br / >, que não precisa ter um texto inserido. "w3c.jpg" é o nome do arquivo da imagem que você quer inserir na página. ".jpg" é a extensão do tipo de imagem. Tal como a extensão ".html" para arquivos de documentos HTML, ".jpg" informa ao navegador que o arquivo é uma imagem. São três os tipos de imagens que você pode inserir em sua página: JPG / JPEG (Joint Photographic Experts Group). GIF (Graphics Interchange Format). PNG (Portable Network Graphics). Em geral, imagens GIF são ideais para gráficos e desenhos; e imagens JPEG, para fotografia. Existem duas razões para isso: primeiro porque imagens GIF são constituídas por 256 cores e imagens JPEG por milhões de cores; segundo porque imagens GIF são mais bem otimizadas para imagens simples, ao passo que imagens JPEG são mais bem otimizadas para imagens complexas. Quanto melhor a compressão, menor o arquivo e mais rápida a página é carregada no navegador. Como você deve saber, por experiência própria, páginas desnecessariamente "pesadas" para carregar são frustrantes para o usuário. Tradicionalmente, os formatos GIF e JPEG têm sido os mais empregados, mas ultimamente o formato PNG tem se tornado mais popular (notadamente, em detrimento do formato GIF). O formato PNG é melhor que JPEG e GIF devido aos milhões de cores e à efetiva compressão. Detalhes adicionais sobre imagens Você pode inserir imagens que estão localizadas em outros diretórios, ou até mesmo em outros websites. Veja: Localizada em um servidor: Imagens podem ser links também: Você sempre terá que usar o atributo src, que diz ao navegador onde a imagem está localizada. Além dele, existem outros atributos que podem ser bastante úteis a você para inserir imagens em uma página. O atributo alt é usado para fornecer uma descrição textual alternativa da imagem, caso, por alguma razão, ela não seja renderizada para o usuário. Isso é particularmente importante para usuários com restrições visuais, ou quando a imagem é carregada muito lentamente. Por isso, sempre use este atributo: Alguns navegadores mostram uma caixa pop-up, com o conteúdo do atributo alt, quando o usuário passa o mouse sobre a imagem. Tenha em mente que a finalidade principal desse atributo é a de fornecer uma alternativa textual para a imagem. Ele não deve ser usado para criar mensagens pop-up, uma vez que os leitores de tela passarão uma mensagem que não descreve a imagem para os usuários com restrições visuais. O atributo title pode ser usado para fornecer uma curta descrição da imagem: Definindo largura e altura de uma imagem Exemplo18.htm A imagem original tem o tamanho em 320x252, foi alterada através do html para100x79. Os atributos width e height podem ser usados para definir, respectivamente, a largura e a altura da imagem. O valor adotado para medidas é o pixel. Pixel é a unidade de medida usada para medir a resolução da tela (as resoluções de tela mais comuns são de 800x600 e 1024x768 pixels). Ao contrário de centímetros, pixel é uma unidade de medida relativa que depende da resolução da tela. Telas com grande resolução terão 25 pixels por 1 centímetro, enquanto que as de baixa resolução terão os mesmos25 pixels, mas por 1,5 cm de tela. Atenção: Se os valores para width e height não forem definidos, a imagem será inserida em tamanho real. Com width e height você pode alterar o tamanho da imagem. Contudo, o tempo de carregamento da imagem será sempre aquele requerido, como se ela tivesse suas dimensões reais, mesmo que você diminua o tamanho usando esses atributos. Assim, você não deve diminuir o tamanho das imagens com o uso dos atributos width e height. Se você precisar diminuir a imagem, façaa em suas dimensões reais, em um editor de imagem, para tornar suas páginas mais leves e mais rápidas. Tag < div > A tag div é amplamente utilizada. Ao fazer o curso de CSS, você entenderá por que. Essa tag não causa nenhuma diferença visual no código. Ela é considerada um "container", ou seja: uma espécie de "caixa" imaginária em que você pode, através de script, alterar o conteúdo, ou o estilo, através de CSS (folha de estilo). Exemplo de uso: Mais adiante você aprenderá a usar atributos de alinhamento para a tag DIV. Tabelas Tabelas são usadas para apresentar "dados tabulares"; isto é: informação que deva ser apresentada em linhas e colunas, de forma lógica. Criar tabelas em HTML pode parecer complicado, mas se você acompanhar a explicação, passo a passo, verá que é bem simples. Exemplo19.htm Qual a diferença entre < tr > e < td >? 3 tags básicas são usadas para inserir tabelas: < table > começa e termina uma tabela. < tr > significa "table row" - linha de tabela - começa e termina em uma linha horizontal da tabela. < td > significa "table data" - dados da tabela - começa e termina em cada célula contida nas linhas da tabela. No exemplo acima, a tabela começa com< table > seguida por uma < tr >, que indica o início de uma nova linha. Três células são então inseridas na linha: < td > Célula 1 < /td >, < td >Célula 2< /td > e < td > Célula 3 < /td >. A linha termina com < /tr > e uma nova linha < tr >começa imediatamente a seguir. A nova linha também contém três células. A tabela termina com < /table >. Para esclarecer: linhas são horizontais e colunas são verticais, ambas contendo células: Célula 1 , Célula 2 e Célula 3 formam uma linha. Célula 1 e Célula 4 formam uma coluna. No exemplo acima a tabela tem duas linhas e três colunas. Uma tabela pode conter um número ilimitado de linhas e colunas. Atributos para tabelas Um atributo muito utilizado em tabelas é o atributo border, para definir a espessura da borda da tabela. Exemplo20.htm A espessura da borda é especificada em pixels. Assim como as imagens, pode-se definir width - largura em pixels para uma tabela - Exemplo: ou alternativamente em porcentagem da tela: Este exemplo renderiza no navegador uma tabela com largura igual a 25% da largura da tela. Faça o teste você mesmo. Existem outros atributos para tabelas, veja mais dois: align: define o alinhamento horizontal do conteúdo da tabela, de uma linha ou de uma célula. Por exemplo: left, center ou right (à esquerda, no centro ou à direita). valign: define o alinhamento vertical do conteúdo de uma célula. Por exemplo: top, middle ou bottom (em cima, no meio ou em baixo). Colspan e Rowspan Colspan é a abreviação para "column span". Colspan é usada na tag < td > para indicar quantas colunas estarão contidas em uma célula. Colspan_rowspan.html Definindo colspan em "3", a célula na primeira linha conterá três colunas. Assim será necessário inserir mais duas células para que se tenha, na primeira linha, as colunas em acordo com as da segunda linha. Como mostra o exemplo abaixo: Rowspan especifica quantas linhas estarão contidas em uma célula: Colspan_rowspan2.html No exemplo acima, rowspan é definido em "4" na Célula 1. Isso especifica que uma célula deve conter 4 linhas. Célula 1 e Célula 2 estão na mesma linha, enquanto Célula 3 , Célula 4 e Célula 5 formam três linhas independentes. Se você tem conhecimento de Excel, com certeza não foi doloroso aprender "Tabelas". Conclusão sobre tabelas Teoricamente você pode inserir qualquer coisa em uma tabela: texto, links e imagens. Mas tabelas destinam-se a apresentar dados tabulares (isto é, dados que por sua natureza devam ser apresentados em linhas e colunas). Até hoje, grande parte dos desenvolvedores ainda utiliza tabelas como ferramenta para construir layouts, o que não é "correto", além de ser totalmente fora dos "Padrões Web". Se você quer controlar a apresentação de textos e imagens, existe uma maneira bem mais racional: CSS/ Tableless. Recomendamos que você faça conosco os cursos de CSS e Tableless para aprender a controlar a apresentação visual do seu site, e sem usar tabelas. Tabelas foram feitas para exibir dados tabulares e não para a criação de Layouts. Tags para estilos de texto As mais comuns: Tags.html Tag < font > Permite alterar o tipo de fonte, o tamanho e a cor. Se você aprender CSS, verá que o elemento font não tem utilidade. Uma dica: faça os cursos de CSS e XHTML conosco, aqui na AprendaMais, e enriqueça seu conhecimento! Sintaxe Onde n: varia de 1 a 7 e o valor 3 corresponde ao valor padrão; nome: indica o nome da fonte a ser utilizada; cor: indica a cor da fonte, definida em hexadecimal, ou através de um nome predefinido de cores. Fontes.html Ps: Vale ressaltar que, assim como é ensinado no curso de XHTML, utilizar a tag FONT não é uma boa prática para criação de páginas. O recomendado é seguir os padrões XHTML e utilizar folhas de estilos CSS (recomendamos que, após o curso de HTML, você faça o de XHTML e também o de CSS.Consulte!). Alinhamento de elementos Div é uma tag de bloco muito utilizada por desenvolvedores WEB. Veja como utilizá-la para alinhar os textos ou elementos. Sintaxe Onde A posição pode ser: left: alinhamento à esquerda; center: centralizado; right: alinhamento à direita; justify: justificado. Somente para textos. Alinhamento.html Para centralizar, você pode utilizar a tag center, desta forma: Veja outro exemplo. Neste, alinhamos elementos à esquerda e à direita: Alinhamento2.html Formulários Através de um formulário o usuário poderá interagir com o servidor, enviando dados que serão processados e devolvidos. Por exemplo: o envio de dados como parâmetro para uma página PHP, que fica responsável em gravar os dados em um banco de dados. Enfim, formulários são de grande utilidade. Se você fizer um treinamento conosco de alguma das linguagens de programação para WEB, como PHP por exemplo, usará muito os formulários. Criando um formulário Cada elemento de um formulário é definido separadamente. Na definição, você informa o local do programa (CGI, ASP, PHP) que controlará o formulário e a forma, ou método, como os dados serão enviados para o servidor. Sintaxe Method: define o método utilizado pelo servidor para receber os dados do formulário. O método pode ser: POST: método mais utilizado transmite a informação do formulário imediatamente após a URL; GET: anexa o conteúdo do formulário ao endereço da URL, por isso tem limitação de tamanho das informações; ACTION: especifica o programa ou página do servidor que processará os dados do formulário; NAME: define o nome do formulário. Elementos de formulário Input Define um campo de entrada de dados. Cada campo de um formulário atribui o seu conteúdo a uma variável que possui nome e tipo específico. Sintaxe Onde Formulario.html Tag Select Define uma lista de itens que podem ser selecionados pelo usuário. Sintaxe Onde Pesquisa2.htm Tag textarea Define uma caixa de texto onde o usuário pode digitar um texto com várias linhas. Sintaxe Onde Frames Os frames são divisões da tela do browser em diversas telas (ou "quadros"). Com isso, torna-se possível apresentar mais de uma página por vez. O corpo de uma página Frame é diferente de uma página comum; esse arquivo só conterá as dimensões das divisões e as páginas que irão aparecer em cada divisão. A estrutura básica do corpo de uma página com frame: Para utilizar o recurso de frames, é preciso um conjunto de tags. Cada uma com sua função: FRAMESET é utilizada para criar um conjunto de frameset seus elementos. É a tag principal da criação de frameset precisa ser encerrada assim: < /FRAMESET >;FRAME é utilizada para definir um frame (quadro) dentro de um conjunto de frames. Não necessita de tag de encerramento. Sintaxe Onde FRAMESET: tag de abertura de um conjunto de frames; COLS="colunas, largura": define o número de colunas; o valor pode ser em pixels ou percentagem. É utilizado para definir o número de quadros (frames) que terá o conjunto de frames; ROWS="linhas, altura": define o número de linhas; o valor pode ser em pixels ou em percentagem. É utilizado para definir o número de quadros (frames) que terá o conjunto de frames; FRAMEBORDER="1/0": o valor 1 exibe uma borda3D no frame, o valor 0 não exibe a borda; BORDER="n": define o tamanho da borda; FRAMESPACING="n": define um espaço em pixelsentre os frames, mas nem todos os browsers reconhecem esse atributo; FRAME: define cada quadro (frame) separadamente; NAME="nome": define o nome do frame; SRC="URL": define a página que será exibida noframe; ALIGN="posição": define o alinhamento do conteúdo do frame. A posição pode ser: top: o conteúdo é alinhado no topo do frame; middle: o conteúdo é alinhado no meio do frame; bottom: o conteúdo é alinhado na base do frame; left: o conteúdo é alinhado à esquerda do frame; right: o conteúdo é alinhado à direita do frame; MARGINHEIGHT="altura": define a altura da margem em pixels; MARGINWIDTH="largura": define a largura da margem em pixels; SCROLLING="yes/no/Auto": define se o frame terá ou não barra de rolagem; NORESIZE: evita o redimensionamento do frame. Exemplo: Crie uma subpasta dentro de sua pasta com o nome de frames e salve este arquivo com o nome de index.html dentro desta pasta. Index.html Pagina1.html Pagina2.html Texto rolante Com esta tag você pode colocar uma faixa decorativa com um texto animado em sua página. Para entendê-la melhor dê uma olhada no exemplo abaixo: Onde Text_rolante.html Ps: Não utilize esse elemento em demasia. Se você for investir na área e fazer mais cursos, verá que essa não é uma boa prática de usabilidade. Conclusão do Curso de HTML Você aprendeu a linguagem HTML e acompanhou, na prática, as TAGS mais comuns. Na próxima página você irá aprender sobre HTML5. Se você deseja se aprofundar para tornar sua página bonita, colorida, dinâmica e de acordo com as especificações W3C dos padrões WEB, recomendamos o curso de XHTML e depois o de CSS. Posteriormente, também invista em JavaScript e Tableless. Introdução HTML5 A história do HTML é comentada em profundidade nos cursos de HTML e XHTML. Neste curso é apresentado apenas um resumo: Nos anos 1990 as atividades na Internet giraram em torno do HTML. Sua primeira versão(projeto) foi concebida em 1993 e rapidamente chegou à versão4.01, em 1999 (antes disso passou pelas versões 2.0,3.2 e 4.0). Mas, tão rápido quanto o lançamento das quatro primeiras versões, o foco dos padrões web mudou radicalmente para o XML/ XHTML. Requisitos Saber (X)HTML. CSS javascript jQuery (opcional, porém é fundamental a qualquer desenvolvedor Web; alguns exemplos do curso usam jQuery). W3C Tim Berners-Lee criou/ propôs a Web (URI + HTTP + HTML) em 1989 (veja mais a respeito no site http://www.w3.org/History/1989/proposal.html) e o W3C em 1994, no MIT, Laboratório de Ciência da Computação. Uma das principais funções desempenhadas pelo W3C é desenvolver padrões, denominados "Recomendações doW3C", que por sinal hoje estão sendo muito bem seguidos pelos navegadores, com uma ou outra diferença (principalmente em se tratando do Internet Explorer). Com a chegada do HTML 5, ninguém quer ficar para trás, então a esperança é a de que o Internet Explorer siga com mais afinco tais padrões. WHATWG - Web Hypertext Application Technology Working Group Grupo formado em 2004 e mantido até hoje por grandes empresas e desenvolvedores como, por exemplo, Mozilla Foundation, Opera Software e Apple Inc. WHATWG e W3C trabalhavam separadamente até que, por volta de 2006, o trabalho do WHATWG foi conhecido pela W3C. No mesmo ano, Tim Berners Lee(criador da Web e diretor do W3C) anunciou que trabalharia em conjunto com o WHATWG no desenvolvimento do HTML 5 e que o XHTML continuaria sendo mantido paralelamente, de acordo com as mudanças causadas no HTML. Porém, o grupo que estava cuidando do XHTML foi dissolvido em 2009, mostrando que o HTML 5 é realidade e veio para ficar. WHATWG, W3C e IETF O objetivo do grupo em conjunto com o W3C: Trabalhar na evolução do HTML. Evoluir e acelerar o avanço dos Padrões Web. Resultado: No mesmo ano (2004) tiveram início as especificações do HTML5. A Internet Engineering Task Force (IETF) é responsável por protocolos de Internet como, por exemplo, o HTTP. HTML5 define um novo WebSocketAPI que conta com um novo WebSocket protocolo, que está em desenvolvimento por um grupo de trabalho da IETF. O HTML5 está pronto? Não por completo. Há controvérsias sobre quando será definitivamente finalizado. O fato é que está em pleno desenvolvimento e os atributos das APIs do HTML5, usados neste curso, podem sofrer alguma alteração com o tempo. Portanto, cabe ao desenvolvedor ficar atento às mudanças. O importante mesmo é saber que o HTML5 não é apenas tendência, é realidade! E quem souber HTML5, não tenha dúvidas, sairá na frente no mercado de trabalho, seja de Desenvolvimento Web ou Mobile(sim, também será abordado posteriormente sobreHTML5 e Dispositivos Móveis). Editores HTML5 Como você já deve saber, pode-se desenvolver em HTML até com o Notepad. Entretanto, recomendamos estes editores: - Notepad++ - Um dos melhores editores de textos simples, possui suporte para coloração de sintaxe do HTML (http://notepad-plusplus.org/). - Aptana Atualmente, uma das melhores IDEs para desenvolvimento web com HTML5. Tem suporte para "auto complete" e reconhece os novos elementos e atributos do HTML5, bem como as novas regras do CSS3 (http://www.aptana.com/products/studio3). Exemplo de autocomplete no Aptana Studio: reversed é um atributo novo introduzido no HTML5para o elemento e será ensinado posteriormente. Veja que o aptana o identificou e, em inglês, explicou sua utilidade. Uma nova visão de desenvolvimento O HTML5 é baseado em diferentes princípios de "Design", conforme descrito nas especificações do WHATWG. São eles: Compatibilidade Utilidade Interoperatividade Acesso Universal Saiba sobre cada um deles: Compatibilidade Pela análise de milhões de páginas foi descoberto um comportamento em comum: utilizar em cabeçalhos uma div com id igual a "header". Diante de tal situação, como o HTML5 veio para resolver problemas reais, foi criada a tag < header >. O HTML5 introduziu tags semânticas para dar significado aos sites. Veja a lista dos 20 ids mais populares entre as páginas Web: Footer Content Header Logo Container table1 menu layer1 autonumber1 search nav wrapper top table2 layer2 sidebar image1 banner navigation Para visualizar a lista completa, http://devfiles.myopera.com/articles/572/idlist-url.htm. acesse: Foi a partir de dados e problemas reais que algumas novas tags foram criadas para o HTML5, como se pode ver em: http://code.google.com/intl/pt-BR/webstats/. Essa página do google possui estatísticas de uso que foram filtradas a partir da análise de bilhões de páginas. Veja um exemplo em: http://code.google.com/intl/pt-BR/webstats/2005-12/pages.html. A análise não é recente (é de 2005), mas ainda é válida porque o cenário não mudou tanto. O HTML5, apesar de possuir algumas características revolucionárias, não é uma completa e absoluta revolução (com mudança radical de conceitos e estrutura), mas sim uma evolução, ao mudar para melhor algumas das práticas existentes. HTML5 apropria-se do "conceito" de "não reinventar a roda", mas sim atualizá-la, melhorá-la. Utilidade Garante que a marcação HTML possa ser usada para todos os fins a que se destina. OHTML5 possui uma prioridade que, quando em dúvida, aplica uma solução voltada para o "bem comum" do usuário. Por exemplo: Dados os seguintes ids: id="container" id=container ID="container" Conforme você sabe, apenas a primeira opção é um id válido em XHTML, pois o atributo está em minúsculo e entre aspas. Os outros dois são considerados inválidos. Xhtml.html Ao tentar validar esse XHTML, aparecerão os seguintes erros: Todos os dois ids são inválidos para o XHTML, pois sua marcação é rígida quanto à estrutura do documento. Html5.html Ao validar o documento HTML5 aparecerá este resultado: É claro que você não pode criar seu documento todo mal formatado; na verdade, não deve! Siga a rigorosidade do XHTML. Esse exemplo serve apenas para mostrar que o HTML 5 é voltado para o usuário. Se algo falhar, o HTML5 conta com um "mecanismo" que tenta contornar a situação para oferecer o melhor possível ao usuário. O HTML5 sabe que esses ids estão colocados de forma errônea; ele consegue identificar isso e, internamente, via mecanismos de XML contorna tal situação para que, ainda assim, o documento seja exibido e formatado da melhor forma possível. Para um documento XHTML se beneficiar das funcionalidades e estar em conformidade com a linguagem de marcação XML (essa era a ideia central daW3C), deve ser servido usando o mime type application/xhtml+xml ou application/xml. No entanto, não é isso o que acontece em 95% dos casos. Os documentos XHTML são servidos usando o mime type para HTML text/html. A ideia da W3C era evoluir o HTML em conformidade com o XML (idéia muito boa e coerente, por sinal). No entanto, esbarraram no seguinte problema: Se o documento XHTML violasse alguma regra do XML, causaria um "erro fatal" no documento e todo o resto nem seria exibido. Essa situação pode ser simulada, servindo um documento XHTML Strict com o mime type xml. Se você não programa PHP, não se preocupe, os resultados serão postados aqui. Acompanhe: teste-xhtml-xml.php Ps: Foi usada a função header() do PHP para forçar o documento ser servido como XML. Tudo ok, é um documento XML válido. Agora, se no h1 forem removidas as aspas duplas do atributo class: Teste-xhtml-xml.php No Firefox: Se o documento fosse exibido usando o mime type text/html, esse erro seria ignorado e só seria identificado no validador da W3C. Mas, ao ser exibido como XML o erro foi fatal e o documento nem foi exibido pelo navegador. Por esse motivo os desenvolvedores não adotaram o XHTML como sendo XML, por receio de seus sites serem abruptamente interrompidos a qualquer falha mínima de marcação. Consideração: Existe uma maneira de usar o HTML5em conformidade com o XML; no entanto, não faz parte do escopo deste curso. O foco é HTML5. Segurança Segurança é grande preocupação do HTML5 para que suas funcionalidades não ofereçam brechas. Mas, convenhamos, as falhas sempre existirão. Inclusive, alguns cientistas da computação já encontraram possíveis falhas no "Draft" (rascunho) do HTML5 e relataram o fato (provavelmente já foram corrigidas). A questão de segurança será constantemente atualizada e a tendência é ter cada vez mais páginas seguras. Não se pode negar que o HTML5, nesse sentido, é bem mais seguro que as outras versões do HTML. O HTML5 implementou a validação de dados de formulários, mas é sempre bom ressaltar: Não confie apenas na validação no lado do cliente, valide também os dados recebidos no servidor. Para se ter ideia, no lado do cliente (usuário/browser), uma pequena falha na expressão regular da validação de formulários pode gerar um "ataque dDos" e o Browser entrar em um Loop infinito e travar (apenas um exemplo). Alguns dos problemas que podem gerar violação de segurança e que foram / serão corrigidos no HTML5podem ser encontrados neste ótimo site: HTML5 Security Cheatsheet (http://html5sec.org/). Simplificar e evitar complexibilidade No HTML5 tudo está relacionado com simplificar sempre que possível e evitar complexibilidade. Mais que isso, a interoperabilidade visa fazer com que uma implementação funcione em variados sistemas. OHTML5 foi projetado para lidar com erros, preferindo a "recuperação" do dado, mesmo exibindo-o um pouco "quebrado" (como mostrado no início do curso, no exemplo do uso incorreto do atributo ID), do que apresentar a mensagem de erro para o usuário. Ou seja, assim como citado anteriormente, o usuário final é o centro das "atenções". Acesso Universal O princípio de acesso universal pode ser dividido em três categorias: Acessibilidade: Melhor suporte aos usuários com deficiências (visuais, auditivas e etc.). O HTML5trabalha em conjunto com a Web Accessibility Initiative (WAI) fornecendo melhores alternativas de acesso como, por exemplo, provendo melhor suporte aos leitores de tela e etc. Um clássico exemplo é o elemento img: se o leitor de tela não carrega determinada imagem, não significa que ela deva ser desconsiderada. Ela deve continuar para que seu atributo alt (que é a descrição textual da imagem) seja lido pelo leitor. O ponto principal da questão é: Fornecer meios alternativos de acesso para todos. E nisso, o HTML5 promete fazer o possível para que cada vez mais se tenha melhor acessibilidade. Independência de mídia: O HTML5 deve funcionar em diferentes plataformas e dispositivos, seja computador, notebook, smartphone, tablet e etc. Suporte para todas os idiomas: Com essa funcionalidade, a produção de documentos nos diferentes idiomas existentes é facilitada. Por exemplo, usar a tag para exibir textos do idioma leste asiático. APIs do HTML 5 O HTML5 fornece suporte nativo a muitos recursos que antes só eram possíveis instalando algum plugin no navegador ou usando complexos hacks (APIs, socket nativo e etc.). API significa "Application Programming Interface". Pense em uma API como sendo uma interface gráfica de usuário, exceto que em vez de ser uma interface para seres humanos, é uma interface para o código. Uma API fornece um conjunto de "botões" (métodos pré-definidos) para o código, que podem ser pressionados para se obter o comportamento desejado do sistema. API baseada em comandos é uma forma de abstrair as coisas mais complexas que são feitas em segundo plano (ou às vezes por um software de terceiro). Algumas das APIs atualmente em desenvolvimento/teste: The Contacts API - http://www.w3.org/TR/contacts-api/. Selectors API Level 2 - http://www.w3.org/TR/selectors-api2/. Indexed Database API - http://www.w3.org/TR/IndexedDB/. Web Workers - http://www.w3.org/TR/workers/. Web Storage - http://www.w3.org/TR/webstorage/. The Web Sockets API - http://www.w3.org/TR/websockets/. Selectors API Level 1 - http://www.w3.org/TR/selectors-api/. Server-Sent Events - http://www.w3.org/TR/eventsource/. XMLHttpRequest - http://www.w3.org/TR/XMLHttpRequest/. XMLHttpRequest Level 2http://www.w3.org/TR/XMLHttpRequest2/. Geolocation API Specification http://www.w3.org/TR/geolocation-API/. HTML Canvas 2D Context - http://www.w3.org/TR/2dcontext/. File API - http://www.w3.org/TR/FileAPI/. File API: Writer - http://www.w3.org/TR/file-writer-api/. File API: Directories and System - http://www.w3.org/TR/filesystem-api/. HTML Microdata - http://www.w3.org/TR/microdata/. Media Capture API - http://www.w3.org/TR/media-captureapi/. HTML Media Capture - http://www.w3.org/TR/html-mediacapture/. Messaging API - http://www.w3.org/TR/messaging-api/. HTML5 Web Messaging http://www.w3.org/TR/webmessaging/. Web Notifications - http://www.w3.org/TR/notifications/. Clipboard API and Events - http://www.w3.org/TR/clipboardapis. Calendar API - http://www.w3.org/TR/clipboard-apis. Battery Status Event Specification http://www.w3.org/TR/battery-status. Touch Events Specification - http://www.w3.org/TR/touchevents. Page Visibility - http://www.w3.org/TR/page-visibility/. Timing Control for Script-Based Animations http://www.w3.org/TR/animation-timing/. Navigation Timing - http://www.w3.org/TR/navigation-timing/. Resource Timing - http://www.w3.org/TR/resource-timing/. The Network Information API - http://www.w3.org/TR/netinfoapi/. DeviceOrientation Event Specification http://www.w3.org/TR/orientation-event/. User Timing - http://www.w3.org/TR/user-timing/. Performance Timeline - http://www.w3.org/TR/performancetimeline/. Web SQL Database - http://www.w3.org/TR/webdatabase/. Programmable HTTP Caching and Serving http://www.w3.org/TR/DataCache/. Web Audio API - http://www.w3.org/TR/webaudio/. Audio Processing API - http://www.w3.org/TR/audioproc/. Vibration API - http://www.w3.org/TR/vibration/. A maioria dessas APis ainda não são realidade. Estão em pleno desenvolvimento ou os Browsers atuais ainda não suportam tais funcionalidades. HTML 5 e a compatibilidade entre os navegadores Atualmente, o Browser de melhor suporte aoHTML5 é o Google Chrome. Logo em seguida vem Firefox, Opera e Safari. Neste curso, serão usados os seguintes Browsers: Google Chrome Canary http://tools.google.com/dlpage/chromesxs. Firefox versões Beta/Release - http://www.mozilla.org/ptBR/firefox/all-beta.html. Opera Beta/Release - http://www.opera.com/browser/next/. O Google Chrome Canary será o principal. Essa versão Canary é para desenvolvedores, sendo lançadas atualizações diariamente. Além disso, é o Browser com o melhor suporte ao HTML5, sendo possível testar a maioria das funcionalidades. O que o Google Chrome ainda não tiver implementado, será testado no Opera ou Firefox. Um bom site (atualizado periodicamente) para testar o que cada navegador suporta das principais funcionalidades do HTML5 é o http://html5test.com/. Confira: Faça também o teste nos navegadores Firefox e Opera. Outro grandioso e talvez o principal site é: http://caniuse.com/#index Ele mostra um índice com links para verificar a compatibilidade de diversas funcionalidades junto aos navegadores. Verifica propriedades da CSS3, JavaScript, APIs (as APIs citadas anteriormente), SVG e etc. Para visualizar, basta clicar em um dos itens, por exemplo: Abrirá uma tela com a análise atual de compatibilidade desta funcionalidade: Essa tela informa que a API está em desenvolvimento, sua descrição e o suporte que cada versão de navegador fornece. Veja que apenas o Google Chrome, a partir da versão 13, tem suporte para o que foi desenvolvido até o momento; o Firefox tem suporte parcial. No decorrer deste curso, algumas dessas APis serão exemplificadas. Caso à parte: ultimamente a Microsoft tem realizado um bom trabalho com o Internet Explorer que, ainda assim, fica atrás de todos os outros citados aqui, sendo que as versões 8 e 7 não têm quase nenhum suporte aoHTML5. Com isso, os usuários têm necessidade em atualizar seus Browsers, algo que vem acontecendo com frequência ultimamente e, isso, para os desenvolvedores, é ótimo! Conheça outros sites que podem auxiliar sobre a compatibilidade atual dos navegadores junto aos recursos do HTML5: http://www.findmebyip.com/litmus/. http://samples.msdn.microsoft.com/ietestcenter/. O que é o DOM? DOM é uma interface de programação, baseada no modelo de objetos, que permite a manipulação e transformação de documentos em XML. A interface DOM manipula documentos XML na forma de estrutura em árvore. Quando um documento é carregado na memória do computador, suas estruturas podem ser lidas e manipuladas através do objeto DOM. A interface DOM faz a representação do documento através de uma árvore de nós (tree of node), em que cada objeto possui sua propriedade e método. No DOM existem objetos para representação de elementos, atributos, entidades e etc. O objeto básico do DOM é o nó (node), que é um objeto genérico na árvore e, portanto, a maioria dos objetos DOM herdam dele. O elemento mais alto de uma árvore DOM é representado pelo objeto Document, que também herda do objeto Node. Conceitualmente, esse elemento é a raiz da árvore e a partir dele é possível acessar a árvore completa do documento XML. Também se pode dizer que DOM é uma API que fornece acesso à estrutura do documento. Por exemplo, o objeto Window pertence ao DOM e nesse objeto há vários métodos de manipulação de uma janela do Browser. Um método bem conhecido é o Window.scrollX(), que retorna a posição horizontal do cursor do mouse na tela. Ou seja, o DOM é o "meio", a forma de se acessar e interagir com os objetos, seus métodos e propriedades. Representação estrutural deste documento: Representação estrutural deste documento em forma de diagrama: Ao exibir esse documento o navegador vai criar na memória uma estrutura hierárquica (em formato de árvore) com representações de cada objeto exibido. Essa estrutura se inicia com o objeto window, que representa a própria janela aberta do navegador. Cada navegador tem pequenas particularidades ao montar os detalhes da estrutura, mas de maneira geral é possível se ater ao que eles têm em comum. O exemplo acima, quando exibido pelo navegador, deve gerar a seguinte estrutura: window: a janela do navegador ou frame onde o documento é carregado. opener: se é uma janela popup, opener aponta para a janela que a abriu. parent: se é um frame, parent aponta para o frame ou janelapai, aquele que contém o frameset que carrega a página. frames: aponta para uma coleção, se houver em frames no documento (neste exemplo não há). location: objeto que gerencia a URL da janela atual. Possui, entre outros, os métodos reload e replace. history: objeto que gerencia o histórico da janela atual. Possui, entre outros, os métodos back e forward. document: representa o documento HTML aberto (aqui deve começar, de fato, o seu interesse). title: é o título do documento. body: representa a tag body, considerada a tag-base para o acesso ao conteúdo do documento. childNode 0: é o elemento h1 no documento acima, primeiro filho do body. childNode 1: é o elemento p, segundo filho debody. Esse elemento também possui um filho: childNode 0: é o elemento b dentro do p. Essa estrutura está bastante simplificada, pois cada um dos elementos tem mais propriedades e métodos. O importante é saber que os elementos são representados em árvore (Hierarquia), como mostrado acima. É possível visualizar e navegar sobre toda a estrutura DOM de um documento usando a extensão Firebug para Firefox ou "ferramentas do desenvolvedor" do Google Chrome. A título de curiosidade, usando o Firebug para Firefox, veja a estrutura DOM completa do documento acima: Observe que o DOM em si, é algo complexo. Querer entendê-lo com excelência (bem como manipulá-lo) não é tarefa rápida e exige muito estudo, prática e curiosidade. Detectando recursos HTML5 com o Modernizr Modernizr (http://www.modernizr.com/) é uma biblioteca de detecção que possibilita verificar o suporte da maioria das características do HTML5 e CSS3. Além disso, ela permite que a versão 8 e anteriores do Internet Explorer reconheçam os novos elementos do HTML5. Isso não quer dizer que nelas serão aplicadas as funcionalidades do HTML5, mas apenas garantir que essas versões reconheçam os principais elementos. Por exemplo, elemento de seção que será demonstrado logo a seguir. Essa biblioteca roda automaticamente assim que for adicionada no head do documento. Com ela se pode verificar se o browser suporta as mais diversas APis doHTML5, propriedades do CSS3 e etc. A biblioteca cria um objeto JavaScript chamado "Modernizr" com propriedades e métodos com nomes idênticos aos das funcionalidades a detectar. Documentação completa: http://www.modernizr.com/docs/. Exemplo de uso: Agora teste se o Browser suporta WebGL, que dispõe de uma API para renderização de gráficos 3D, acelerados por hardware, sem a necessidade de instalar plugins adicionais. Exemplo http://webglsamples.googlecode.com/ hg/aquarium/aquarium.html Modernizr.htm Em execução no Google Chrome Canary: No Firefox: No Internet Explorer: A postura da Microsoft é a de que o WebGL é inseguro e, portanto, não implementará no Internet Explorer. Pelo que parece, nem mesmo as novas versões do navegador suportarão. Aproveitando o momento, se você quiser, baixe o preview da próxima versão do IE neste link: http://ie.microsoft.com/testdrive/Default.html Por fim, fica a dica: É sempre importante usar essa biblioteca em produção em sites e projetos, pois ela garante que as versões anteriores do IE reconheçam doHTML5 como elementos HTML. os principais elementos Estrutura básica de um documento HTML 5 A estrutura básica é quase a mesma das versões anteriores, sendo a única diferença a declaração do Doctype. Doctype A HTML permite que desenvolvedores criem diversos tipos de documentos, cada um definido por regras diferentes. As regras de cada tipo são detalhadas dentro da especificação denominada "Definição do Tipo de Documento" (Document Type Definitions DTD). A declaração Doctype informa, aos serviços de validação e aos navegadores modernos, a DTD que foi utilizada para elaborar a marcação do HTML. Essa informação instrui os serviços de validação e os navegadores sobre como tratar a página. Existem diferentes Doctypes para uso em HTML e XHTML. No HTML5, o Doctype foi simplificado, não havendo necessidade de referenciar o link do DTD (como é no XHTML). Desta forma, os navegadores já entendem que aquele documento é HTML5. Conheça as diferenças: Um documento XHTML seguindo o DTD Strict: Agora, a estrutura básica de um documento HTML5: Essa é basicamente a estrutura sites/aplicações HTML5 neste curso. usada para os Ps: A sintaxe do Doctype não é sensível à letra, portanto, tanto faz escrever em maiúsculo ou minúsculo. Mas é bom seguir sempre uma regra e definir um padrão de escrita. É recomendável usar a sintaxe usada aqui no curso. Sintaxe do HTML5 Pode-se dizer que o HTML5 possui sintaxe mais "relaxada" pois: Os atributos podem ser escritos tanto em letra minúscula quanto em maiúscula. O uso de aspas nos atributos é opcional. O fechamento de tags vazias é opcional. Entretanto, para melhor compreensão do código - e até mesmo visando manter um padrão e uma boa prática - é recomendável que você sempre siga este modelo de sintaxe: Conclusão Escreva os elementos e atributos sempre em letra minúscula. Sempre use aspas nos valores dos atributos. No HTML5 não é necessário fechar os elementos "vazios": ao invés de < img / > faça: < img > (se você está muito acostumado com o XHTML e não consegue deixar de fechar os elementos, sem problemas; é apenas uma sugestão de sintaxe que, inclusive, é usada pela W3C para o HTML5). Atributos booleanos não precisam de valor, noHTML5; veja o "required" do input. Portanto, ao invés de: required="required" defina apenas: required. Agora, se o tipo do documento for XHTML, por exemplo, os booleanos devem conter um valor, no caso: required="required". Charset Para que sejam interpretados corretamente por navegadores e aprovados nos testes de validação de marcação, todos os documentos devem declarar o tipo de codificação de caractere usado em sua criação (utf-8, ISO-8859-1 e etc). A meta tag "charset" define a codificação do documento. Em cada conjunto de caracteres (charsets) existe um número único, para cada caractere, designado para sua identificação. Essas unidades numéricas são chamadas de "code points". Por exemplo, a letra "a" no encoding ISO 8859-1 está na posição de número 65, e assim por diante com cada caractere do conjunto. O computador pessoal foi desenvolvido pelos norte-americanos, que não utilizam acentos em suas escritas. A primeira tabela de caracteres adotada em larga escala, a ASCII (sigla para Código Padrão Americano para Intercâmbio de Informações), não continha acentos. Além disso, era um código de 7 bits, e não de 8. Ou seja, ao invés de 256 posições, a tabela ASCII tinha apenas 128. Como curiosidade, conheça a tabela ASCII original (não se preocupe, pois não é necessário decorá-la): Com a popularização do computador ao redor do mundo, passou a ser necessário usar acentos e caracteres de outros idiomas. Isso fez surgir uma infinidade de outras tabelas de caracteres. Felizmente, quase a totalidade delas segue a tabela ASCII nas primeiras 128 posições. Ou seja, um texto em ASCII, escrito em inglês - ou em "portugues sem acentuacao" - será lido em qualquer computador ao redor do mundo. Porém, ao usar acentos, é necessário que o texto seja salvo numa tabela específica para que seja lido usando aquela determinada tabela. Um exemplo em que acontece "erro" é de um site usando charset não configurado previamente para ser exibido no navegador, onde deveria ter "acentos" no texto, existem caracteres especiais. Por isso, é necessário indicar em qual página de código você salvou o texto. Importante Talvez você nem indique e abra a página e veja que está tudo normal. Mas, lembre-se, você está usando um computador em português - ou em outro idioma ocidental - em que a página de código-padrão provavelmente é a windows-1252, padrão em sistemas Windows em português, a iso-8859-1, padrão em muitas distribuições Linux em português, ou a utf-8, e seu navegador está configurado para primeiro testar essas tabelas quando o documento não possuir indicação de charset. Mas nada garante que, sem indicar explicitamente o charset utilizado, o documento vá funcionar como, por exemplo, num Windows em japonês ou num Linux em hebraico. Utf-8 UTF-8 é o mais rico. Com ele é possível representar qualquer caractere Unicode e da tabela Ascii. O UTF-8 vem sendo adotado como um charset-padrão para páginas web, devido à boa "compatibilidade". Siga estes passos para configurar um documento paraUTF-8: 1 - Configurar o charset do documento. A maioria dos bons editores possui essa opção. É recomendável o Notepad++: http://www.notepad-plus-plus.org/ Agora, para que o arquivo seja definitivamente salvo em utf-8, crie uma div com um conteúdo qualquer e salve-a: Html5.htm 2 - O segundo passo é informar na meta charset a codificação usada (utf-8) para que os browsers usem a tabela correta. Neste exemplo, foi informada entre as tags head do documento (linha 4 do Notepad++). Validação de documentos HTML5 A validação é o mecanismo que indica os erros presentes na marcação HTML para que você possa corrigi-los. Durante o processo de desenvolvimento é importante sempre validar o projeto, na medida em que for avançando as etapas. Até porque a marcação HTML pode conter erros e funcionar normalmente em seu navegador desktop, mas não há como garantir que funcionará em um navegador de dispositivo mobile (que pode conter menos recursos para evitar os erros). Por isso, validar é sempre uma boa prática. Existem duas ferramentas para validação: Validador oficial da http://validator.w3.org/#validate_by_upload. HTML5 Validator - http://html5.validator.nu/. Abra o: http://validator.w3.o/#validate_by_upload Valide o seguinte documento: Validar.htm Basta selecionar o arquivo e clicar em "Check": W3C - Observe que o documento passou no teste: Agora, altere o elemento < /h1 > para: A tag de fechamento foi trocada para a de abertura < h1 >. Salve o documento e valide novamente: Esse é o objetivo da validação: apontar os possíveis erros na marcação HTML5. Descendo a barra de rolagem, você verá o descritivo dos erros encontrados, assim você poderá localizar com mais rapidez. A semântica do HTML 5 A expressão "web semântica" equivale à "web com significado". O HTML5 implementa um conjunto de tags para construir layouts de forma mais intuitiva e semântica (com significado). Uma página semanticamente coerente é facilmente interpretada por humanos e máquinas. Por exemplo, o Google ao varrer um documento HTML5 identificará o que é cabeçalho, menu, rodapé e etc. O HTML5 introduziu 28 novos elementos, cada um com sua semântica. Também introduziu controles para validação de formulários, não sendo mais necessário o uso excessivo de Javascript para tal. Saiba as diferenças do HTML5 em relação ao HTML4:http://www.w3.org/TR/2010/WD-html5-diff-20100624/. A seguir, conheça as novas tags HTML5 para de layout que, para este fim, substituirão as tags divs. formação Header O elemento < header > foi criado para definir o cabeçalho do site. No HTML/XHTML, é muito comum os desenvolvedores criarem um elemento div de id igual a "header". Normalmente, o cabeçalho de um site não é duplicado nas páginas, sendo o mesmo cabeçalho usado em todo o site com algumas modificações internas de página para página. Footer A tag < footer > define o rodapé do site. Esse elemento não cria uma nova seção tal como criam os elementos article, aside, nav e section. Article O elemento < article > define um bloco de texto único. Por exemplo, uma mensagem, um artigo, uma notícia. Em um site de artigos, cada artigo deve ser colocado em um novo < article >. Nav O elemento < nav > destina-se a marcar uma seção da página que contenha links para outras páginas. Mas nem todos os links devem ser agrupados dentro de nav. Geralmente links de menu e links laterais como, por exemplo, categorias de um blog e etc. Aside O elemento < aside > agrupa informações separadas, mas relacionadas ao conteúdo principal. São informações como publicidade, textos com propaganda, barras laterais e outros conteúdos que possam ser considerados separados do conteúdo principal. A navegação lateral de categorias do blog à seguir é um exemplo prático de onde seria válido o uso do aside juntamente com o elemento < nav > para os links: Uso_do_aside.html Section A tag < section > define uma nova seção genérica no documento. Por exemplo, a página principal de um site pode ser dividida em diversas seções: introdução ou destaque, notícias, informação de contato e chamadas para outras páginas. Section é semanticamente diferente de div, que pode definir qualquer bloco de texto para formatação. Section deve ser usada para definir algum bloco com significado para o site, já citado anteriormente, como notícias, destaque e etc. Posteriormente você verá isso na prática. Entendendo as subdivisões de um documento HTML 5 Com o HTML4 é usada a tag div, que possui semântica "neutra" na subdivisão lógica do site. Para entender o que foi explicado sobre os elementos semânticos para a formação de layout, faça na prática estes dois exemplos – um em HTML4 e outro em HTML5. Blog_html4.htm Diagrama da estrutura desse exemplo em HTML4: Embora não haja nada errado nessa estrutura ela é desconhecida para um navegador - ou até mesmo para programas como, por exemplo, o Googlebot. Como saber o significado de cada parte? Ademais, todas elas usam div que apenas define uma parte genérica no site. HTML5 fornece elementos que denotam claramente o que cada parte significa. Reescreva a estrutura acima usando os novos elementos do HTML5 para a formação de layout: Blog_html5.htm Ps: Foi usada uma estrutura básica, que poderia ter sido enriquecida em se tratando de semântica. Ao final do curso esse mesmo exemplo será retomado e modificado, com novos elementos e nova estrutura. Até lá você aprenderá o que cada parte significa. No navegador, o resultado visual é o mesmo do exemplo anterior: Diagrama da estrutura desse exemplo em HTML5: Observe que, a partir da versão 9, o InternetExplorer reconhece os elementos do HTML5: Mas isso não acontece com as versões inferiores. Veja o mesmo exemplo no IE8: Dica: Para testar o exemplo em diferentes versões do Internet Explorer, você pode usar o software IETester http://www.my-debugbar.com/wiki/IETester/HomePage Soluções A primeira e menos recomendada é usar Javascript para criar os elementos. Por exemplo, altere o cabeçalho do exemplo de HTML5 para: A segunda e mais recomendada solução é usar biblioteca Modernizr(http://www.modernizr.com/), por exemplo: Exemplo em execução no IE8: a A biblioteca Modernizr, como dito no início do curso, também cria referência aos novos elementos do HTML5 nos browsers mais antigos. Por isso, seu uso em um projeto HTML5 é altamente recomendado. Agrupando nav e outros elementos em um aside Blog_html5_2.htm A especificação diz: "O elemento aside pode ser usado para barras laterais, publicidade, grupos de elementos de navegação e para outros conteúdos que são considerados separados do conteúdo principal da página". Usando a mesma lógica, coloca-se o "sobre o autor" e a navegação para suas redes sociais dentro do elemento aside. Para fins de layout, coloca-se dentro da div #artigos os "articles". Dessa forma flutua-se a div #artigos, usando CSS. De acordo com a especificação, o < article > define o conteúdo externo, que pode ser um artigo de notícias a partir de provedor externo, um texto de blog, um texto de fórum ou qualquer outro conteúdo independente. No projeto final do curso será desenvolvido um site completo em HTML5, usando os vários recursos que ainda serão mostrados. Portanto, não se assuste com esse pequeno exemplo sem estilos. Categorias dos elementos Cada elemento no HTML pertence a um ou mais grupos de elementos com características similares. As categorias de conteúdo são: Metadados Fluxo Seção Cabeçalhos Frase Incorporado Interativo A especificação do HTML5 traz uma ilustração mostrando como as categorias de conteúdo se relacionam entre si: Veja a lista completa dos elementos e categorias:http://www.whatwg.org/specs/web-apps/currentwork/#elements-1 Metadados Os elementos que compõem a categoria Metadata são: Base Command link meta noscript script style suas title Esse é o conteúdo que vem antes da apresentação, formando uma relação com o documento e seu conteúdo com outros documentos. Fluxo A maioria dos elementos utilizados no corpo do documento é categorizada como "Flow Content": a abbr address area article aside audio b bdo nav noscript object ol output p pre progress q ruby samp script section select blockquote br button canvas cite code command datalist del details dfn div dl em embed fieldset figure footer form h1 h2 h3 h4 h5 h6 header hgroup hr i iframe img input ins kbd keygen label link (Se o atributo itemprop for utilizado) map mark math menu meta (Se o atributo itemprop for utilizado) meter small span strong style (Se o atributo scoped for utilizado) sub sup svg table textarea time ul var video wbr Text Ps: Foram mostradas aqui as Tags < b > e< i > que, de acordo com a especificação doHTML5, devem ser usadas só em última instância, pois podem muito bem ser substituídas pelas tags < strong > e < em > respectivamente. Seção Os elementos de seção definem o grupo de cabeçalhos e rodapés. São elementos que agrupam outros elementos no documento: article aside nav section Cabeçalhos Definem uma seção de cabeçalhos. São estes: h1 h2 h3 h4 h5 h6 hgroup Frase Constitui-se de elementos que marcam o texto do documento, bem como os elementos que marcam este texto dentro do elemento de parágrafo: a abbr area (se for descendente de um elemento de mapa) audio b bdo br button canvas cite code command datalist del (se contiver um elemento da categoria de Frase) dfn em embed i iframe img input ins (se contiver um elemento da categoria de Frase) kbd keygen label link (se o atributo itemprop for utilizado) map (apenas se contiver um elemento da categoria de Frase) mark math meta (se o atributo itemprop for utilizado) meter noscript object output progress q ruby samp script select small span strong sub sup svg textarea time var vídeo wbr Text Incorporado Elementos que importam outra fonte de informação para o documento: audio canvas embed iframe img math object svg vídeo Interativos São elementos que fazem parte da interação de usuário: a audio (se o atributo control for utilizado) button details embed iframe img (se o atributo usemap for utilizado) input (se não for do tipo hidden) keygen label menu (se for do tipo toolbar) object (se o atributo usemap for utilizado) select textarea vídeo (se o atributo control for utilizado) Atributos e elementos descontinuados (obsoletos) no HTML5 Alguns atributos foram descontinuados porque modificam a formatação do elemento e suas funções podem ser substituídas com o uso das CSS. Evite usá-los nos sites HTML5. Os atributos que foram descontinuados são muitos e você não precisa - e nem deve - gravá-los. Deve ser aplicada apenas uma regra geral: ? Não use atributos para prover formatação aos elementos. Ao invés disso, tente usar CSS. Atributos Conheça os atributos descontinuados (a lista é extensa): charset - No elemento: a charset - No elemento: link coords - No elemento: a shape - No elemento: a methods - No elemento: a methods - No elemento: link name - No elemento: a (except as noted in the previous section) name - No elemento: embed name - No elemento: img name - No elemento: option rev - No elemento: a rev - No elemento: ink urn - No elemento: a urn - No elemento: link nohref - No elemento: area profile - No elemento: head version - No elemento: html usemap - No elemento: input longdesc - No elemento: iframe longdesc - No elemento: img lowsrc - No elemento: img target - No elemento: link scheme - No elemento: meta archive - No elemento: object classid - No elemento: object code - No elemento: object codebase - No elemento: object codetype - No elemento: object declare - No elemento: object steby - No elemento: object type - No elemento: param valuetype - No elemento: param language - No elemento: script event - No elemento: script for - No elemento: script datapagesize - No elemento: table summary - No elemento: table abbr - No elemento: td e th axis - No elemento: td e th datasrc - Nos elementos: a, applet, button, div, frame, iframe, img, input, label, legend, marquee, object, option, select, span, table, e textarea datafld - Nos elementos: a, applet, button, div, fieldset, frame, iframe, img, input, label, legend, marquee, object, param, select, span, e textarea dataformatas - Nos elementos: button, div, input, label, legend, marquee, object, option, select, span, e table alink - No elemento: body bgcolor - No elemento: body link - No elemento: body marginbottom - No elemento: body marginheight - No elemento: body marginleft - No elemento: body marginright - No elemento: body margintop - No elemento: body marginwidth - No elemento: body text - No elemento: body vlink - No elemento: body clear - No elemento: br align - No elemento: caption align - No elemento: col char - No elemento: col charoff - No elemento: col valign - No elemento: col width - No elemento: col align - No elemento: div compact - No elemento: dl align - No elemento: embed hspace - No elemento: embed vspace - No elemento: embed align - No elemento: hr color - No elemento: hr noshade - No elemento: hr size - No elemento: hr width - No elemento: hr align - No elemento: h1 - h6 align - No elemento: iframe allowtransparency - No elemento: iframe frameborder - No elemento: iframe hspace - No elemento: iframe marginheight - No elemento: iframe marginwidth - No elemento: iframe scrolling - No elemento: iframe vspace - No elemento: iframe align - No elemento: input hspace - No elemento: input vspace - No elemento: input align - No elemento: img border - No elemento: img hspace - No elemento: img vspace - No elemento: img align - No elemento: legend type - No elemento: li compact - No elemento: menu align - No elemento: object border - No elemento: object hspace - No elemento: object vspace - No elemento: object compact - No elemento: ol align - No elemento: p width - No elemento: pre align - No elemento: table bgcolor - No elemento: table cellpadding - No elemento: table cellspacing - No elemento: table frame - No elemento: table rules - No elemento: table width - No elemento: table align - Nos elementos: tbody, thead, e tfoot char - Nos elementos: tbody, thead, e tfoot charoff - Nos elementos: tbody, thead, e tfoot valign - Nos elementos: tbody, thead, e tfoot align - Nos elementos: td e th bgcolor - Nos elementos: td e th char - Nos elementos: td e th charoff - Nos elementos: td e th height - Nos elementos: td e th nowrap - Nos elementos: td e th valign - Nos elementos: td e th width - Nos elementos: td e th align - No elemento: tr bgcolor - No elemento: tr char - No elemento: tr charoff - No elemento: tr valign - No elemento: tr compact - No elemento: ul type - No elemento: ul background - Nos elementos: body, table, thead, tbody, tfoot, tr, td, e th Reiterando: Sempre que tiver que estilizar, use CSS e não atributos dos elementos. Essa é a recomendação da W3C para uma página cada vez mais semântica e limpa. Elementos descontinuados São estes os elementos que o HTML5 não mais provê suporte: < acronym > - Use o elemento < abb r>. < applet > - Use o elemento < object > . < basefont > - Use CSS para conseguir esse resultado. < bgsound > - Use o elemento < audio >. < big > - Use CSS para conseguir esse resultado. < blink > - Não use. Isso é dos primórdios do HTML4. < center > - Use CSS para conseguir esse resultado. < dir > - Use o elemento < ul >. < font > - Use CSS para conseguir esse resultado. < frame > - Foi descontinuado por ferir os princípios de acessibilidade. Com CSS e uma div dá para "emular" em partes um frame. < frameset > - Idem < frame >. < isindex > - Não use, também é dos primórdios do HTML 4. < marquee > - Não use, também é dos primórdios do HTML 4. < multicol > - Não mais suportado pelos Browsers atuais. Não use. < nobr > - Use CSS para conseguir esse resultado. < noframe > - Como já dito acima, use frames só em último caso e, ao usar, não precisa dessa tag, pois os browsers ainda suportam frames. < noscript > - 100% dos Browsers atuais suportam JavaScript, portanto, seu uso pode ser descartado. < s > - Não use. < spacer > - Não use. < strike > - Use CSS para conseguir esse resultado. < tt > - Use CSS para conseguir esse resultado. < u > - Use CSS para conseguir esse resultado. < tt > - Use CSS para conseguir esse resultado ou uma tag equivalente. < xmp > - Use o elemento < code >. < rb > - Use o elemento < ruby >. Não é conteúdo deste curso explicar o que cada elemento acima faz. Caso você não conheça algum, é importante testá-lo e ver o resultado para entender por que pode ser trocado por uma tag que o HTML 5 provê suporte ou por CSS. A W3C possui a ferramenta - pouco conhecida, mas muito útil "W3C Cheatsheet", referência completa de tags e atributos doHTML5. Inclusive, ela marca os elementos e atributos descontinuados e também os novos e que ainda estão em "rascunho/construção". Para acessá-la: http://www.w3.org/2009/cheatsheet/. Veja: Definindo acrônimos e abreviações A tag < acronym >, que dava sentido às abreviações, foi cancelada no HTML5. Agora acrônimos e abreviações devem ser feitos usando a tag < abbr >. Confira: Abreviacoes.html Novos eventos do objeto Window Novos eventos para o Objeto Window foram implementados, mas a maioria deles ainda sem suporte nos navegadores. São estes: onafterprint onbeforeprint onbeforeonload onerror onhaschange onmessage onoffline ononline onpagehide onpageshow onpopstate onredo onresize onstorage onundo onunload Elementos que tiveram sua semântica alterada No HTML existiam alguns elementos que traziam apenas características visuais e não semânticas. Alguns deles (já mostrados anteriormente) foram descontinuados, pois eram facilmente substituídos pelo uso das CSS. Entretanto, alguns velhos conhecidos que não foram descontinuados, tiveram seus significados semânticos alterados. Conheça agora as mais importantes alterações. Diferenças semânticas entre < b >, < strong >, < i > e < em > No HTML5, o elemento < b > passa a ter o mesmo nível semântico que um < span >, mas ainda mantém o estilo (apresentação visual) de negrito no texto. Entretanto, ele não dá nenhuma importância semântica (de "força") para o texto marcado com ele. O elemento que o substituiu nesse sentido foi o < strong >. O elemento < i > também passa a ter o mesmo nível semântico que um < span >. Como resultado visual, o texto continua itálico e para os usuários de leitores de tela, a voz utilizada é modificada para indicar ênfase. Ele é útil para marcar frases em outros idiomas, termos técnicos e para marcar visualmente um trecho em itálico sem dar ênfase ao seu conteúdo. Ao contrário dele, o elemento < em >, além de aplicar o estilo visual itálico, dá ênfase (significado semântico) ao conteúdo marcado. Como diferenciá-los em um caso real? No HTML, < strong > representava em sua semântica "forte ênfase" (importância) e < em > representava "ênfase". No HTML5, essas características semânticas foram levemente alteradas (praticamente continuam a mesma coisa): < strong > significa "importância" e< em > "ênfase" com a mesma importância de < strong >. O < em > enfatiza "estresse" linguístico e altera a nuance linguística. Por exemplo, em uma oficina mecânica, o mecânico diz para seu assistente, que está debaixo do carro avaliando-o: - Consegui a chave! O assistente responde: Percebeu a diferença de "tom/nuance" usada? O < strong > permaneceu praticamente a mesma coisa. Se você tem algum conhecimento básico em SEO sabe que o significado é empregar importância a um trecho ou palavra. Por exemplo, na descrição do site do Aprenda: Comando_em.html Veja que foi destacado com < strong > o que se considera ser importante para a frase. Não existe uma "receita de bolo" ou regra a ser aplicada; existem diferentes formas de interpretar o que é ou não importante em um texto. O mais importante é saber que < strong > aplica um significado semântico de importância. Para um destaque semântico de "importância" e ao mesmo tempo um destaque visual de itálico, sem alterar a semântica de "importância", pode-se usar o elemento < i >. Por exemplo: Veja Links em nível de bloco e o atributo href É aceitável ter um elemento de link < a > sem o atributo href. Desta forma ele se torna um placeholder para um link (um espaço para ser link no futuro). Por exemplo, antes e durante o desenvolvimento, quando algum link ainda não tinha uma página-destino definida, usava-se o atributo href assim: Link.html Usar um link assim href="#" causa inconveniente ao usuário, que acha ser de fato um link mas é só uma "capa". Além disso, tecnicamente, é mais um link vazio para a página, sem nenhuma referência. Então, ao invés de usar links assim, faça isto: O link "produtos" não é "clicável" e é perfeitamente aceito pelo HTML5 (mesmo não tendo o atributo href). Mais do que isso, fica como um espaço de link reservado para, por exemplo, a página: "/produtos". Outra alteração importante foi a mudança de conceitos. Por exemplo, antes, um elemento inline não podia conter um elemento de bloco; agora isso é possível. Só não pode colocar dentro de um < a > outro < a >, por exemplo. Antes, no HTML5, quando era preciso ligar vários elementos no mesmo link, eram usados mais de um link para se chegar ao resultado desejado. Por exemplo: Link2.html No HTML5, esse problema pode ser solucionado assim: Têm-se dois elementos e apenas uma ligação, sem duplicar o link na página. Atributos Globais Atributos globais são aqueles que podem ser usados em todos os elementos HTML5 (tanto os novos quanto os antigos). Accesskey Permite definir um atalho para que o usuário consiga focar algum elemento pelo teclado (shift + alt + key). O valor do atributo pode ser um caractere ou uma lista de caracteres separados por espaço. Atalho.html Ao apertar shift + alt + c: class e id São os mesmos velhos conhecidos do HTML - e muito usados principalmente por causa das CSS e do JavaScript. "class" serve para identificar um ou mais elementos (grupos de elementos). "id" serve para identificar um elemento em particular. Cada id deve ser único e não pode se repetir na página. Class-id.html O intuito desse exemplo foi mostrar que um elemento pode ter mais de uma classe, separadas por um espaço. Contenteditable Permite a edição do conteúdo de um elemento. Esse atributo já existia em algumas versões do Internet Explorer e foi introduzido nas especificações do HTML5. Contenteditable.html Ao clicar no parágrafo de texto "Digite algo aqui ..." é possível alterar o seu conteúdo. Contextmenu Cria um menu personalizado (menu de contexto) para o elemento. Ao clicar no elemento com o botão direito do mouse o menu é exibido. O atributo deve receber o mesmo nome do id do container que contém o menu de contexto. Menus de contexto ainda estão sendo escritos pela W3C e os browsers não o suportam, com exceção do Firefox. De acordo com a documentação oficial da W3C, a sintaxe para menu de contexto é a seguinte: Contextmenu.html Veja que é necessário usar o novo elemento menu do HTML5 com o atributo type definido para "context". Como já explicado, atualmente esse exemplo não funciona em nenhum Browser. Como toda regra tem sua exceção, o Firefox decidiu implementar essa funcionalidade por "conta própria" e usando uma sintaxe um pouco diferente da publicada pela W3C. Veja: http://caniuse.com/#search=contextmenu Apenas o Firefox, a partir da versão 8, suporta tal funcionalidade. Acompanhe este exemplo: Essa é uma funcionalidade espetacular! Pena que ainda esteja em desenvolvimento e, por enquanto, só funcione no Firefox. Dir Altera a direção do texto. Os valores possíveis são: ltr (left to right) e rtl (right to left). Podem ser traduzidos, respectivamente, para: "da esquerda para a direita" e "da direita para a esquerda" (um exemplo de uso dessa direção é o idioma japonês). Dir.html Observe que além do atributo dir, usar CSS para conseguir esse resultado. também é possível Draggable Esse novo atributo HTML5 torna o elemento arrastável. Ele aceita os valores: true e false. Na falta desses valores é definido o valor "auto", que faz com que o Browser use o arrastepadrão para a funcionalidade. O efeito de "arrastar e soltar" só é possível de JavaScritp, mas esse resultado não faz parte curso, assim como a explicação detalhada auxiliam nesse processo. No entanto, será exemplo de como funciona: Draggable.html Agora, acrescente o Script ao exemplo: com a integração do conteúdo deste dos eventos que demonstrado um Hidden Novo atributo do HTML5, caracterizado como "atributo de relevância", booleano, não precisa receber nenhum valor. Quando declarado, visualmente faz com que o elemento em questão não seja exibido pelo navegador. Hidden.html Observe que, internamente, o navegador define uma regra CSS para elementos marcados com esse atributo. Entretanto, ele não deve ser usado apenas para "ocultar" elementos, mas sim ser usado com a ideia semântica de tornar o conteúdo em questão irrelevante. Para exemplificar, veja este caso em que o atributo não deve ser utilizado: Em um sistema de abas, é preciso exibir uma aba e ocultar todas as outras. Para isso, você pode usar uma classe CSS para ocultá-las. Só use "hidden" se a ideia for ocultar e tornar aquele elemento e seu conteúdo irrelevantes. Ainda não é certo, mas pode ser que no futuro o motor de busca do Google entenda esse atributo de forma a "ignorar" (não indexar e tornar irrelevante) o conteúdo marcado com ele. Lang Define o idioma do conteúdo de um elemento. Quando não presente no elemento, o idioma é o mesmo do elemento-pai. Uma prática comum é declarar esse atributo no elemento < html >. Dessa forma, todos os elementos-filhos que não declaram o atributo lang, usam o lang do elemento< html >. Lang.html Observe que o elemento < html > define o lang como "pt-br": Dentro do parágrafo, o span define o lang como "en-US" (inglês americano): Usar o atributo lang é importante principalmente para leitores de tela que, ao encontrarem um conteúdo em outro idioma, sintetizam a voz referente àquele idioma. O leitor de tela é um software usado para obter resposta do computador por meio sonoro, usado principalmente por pessoas com deficiência visual. Spellcheck Esse novo atributo do HTML5 destina-se a disponibilizar o recurso de correção ortográfica e gramatical para os conteúdos textuais. Ortografia.html Resultado: Style Atributo já velho conhecido, usado para definir regras CSS ao elemento. É o chamado "css inline", pois é aplicado diretamente ao elemento. Sempre que possível evite o uso de CSS através desse atributo, pois "suja" bastante as tags. Procure usar sempre classes e ids. Estilo.html Tabindex Define a ordem de navegação pelo teclado (tecla tab). Tecla_tab.html Ao apertar a tecla tab duas vezes: Navegou para o elemento de tabindex igual a2: Title Define o título ao elemento em que é aplicado. Alguns exemplos de uso: Em um link, ele pode ser uma descrição da página de destino. Em uma imagem, ele pode conter os créditos da imagem ou uma descrição dela. Em um parágrafo, pode ser um comentário sobre o texto. Etc. Leitores de tela leem o texto do atributo title. Usar esse atributo também tem importância para SEO, pois o Google entende que o title é mais um complemento àquela informação. Title.html Novos elementos HTML5 O HTML5 introduziu dezenas de novos elementos, que irão auxiliar os desenvolvedores na estruturação dos documentos. Conheça alguns dos novos elementos a seguir. command, menu e seus atributos O elemento command é um comando a ser evocado pelo usuário. Seu uso foi demonstrado na prática, no tópico sobre "contextmenu". Veja agora os atributos disponíveis para esse elemento. O elemento command sempre deve ser filho do elemento menu para que os browsers o renderize. Atributos possíveis (além anteriormente): dos globais já comentados type - Define o tipo do comando. Os valores possíveis são: command, que cria um comando normal associado a uma ação; checkbox que cria um comando do tipo "caixa de seleção" e o tipo radio, que cria um comando do tipo "seleção de item". label - Define o "label" do comando, o seu nome. Deve ser um texto. Icon - Assim como mostrado no tópico "contextmenu", define um ícone para o comando. disable - Valor booleano (true ou false) para desabilitar um comando. checked - Valor booleano para selecionar uma opção do comando (apenas para comandos do tipo checkbox e radio). radiogroup - Agrupa comandos do tipo radio (só deve ser usado em comando do tipo radio). title - Ao passar o mouse sobre um comando, é exibido um "hint" com o conteúdo desse atributo. Menu O elemento de Menu ainda não é suportado por nenhum navegador e está sendo desenvolvido pela equipe responsável peloHTML5. Atributos possíveis (além anteriormente): dos globais, já comentados type - Define o tipo do menu. Valores possíveis: list, valorpadrão, cria uma lista de comandos sem qualquer ação; context cria um menu de contexto, conforme demonstrado no tópico "contextmenu"; por último, toolbar que cria um menu do tipo "barra de ferramentas". label - Define o "label" do menu. Menu.html Já que atualmente nenhum navegador suporta o elemento menu, veja esta simulação de como poderia ficar a sua disposição estrutural em execução: Datalist Elemento usado em conjunto com o elemento input. Sua função é fornecer uma lista de sugestão quando o usuário digitar no input. Isso é possível através de uma ligação entre os elementos. Para isso foi criado, para o elemento input, o atributo "list" para definir um "datalist". Datalist.html Atualmente, apenas o Opera, Google o Firefox suportam esse elemento. Chrome e O "segredo" está na ligação envolvendo o atributo "list": details e sumary O elemento details é muito usado para fornecer informações textuais ou controles de formulários adicionais sobre determinado conteúdo. Com ele é possível criar pequenos "Widgets". O conteúdo desse elemento fica "invisível" por padrão e só aparece quando o usuário clica sobre ele. Além dos atributos globais, ele aceita o atributo open que define se os elementos devem, por padrão, vir ocultos ou visíveis. O elemento sumary foi criado para uso em conjunto com o elemento details. Ele é uma espécie de "rótulo" ou breve sumário das informações adicionais do details. Atualmente, apenas o Google Chrome o suporta: http://caniuse.com/#feat=details summary_details.html Foi acrescentado o atributo "open". Resultado: A página já abre com o details aberto. Também é possível usar um conjunto de "details" formatados. Por exemplo, chegando ao resultado parecido a esse mostrado na documentação da W3C: Obs: Esse exemplo funciona corretamente apenas no Google Chrome. A intenção com esse exemplo é mostrar, que muito em breve (uma vez que apenas o Google Chrome é o navegador mais adiantado em termos de HTML5 e CSS3), poderemos ter conteúdos bem interativos de forma bem simples. O que antes só era possível com o uso de CSS, imagens e jQuery, tornou-se possível de forma bem mais intuitiva com HTML5. dl, dt e dd O elemento < dl > existe desde o HTML4, no entanto, o HTML5 o reaproveitou. Esses elementos fazem parte das chamadas "listas de definição", que são parecidas com as listas ordenadas < ol > e não ordenadas < ul >, mas com uma diferença: as listas de definição sempre trabalham com dois itens: o termo e a definição. A lista é formada pela tag < dl > (assim como a lista ordenada é formada pela tag < ol >), o termo é formado pela tag < dt > e a definição pela tag < dd >. Usar < dl > ou listas < ul > e < ol >? Simples! Sempre que você tiver que montar uma lista analise o seguinte: Será uma lista de Termo - Definição? Então use < dl > pois, com certeza, você estará desenvolvendo um conteúdo bem mais semântico. Será uma lista normal ou uma enumeração de itens simples? Então use < ul > ou < ol >. Lista1.html Lista2.html bdo Elemento para definição da direção de escrita. Bdo.html figure e figcaption A especificação da W3C diz: "O elemento < figure > destina-se a marcar uma unidade de conteúdo e opcionalmente uma legenda para o conteúdo que se constitui em uma peça isolada do fluxo principal do documento e pode ser retirada daquele fluxo sem alterar o significado do documento." Esse elemento é usado para marcar imagens, diagramas, fotos e outros conteúdos independentes. Antes, para se fazer isso, era preciso usar CSS e posicionar a legenda sob a imagem. Agora ficou fácil e bem mais semântico, com o uso dos elementos figure efigcaption (que representa a legenda). Figure.html Apenas reiterando: todos os elementos HTML podem ter seu estilo modificado com o uso das CSS. Portanto, é possível alterar o estilo da legenda. Figure_css.html Ok, visualmente falando não é nenhuma grande revolução. Mas em se tratando de semântica, é muito importante. Analise: Antes, era feito desta forma: No exemplo, o elemento < span > faz o papel da legenda. Mas qual ligação semântica ele tem com a imagem? Será que um Software (por exemplo, um robô de busca) ao ler, entenderá a ligação? Agora, com o uso dos elementos figure e figurecaption a relação semântica entre a imagem e a legenda existe: Sua função é agrupar elementos h1-h6 quando existir mais de um título formando o cabeçalho. Podem ser usados quantos elementos < hgroup > forem necessários. Hgroup.html Mark A função desse elemento é marcar uma palavra ou texto. Os navegadores o renderizam com o fundo na cor amarela. Mas vale uma ressalva: Esse elemento não aplica a semântica de ênfase do elemento < strong >, apenas o marca visualmente. Utilidades Em uma pesquisa: Marcar as palavras pesquisadas no resultado da pesquisa. Calendário: A data atual de um calendário pode ser marcada usando esse elemento. Etc. São muitos os usos possíveis. Como explicado acima, muitos cometem o erro de marcar o resultado de uma busca com < strong >, por exemplo. Mas o elemento < mark > foi criado exatamente para tal finalidade, pois ele não traz valor de ênfase. Como você pode observar, o próprio navegador trata de definir um estilo primário para o elemento: Mas nada impede que essa cor seja trocada. Por exemplo, experimente acrescentar esse CSS no exemplo acima: Mark.html Meter A função desse elemento é marcar uma medida escalar. Por exemplo: Marcar a porcentagem de uso da memória ou do HD. A relevância do resultado de uma consulta. O número de votos obtidos por um candidato, desde que o total de votantes seja conhecido. Esse elemento é adequado para marcar qualquer medida que tenha limites inferiores e superiores. Muitos o usam para marcar a porcentagem de download ou upload de um arquivo, o que não é apropriado. Para tal finalidade existe o elemento < progress > (a ser explicado em seguida). Ele admite os seguintes atributos: value - Define o valor da medida marcada. Seu uso é obrigatório. min - Define o valor mínimo da escala à qual a medida marcada pertence. Se nenhum valor for definido, internamente será atribuído 0. max - Define o valor máximo da escala à qual a medida marcada pertence. Se nenhum valor for definido, internamente será atribuído 1. low - Define um valor, dentro da faixa, considerado "baixo". high - Define um valor, dentro da faixa, considerado "alto". optimum - Define um valor, dentro da faixa, considerado "ótimo". Meter.html Em execução no Opera: Em execução no Google Chrome: Progress Elemento usado para representar o progresso de uma tarefa. Existem duas formas de andamento do progresso: Determinada: Usada quando a medição é feita com um valor "máximo" definido. Dessa forma é possível calcular a porcentagem do progresso atual. Indeterminada: Usada quando não é possível quantificar o término de uma ação. Esse elemento aceita os seguintes atributos (além dos globais): value: Define quanto da tarefa já foi realizado. max: Define o quanto é necessário para realizar a tarefa. form: Associa o elemento progress a um formulário. O valor desse atributo deve ser o id do formulário associado. Progress.html Observe que para ter um progress" indeterminado", basta deixar de definir o atributo "value". Os valores da progress bar, assim como os valores de qualquer elemento, podem ser manipulados viaJavaScript. Agora, acrescente esse JavaScript no documento: ruby Especifica texto Ruby (tipografia utilizada no Sudeste Asiático). Esse elemento não será aprofundado, para maiores informações: http://www.w3.org/TR/ruby/ time De modo geral pode-se dizer que a função desse elemento é designar tempo. O < time > assegura que datas e horários apareçam em formato padronizado e compreensível para máquinas (google e etc). Admite os seguintes atributos: datetime: Define o horário e/ou data que está sendo marcado. Caso ele não seja especificado, a data e/ou hora deverá ser marcada como conteúdo do elemento. pubdate: Informa que o horário marcado se refere ao instante em que o conteúdo foi publicado. Não é permitido conter mais que um elemento < time > com o atributo pubdate declarado. Entretanto, diferentes < article > podem conter o elemento < time > com datas distintas de publicação (usando o atributo pubdate). O atributo é booleano (não aceita nenhum valor, apenas é booleano, opcional). Time.html Output Esse é o novo elemento para formulários e serve de "estrutura" para resultados de cálculos. Ele possui os seguintes atributos: for: Associa o output aos controles de formulário em que está referenciado. Usa-se o ID desses controles, pode ser mais de um, separados por vírgula. Exemplo: for="a b". form: Associa o elemento de forma única a um formulário. name: Define uma identificação "name" para o elemento. Output.html No Opera: De início, a impressão que fica é que esse elemento é um tanto inútil e que o resultado poderia ser impresso num span, por exemplo. Mas, é que desta forma, economizam-se algumas linhas de código que seriam usadas com o JavaScript para exibir o resultado em um span. Cabe ao desenvolvedor decidir qual estratégia usar. Obs: O input de type igual a "range" será detalhado mais adiante. Novos atributos do HTML5 O HTML5 introduziu novos atributos em diferentes elementos. Veja, em detalhes e exemplos, cada um deles. Async - Carregamento assíncrono de arquivos JavaScript. Esse atributo é usado no elemento < script >. Sim, aquele mesmo que se usa para definir scripts javascript. O atributo async faz com que o script seja executado de modo assíncrono, ou seja: a renderização da página não é "travada" durante os milessegundos em que o script é carregado. Os scripts que possuem esse atributo são colocados em fila (e são baixados paralelamente) e, assim que carregados, ficam disponíveis para o navegador. Por definição, no modelo síncrono as chamadas e respostas são sequenciais, ou seja: é necessário receber a resposta da requisição anterior antes de passar para a próxima requisição. Um processamento síncrono espera o término de uma tarefa para iniciar a próxima, enquanto o assíncrono permite que outras tarefas sejam executadas enquanto a primeira ainda está sendo processada. Compatibilidade atual: http://caniuse.com/#search=async. Sem o atributo async, primeiro o JS é carregado e o parser dom é "pausado": Async.html O JavaScript é carregado assincronamente sem o DOM seja interrompido (algo como "multitarefa"): que Veja que o arquivo JS do jQuery ainda está sendo carregado e o parser DOM já renderizou o conteúdo do documento. Isso é feito paralelamente ao carregamento do arquivo JavaScript. Nos browsers mais antigos que não o suportam, ele não causa nenhum problema e o script é carregado no modelo convencional. Vale ressaltar que o atributo type para o < script > é opcional. Alguns desenvolvedores nem o usam mais; já outros, por hábito, sempre o utilizam. Usá-lo não vai atrapalhar - e nem melhorar - o desempenho do site: a escolha é sua. Se você levar em conta o que prega oHTML5: "Simplificar e tornar minimalista o código", a melhor opção na teoria seria não usar o atributo type="text/javascript". reversed Define uma contagem descendente para o elemento de lista ordenada < ol >. É um atributo booleano. Reserved.html Esse exemplo deverá resultar em uma lista ordenada de forma crescente e outra decrescente (reversed). Sandbox É um novo atributo introduzido no HTML5 para a segurança no uso de Frames. Frames são geralmente usados para colocar conteúdos de terceiros na página e podem, de alguma maneira, executar ações inesperadas. A ideia do sandbox é proteger a página onde um iframe for adicionado, limitando o que ele pode ou não fazer. Operações que podem ser evitadas com o uso do atributo: Acesso ao DOM da página-pai (tecnicamente falando porque o iframe é relegado a uma origem "diferente" da origem da página principal). Executar scripts. Inserir os próprios forms, ou manipular forms via script. Ler ou escrever cookies, dados locais ou base de dados SQL locais. Desabilitar Pop-ups e Plugins. Os valores possíveis desse atributo são: allow-same-origin - Permite tratar o conteúdo do iframe como sendo da mesma origem do documento que o contém. Em outras palavras, scripts do iframe podem acessar o DOM da "window"-pai. allow-top-navigation - Permite "navegação superior". Por exemplo, o iframe ter privilégio para navegar no documentopai, o documento que o contém. allow-forms - Permite a submissão de formulários. allow-scripts - Permite a execução de scripts. "" - Quando declarado como booleano (sandbox) todas as restrições acima são aplicadas. Antes de testar o exemplo, uma observação: O Google Chrome implementa o bloqueio de algumas permissões ao executar arquivos localmente, por motivos de segurança. Por isso, por ser local, o exemplo que será criado em seguida não funcionará no Chrome. Entretanto, há como passar um parâmetro na execução para liberar tais permissões. Faça o seguinte: Procure o atalho do Chrome e acesse suas propriedades: Ao abrir, acrescente a seguinte linha do lado do EXE de execução do Chrome: --allow-file-access-from-files Clique em OK. Feche o Chrome e abra-o novamente. Sandbox.html Observe que o atributo booleano "sandbox" foi definido no iframe. Isso faz com que todas as operações citadas anteriormente sejam bloqueadas pelo navegador. Acao.html Primeiro teste: Clique no link "navegar". Nada aconteceu, não é? Agora, clique no link "Clique aqui para alterar": O título "AprendaMais - Frames" do documento-pai do frame deveria ter sido alterado, mas não foi. Essas ações não aconteceram devido às restrições aplicadas pelo sandbox. Agora, altere allow-scripts: o sandbox para: allow-top-navigation Atualize a página e clique novamente em navegar: O site AprendaMais será carregado foram permitidas as seguintes ações: no documento, pois Execução de Script. "top navigation". Entretanto, essas permissões não são suficientes para alterar o texto do título no documento-pai quando for clicado em "Clique aqui para alterar". Para que isso seja possível, é preciso acrescentar: allow-same-origin Atualize a página e teste. Clique no link para alterar: Ação executada, ao iframe. pois tais privilégios foram concedidos Seamless Atributo para uso com o elemento < iframe >. Ele faz com que o iframe seja inserido no mesmo contexto do documento que o contém. Em outras palavras, links do frame abrem no mesmo contexto dos links do documento que o contém. Regras de estilo CSS também são aplicadas para o iframe, bem como todos os comportamentos-padrão do documento. seamless.html acao2.html Nenhum navegador atual tem suporte a esse atributo. Então, emule como ficaria o exemplo: Srcdoc Define uma marcação HTML para o elemento< iframe >. Nenhum navegador atual tem suporte a esse atributo. Scoped Atributo para usar junto com o elemento < style >. É um atributo booleano e, quando usado, o estilo é aplicado apenas dentro daquele escopo. Scoped.html Nenhum navegador atual tem suporte a esse atributo. Entretanto, é possível emular como ficaria o resultado do exemplo em execução: Ou seja, apenas o elemento do meio teve um CSS diferente aplicado em seu escopo. Todos os outros usaram o CSS definido no < head >do documento. Vale ressaltar que no HTML5, o elemento < style >pode ser definido dentro do < body >. Sizes Atributo para usar junto com o elemento < link > - mais especificamente o < link > de rel igual a "icon", que define o ícone do site na barra de navegação do navegador: Definindo e manipulando formulários Um dos grandes problemas do HTML4 era os campos "pobres" de formulários, sem validação. Algo custoso, pois obrigava a fazer unicamente com JavaScript. O HTML5, levando em conta que praticamente todas as páginas WEB possuem algum tipo de formulário, introduziu regras de validação diretamente pelos navegadores com a criação de novos atributos. Principais novidades: Antes, os elementos de formulário eram obrigados a estar inseridos no formulário. Agora, no HTML5, elementos tais como < button >, < fieldset >, < input >, < label >, < select >, < textarea >etc., podem estar fora do formulário, desde que conectados a ele através do atributo form(explicado adiante). Agora há novos tipos de campo, além dos comuns: text, hidden, checkbox, radio, upload, etc. E, principalmente, validação do formulário sem a necessidade de usar JavaScript. Novos atributos de formulário Vários novos atributos de formulários e seus elementos foram implementados. Veja-os na prática. Required Esse atributo booleano marca o campo como sendo de preenchimento obrigatório. Elementos que o admitem: Input Textarea Select Required.html Se o Select não for preenchido: Observação: Cabe mensagem de alerta. ao navegador definir o estilo da Autofocos Esse atributo booleano define para qual elemento irá o foco quando a página for carregada. Elementos que admitem o uso do atributo: button input keygen select textarea autofocus.html Autocomplete A maioria dos navegadores oferece a função de "sugerir" opções de preenchimento para campos do tipo text. Entretanto, é possível desabilitá-la ou habilitá-la com o uso do atributo. O autocomplete é do navegador que, se configurado, grava os valores digitados por você nos campos inputtext. Algo como: Elementos que admitem o atributo: input form autocomplete.html Quando aplicado ao elemento < form >, todos os inputs text filhos desse form, que não tiverem o "autocomplete" definido, o herdam. dirname Esse atributo define o dado adicional a ser enviado junto com os outros campos do formulário, especificando a direção do texto (ltr ou rtl). Dirname.html A string de dados enviada para processamento no servidor será parecida com: Ao definir o atributo dirname, o valor atribuído a ele deve ser o nome do novo parâmetro a ser enviado com a direção do texto do elemento. Por exemplo, acrescente dirname="nome.dir" o atributo desta forma: No elemento input "nome": Emulando novamente o envio do formulário, um novo parâmetro é adicionado à string de dados: nome.dir=ltr Ficando assim: nome=AprendaMais&comentario=HTML5& enviar=Enviar&nome.dir=ltr form É um atributo muito interessante. Ele associa o elemento em questão a um formulário, não importando se o elemento está fora dele. No modelo convencional do HTML4, um controle de formulário (input, textarea etc.) era associado apenas ao formulário em que estivesse inserido. Isso mudou noHTML5. O valor desse atributo deve ser o id do formulário em questão. Elementos que admitem o atributo: button fieldset input keygen label meter object output progress select textarea Um exemplo prático: Obs.: Será usado um pouco de PHP para esclarecer melhor. Se você não conhece PHP, não se preocupe, tudo será ilustrado. Form.html Agora, a página PHP que receberá os dados submetidos pelo formulário: receber.php Ao executar o exemplo em um servidor web configurado para o PHP: O resultado será este: Observe que foram recebidos apenas os dados do formulário "formAprenda". Os campos "comentario" e "curso" não foram enviados, pois não possuem relação com o formulário postado. Agora, faça a seguinte alteração, acrescentando atributo,form="formAprenda", no campo comentário: o Também acrescente no campo "curso": Agora eles possuem relação direta com o formulário "< em > formAprenda < /em >" mesmo não estando dentro dele. Resultado Observe que agora os campos "curso" e "comentario" também foram postados. formaction e formenctype O atributo formaction tem o mesmo efeito do atributo "action" do formulário. Ou seja, sua função é definir em qual URL o formulário será postado. Elementos que admitem o atributo: button (type=submit) input (type=submit) Volte ao exemplo anterior. É possível remover o atributo "action" do form e definir o atributo "formaction" no input submit: Formenctype Esse atributo tem a mesma função do atributo enctype do formulário. Sua função é definir o tipo de documento que está sendo enviado. Elementos que admitem o atributo: button (type=submit) input (type=submit) Por exemplo, um formulário de upload convencional: O atributo enctype do form pode pelo formenctype nos input submit: ser substituído novalidate, formnovalidate O atributo novalidate garante que o formulário não seja validado no momento de sua submissão. Como a validação nativa de formulários com o HTML5 ainda não foi explicada, o exemplo prático desse atributo será demonstrado posteriormente. O formnovalidate possui a mesma função do novalidate, com a diferença de que é usado nos elementos input e button. Novalidate.html Ao clicar em "Enviar formulário" ele será submetido sem que o navegador valide as regras aplicadas nos campos, como no caso acima em que os campos possuem o atributo "required". formtarget e formmethod O atributo formtarget possui a mesma função do atributo target do formulário, que especifica se a submissão deve ser feita na janela atual ou em nova janela, por exemplo. Esse atributo pode ser usado nos elementos input e button. O atributo formmethod possui a mesma função do atributo method do formulário, que especifica o método de submissão HTTP usado no envio do formulário, que pode ser POST ou GET. Esse atributo pode ser usado nos elementos input e button. Placeholder Esse atributo define uma "dica" sobre o campo. Ao clicar e digitar, ela desaparece. No HTML4, isso era comumente feito com o uso de JavaScript. Placeholder.html file multiple Novo atributo do HTML5 usado junto com o tipo de campo "file" para a seleção de múltiplos arquivos em sistema de upload, por exemplo. Faça o teste a seguir: Obs.: Esse exemplo será executado em um servidor PHP para que seja possível receber, de fato, os arquivos upados e suas informações. Se você não souber PHP, ainda assim poderá testar o exemplo em sua máquina. Apenas o Upload não funcionará. File_multiple.html Para estilizar melhor, acrescente o CSS: Veja que foram selecionados 2 arquivos: Agora, para incrementar ainda mais o exemplo, use JavaScript para ler o nome, tipo e tamanho dos arquivos selecionados e para imprimi-los na tela, para que o upload fique mais intuitivo. Para isso, acrescente o seguinte JavaScript no documento: As informações dos arquivos foram lidas. Observe que no JavaScript há uma linha assim: Para abrir as "ferramentas do desenvolvedor" do Google Chrome: Através dela se consegue depurar e imprimir o resultado da variável "arquivos" que é: Pode removê-la, pois é apenas para teste junto ferramentas de desenvolvedor do Google Chrome. às Para tornar o exemplo ainda mais interessante, crie uma página PHP (se você conhece PHP reproduza o exemplo; caso contrário, apenas veja o resultado): upload.php Volte novamente ao exemplo para upar de fato os arquivos: Arquivos recebidos com sucesso! O exemplo poderia ser mais incrementado ainda para mostrar o progresso do upload, usando a FileAPI doHTML5. Porém, não faz parte do conteúdo deste curso. Disabled Não é um atributo novo do HTML5, mas vale a pena relembrá-lo. Ele desativa um componente de formulário. Se usado em um fieldset, desativa todos os componentes-filhos desse fieldset. Disabled.html Esse resultado pode ser incrementado com o uso das pseudoclasses CSS ": disabled" e ":enabled". Acrescente o seguinte CSS no exemplo acima: Readonly Atributo parecido com o disabled, apenas bloqueia a ação de alterar o conteúdo do campo, sem alterar o estilo. Readonly.html Novos tipos de campos O HTML5 introduziu vários novos tipos de campo para o elemento input, que enriquecem bastante o trabalho com formulários. No HTML4 estavam disponíveis apenas os tipos: button checkbox file hidden image password radio reset submit text O HTML5 implementou 13 novos tipos: search email url tel datetime date month week time datetime-local number range color email Esse tipo de campo informa ao navegador que o dado deve ser um e-mail. Caso contrário, o formulário não pode ser submetido e, para isso, também é necessário que o atributo required esteja presente. Email.html Usando as pseudoclasses CSS3 :valid e:invalid é possível aplicar um estilo adicional ao elemento. Por exemplo, acrescente as seguintes CSS no exemplo acima: Se passou na validação: Observe que é uma validação superficial. Por isso é recomendável: Além da validação no lado do cliente (javascript) valide sempre os dados no lado do servidor (com a linguagem server-side). Suporte (compatibilidade) atual junto aos navegadores: url Esse tipo de campo informa ao navegador que o dado deve ser uma url. Caso contrário, o formulário não pode ser submetido e, para isso, também é necessário que o atributo required esteja presente. url.html Suporte (compatibilidade) atual junto aos navegadores: search Define uma interface de campo para pesquisa. Alguns navegadores exibem um pequeno botão do lado direito para apagar a pesquisa, como é comum na maioria dos campos de pesquisa personalizados na Web. É possível, via CSS3, selecionar o tipo de campo e aplicar um estilo particular a ele. Por exemplo: Suporte (compatibilidade) atual junto aos navegadores: tel e o atributo pattern É usado para números de telefone, mas não há regra particular que o valide. Isso porque não existe um padrão de números de telefone ao redor do mundo, o que torna impossível especificar um formato como padrão universal. Entretanto, existe um novo atributo no HTML bem interessante, chamado "pattern". Com ele é possível definir regras de validações usando expressões regulares. Regular expressions, ou REGEX, são expressões especificadas pelo programador que conterão os caracteres válidos ou não para determinado campo. Uma expressão regular é o método formal de especificar um padrão de texto. É uma composição de símbolos e caracteres com funções especiais que, agrupados entre si e com caracteres literais, formam uma sequência, uma expressão. Essa expressão é interpretada como regra, e indicará sucesso se uma entrada de dados qualquer casar com essa regra, ou seja: se obedecer exatamente todas as suas condições. Expressões regulares são usadas em quase todas as linguagens de programação. Então, em um campo tel, pode ser feito, por exemplo: Tel_pattern.html Observe que foi definida uma expressão regular para validar o número de telefone: Formatos aceitos pela expressão regular de telefone: 99 99999999 99-9999-999 99 9999-9999 (99) 9999999 (99) 9999-9999 Suporte (compatibilidade) atual junto aos navegadores: Expressões Regulares Expressões Regulares é um assunto extenso e que exige muito estudo. O conteúdo é suficiente para um curso completo, dada a quantidade e complexidade das informações. As Expressões Regulares não serão detalhadas neste curso. Entretanto, para que você possa ter noção sobre como as expressões regulares são formadas, serão apresentados os conceitos iniciais e alguns exemplos práticos. Formando expressões: Nota: O símbolo ^ só é tido como exceção de sequência se ele vier exatamente no início da sequência especificada. Se ele vier no início da expressão de regex (fora dos parênteses ou colchetes de expressões), será interpretado como "início de linha" e não como termo de negação. E se vier no meio da sequência será interpretado como parte dela. Data: expressoes.html Hora: Cep (correios): Por fim, e para aguçar sua vontade em aprender expressões regulares, a explicação de uma que valida o endereço de email (não é preciso trabalhar com ela no HTML5, pois já existe o tipo de campo "email"): Expressões_email.html Obs: Você pode usar o atributo placeholder para indicar o formato desejado do campo, para os usuários. Explicando o exemplo: ^([0-9,a-z,A-Z]+) - No início da linha, pelo menos uma ou mais ocorrências dos caracteres de0-9, ou a-z, ou A-Z ([.,_,-]([0-9,a-z,A-Z]+))* - Seguidos ou não (zero ou mais ocorrências) da expressão: ponto ou underline ou hífen seguidos de caracteres de 0-9,a-z ou A-Z que apareçam pelo menos uma vez ou mais. [@] - Seguido de arroba. ([0-9,a-z,A-Z]+) - Seguidos de pelo menos um ou mais caracteres de 0-9, ou a-z, ou A-Z. ([.,_,-]([0-9,a-z,A-Z]+))* - Seguidos ou não (zero ou mais ocorrências) da expressão: ponto ou underline ou hífen seguidos de caracteres de 0-9,a-z ou A-Z que apareçam pelo menos uma vez ou mais. [.] - Seguidos de ponto. ([0-9,a-z,A-Z]){2,3} - Seguidos de 2 a 3ocorrências de caracteres a-z ou A-Z. ([a-z,A-Z])?$ - Seguidos de uma ou nenhuma ocorrência de caracteres de a-z ou A-Z, no final da linha. number Esse atributo fornece uma interface no input para inserção de número. Ainda é possível usar os atributos max e min para definir um limite. Por exemplo: Number.html Também existe o atributo chamado step, que permite definir de quanto em quanto o número deve ser incrementado. Por exemplo: Seu uso é apropriado em casos onde o dado retrata uma quantidade, pelas opções de incremento e decremento que o componente dispõe. Não é apropriado usá-lo (mas nada impede que você o faça), por exemplo, no campo "número da casa", pois o usuário não ficará alternando os valores - ele apenas digitará o número e pronto. Nesse caso, você pode usar o tipo "text" e definir um pattern para garantir que o usuário digite apenas números e não letras ou qualquer outro tipo de caractere especial. Suporte (compatibilidade) atual junto aos navegadores: range Esse tipo renderiza nos navegadores um "slider" e, tal como o tipo "number", aceita os atributos min, max e step. Range.html Suporte (compatibilidade) atual junto aos navegadores: Color Esse tipo fornece uma interface para o usuário selecionar a cor. Color.html Em execução no Opera: Suporte (compatibilidade) atual junto aos navegadores: Atributos de data e hora Obs: Para verificar a atual compatibilidade, basta acessar http://html5test.com/ usando esses navegadores. Há novos atributos de data e hora. São eles: date,datetime, datetime-local, month, time, e week. Essas entradas de data e hora aceitam dados formatados, de acordo com o padrão ISO 8601 standard. O que cada um representa: date - Representa uma data no formato ano-mês-dia. Por exemplo: 2011-12-25. month - Representa o ano e mês. Por exemplo: 201112. week - Representa o ano e uma semana desse ano. Por exemplo, o ano possui 52 semanas, então 2011-W03 (representa a terceira s emana de 2011) e 2011-W47 (representa a quadragésima sétima semana do ano de 2011). time - Representa determinada hora do dia, usando o formato 24-horas. Por exemplo: 21:35. datetime - Representa o controle (date picker) para ajustar determinada data e hora no formato UTC (Tempo Universal Coordenado). Serão apresentados exemplos a seguir. datetime-local - Representa o controle (igual ao datetime) de determinada data e hora local. A representação da data e hora fica a cargo do navegador, em formato que considere o local e o usuário. Dentre todos eles, o mais usado é o "date", que implementa o controle de calendário. Por exemplo: Atributo_date.html Em execução no Opera: Obs: Atualmente, apenas o Opera tem suporte aos controles de "date picker". Agora, um exemplo de data e hora: completo com todas as opções Execute o exemplo no navegador Opera: O atributo step é permitido em todos esses tipos de campos. Por exemplo: Com o step=4 só será possível selecionar um mês no intervalo de 4 em 4: Para os tipos de campo "time" e "datetime" ou "datetimelocal" o atributo step pode ser representado em segundos. Por exemplo: Incrementa a hora num intervalo de 5 em 5minutos: Suporte (compatibilidade) atual junto aos navegadores: Para os navegadores sem suporte, a alternativa para o "date" seria usar o jQuery UI: http://jqueryui.com/demos/datepicker/. Mas deve-se analisar: até que ponto é bom usar ojQuery UI (que não é tão pequeno em tamanho) apenas para ter um calendário? Talvez não seja muito vantajoso, pois deixará o projeto pesado. Speech input O Google Chrome implementa o tipo de campo de reconhecimento de fala. Basta definir o campo, ligar o microfone no computador e falar algo. Maiores detalhes: http://pt.wikipedia.org/wiki/Speech_recognition. Speech_input.html Clique com o botão direito do mouse na área do navegador, escolha Inspecionar elemento e selecione a guia Console. Veja o "rascunho" http://www.w3.org/2005/Incubato/ htmlspeech/2010/10/google-api-draft.html. da API: Desenvolvendo formulários completos Agora que já conheceu todos os novos atributos e elementos de formulário, poderá começar a desenvolver os próprios formulários. Primeiro, um formulários: exemplo Em execução no Opera: Formulario1.html que incorpora vários tipos de Formulario2.html Como você pode ver, HTML5 e CSS3 são inúmeras. as possibilidades Personalizando as mensagens padrões de validação com É possível acrescentar mensagem adicional às mensagens de erro de validação. Para isso, basta definir o atributo title com a mensagem. Por exemplo: Perso_mensagem.html Observe o atributo title: Validando os dados em Browsers sem suporte ao HTML5 Uma alternativa para validar os dados dos formulários montados com HTML5, para os navegadores que não dispõem de suporte para tal validação, é usar a biblioteca Modernizr e o jQuery. Essa é uma forma de garantir que o sistema de validação funcionará tanto nos novos Browsers quanto nos antigos. Mas isso tem um preço: Programar as validações em JavaScript e deixar o projeto um pouco maior, por causa dos Scripts a serem carregados. Validando_browser.html O script está comentado passo a passo, de forma resumida: Ao submeter o formulário, foi usada a biblioteca Modernizr para verificar se o navegador tem suporte aos atributos "required" e "pattern". Se não possuem tal suporte, começam as validações que estão divididas em três etapas: Primeiro os campos com atributo "required", que estiverem em branco; depois, os campos do tipo "email" que não tiverem email válido; e, por fim, os campos que dispõem de expressão regular no atributo "pattern" são validados. Os navegadores atuais, que possuem o suporte nativo de validações HTML5, não entram nesse IF do Modernizr para as validações jQuery. Execute o exemplo no Internet Explorer 8 (ou versão inferior): No Google Chrome: No Google validação. Chrome foi usado o "mecanismo"HTML5 de Em suma, essa alternativa pode ser boa como medida paliativa para os usuários que usam Browsers antigos e até que troquem de navegador. O script de validação do exemplo foi colocado entre as tags < head > apenas para facilitar o entendimento das operações. Entretanto, em projeto real, recomenda-se que seja colocado em arquivo separado. Por exemplo,validacao.js, para separar e organizar melhor as camadas do site. Novos eventos para formulários Relação dos novos eventos de formulários implementados no HTML5 e quando são acionados: oncontextmenu - Quando o menu de contexto é acionado (clicar com o botão direito do mouse). onformchange - Quando há alguma alteração em um dos campos do formulário. onforminput - Quando algum campo (qualquer um) do formulário recebe um valor. oninput- Quando o usuário entra com algum dado no campo. oninvalid - Quando o campo não passou pela validação. Onforminput.html Atualmente, apenas o Opera consegue esse tipo de implementação que, na verdade, é apenas forma de evitar o uso de JavaScript para uma tarefa simples. Oninvalid.html Template HTML5 para maior compatibilidade HTML5 Boilerplate é um template HTML5para que você dê início aos seus projetos. Ele não possuiu não apenas o modelo de página HTML ideal, mas também uma série de arquivos essenciais para um projeto HTML5 mais compatível entre os Browsers. Alguns dos arquivos inclusos nesse template: CSS Reset - é um conjunto de declarações CSSque visam aplicar estilo aos elementos, padronizando-os em todos os navegadores. Os elementos HTML já vêm internamente com um CSS definido pelo navegador, e que difere de navegador para navegador. A função do CSS Reset é essa: padronizar ao máximo os pequenos detalhes. Arquivos JS importantes como: jQuery, Modernizr e etc. Veja a explicação completa de todos os "fixes" que esse Template aplica para os Browsers mais antigos, ou com suporte parcial a alguma propriedade importante, no site oficial do Template: http://br.html5boilerplate.com/. Basta baixar o template para implementar seu projeto a partir dele. Algumas questões importantes: Sou obrigado a usar esse template em meus projetos HTML5? Não. Mas se o projeto for grande e você tiver certeza que o público-alvo usará Browsers mais antigos, então usá-lo pode ser bem vantajoso. O que é importante usar em um projeto HTML5?CSS Reset e a biblioteca Modernizr. Use-os sempre! CSS Reset para padronizar melhor a forma com que os elementos são exibidos nos navegadores e a biblioteca Modernizr para fazer com que os novos elementos HTML5 sejam reconhecidos por Browsers antigos e para funcionalidades HTML5/Apis. verificar Exemplo de projeto usando CSSReset e Modernizr: as minimalista, Projeto.html Copie a pasta html5-css-reset que se em //arquivos-cursos/html5 para Sua Pasta. Em execução no Chrome: Em execução no Internet Explorer 6: encontra Se não fosse o CSS Reset, no Internet Explorer 6/7, ficaria assim: E sem o Modernizr: O Browser não consegue reconhecer os elementos para aplicar os estilos CSS. Conclusão: Nos projetos HTML5, dê sempre o pontapé inicial usando CSS Reset e a biblioteca Modernizr. Frameworks HTML5 Atualmente, os principais Frameworks HTML5 são: Bootstrap - Framework mantido pela desenvolvimento do http://twitter.github.com/bootstrap/ Foundation - http://foundation.zurb.com/ Exemplo disponível no Bootstrap: equipe de Twitter. O objetivo desses Frameworks é prover um padrão de desenvolvimento, uma vez que já possuem diversos elementos estilizados e mais que isso, prover compatibilidade, pois trabalham bem as CSS reset. São bastante interessantes para se iniciar um novo projeto. Trabalhando com áudio no HTML5 O HTML5 dispõe de formas nativas de inserir conteúdos incorporados (aúdio e vídeo) sem usar deselegantes scripts, elementos < object > e < embed > ou plugins de terceiros (Flash, Media Player, QuickTime e etc.) para esse fim. Com os novos elementos de áudio e vídeo nativos, é possível não apenas fornecê-los aos usuários, mas manipulá-los com o uso de JavaScript e CSS. Codecs O codec é uma tecnologia usada para a compressão e descompressão de dados. Os alogorítimos dos Codecs de aúdio de compressão visam codificar um aúdio digital para formato menor e sem perder a qualidade. Um aúdio codificado no Codec OGG precisa, para ser reproduzido, de um Player que tenha o algorítimo apropriado para descodificá-lo (OGG). Não há padrão sobre qual Codec de áudio usar noHTML5. Existem diferentes Codecs que podem ser usados e nem todos funcionam em todos os Browsers. Para ter um áudio realmente CrossBrowser funcionando em todos os navegadores, é preciso ter no mínimo 2 formatos de áudio em codecs distintos (será explicado a seguir). Conheça os Codecs usados no HTML5 e compatibilidades junto aos navegadores atuais: suas Sobre os formatos: aac - Codec de compressão que é considerado um "MP3" melhorado. mp3 - Formato patenteado de boa compressão, muito comum para músicas digitais. ogg - Formato de código aberto que usa praticamente o mesmo esquema de compressão doMP3. wav - Formato proprietário para áudio que não utiliza compressão. Por isso o tamanho de seus arquivos é sempre grande. webm - Formato de código aberto do Google. É usado tanto para áudio quanto para vídeo. Implementando áudio na página Áudio.html Copie os arquivos abaixo cursos/html5/ para Sua Pasta. Em execução no Chrome: Em execução no Firefox: da pasta//arquivos- Em execução no Opera: No Internet esse Codec: Explorer que não dispõe suporte para Cada navegador aplica uma "skin" diferente ao control de áudio. Você aprenderá a personalizá-la posteriormente. Implementando áudio de forma cross-browser Exatamente pelo fato de não haver consenso entre os navegadores, acerca de qual Codec usar, o elemento áudio aceita elementos < source > como filhos para que seja possível especificar mais de um formato de áudio, cobrindo assim todos os Browsers recentes. A forma de dispor um áudio cross-browser, que funcione em todos os navegadores atuais, é usando dois formatos: ogg mp3 Agora o Internet Explorer conseguiu reproduzir o áudio. Ele está usando o formatoMP3, uma vez que não dispõe suporte ao formato OGG. Dentro do elemento áudio foi declarado um parágrafo assim: Esse parágrafo só é exibido em Browsers mais antigos, que não suportam o HTML4 e, respectivamente, o elemento < audio >. Por exemplo, ao visualizar Explorer 6: esse exemplo no Explicando os atributos do elemento : Internet src - O caminho do arquivo de áudio. type - Informa ao navegador o tipo de mídia do arquivo (Mime Type), de tal forma que ele possa decidir qual arquivo de áudio usar antes de baixá-lo. media - Informa ao navegador o tipo de mídia CSS. Quando não definido, é usado o tipo "all" que quer dizer "para todos os tipos de dispositivos". Maiores informações em: http://www.w3.org/TR/css3mediaqueries/. Não é difícil definir qual tipo de mídia de arquivo usar. Veja algumas dicas em: http://wiki.whatwg.org/ wiki/Video_type_parameters#Browser_Support Nesse Wiki da Whatwg encontra-se a relação dos mimes types e o suporte atual do Browsers para eles: Por exemplo, para o áudio OGG verifique na tabela omime type a ser usado: Por exemplo, ao usar o mime type "audio/ogg; codecs=bogus" no < source > o resultado será: Esse não é o Mine Type correto, apesar de funcionar no Chrome. Portanto, volte para o "audio/ogg": É importante fazer sempre esse teste antes de definir um Mime Type, para evitar qualquer problema de reprodução posterior. Outra forma de obter informações sobre a mídia em questão é usar o "Media Player Classic", um clássico player de aúdio e vídeo para Windows. Por exemplo, ao acessar arquivo chrome_webm.webm: as propriedades Se obterá como resultado importantes informações: do Para esse arquivo podem ser usados os seguintes mime types, listados naquele Wiki: audio/webm; codecs=vorbis audio/webm Atributos para manipulação de áudio Os atributos que o elemento admite são: src - Indica o caminho do arquivo de áudio. Formas de carregamento do áudio – preload O atributo "preload" indica como deverá ocorrer o carregamento do áudio na página. Os valores possíveis são: none, metada, auto. none indica que o áudio e suas informações não devem ser baixadas enquanto o usuário não acessar os controles do elemento. metadata indica que apenas as informações como faixa, duração, controles e etc. devem ser baixadas, mas não o áudio. auto (que é o valor-padrão do atributo booleanopreload) define que o som será pré-carregado automaticamente assim que a página for acessada. Audio1.html Obs: Para testar e observar na prática esse exemplo, é necessário executá-lo a partir de um servidor web. Veja a demonstração. O áudio usado no exemplo é um WAV de tamanho igual a 8MB. Inicialmente, ao abrir o exemplo: O áudio em si não foi baixado. Apenas suas informações foram requisitadas (cabeçalhos, formato e etc.). Agora, ao clicar em "Play" ele começa de fato a ser baixado para a máquina do usuário, progressivamente: Exemplo de preload none: Nenhuma requisição é feita ao áudio até que o usuário interaja com o controle (play). autoplay e loop Ativa a execução automática do áudio assim que a página é acessada. Em termos de usabilidade, executar um som automaticamente não é boa prática, pois os usuários podem ficar irritados e nunca mais voltar ao site. Pense bem antes de usar esse atributo. O atributo loop faz com que o som entre num laço infinito de repetições. Muted Esse atributo booleano inicia o controle com o modo "mudo" ativado. Por exemplo: mediagroup e controls O atributo mediagroup aceita como valor qualquer string. É usado para unir vários arquivos de mídia para reprodução sincronizada (seja áudio, vídeo). Elementos de áudio e vídeo que possuem o mesmo valor de mediagroup ficam "interligados", podendo ser manipulados para reprodução através do uso de JavaScript, por exemplo. Já o atributo controls contém os controles do elemento de áudio. Sem ele a "skin" do player não seria renderizada. Faça o teste: Observe que está sem nenhum controle, em branco. Na maioria das situações, o atributo controls é sempre utilizado. A grande utilidade em não usá-lo é para situações em que a intenção é recriar o player com HTML e CSS, sem usar o padrão dos Browsers, com novas imagens, botões de play, pause, controle de volume e etc. Index.html Player.css Player.js O exemplo é intuitivo e está bem comentado. Em execução: Observações importantes: São métodos da API de áudio para carregar e reproduzir o áudio, respectivamente. Observe que também foi trabalhado com quatro importantes eventos da API de mídias: ended - Evento executado quando a reprodução do áudio acaba. play - Evento executado quando a reprodução do áudio se inicia. pause - Evento executado quando a reprodução do áudio é pausada. volumechange - Evento executado quando o volume do áudio é alterado. bind - no exemplo está delegando ao elemento áudio o evento "onended". Plugins jQuery para áudio e vídeo Existem alguns ótimos Plugins jQuery que disponibilizam ótima interface para a geração de Modernos Players, usando a tecnologia do HTML5. São eles: http://jplayer.org/latest/demos/ http://mediaelementjs.com/ http://videojs.com/ Novos eventos para elementos de multimídia Além dos eventos mostrados acima, existem outros que podem ser usados tanto para áudio quanto para vídeo. Conheça os novos eventos para multimídia e quando são executados: onabort - É chamado quando o navegador está obtendo os dados do áudio/vídeo e a ação é abortada antes que sejam completamente baixados (carregados). oncanplay - Quando o elemento áudio/video já tem dados suficientes no buffer para começar a tocar. oncanplaythrough - Quando o elemento áudio/vídeo já tem dados suficientes no buffer para começar a tocar e, se a transferência de dados continuar no mesmo ritmo em que está ocorrendo, prevê-se que tocará até o final sem interrupções. ondurationchange - O elemento áudio/vídeo teve seu atributo duration modificado. Isso acontece, por exemplo, ao alterar a origem da mídia (src). onemptied - O elemento áudio/vídeo teve um erro de retorno vazio de dados da rede. O retorno vazio acontece quando, por exemplo, tenta-se invocar o método play de um elemento que ainda não tem origem de mídia (src) definida. onended - Quando a reprodução do áudio/vídeo chegou ao fim. onerror - Quando ocorre um erro com o elemento que está sendo carregado. onloadeddata - Os dados começaram a ser carregados e a posição atual de playback já pode ser renderizada. onloadedmetadata - Os metadados foram carregados e já se sabe as dimensões, duração e formato do áudio/vídeo onloadstart - Os dados começaram a ser carregados. onpause pausada. Quando a reprodução do áudio/vídeo foi onplay - Quando a reprodução do áudio/vídeo foi iniciada; ou seja, quando o usuário clicou em Play ou quando a reprodução começou por causa do atributo autoplay. onplaying - O áudio/vídeo está tocando. onprogress - O do áudio/vídeo. navegador está buscando os dados onratechange - Quando a taxa de reprodução muda. onreadystatechange - Quando os estados da mídia mudam (carregando, completo e etc.). onseeked Quando aúdio/vídeo termina. a busca pelos dados do onseeking Quando a busca áudio/vídeo está em execução. pelos dados do onstalled - Quando, por algum motivo, o script é finalizado porque o navegador não conseguiu buscar os dados do áudio/vídeo. onsuspend - Quando a busca pelos dados do áudio/vídeo é interrompida antes de ser concluída. ontimeupdate Quando a posição de reprodução do áudio/vídeo muda. Por exemplo, quando o usuário avança manualmente até o fim do áudio/vídeo. onvolumechange - Quando o usuário altera o volume ou o define como mudo. onwaiting Quando pausado automaticamente para conteúdo (buffer de dados). o áudio/vídeo é carregar o resto do Acompanhe este exemplo, desta apenas JavaScript puro (sem jQuery): vez usando Index1.html Agora, acrescente no exemplo o Script: No exemplo foi usado o método delegador de eventos do JavaScript addEventListener( ), que não funciona crossbrowser em todos os Browsers - versões do Internet Explorer anteriores à 9não o suportam. Por isso, no exemplo de "personalizando um player de áudio" foi usado jQuery, pois seus métodos são cross-browsers e funcionam desde o Internet Explorer 6. Atributos dos elementos de multimídia Os principais atributos são: playbackRate - A taxa de reprodução é padrão 1.0(valor de ponto flutuante). Entretanto, ela pode ser alterada se a intenção for pelo "efeito" de "slow-motion" ou "slow-rewind". defaultPlaybackRate - Retorna a taxa de reprodução padrão, que é igual a 1. src - Retorna a url que aponta para o áudio/vídeo. currentSrc - (apenas leitura) Retorna a url atual do vídeo, pois em tempo de execução ela pode ser alterada. readyState - (apenas leitura) Retorna um valor-número entre 0-4, que representa o estado de leitura. 0 representa que o navegador nada capturou sobre o áudio/vídeo. 1 indica que os metadados do áudio/vídeo já foram lidos. 2 indica que o navegador já possui em buffer dados parciais para a reprodução inicial da mídia. 3 indica que o navegador já possui dados suficientes para reproduzir boa parte da mídia, bem como voltar ou avançar sua posição. Por fim, 4 indica que o vídeo está totalmente pronto para ser reproduzido e que nada interferirá na reprodução, pois já está 100% carregado. duration - (apenas leitura) áudio/vídeo em segundos. O tempo de duração do buffered - (apenas leitura) Retorna os intervalos de tempo do vídeo que estão disponíveis em buffer para o navegador executar. videoWidth e videoHeight (apenas leitura) São especificamente para vídeos. Eles retornam a altura e largura dos vídeos, suas reais dimensões e não as dimensões CSS ou do player. paused - (apenas leitura) Atributo booleano que indica se o vídeo está pausado. ended - (apenas leitura) Atributo booleano, retorna TRUE se a reprodução foi finalizada. currentTime - Retorna a posição atual da reprodução em segundos. Também é possível definir um valor para pular no tempo de reprodução, por exemplo: "audio.currentTime = 15" ao clicar em Play o áudio iniciará a partir do segundo 15. autoplay Retorna TRUE se ativo; ou FALSE se estiver desativado. o autoplay está Os atributos marcados como "apenas leitura" não podem ter seus valores alterados, são apenas para serem lidos. Exemplo com currentTime e playbackRate Playbackrate.html Agora, o JavaScript dele: Observações importantes: No elemento < audio >, o preload deve ser definido com o valor "metadata": Se definir como "none", ao ser carregado, as informações de metadado do áudio não estarão disponíveis: E nem foi apontado para os 15 segundos inicias. Com relação ao "playbackRate", a taxa de reprodução foi alterada e o vídeo será reproduzido bem rápido. Ao pausar o vídeo, é informado em qual segundo foi parado: Ferramentas para codificação de áudios e vídeos Para conversão e edição de áudio, um dos melhores é o Audacity: http://audacity.sourceforge.net/. Conheça as opções formato OGG): de exportação (destaque para o Para usuários MAC: http://thelittleappfactory.com/evom/. Também para usuários MAC ou Windows, um dos melhores Softwares para conversão de áudio/vídeo paraweb e dispositivos móveis, com opção para diversos formatos, é: http://www.mirovideoconverter.com/. E, por último, uma alternativa muito interessante é a instalação da extensão Firefogg para o Firefox, que converte vídeos/áudio para os formatos OGG e Webm, respectivamente: http://firefogg.org/. Baixe este vídeo do Youtube no formato MP4e configure para convertê-lo para WebM:http://www.youtube.com/watch?v= hQuXxOBJwSg Para usar a extensão, abra o Mozila Firefox, entre no site: http://firefogg.org/ e clique na opção Make web video. Depois em Select File. Selecione o arquivo Signing in to Chrome - YouTube.flv, que se encontra na pasta \\arquivos-cursos\html5\ e clique em Abrir. Clique em Encode e depois em Salvar. Resultado Arquivo em FLV que foi baixado e o arquivo webm após a conversão. Outras ferramentas: Miro VideoConverter: http://www.mirovideoconverter.com/. WebM Tools: http://www.webmproject.org/tools/. OggConvert: http://oggconvert.tristanb.net/. Trabalhando com vídeos no HTML5 A sintaxe para inserir vídeos é tão simples quanto a de áudio. Conheça os Codecs suportados pelos navegadores: H.264, Apple, Microsoft e Google pagaram uma taxa de licenciamento para usar o Codec nativamente em seus navegadores, diferentemente da Mozilla (Firefox) e Opera que preferiram adotar apenas os Codecs gratuitos. Como resolver o problema de formatos? Se você deseja que seu vídeo rode em todos os navegadores, a recomendação é dispor dois formatos do mesmo vídeo: WEBM MP4 Por exemplo: Para o exemplo copie arquivosgoogle_video.mp4 e google_video.webm da pasta \\arquivos-cursos\html5\ para Sua pasta. Vídeos.html os Atributos usados em < audio > que podem ser usados no elemento < video >: ¦ loop controls preload muted autoplay src < video > usa as mesmas propriedades e eventos detalhados no tópico "atributos dos elementos multimídia". Uma boa página propriedades: /mediaevents.html para visualizar tais métodos e http://www.w3.org/2010/05/video Dimensões do vídeo Para definir a dimensão do atributos width e height. Por exemplo: Vídeo.html vídeo, use os Definir a dimensão do vídeo não tem a ver com a resolução. Aumentar ou diminuir demasiadamente o vídeo compromete a qualidade quando estiver em execução. Definindo a imagem de fundo para o vídeo É definido no atributo poster a imagem que se deseja exibir como fundo do vídeo, antes de ser executado. Video2.html Definindo legendas SRT para o vídeo O elemento < track > destina-se a definir trilhas externas para os elementos de vídeo e áudio. Seus atributos são: kind - Define o tipo da trilha. Valores possíveis: subtitles (subtítulos), captions (legendas), descriptions (descrições), chapters (capítulos) e metadata (metadados). src - Endereço do arquivo de texto. A especificação da W3C recomenda o formato webSRT com a extensão .srt. charset Charset do arquivo de texto, por exemplo:UTF-8. srclang - Língua usada no arquivo de texto, por exemplo: en-US, pt-br. label - A legenda da língua, por exemplo: Inglês / Português (Brasileiro). Legendas.html Atualmente nenhum navegador suporta esse recurso. Entretanto, é possível emulá-lo usando este script que lê a legenda SRT e a exibe de acordo com o timing atual do vídeo: https://github.com/icelab/jquery-videosub/blob/master /jquery.videosub.js Agora, crie o arquivo de legenda: en-US.srt Execute o exemplo no Google Chrome Canary, pois a permissão de leitura de arquivos locais foi ativada: No Firefox ou em qualquer outro navegador, o exemplo não funcionará localmente pelo fato de a legenda .srt não ser lida por motivo de segurança. Só funcionará se estiver rodando em servidor localhost ou web. Em execução no Google Chrome Canary: O Sofware usado para a criação da legenda foi o "Subtitle Workshop", que pode ser baixado neste link: http://www.urusoft.net /download.php?lang=&id=sw, ou utilizar uma cópia já baixada em \\arquivos-cursos\html5\. E salvar no formato SubRip (.srt): HTML5 Selectors API Level 1 Com a selector API podem ser usados os seletores CSS para selecionar elementos DOM. Se você conhece jQuery, não terá dificuldades para entendê-la. A Selector API Level 1 possui dois métodos: querySelector( ) querySelectorAll( ) As duas recebem como argumento a string de um seletor CSS. A querySelector retorna o primeiro elemento que satisfaz o seletor, ou null caso não haja nenhum. A querySelectorAll retorna a lista de elementos que satisfazem o seletor. Informações sobre compatibilidade: http://caniuse.com /#search=querySelectorAll Selector_API.html Primeiramente foi usado o querySelector para selecionar os elementos < li > de classe igual a "destaque". Logo abaixo, foi usado o "console.log()" para imprimir o resultado no console das "ferramentas do desenvolvedor" do Chrome ou Firebug do Firefox. Apenas um elemento foi retornado, ou seja: o primeiro elemento < li > de classe igual a "destaque". Para maiores informações DOM sobre o elemento, basta apertar a tecla F5: Agora, usando o método querySelectorAll( ), altere o script para: Retornou todos os elementos < li > de classe igual a "destaque". Selector_API_exemplo2.html Ao clicar no botão "Selecionar Elementos": Veja que as classes dos elementos foram alteradas: Observação Sim, você também pode selecionar "ids", identificadas pelo caractere "#"(sustenido). Selector_API_exemplo3.html que são Seletores CSS3 também podem ser utilizados, por exemplo: Seleciona todos os elementos que tenham o atributo "href" igual a "pagina.php". Outro exemplo Neste caso, seleciona o último elemento: classList API A classList são métodos para trabalhar com CSS junto aos elementos. Ela dispõem dos seguintes métodos: add( ) - Adiciona uma classe CSS ao elemento. remove( ) - Remove uma classe CSS do elemento. toggle( ) - Alterna entre duas classes CSS. contains( ) - Retorna TRUE se a classe especificada está declarada no elemento. Atual compatibilidade: http://caniuse.com/#search=classlist Essas funcionalidades são comuns em Frameworks como o jQuery. É bom que você saiba que estão começando a implementá-las nativamente, a caminho de estabelecer um padrão. Classlist_API.html Clique mais vezes no botão e verá a funcionalidade do toggle( ) alterando a classe do "aprenda 2". A implementação é bem simples. O segredo é acessar a classList: A classList deve ser escrita dessa forma. Caso contrário, o Browser não a reconhecerá. Microdata O HTML5 implementa o modelo chamado "microdata", que é extensão de microformats. Os microdados atribuem um significado adicional à marcação HTML. O que são os Microformats? Micro + Format = (informação). Pequenos Formatos de dados Microformats nada mais são que conjuntos de padrões para formatar conteúdos comuns em páginas web e aplicações de diversos tipos. A função dessas especificações é enriquecer a informação inserida em páginas web com metainformação. A função das metatags é fornecer informações para "além" do que é visto em primeiro momento, ou seja: o próprio conteúdo. Microformats se refere a descrever trechos de conteúdos específicos de um site como datas de eventos, informações de contato, descrição de links etc., coisas que estão além do escopo das conhecidas metatags. Ou seja, tratando Microformats válidos no código doHTML é possível enriquecer a maneira com a qual se lida com a informação e a maneira pela qual as máquinas armazenam, indexam, organizam e relacionam a metainformação. A função dessas especificações é fornecer o máximo de metainformação sobre o conteúdo que você insere, ou seja: descrevem os próprios dados. Um exemplo prático: você provavelmente usa o celular para armazenar os telefones dos seus amigos, certo? Ou usa o catálogo de endereços do Outlook/ Thunderbird etc. Pronto, aí o microformat se encaixa perfeitamente. Se você imaginar que o programa desenvolvido para gerenciar os contatos do aparelho celular grava os dados de alguma forma estruturada, poderá visualizar um microformat. A forma que o contato é estruturado no celular é exatamente a mesma que o programa de contatos do computador usa, e também a do PDA. Pronto, você pode ter o mesmo contato lido por três aplicações diferentes, sem problema. Imagine que o site de sua empresa possui uma seção que lista toda a equipe, e que essa lista foi estruturada com o mesmo microformat demonstrado acima. Isso certamente permitiria ao visitante pegar a lista e colocá-la facilmente no celular. Qual a utilidade dos Microformats? Imagine a quantidade de informação que existe hoje circulando na web. Pense nos e–mails, nos comentários em blogs, nos artigos, nas fotos, vídeos, versões de arquivos, textos, documentos, arquivos de áudio, feeds etc. Para organizar com precisão esse volume de informação é preciso padrões. Os mecanismos de busca possuem um algorítmo cuja função principal é verificar o que é mais relevante, de forma a criar relações entre as informações obtidas em cada documento da web, que por sua vez geram ratings e rankings baseados nessas inter–relações. Parte do critério de avaliação é relacionar a metainformação com a própria informação. Ao fazer uma pesquisa no Google, obtém-se uma lista com o que é mais relevante relacionado à palavra digitada. As tags HTML são relativamente muito limitadas para descrever todos os diferentes tipos de informação inseridos na web. Microformats tenta suprir tal lacuna, estendendo para outro nível as possibilidades de descrever a informação. Sintaxe dos Microdados Em microdados, um item se relaciona às propriedades com o uso dos atributos globais: Itemscope - Atributo booleano, indica que o elemento é um microdado e que seus elementos-filhos fazem parte do formato microdado. Itemtype - Define o vocabulário a ser usado. Seu valor é um URL apontando para o arquivo que contém o vocabulário para a marcação dos Microformats. Itemprop - Define o item (propriedade) do vocabulário a ser usado. Itemref -Define um ID do elemento no qual se encontram informações adicionais sobre o item. Itemid - Define a identificação global para o item. O Google mantém o site "data vocabulary", que atualmente é uma das melhores referências de vocabulários que o próprio Google (robô de busca) consegue identificar. Link para o site: http://www.datavocabulary.org/. Também é possível criar o próprio vocabulário, mas é preciso ter um objetivo muito bem definido. A recomendação é sempre usar os vocabulários já definidos pelo Google/Schema.org. Por exemplo, o vocabulário http://www.data-vocabulary.org/Person/. de pessoas: name (fn) - Nome da pessoa. nickname - Apelido da pessoa. photo - Link para uma foto da pessoa. title - Título da pessoa, por exemplo: Gerente. role - Função da pessoa, por exemplo: Analista de Sistemas. url - Link para a página pessoal da pessoa. affiliation (org) - Dados da organização na qual a pessoa está afiliada: http://www.data-vocabulary .org/Organization. friend - Nome da pessoa de seu relacionamento social como amigo. contact - Nome da pessoa de seu relacionamento social como contato. acquaintance - Nome da pessoa de seu relacionamento social como conhecido. address (adr) - Dados do endereço http://www.data-vocabulary.org/Address. da pessoa: Outro importante site que descreve vocabulários é o "Schema.org", que contém o vocabulário Person, mais rico em propriedades que o "Data Vocabulary": http://schema.org/Person Neste curso, como base para os exemplos serão usados os dados do "Data Vocabulary". Acompanhe as diferenças de significado entre a descrição normal de uma pessoa e a descrição da mesma pessoa usando as propriedades do vocabulário Person dos microdados. Marcação normal descrevendo a pessoa: Marcação_normal.html Essa marcação é completamente compreensível para nós, humanos, não é verdade? Mas para uma máquina (o Browser, o robô de busca do Google) ela não é clara o suficiente. Como a máquina saberá que a imagem tem relação com o nome dentro do < h1 >? Como saberá que o < h1 > é um nome? Aí entram os microdados, para dar tal significado à informação. Agora, o mesmo exemplo acima, mas escrito com os vocabulários Person, Organization eAddress dos microdados: Explicação A propriedade "name" é filha do vocabulário "Organization". Uma boa forma de visualizar a máquina interpretando esses dados é instalar a extensão "Schema Explorer" para Google Chrome: https://chrome.google.com/webstore/detail /docnladpefffgdocnidfngejcagdkedb Porém, ela só consegue "parsear" tais dados de uma página que esteja em servidor local ou web. Por exemplo: A extensão funciona apenas para páginas que estejam em algum servidor, seja local ou web. No exemplo acima, foi usado um servidor web. Portanto, se você não tiver um servidor web ou local configurado, teste usando esta url: http://www.aprendamaiscursos.com.br/html5 /microdados.html Rich Snippets Testing Tool É uma ferramenta do Google que mostra como ele interpreta os microdados e quais os tipos de dados que ele consegue interpretar. Exemplo http://www.google.com/webmasters/tools /richsnippets?url=http://www.aprendamaiscursos .com.br/html5/microdados.html Essa página nos resultados de busca ficaria assim: A ferramenta também consegue avaliar os dados extraídos: Agora, clique em Show: Com essa ferramenta também é possível visualizar alguns exemplos de marcações de microdados, como "página de um aplicativo": A foto do aplicativo, nome, os reviews (votos) e o seu valor. Outras ferramentas Existem outras ferramentas muito interessantes para se trabalhar com microdados. São estas: HTML5 Microdata Templates - Site para gerar microdados. Gera tanto no formato microformats quanto no formato microdata. Schema Creator - Totalmente voltado para microdados também é ótimo "gerador". PHP Microdata Parser - Código-fonte de um parser PHP de microdados. Microdata DOM Api Essa API provê um método e nove propriedades para manipular microdados via JavaScript. Pena que nenhum navegador a tenha implentado ainda. Informações sobre o Status atual de implementação:http://www.whatwg.org/specs/webapps/current-work /multipage/microdata.html#using-the-microdata-dom -api Outra forma de saber se o Browser suporta esta API é verificar se o método getItems( ) já foi implementado: Atributos de dados personalizados Às vezes é preciso acrescentar atributos com informações importantes nos elementos, para uma manipulação JavaScript mais dinâmica. Como fazer isso? Javascript_dinamico.html Ao validar o documento: Veja que o atributo "tipo" não é válido para esse elemento e muito menos faz parte dos atributos globais. Ele foi inventado para o exemplo, por isso ocorreu o erro de validação. Solução Definir tal atributo usando o prefixo "data-". As regras de documento do Browser o entenderão como dado adicional e não o invalidará. Valide novamente o exemplo: Veja que o documento foi validado corretamente. Você apenderá, no próximo tópico, a manipular esses dados. Dataset API Essa API auxilia a acessar os dados personalizados dos elementos. Seu suporte atual: http://caniuse.com/#search=dataset dataset.html O "segredo" é acessar o objeto "dataset": Também se imprime no console (como pode ser visto no exemplo em execução acima) o objeto dataset por completo: Representando fórmulas matemáticas com MathML MathML é uma linguagem de marcação baseada em XML para a representação de fórmulas matemáticas. Trata-se de uma recomendação W3C para os navegadores e está em pleno desenvolvimento. Atualmente, são poucos os navegadores que a suportam: http://caniuse.com/#search=MathML mathml.html O assunto sobre esse elemento não será aprofundado, até porque sua documentação ainda é vaga e descrever fórmulas matemáticas trabalhando com tags seria bem trabalhoso. Existem alguns Softwares para a geração visual das fórmulas e com opções de exportação para diversos formatos. Um deles é o "Formulator": http://www.mmlsoft.com/index.php?option= com_content&task=view&id=11&Itemid=12 Para baixá-lo: Exemplo de uso exportando para o formato SVG: Em execução no Browser: Outra opção interessante é o MathlML Editorem que é possível desenhar as fórmulas e gerar a marcação MathlML delas: http://code.google.com/p/mathmleditor/ Para baixá-lo, basta http://code.google.com/p/mathmleditor /downloads/list acessar: Feito o download e só abrir a página "simplePage.html" e desenhar a fórmula: Para a obter a marcação da fórmula: Código gerado: SVG para gráficos vetoriais Criado pela W3C, o SVG é a abreviatura de Scalable Vector Graphics que pode ser traduzido do inglês como "gráficos vetoriais escaláveis". Trata-se de linguagem XML para descrever de forma vetorial desenhos e gráficos bidimensionais, quer de forma estática, quer dinâmica ou animada. Umas das principais características dos gráficos vetoriais é que não perdem a qualidade ao serem ampliados. A grande diferença entre o SVG e os outros formatos vetoriais é o fato de ser um formato aberto, não sendo propriedade de nenhuma empresa. SVG é suportado por todos os navegadores Web modernos de forma nativa ou através de bibliotecas JavaScript. O suporte nativo no Microsoft Internet Explorer só é possível a partir da versão 9. Não faz parte do escopo deste curso ensinar SVG. No entanto, veja este exemplo de sua marcação: Svg.html Editor SVG online: http://svg-edit.googlecode.com/svn/branches /2.5.1/editor/svg-editor.html Canvas API A Canvas API permite desenhar gráficos na tela do navegador, via Javascript. Para utilizá-la é preciso apenas do elemento < canvas >e dos respectivos métodos JavaScript da API. A Canvas API é muito extensa e daria um curso inteiro só sobre ela. Será explicado apenas o essencial de Canvas. Suporte atual: http://caniuse.com/#search=canvas Coordenadas do contexto 2D de Canvas: Para desenhar é preciso acessar o elemento Canvas, via DOM, e definir o contexto 2D de desenho (também é possível definir contexto 3D de desenho com WebGL, mas ainda é experimental). Canvas.html É necessário definir o contexto via getContext( ) para que seja possível acessar os métodos e atributos da API. Os parâmetros passados para fillRect( ) são: coordenadas x e y, largura e altura: Outro exemplo: Como já explicado no código, o método strokeRect( ) cria um retângulo usando apenas a borda. Métodos da Canvas API Os mais comuns métodos de desenho: beginPath( ) - Reseta o Path atual. closePath( ) - Marca o atual Path como fechado. moveTo(x,y) Posiciona o ponto nas coordeandasx,y para a próxima operação de desenho. lineTo(x,y) - Cria um "caminho" de linha a partir do ponto de registro atual até (x,y). rect(x,y, largura, altura) - Destina-se a desenhar um retângulo. arc(x, y, raio, anguloInicial, anguloFinal, sentido)Desenha um arco com centro nas coordenadas x,y com um raio definido e ângulo inicial e final definidos em radianos (negativos ou positivos) e o sentido que pode ser horário(false) ou anti-horário (true) bezierCurveTo( ) - Desenha uma curva cúbica. Será explicado em detalhes adiante. fill( ) - Preenche o caminho com uma cor sólida. stroke( ) - Aplica os estilos definidos pelos atributos de criação. Por exemplo, os definidos em moveTo( ), lineTo( ) e etc. fillText( ) - Define o preenchimento do texto. strokeText(texto,...) - Define o contorno do texto. clearRect(x, y, largura, altura) - Limpa uma parte retangular da tela. Para melhor noção das coordenadas do desenho: É possível visualizar estas réguas através do Firebug: canvas.height retorna a altura da área de desenho e canvas.width a largura. Desta forma, o desenho fica proporcional ao tamanho da área de desenho. Por exemplo: Acrescente a seguinte regraCSS: Os estilos: Podem ser declarados antes ou depois do posicionamento e desenho da linha: Mas é importante ressaltar que o estilo deve ser aplicado logo após seu desenho: Desenhando arcos Os ângulos do exemplo são medidos em radianos e, para isso, é usada a biblioteca de cálculos matemáticos Math do JavaScript. Math.PI = Um ângulo raso (180 graus): Ou Consegue-se esse mesmo resultado definindo o sentido para TRUE (anti-horário): Desenhando curvas quadráticas Curvas quadráticas é excelente ferramenta para criar formas personalizadas. Sintaxe Diagrama dos pontos: Se você já trabalhou com ferramenta de desenho vetorial, como o CorelDraw, terá mais facilidade para entender esses pontos. Desenhando curvas de Bézier É das curvaturas mais avançadas disponíveis na Canvas API. Se uma curva quadrática não satisfizer a sua necessidade, provavelmente a curva de bézier (ou curva cúbica) conseguirá. Informações teóricas sobre esta http://pt.wikipedia.org/wiki/Curva_de_Bézier Sintaxe Diagrama curva: Canvas e JavaScript Por exemplo, um espiral: Altere o número de iterações do for para 60 e veja: O desenho começa no centro do canvas. Isso foi definido anteriormente, no moveTo(). Trabalhando com textos em Canvas Usa-se especialmente a função fillText( ). Sintaxe A propriedade textAlign aceita os valores: left(esquerda), center (centro) e right (direita) e o alinhamento se dá na horizontal. Já a propriedade textBaseline alinha verticalmente e os valores possíveis são: top, hanging, middle, alphabetic, ideographic e bottom. beginPath e closePath beginPath( ) inicia um caminho e closePath( ) termina o caminho. Conectar dois pontos dentro de um caminho é referido como um subpath. Beginpath_closepath.html Como não foi iniciado um beginPath na reta, ela está sendo ligada no primeiro subpath(três curvas conectadas entre si). Veja: A solução: Iniciar um novo subpath para a reta Cores gradientes Canvas também trabalha com texturas e gradientes. Um exemplo de uso para a definição de uma gradiente linear: Core_gradiente.html addColorStop( ) acrescenta cores ao gradiente, que se deslocam entre as extremidades do mesmo. 0 é extremidade inicial e 1.0 o fim da extremidade do gradiente. Agora, exemplo de um gradiente "radial": Desenvolvendo a logomarca da AprendaMais em canvas Desenvolvemos a logomarca da AprendaMais em canvas. Foi um árduo trabalho, mas valeu a pena pelo resultado, que ficou bem próximo da logo em vetor criada no CorelDraw. Logomarca.html Canvas editor O CanvasDraw é um interessante editor de Canvas. Ele permite desenhar visualmente e obter o resultado em JavaScript já com as coordenadas. O projeto ainda é básico, mas já dá para perceber o quão seria útil um Software para edição de Canvas, o que aparentemente ainda não existe. O site para o editor é: http://www.canvasdraw.comuf.com/. Para exportar para HTML: Controle de histórico com a History API O HTML5 traz diversas melhorias para o objeto window.history, que agora é chamado de History API. Aplicações complexas desenvolvidas inteiramente emAjax às vezes têm necessidade de gerenciar melhor o histórico de navegação para que o usuário, ao voltar ou avançar no navegador, não saia da página. O Gmail é o principal exemplo de aplicação Ajax. Ao clicar em "Rascunhos" ele acrescenta na URL a referência "#drafts"; e ao clicar em voltar, sem recarregar a página, ele volta para o último recurso visitado. A history API possui dois métodos: pushState(data,title[,url]) - Acrescenta uma entrada na lista de histórico. replaceState(data,title[,url]) - Modifica a entrada atual na lista de histórico. A nova URL passada em pushState ( ) ou replaceState ( ) deve ter a mesma origem (domínio) da página. Caso contrário, é gerado um erro de segurança. Compatibilidade atual: http://www.caniuse.com/#search=history. Faça o teste melhorada: se o navegador suporta a History API History_api.html Navegacao.js Navegue nas opções do menu, avance e volte e veja o controle que o JavaScript faz. O Script usado é bem intuitivo e está bem comentado, mas atenção a esta consideração: - A "chave" da lógica, no exemplo, está no métodonavegar( ) e no evento onpopstate. O métodonavegar( ) é quem pega o hash da URL atual, oculta os demais parágrafos e exibe apenas aquele referente ao hash. O evento popstate é executado sempre que o usuário volta ou avança no navegador, executando o método navegar( ), pois uma vez que volte, o hash daurl muda. Navigation Timing API API que visa fornecer informações sobre o desempenho da página, do carregamento, o tempo de carregamento, memória consumida e etc. Ela ainda está em fase de desenvolvimento. Compatibilidade atual: http://caniuse.com/#search=navigation. Timing_api.html Timing_api.js Web Storage API Se for preciso armazenar as preferências do usuário em sua máquina, de tal forma que as informações sejam recuperadas posteriormente, esta é a solução. Por muito tempo todos já foram reféns dos ultrapassados cookies. Conheça alguns dos problemas relacionados ao uso de Cookies: Muito para pouca coisa: O código para armazenar Cookies envolve cálculos com datas e controle do nome de domínio e etc. Espaço limitado: Geralmente os browsers só permitem 4KB por cookie. Inseguros: Os Cookies são facilmente interceptados. Para resolver tais problemas, o HTML implementou duas novas interfaces de API: SessionStorage - Para armazenar dados enquanto a sessão do navegador estiver ativa. Ou seja, ao fechá-la os dados são apagados (parecido com o conceito de Session do PHP). LocalStorage - Para armazenar os dados localmente "para sempre", podendo ser capturados em futura navegação, pois ficam armazenados no cache, no navegador. É claro, os dados só serão deletados quando o usuário, ou o navegador, deletá-los. Ambas interfaces possuem a mesma API, com a única diferença do tempo de persistência dos dados (sessão ou local). Os mesmos casos de uso dos Cookies. Por exemplo, em um sistema que possui uma interface configurável como essa do sistema de ensino do AprendaMais, você poderá armazenar alguns detalhes do Layout, skin e etc. Isso serve para que o usuário, ao voltar a acessar o sistema, possa abri-lo do jeito que configurou. Compatibilidade Atualmente, a maioria dos navegadores novos possui suporte a estas APIs. Maiores informações: http://caniuse.com/#search=webstorage. Armazenamento Os dados armazenados devem ser strings. Se houver a necessidade de armazenar objetos de dados complexos, a melhor opção é para serializar o objeto em JSONJSON.stringify (será dado um exemplo sobre). Para testar se o Browser suporta estas APIS: Ou usar o Modernizr. Métodos de ambas interfaces: setitem("nome","valor") - Cria um par nome/valor para ser armazenado. getitem("nome") - Obtém o valor armazenado. removeItem("nome") Remove um item armazenado. clear() - Apaga todo o conteúdo da área de armazenamento. key(n) - Obtém o dado armazenado na posição N especificada. length - Propriedade que retorna o número de itens armazenados. localStorage Como explicado anteriormente, armazena o dado "para sempre" até que o usuário limpe os Cookies/Cache do Browser. Local_storage.html Abra o documento no Google Chrome. Aproveite e abra também as "ferramentas do desenvolvedor" do Google Chrome: Está aí o valor armazenado. Agora, faça um teste, e altere o script para: Feche o navegador e abra o exemplo novamente: O fato de fechar o navegador não excluiu o dado armazenado. Para o localStorage funcionar no Firefox, sem que o dado seja apagado ao fechar o navegador, é necessário que nas configurações de privacidade não esteja remover "Cookies" ao fechar o navegador: marcado para Outra observação importante: Diferentemente das sessionStorage, um dado armazenado em localStorage pode ser acessado por qualquer instância (aba) do navegador e por qualquer página de mesmo domínio (obs: se o dado foi criado pelo domínio site.com.br ele não poderá ser acessado pelo domínio site2.com.br). Como exemplo, crie a página chamada pagina.htm com o seguinte script: A outra página do domínio conseguiu acessar a informação. Isso não aconteceria se tivesse sido usada a sessionStorage, pois nela os dados só ficam disponíveis para a página que o criou. Ou seja, para cada página é criado um espaço diferente de armazenamento e várias páginas podem criar o mesmo nome de dado sem que haja conflito. sessionStorage Armazena o dado apenas para a página (instância atual) e até que o navegador seja fechado. Quando isso ocorrer, o dado será deletado. Session_storage.html Agora, na pagina.htm altere o script para: Não foi possível acessar o dado, pois ele só ficou disponível para a páginasession_storage.html. Além disso, ao fechar o navegador, ele é removido. Essas são as sessionStorage. diferenças entre localStorage e Dica: Em "ferramentas do desenvolvedor" do Google Chrome é possível visualizar os dados salvos em sessão ou localmente: Exemplo completo de Web Storage Primeiro, crie o HTML: web_storage.html Agora, crie o script webstorage.js: Clique em "Tornar o parágrafo editável" e altere o conteúdo do parágrafo; em seguida clique em "Aplicar alterações": Feche o navegador e abra-o novamente: As alterações forma mantidas graças ao conteúdo salvo no localStorage. Observações Os métodos removeAttribute( ) e setAttribute()são da DOM Level 1 e 2, recomendação da W3C aos navegadores, e totalmente suportados pelos navegadores atuais. Referências e informações sobre a compatibilidade dos métodos da DOM Level 1 e 2 da W3C acesse: http://www.quirksmode.org/dom/w3c_core.html Exemplo de Layout usando a semântica do HTML5 Assim como prometido no início do curso, refaça o "blog" usando alguns dos novos elementos semânticos do HTML5. Primeiramente o HTML: Blog_Aprenda.html Agora, a folha de estilos style_blog.css: Em execução: Esclarecendo cada parte: Para entender cada parte é bom que você retorne ao início do curso e reveja o significado de cada um dos elementos. Em resumo: Dentro das seções foram definidos os artigos para reforçar que aqueles artigos pertenciam àquela seção. Os links para os arquivos do blog foram definidos dentro de um aside, reforçando que ele não faz parte do conteúdo principal do site.