HTML5
HTML5
N o vate c
HTML5
A LINGUAGEM DE MARCACÃO
QUE REVOLUCIONOU A WEB
Novatec
HTML5
A LINGUAGEM DE MARCACÃO
QUE REVOLUCIONOU A WEB
Novatec
- ••yright £" 2011 da Novatec Editora Ltda.
ISBN: 978-85-7522-261-4
Histórico de impressões:
Bibliografia.
ISBN 978-85-7522-261-4
11-06541 CDD-005.133
-g ra d e c im e n to s ........................................... . 12
Abre o autor............................................................................................................... 13
'T r o d u ç ã o ................................................................................................................... 15
Apífulo 2 ■ Novidades na 54
2.1 Introdução..................................................................................................................54
2.2 Modelo de conteúdo................................. 54
HTML 5
5.2.13 formtarget
5.2.14 icon...........
5.2.15 keytype ....
5.2.16 kind ..........
5.2.17 list.............
5.2.18 lo o p ..........
5.2.19 low...................................................................................................................IS-
5.2.20 manifest........................................................................................................19“
5.2.21 max..................................................................................................................18“
5.2.22 m in ...............................................................................................................
5.2.23 novalidate....................................................................................................IS 5
5.2.24 open........................................................................ '
5.2.25 optimum...................................................... ...............................................IS S
5.2.26 pattern..........................................................................................................18 S
5.2.27 ping................................................................................................................ 189
5.2.28 placeholder...................................................................................................189
5.2.29 poster........................................................................................................ 190
5.2.30 preload.......................................................................................................... 190
5.231 pubdate.......................................................................................................... 190
5.2.32 radiogroup.................................................................................................... 190
5.2.33 required..........................................................................................................191
5.2.34 reversed...................... 191
5.2.35 sandbox......................................................................................................... 192
5.2.36 scoped............................................................................................................193
5.2.37 seamless......................................................................................................... 193
5.2.38 sizes....................................................... 194
5.2.39 srcdoc.............................................................................................................194
5.2.40 srclang................................................ 195
5.2.41 step..................................................................................................................195
5.2.42 wrap................................................................................. 195
■I 7_ wrmtarget................................. 203
■ ___ i s t ...................................................... 204
■1.1: max............................................ 204
: 11- a im ............................................ 204
■1.15 novalidate................................ 205
rtbnto type para elemento input 205
- :1 search........................................... 205
.206
.207
em ail................ .208
date tim e.......... .209
:.3a date.................. .209
7 tim e.................. . 210
-.1.5 m onth.............. . 210
: .3.9 week................. ..211
:.5.10 datetime-local ..2 1 1
'.5.11 number........... . 212
:.5.12 range............... . 212
'.3.13 color................ . 213
1: pitulo 8 * Armazenamento de dados ... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..2 3 3
5.1 Web Storage..............................................................................................................233
8.1.1 sessionStorage................................................................................................. 235
8.1.2 localStorage..................................................................................................... 237
8.1.3 Armazenagem com JS O N ............................................................................241
8.1.4 Evento storage................................................................................................244
8.1.5 Banco de dados............................................................................................. 246
3.2 Verificando suporte...............................................................................................251
Capítulo 10 ■ Offline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 7 5
10.1 Introdução..............................................................................................................275
10.2 Manifesto...............................................................................................................276
10.2.1 Atualização do manifesto..........................................................................278
10.3 API Application cache........................................................................................ 279
10.3.1 Propriedades e métodos............................................................................. 280
10.3.2 Eventos.......................................................................................................... 281
10.3.3 Atualizando o cache...................................................................................283
10.4 Verificando suporte............................................................................................. 284
10.5 Exemplo prático ............ 284
Capítulo 1 1 » Acessibilidade................. ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..... .... ..2 8 7
11.1 WAI-ARIA.............................................................................................................. 287
11.1.1 Role..................................................................................................................288
11.1.2 Atributos....................................................................................................... 294
11.2 Microdados...........................................................................................................297
11.2.1 Sintaxe............................................................................................................298
11.3 Microdados DOM A P I........................................................................................30Í
11.3.1 Suporte nos navegadores............................................................................ 302
Referências .........„.......„....„...„..„..„„.....„„„„„.„„.„„„..„...„...„.„„„„.„„.„.„.„„....„„„„.......„„„„„„....„.„.......314
Agradeço a Deus, por ter me dado forças, disposição e motivação para escrever este
livro.
Isenção de responsabilidade
12
A
:*ore o autor
proposta inicial do site era divulgar a Cascading Style Sheet (CSS), ou folha de estilo
em cascata, com base no compartilhamento de suas experiências com tal técnica.
Com a pronta aceitação e o sucesso crescente do site, o objetivo inicial tornou-se
mais ambicioso e passou a ser a divulgação das Web Standards.
13
HTML 5
No início de 2006, com a popularização e a adesão maciça aos blogs, criou o Blog
do Maujor, hospedado em http://www.niaujor.com/blog/, com o propósito semelhante ao
do site, mas com uma dinâmica mais ativa e a efetiva participação de seus leitores.
Tanto o site quanto o blog constituem referência nacional para Web Standards e,
sem dúvida, foram e continuam sendo um dos grandes responsáveis pela divulgação
e popularização das Web Standards, assim como, em particular, das CSS no Brasil.
M aujor é autor dos seguintes livros: Construindo sites com CSS e (X)HTML; Criando
sites com HTML; JQuery - A biblioteca do programador JavaScript; AJAX com jQuery;
JavaScript - Guia do Programador; CSS3 - Desenvolva aplicações web profissionais com uso dos
poderosos recursos de estilização das CSS3; jQuery Mobile; e. jQuery UI, todos publicados
pela Novatec Editora.
•trodução
Os iniciantes irão se beneficiar deste livro por principiarem seus estudos em uma
innte que aborda as mais modernas técnicas de escrita do código, ensejando uma
mudança no rumo de seu estudo que irá reduzir a curva de aprendizado e acelerar
15
1c HTML 5
tal processo. Não se intimide com conceitos ou terminologias que lhe sejam com
pletamente desconhecidos nos primeiros capítulos. Com a sequência da leitura, as
dúvidas tenderão a desaparecer naturalmente.
Convenções tipográficas
Com a finalidade de destacar diferentes tipos de informação, adotaram-se algumas
convenções tipográficas mostradas a seguir.
Dica
C< No mês de outubro de 1994, Tim Berners-Lee em parceria com a CERN, onde a web
j -, foi por ele inventada, criaram o World W ide Web Consorrium (W 3C ), com sede no
Laboratório da Ciência da Computação do Massachusetts Institute of Technology
(M1T).
Alerta
Os atributos da AP1 não são definitivos. Uns poderão ser abandonados; outros,
acrescidos, pois as especificações para a HTM L5 estão em fase de rascunho. Os
■; atributos aqui mostrados são atualmente previstos na especificação, mas não significa
que podemos usá-los indiscriminadamente em fase de produção.
Terminologia
Chamada
Uma chamada para uma seção anterior na qual o assunto em questão foi explicado
com detalhes.
17
scripts
Para explicar passo a passo cada linha de um script, este é apresentado com
aas linhas numeradas e, a seguir, os comentários são referenciados ao número da
inha comentada:
Código comentado:
Linha(s) Descrição
[c3-audio-ex1.html]
Destaques em geral
Palavras ou termos cujo significado deva ser destacado são grafados em itálico.
Por exemplo:
A presença do atributo Controls faz com que o navegador renderize uma barra de
controle nativa contendo botões do tipo play e pause bem como controle de volume.
- :;dução 19
"laveis
Por exemplo:
addírack( tipo, legenda, idioma)
Site do livro
j site de suporte a este livro está localizado em http ://livro h tm i5 .c o m .b r.
1 .1 Introdução
H TM L é a sigla em inglês para HyperText Markup Language, que, em português, sig
nifica linguagem para marcação de hipertexto.
■ HTM L
■ H TM L +
■ H TM L 2.0
20
: : j Io 1 ■ Apresentação da HTML5
■ HTM L 3.0
i H TM L 3.2
. H TM L 4.0
A web foi inventada em 1992 por Sir Tim Berners-Lee. Atualmente Tim é diretor
: ? World Wide Web Consortium (W 3C), pesquisador sênior do Laboratório da
Lència da Computação e Inteligência Artificial (CSAIL) do Instituto de Tecnologia
:.e Massachusetts (MIT) e professor de Ciência da Computação na Universidade
se Southampton, na Inglaterra.
denominado HTTP. O formato de texto que criou para o H TTP foi chamado de
H TM L.Tim tomou como base para criação da HTM L a especificação SGML, que é
um método internacionalmente reconhecido e aceito, contendo normas gerais para
a criação de linguagens de marcação. A marcação para hiperlinks conduzindo a do
cumentos que não estivessem em um mesmo computador obviamente não constava
das normas para SGM L e foi inventada por Tim, demonstrada pela primeira vez em
1990, em uma estação de trabalho NeXT, nos laboratórios da CERN. Estava criado
o embrião da World W ide Web, bem como a primeira versão da linguagem HTM L
para a marcação de hipertextos. A partir daí, a evolução cronológica da H TM L deu-
se conforme relatado sumariamente a seguir.
E continua estabelecendo:
Convém salientar com muita ênfase que, desde sua criação, os idealizadores
da H TM L tiveram a preocupação de retirar da linguagem de marcação qualquer
atribuição ou função de apresentação, ou seja, HTM L destina-se exclusivamente
a estruturar documentos. É nessa destinação que se fundamentam os princípios
básicos do desenvolvimento seguindo os Padrões Web.
* Apresentação da HTML5 2i
Em 1993, Lou Montulli criou o navegador de texto denominado Lynx versão 2.0a
e Dave Raggett começou a trabalhar no desenvolvimento do navegador Arena, que
se destinava a demonstrar, na prática, a implementação de todas as funcionalidades
inventadas e discutidas até então. Ainda nesse ano a Sun Microsystems lançou a
versão 1 do navegador Mosaic.
j\ No mês de outubro de 1994,Tim Berners-Lee em parceria com a CERN, onde a web foi por
y ' ,sj ele inventada, criaram o World Wide Web Consortium (W3C), com sede no Laboratório
AN da Ciência da Computação do Massachusetts Institute of Technology (MIT).
No mês de outubro de 1994, foi criado o World Wide Web Consortium (W3C),
um consórcio internacional formado por empresas, instituições, pesquisadores,
desenvolvedores e público em geral, com a finalidade de desenvolver a web a seu
potencial máximo, criando normas e especificações aplicáveis aos diversos segmen
tos e setores da web, desde tecnologias e softwares até fabricantes e fornecedores.
O W 3C tem sua sede principal distribuída em três lugares distintos: nos Labora
tórios de Ciência da Computação do MIT, em Massachusetts, nos Estados Unidos,
no Instituto Nacional de Pesquisas de Informática e Automação, na França, e na
Universidade de Keiko, no Japão, além de escritórios espalhados em várias cidades
do mundo. As mais proeminentes e brilhantes cabeças envolvidas com o desenvol
vimento para a web foram convidadas a formar o núcleo básico do W 3C. Nomes de
projeção internacional no envolvimento com a web foram convidados a participar,
destacando-se Henrick Frystyk Neilsen, Anselm Baird-Smith, Jay Sekora, Rohit
Khare, Dan Connolly, Jim Gettys, Tim Berners-Lee, Susan Hardy, Jim Miller, Dave
Raggett,Tom Greene, Arthur Secret, Karen MacArthur, Arnaud le Hors, Hâkon Lie,
Bert Bos e Chris Lilley, entre outros.
■ -in tação da HTML5 25
i . vo de 1995, Dave Raggett lançou sua proposta para a H TM L 3.0, que vem
; nmeira sugestão de uma marcação específica para estilização e apresentação,
: u io tempo que também propõe a criação do atributo class. Surgiu, ainda, a
. , vu para tabelas, para notas de rodapé e formulários. A marcação para tabelas
mande discussão na época, tendo sido efetivada somente na versão seguinte
-: t m l.
Em julho de 1997, foi lançada a versão rascunho para a Cougar, depois deno
minada HTML4.
b Compatibilidade
□ Utilidade
□ Interoperabilidade
a Acesso universal
1 .5.1 Compatibilidade
L icem K/li>
M>
<li>item 1.1
<li>item 1 .2</li>
</ul>
1: item 2
<ul>
<li>item 2.1
<li>item 2.2</li>
Muitos sites usam o elemento upara marcar textos sublinhados. Esse elemento foi
meado em desuso pela HTM L4; contudo, a HTM L5 deve prever suporte para ele.
Convém ainda ressaltar que renderizar corretamente marcação errada não im
plica documento válido.
Segundo esse princípio, a HTM L5 está sendo desenvolvida de modo que a mar
cação mostrada anteriormente renderiza normalmente em HTML5, mas os autores
devem evitá-la ao criar documentos novos. Elas serão suportadas em documentos
antigos quando migrados para HTML5.
30 HTML 5
As perguntas que devem ser feitas para se chegar à conclusão sobre o suporte
ou não a uma funcionalidade ou comportamento são:
■ Xovos métodos ou atributos devem ser capazes de ser testados via ECMAScript
entes de serem usados.
Revoluções, por vezes, mudam o mundo para melhor. Contudo, na maioria dos casos,
é melhor aperfeiçoar práticas existentes do que simplesmente descartá-las. Segundo
esse princípio, se uma técnica é usada pelos desenvolvedores, é preferível aperfeiçoá-
la e adotá-la em vez de obrigar os autores a estudar e aprender novas técnicas.
1.5.2 Utilidade
Utilidade visa a garantir que a marcação HTM L possa ser usada de modo efetivo
para todos os fins a que ela se destina.
Alterações nas especificações devem ser feitas para solucionar problemas atuais reais.
Abstrações e ilações teóricas sobre problemas existentes devem ser descartadas em
favor de uma solução pragmática e efetiva. Todos os problemas atuais devem ser
estudados e resolvidos, se possível.
I: pítulo 1 h Apresentação da HTML5 33
.5.2.2 Prioridades
1.5.2.3 Segurança
Faculdade de Tecnologia
S e n a c R io
B IB L IO T E C A
HTML 5
Por exemplo: o elemento a rtic le define um artigo individual sem detalhar a ma
neira como ele deve ser renderizado. Em determinado contexto, um artigo pode ser
único na página e disposto em múltiplas colunas ao passo que em outro contexto
possa coexistir com vários outros artigos multicolunares em uma mesma página.
1.5 3 Interoperabilidade
Esse princípio estabelece que os erros de marcação devem ser tratados de modo a
não frustrar o usuário apresentando-lhe uma mensagem de erro. Nos casos de erro
é preferível um mecanismo de degradação graciosa a uma mensagem de erro fatal.
1.5.4 Acesso u n iv e rs a l
1.5.4.3 Acessibilidade
1.6.1 In tr o d u ç ã o
A especificação para a HTM L5 iniciada no ano de 2004 e incorporada pelo W 3C
no ano de 2007 tem como objetivo geral estudar e resolver problemas relacionados
à implementação de um HTM L contemporâneo e ao mesmo tempo compatível com
conteúdos existentes. Para cumprir esse objetivo, considera os seguintes pontos:
a Definição de uma linguagem única denominada HTM L5 que pode ser escrita
tanto com a sintaxe HTM L quanto com a sintaxe XML.
1 .6 .1 .1 Retrocompaíibilidade
O mesmo acontece com outros elementos em desuso segundo a HTM L4, como
; elementos font, u, s etc.
■essa área a diferença é que a H TM L5 não será considerada concluída até que haja
:clo menos duas implementações completas das funcionalidades da especificação.
Hrá criada uma suíte de testes para verificar o funcionamento de todas as funcio
nalidades nas duas implementações. O objetivo aqui é assegurar que a especificação
pode ser implementada e usada pelos autores tão logo esteja finalizada.
1 .6 .2 S in ta x e
A especificação para a HTM L5 define uma sintaxe que é compatível tanto com a
HTML quanto com a XH TM L. Os documentos usando a sintaxe HTM L com o
:ipo de M IM E text/html são parseados segundo regras compatíveis com as atuais
implementações populares.
1.6 .2 .1 DOCIYPE
A declaração DOCTYPE (tipo de documento) deve ser feita na primeira linha da marcação
H TM L para garantir renderização no modo standard. Para maiores informações,
ver: http://niaujor.com/wBctuto/qatips/doctype.html. Nada deverá existir acima da declaração
de D O CTYPE nem mesmo uma linha em branco.
Em HTM L5 o atributo type para links a folhas de estilos e para Scripts é dispensável,
mas a declaração desse atributo pode ser usada, opcionalmente, em HTML5.
Em uma marcação HTML, se você resolver criar um novo elemento chamado xpto
(ainda que ele não seja válido) e escrever uma regra CSS como mostrada a seguir, o
conteúdo inserido no elemento será normalmente estilizado na cor vermelha com
fundo na cor preta, exceto nos IE8 e anteriores,
xpto { color: red; background-color: black; }
Se você pretende servir seu documento HTML5 para aqueles navegadores, precisa
inserir um mecanismo capaz de fazer com que eles reconheçam os novos elementos
40 HTML 5
1 .7 3 Biblioteca Ja v a S c r ip t M o d e r n iz r
Modermzr é uma pequena biblioteca JavaScript que está sendo constantemente
atualizada por seus autores, destinada a detectar suporte nativo pelos navegadores
para as funcionalidades das novas tecnologias para a web. As funcionalidades
contempladas pela biblioteca são aquelas que estão sendo implementadas pelas
especificações para a HTM L5 e para as CSS3.
: 3pítulo 1 ■ Apresentação da HTML5 41
A biblioteca foi desenvolvida por Faruk Ate§ com a colaboração de Paul Irish e
-mcontra-se disponível para download em www.modernizr.coin.
Notar que o acréscimo da classe, como mostrado, possibilita uma autêntica con
dicional na folha de estilos, pois as regras mostradas cumprem a mesma finalidade
da condicional mostrada no script a seguir.
42 HTML 5
<script>
var para = document.getElementsByTagNameCp");
i f (Modernizr.multiplebgs) {
f o r (va r i= 0; ic p a r a .l e n g t h ; i++) {
p a r a [ i ] . s t y l e . c o l o r = " re d " ;
}
} else {
f o r (va r i= 0; i< p a r a .le n g t h ; i++) {
p a r a [ i ] . s t y l e . c o l o r = " b lu e ";
}
}
</script>
UTempSates HTML5
A sintaxe H TM L5 é bastante flexível, pois a marcação pode ser escrita segundo as
regras da H TM L4 que admitem, por exemplo, que valores de atributo sejam ou não
marcados com aspas ou apóstrofes, que algumas tags, como p e li, não sejam fechadas
e uma série de outras regras que dão liberdade de escolha da marcação conforme
:.■: rxo 1 ■ Apresentação da HTML5 43
xxterência pessoal do autor. Escrever HTM L5 com base nessas regras significa
. zuzir um documento HTML5, ou em conformidade com a sintaxe HTML.
O W3C com o forte suporte dos seus Membros e com mais recursos (tanto
em pessoal quanto em hardware) tem o prazer de retomar os trabalhos para o
HTML. O W3C modificou os Estatutos do Grupo de Trabalho do HTML com
o propósito de permitir a efetiva participação dos fabricantes de navegadores,
projetistas de aplicações e desenvolvedores de conteúdos, pois depende do
trabalho conjunto dessas pessoas o sucesso do HTML do futuro.
• jV-E síía pãgiit.H rwnf-èm m a r o r^.Ao X H T M L strong d a s s ^ J e s t aq' s-rroS' / s t rouq '/p. •
http,7/focalhüít/html5/pq-xhtrnl-xml,pbp
H Página em B ranco :» P ág in a •
mmmmm J- 'r LA ^ T:
D e se ja salvar ou abrir este a ig u iv o ?
Nom e: pg-xhfcml-xml.php
; ^ ; Tipo: P H P Script, 6 7 3 b y te s
Origem: localhoSt
Abrir Sa lv a r j j| C ancela r J
1 .8.1 T e m p la te m ín im o
E evidente que esse template mínimo não deve ser usado em um site real, mas
você poderá usá-lo para testes e experiências com a linguagem HTML5.
É muito provável que você esteja familiarizado com uma sintaxe H TM L para
declaração de caracteres no documento com o uso do elemento m eta, conforme
mostrado a seguir.
<meta http-equiv="Conten t-T ype" co ntent= "te xt/h tm l; ch arset= ut f-8">
48 HTML 5
Tal como na HTM L, em HTML5 o uso de aspas ou apóstrofes nos valores dos
atributos é facultativo; assim, as duas sintaxes mostradas a seguir são válidas.
<meta charset=utf-8>
<meta ch arset= "utf-8">
Notar que todos os valores de atributos na marcação mostrada estão entre aspas.
<head>
<meta ch arset=utf-8>
< ti tle > T e m p la te < / title >
<meta name=descpiption content="Template HTML5 do l i v r o do Maujor,">
<meta name=keywords c o n te n t= " lis ta de palavras-chave">
oneta name=author content="Mauricio Samy Silva ">
<meta name=generator content="HTML-Kit 292">
<meta name=robots content=all>
< lin k re l= sty le she et href=mais. css>
<style>
/* e s t il o s incorporados * /
</style>
< script s r c = " p a t h / r a o d e r n iz r -1 .5 .m in .j s ''x / s c r ip t>
< script s rc = s c rip ts . j s x / s c r i p t >
</head>
<body>
< ! - - Aqui os conteúdos da página -->
</body>
</html>
Mas por que conservamos as aspas em alguns valores do atributo content? Notar
que para os casos em que isso ocorreu o valor do atributo é uma frase ou conjunto
de palavras separadas por espaços e, se tirarmos as aspas, o valor do atributo deixa
de ser único, o que não é válido. Com aspas, o parser H TM L interpreta o valor do
atributo como uma só string. Notar que, para o elemento meta que fornece informa
ções para os robôs que visitam a página, o valor do atributo co n te n t está sem aspas,
pois tal valor é uma só palavra.
Nessa versão o template é compatível com a sintaxe XML, pois valores de atributo
estão entre aspas e elementos vazios estão fechados. Convém ressaltar que, embora
escrito com a sintaxe XM L, o template não está apto a se valer das funcionalidades
da X M L e deverá ser servido com o tipo de MIME text/html.
O outro namespace permitido é para xlink que pode ser declarado tanto no
elemento html quanto no elemento svg que contenha essa funcionalidade, como
mostrado a seguir:
<html xmlns="http://www.w3.org/1999/xhtml"
x m ln s :x li n k = " http://www.w 3.org /19 99 /xlin k " la ng ="p t-br" xm l:lang = "p t-b r">
ou
<svg x m ln s :x lin k = " h ttp ://w w w .w 3 .o rg / 19 9 9 /x lin k " > .. ,</ sv g >
com/w3ctuto/xhtmlfaq. htm l.
Novidades na HTML5
Neste capítulo teremos uma visão geral das novidades introduzidas pelas especi
ficações da H TM L5 mostrando o novo modelo de conteúdo da linguagem. Abor
daremos os tópicos que dizem respeito às diferenças entre as linguagens H T M L4 e
HTMLó.Tais diferenças são relativas principalmente à criação de novos elementos
e atributos, à redefinição de alguns elementos e atributos existentes, à atualização
de elementos e atributos considerados obsoletos, à criação de novas APIs e à ex
tensão das interfaces HTMLDocument e H T M LE le m e n t. Relacionaremos os atributos globais
definindo e exemplificando cada um deles. Estudaremos com detalhes os novos
elementos da linguagem, definindo-os, esclarecendo as regras de emprego e mos
trando exemplos de uso.
2,1 introdução
A maioria dos elementos e atributos da H TM L4 continua válida na H TM L5 e, em
consequência, nada do que você aprendeu até agora sobre marcação H T M L terá
sido inútil. Os seus velhos e conhecidos elementos hl, p, div, s p an, b l o c k q u o t e bem
como os atributos c l a s s , t i t l e , a c c e s s k e y , name, v a l u e e tantos outros estão previstos
na H TM L5 com as mesmas finalidades e valor semântico que tinham na H TM L4 .
54
Capítulo 2 ■ Novidades na HTML5 55
■ Metadados
■ Fluxo
■ Seção
■ Cabeçalhos
■ Frase
■ Incorporado
■ Interativo
■ Formulário
■ Listas
■ Rótulos
■ Envio
a Limpeza
2 3 Atributos globais
Atributos globais são aqueles que podem ser usados com todos os elementos da
HTML5, ou seja, não somente com os elementos novos, mas também com os ele
mentos da H TM L4 que agora fazem parte da HTML5.
2 3 .1 accesskey
(Atributo tecla de acesso) Destina-se a permitir que o usuário dê o foco ao elemento
com uso do teclado, ou seja, atribui uma tecla de acesso ao elemento. O valor desse
atributo é um caractere ou uma lista de caracteres do teclado, separados por espaço.
Observe, nos exemplos a seguir, a sintaxe para uso desse atributo em duas situações
diferentes de um documento.
<ul>
< l i x a h r e f= " / s i t e - a .h t m l " a c c e s s k e y = " a " > S i te A < / a x / l i >
< l i x a h r e f = 7 s i t e - b . h t m l " a c c e s s k e y = " b " > S it e B < / a x / l i >
d ix a h r e f = " / s i t e - c . htm l" a c c e s s k e y = " c " > S it e C < / a x / l i >
</ul>
Nessa primeira situação, o agente de usuário deve prover meios de dar o foco
aos links para os sites A, B e C quando o usuário pressiona as teclas Ctrl+Shift+a,
Ctrl+Shift+b, Ctrl+Shift+c respectivamente.
Nessa situação, o foco deve ser dado ao campo de busca quando o usuário
pressiona as teclas Ctrl+Shift+b. Se o usuário estiver usando um dispositivo móvel
ou outro similar que possua somente teclado numérico, o foco deve ser dado ao se
pressionar a tecla 0.
Capítulo 2■ Novidades na HTML5 57
O atributo accesskey teve seu uso redefinido na HTML5, pois, em versões ante
riores da HTM L, ele não era um atributo global. Estava restrito aos elementos a,
area, button, input, labei, legend e textarea.
2 3 .2 dass
233.contenteditab5e
(Atributo conteúdo editável) Atributo novo, criado pela HTML5. Esse atributo ad
mite os valores true e false e se destina a permitir que o usuário edite os conteúdos
do elemento no navegador. Trata-se de um atributo inventado pela Microsoft e
suportado pelos seus navegadores há tempos e que foi introduzido na especificação
para a HTML5. E um atributo herdado, pois, quando definido com o valor true para
um elemento Container, faz com que seus elementos-descendentes sejam editáveis.
Nesse exemplo todos os conteúdos do div são editáveis. Para o parágrafo dois
não é possível editar o seu conteúdo textual, contudo é possível editá-lo como um
todo, apagando-o por exemplo.
23=4 contextmenu
(Atributo menu de contexto) Atributo novo, criado pela HTM L5 não é suportado
por nenhum navegador atual. Esse atributo cria um menu de contexto personali
zado para o elemento em que foi inserido. Menu de contexto é aquele que se abre
quando o usuário clica com o botão direito do mouse sobre o elemento para o qual
ele foi projetado. Se você clicar com o botão direito do mouse em qualquer lugar da
barra de ferramentas de seu sistema operacional, ou sobre uma figura em um site
da web, abre-se um menu de contexto.
O menu de contexto deve ser construído com uso do novo elemento menu da
HTML5.
2.3.5 d ir
(Atributo direção do texto) Destina-se a especificar a direção de escrita do texto.
Esse atributo admite dois valores, a saber: ltr, sigla em inglês para left to right, que
traduzimos por “da esquerda para a direita”, que vem a ser a direção da escrita
ocidental (por exemplo: o português), e rtl, sigla em inglês para right to left, que
traduzimos por “da direita para a esquerda”, que vem a ser a direção da escrita
oriental (por exemplo: o japonês). Observe, nos exemplos a seguir, a sintaxe para
uso desse atributo.
<p dir="ltr">Texto com a trib u to de direção ocidental</p>
<p dir="rtl" >Texto com a trib u to de direção oriental</p>
Existe a propriedade CSS direction que cumpre a mesma finalidade desse atri
buto e admite os mesmos valores além do valor inherit, como mostrado a seguir
com estilização in-line.
<p style="direction:ltr;">Texto com e s t il iz a ç ã o de direção ocidental</p>
<p style="direction:rtl; " >Texto com a tr i b u to de direção orie ntal</p>
2.3.6 draggable
(Atributo de arraste) Atributo novo, criado pela HTML5. Esse atributo torna arras-
tável o elemento em que foi inserido. Admite os valores true, false e auto. O valores
true e f a l s e fazem o elemento tornar-se arrastável ou não respectivamente e o valor
define o arraste-padrão para essa funcionalidade, conforme implementada no
a u to
Nesse exemplo o div#drag é arrastável na página, mas isso não significa que sim
plesmente definindo o atributo você possa arrastar livremente o elemento. E preciso
estabelecer, com uso de JavaScript, as condições de arraste. A especificação para a
HTML5 criou vários atributos e métodos que visam a criar as facilidades de arraste.
60 HTML 5
23.7 hidden
(Atributo de relevância) Atributo novo, criado pela H TM L5; não é suportado por
nenhum navegador atual. Esse atributo torna irrelevante o elemento em que foi
inserido. É um atributo booleano para o qual não há necessidade de se definir
valores. Quando presente torna o elemento irrelevante. Os agentes de usuário não
devem renderizar elementos marcados com esse atributo.
Esse atributo não deve ser usado meramente para esconder elementos. Sua fina
lidade é desconsiderar conteúdos irrelevantes para determinado contexto ou não
relacionados ao conteúdo atual.
O valor do atributo id é um nome que você pode escolher à vontade. Nas versões
anteriores da HTM L, existiam restrições quanto ao primeiro caractere do nome
escolhido, como: não é válido começar o nome de um atributo com um número ou
hífen. Por outro lado, o caractere underscore ( _ ) é válido. A HTML5, porém, esta
belece unicamente que valores de id devem ter, pelo menos, um caractere e quando
mais de um não pode haver espaço em branco entre eles.
23.9 ite m *
Para maiores detalhes sobre esses novos atributos da HTML5, consulte o capítulo 11
23.10 lang
(Atributo de idioma) Destina-se a definir o idioma do conteúdo de um elemento.
Se esse atributo não estiver presente no elemento, o idioma é o mesmo definido no
seu elemento-pai. Todos os navegadores suportam esse atributo e é de boa prática
sempre declará-lo no elemento-raiz html com a finalidade de informar aos agentes
de usuário o idioma principal no qual a página foi escrita. Os valores para esse
atributo são as abreviaturas dos idiomas do mundo inteiro relacionadas em norma
internacional. Observe, nos exemplos a seguir, a sintaxe para uso desse atributo no
elemento-raiz de um documento escrito em português do Brasil e em um elemento
dentro desse documento marcando um termo escrito em inglês.
<html l a n g = " p t - b r " >
2 3 .11 speücheck
(Atributo de correção) Atributo novo, criado pela H TM L5; não é suportado por
nenhum navegador atual. Esse atributo se destina a disponibilizar a funcionalida
de de correção ortográfica e gramatical para os conteúdos textuais inseridos nos
elementos para os quais o atributo foi definido. Funciona criando um corretor se
melhante à ferramenta corretora de alguns editores de textos, por exemplo, o Word
da plataforma Windows. A especificação não define a interface de usuário para a
correção. Os valores possíveis para esse atributo são t r u e e f a l s e indicando correção
habilitada ou não, respectivamente. Observe, no exemplo a seguir, a sintaxe para
uso desse atributo em um campo de texto do tipo textare a. No exemplo tudo o que
for digitado no campo será submetido ao corretor ortográfico,
ctextarea rows="8" cols="40" s p e l l c h e c k = " t r u e " x / t e x t a r e a >
62 HTML 5
2 3 .1 2 síyle
23.13 tabindex
(Atributo de tabulação) Destina-se a definir uma ordem de tabulação, ou seja, a
sequência em que os elementos receberão o foco quando o usuário navegar com
uso do teclado. Veja, a seguir, um exemplo de aplicação desse atributo.
<p tabindex="5">Parágrafo</p>
<p tabindex="l">Parágrafo</p>
<a href="#" tabindex="4">link</a>
<img src="imagem.png" alt="" tabindex="2" />
<h4 tabindex="3">Título 4</h4>
23.14 title
(Atributo título) Destina-se a definir um título para o elemento em que é aplicado.
Leitores de tela normalmente leem o valor desse atributo. Veja, a seguir, um exemplo
de aplicação do atributo.
<p title="ConteÚdo do título">l)m parágrafo para exemplificar o a tr i b u to t i t l e < / p >
2.4.1 article
Destina-se a marcar um conteúdo autossuficiente em uma página, documento ou
aplicação. O conteúdo marcado é, a princípio, reusável e pode ser distribuído de
Capítulo 2 ■ Novidades na HTML5 63
::rm a independente, por exemplo: via RSS. Alguns exemplos de conteúdos para
í erem marcados com esse elemento são: um post em um fórum, um artigo de uma re-
msta ou jornal, uma matéria publicada em um blog, um comentário postado por um
rsitante, um widget ou gadget interativo ou qualquer outro conteúdo independente.
2.4.2 aside
Destina-se a marcar um conteúdo separado, mas tangencialmente relacionado com
: conteúdo em volta dele. Em tipografia são os blocos de conteúdos nas barras-
..iterais. Esse elemento pode ser usado para obter o efeito tipográfico que ele confere
.to conteúdo. Mas, cuidado, usar aside para marcar conteúdos simplesmente porque
estão posicionados à esquerda ou à direita do conteúdo principal nem sempre é
ema escolha acertada. A posição do conteúdo candidato a ser marcado com aside
cão deve ser considerada, mas sim considere-se o tipo de conteúdo.
Como regra geral e não absoluta e definitiva, uma boa indicação de conteúdo
rara aside é aquele que, embora relacionado ao conteúdo principal, não prejudicará
í na compreensão se for retirado.
Alguns exemplos de conteúdos para serem marcados com esse elemento são:
yullquotes ou barras-laterais, banners e textos com propaganda, agrupamento de
mecanismos de navegação e outros conteúdos que possam ser considerados se-
rarados do conteúdo principal. Observe o exemplo a seguir que demonstra o uso
64 HTML 5
desse elemento para marcar a coluna de um blog contendo links para as categorias
de posts e blogroll.
<body>
// Marcação HTML para o topo do blog
<artic le >
// Post 1
< /a rticle >
<art ic le >
// Post 2
< /a rticle >
<aside>
<nav>
<hl>Categorias</hl>
<ub
< l i x a h re f= "cr'> ca te go ria K / a x / l i >
< l i x a href="c2">categoria 2 < / a x / l i >
</ul>
<hl>Blog ro ll< /h l>
<ul>
< l i x a hre f ="h t t p : / / b l o g l . com">Blog K / a x / l i >
< l i x a hre f= " http://b lo g2.com">Blog 2 < / a x / l i >
</ul>
</nav>
</aside>
2 .4 .3 a u d io
2.4.4 canvas
Esse elemento será estudado com detalhes no capítulo 4.
2.4.5 commarsd
Esse elemento destina-se a marcar um comando a ser evocado pelo usuário. Um
comando pode fazer parte de um menu de contexto ou barra de ferramenta criada
com o elemento menu (ver 2.4.6) ou ainda ser um comando isolado na página, por
Capítulo 2 q Novidades na HTML5 65
exemplo, definindo um atalho de teclado. Esse elemento para ser renderizado deve
ser usado como elemento-filho do elemento menu. Atualmente nenhum navegador
oferece suporte para esse elemento.
e title .
i c o n , d i s a b l e d , ch ecked, r a d i o g r o u p
O atributo type define o tipo de comando, podendo ser do tipo comando asso
ciado a uma ação, um comando de escolha de uma opção ou ainda uma seleção.
Os valores possíveis para esse atributo são: command, ch eckbox e r a d i o . O valor-padrão
e command que cria um comando normal associado a uma ação. O valor checkbox cria
um comando do tipo caixa de seleção de opções e o valor radio um comando tipo
seleção do item de uma lista.
O atributo labei destina-se a definir um nome para o comando e deve ser uma
string não vazia.
2 A 6 m enu
Esse elemento destina-se a marcar uma lista de comandos e é usado como elemento
Container para elementos command. Atualmente nenhum navegador oferece suporte
para esse elemento.
O atributo type define o tipo de menu que está sendo criado. Os valores possíveis
para esse atributo são: context, toolbar e list. O valor-padrão é lis t que simplesmente
cria uma lista de comandos sem qualquer ação. O valor context cria um menu do
tipo contexto e o valor toolbar um menu tipo barra de ferramenta.
Arquivo Ajuda
Copiar
Recortar
Colar
Excluir
2.4.7 datalist
Esse elemento foi criado para ser usado em conjunto com o elemento input. Destina-
se a fornecer uma lista de sugestões para preenchimento do campo input e permite
sue o usuário selecione uma das opções de uma lista de opções predefinida como
sugestão pelo desenvolvedor ou então entre no campo um valor diferente daqueles
sonstantes da lista de opções sugeridas. Navegadores que não oferecem suporte
rara esse elemento renderizam normalmente o campo input, já que se trata de um
elemento previsto nas especificações anteriores da H T M L e largamente suportado
pelos navegadores. Atualmente somente os navegadores Opera e Firefox oferece
suporte para esse elemento.
Para o elemento input foi criado pela HTM L5 um atributo novo. Ele permite rela
cionar o campo com a lista de opções sugeridas. Trata-se do atributo list. Define-se
um valor qualquer para o atributo lis t do campo input e um id com o mesmo valor
para o elemento datalist criando um vínculo entre o campo e a lista de opções su
geridas. A marcação mostrada no exemplo a seguir esclarece a criação desse vínculo.
O exemplo mostrado a seguir cria uma lista de opções sugeridas, para preen
chimento de um campo destinado a coletar o nome de uma fruta. Esse exemplo
está disponível no site do livro e atualmente deverá ser carregado no navegador
Opera 11+ ou Firefox 4+ para se visualizar seu efeito.
<label f o r = " fr u " > F r u ta p r e f e r i d a :< / l a b e l x b r >
list="frutas"
<input typ e = " te x t" id = "fru " >
<datalist id="frutas">
•coption value="Abacate">
<option value="Abacaxi">
<option value="Banana">
<option value="Mamão">
68 HTML 5
<option value="Manga">
<option value="Pera">
< / d a ta lis t>
•(>, [c2-datalist.html]
n j í } ■ . V J flle:/ /lo ca lho st/D :/Sltes/ livroH TM L5/codigos/ca p_02/ c2-d atalist1html
(Heimento datallst
t r u t a p re fe rid a :
Abacate
Abacaxi
Banana
Mamao
:ufr> F ru ta p re fe rid a : <hx>
Manga
:e x t ,f . .r..S:~="f r u t a s " .:!d=,rf r u " >
Pera
,ff r u t a s ">
04 = "Abacate” >
05 ~ pfí±iacaxi.?p>
2.4.8 details
Esse elemento destina-se a fornecer informações textuais ou controles de formulário
adicionais sobre determinada página ou sobre um conteúdo específico da página.
Por padrão os conteúdos fornecidos por esse elemento não são colocados à vista do
usuário e o acesso a eles se dá mediante ação do usuário, normalmente por clique em
um elemento. Ao usuário é facultada a opção de mostrar ou esconder os conteúdos.
2.4.9 summary
-ís e elemento foi criado para uso em conjunto com o elemento d e ta ils e destina-se
zornecer um rótulo ou breve sumário das informações adicionais fornecidas por
. a ta ils . Trata-se de um elemento primeiro-filho do elemento d e ta ils e que admite
■.cenas os atributos globais.
A especificação prevê que se esse elemento não for usado como elemento-filho
;e d e ta ils o agente de usuário deverá fornecê-lo nativamente com o conteúdo tex-
: v.al “Details”. Experimente fazer uma cópia do exemplo fornecido no site retirando
: elemento summary da marcação para visualizar essa funcionalidade. Experimente
:embém usar o atributo open no elemento d e t a ils .
O exemplo a seguir esclarece o uso dos elementos d e ta ils e summary, mas nenhum
■rvegador atual oferece suporte para esses elementos. No entanto, existe um plugin
fjuery desenvolvido por Mathias Bynens (http://github.com/mathiasbynens/noSelect-jQuery-
-1-gin) que simula o comportamento do navegador para esses elementos.
-Ah [c2-details.html]
70 HTML 5
2 A I O fig u r e
Esse elemento admite apenas os atributos globais e poderá ser usado em conjunto
com o elemento figcaption (ver 2.4.11).
2 A 1 1 fig c a p tio n
Esse elemento destina-se a marcar uma legenda para o conteúdo inserido com uso
do elemento figure e deve constar da marcação como elemento-filho do elemento
figure. Admite apenas os atributos globais.
<figcaption>
<cite>I-3uca-Pirama</cite> l<sup>o.</sup> verso do IV canto do poema épico de Gonçalves Dias.
</figcaption>
</figure>
2,4.12 footer
Esse elemento destina-se a marcar o rodapé de uma seção ou da página como um
::d o e deve conter informações sobre o conteúdo da seção ou página, como o seu
;.utor, links para documentos relacionados, direitos autorais e similares. Admite
apenas os atributos globais.
Em HTM L5 uma página poderá conter vários rodapés, pois é válido que cada
; eção da página tenha seu próprio rodapé, bem como a página pode também conter
seu rodapé à maneira como estamos acostumados a marcar em (X)HTML.
O elemento footer em si não cria na marcação uma nova seção tal como criam
: s elementos article, aside, nav e section.
<article>
<!-- conteúdo do elemento article -->
<footer>
<!-- informações sobre o conteúdo de article -->
</footer>
</article>
Exemplo 2:
<nav>
<!-- conteúdo do elemento nav -->
<footer>
<!-- informações sobre o conteúdo de nav -->
</footer>
</nav>
Exemplo 3:
<body>
<!-- conteúdos da página -->
<section>
<article>
<!-- conteúdo do elemento article -->
<footer>
<!-- informações sobre o conteúdo de article -->
</footer>
</article>
<footer>
<!-- informações sobre o conteúdo de section -->
</footer>
</section>
<footer>
<!-- informações sobre o conteúdo da página -->
</footer>
</body>
; : pítulo 2 ■ Novidades na HTW1L5
Exemplo 4:
<body>
< f o o t e r x a h r e f = " . . / " > I r para a Home P a g e < / a x / f o o t e r >
<hgroup>
<hl>Lorem ipsum</hl>
<h2>The ipsum o f a l l lorems</h2>
</hgroup>
<p>A dolor s i t amet, consectetur . . . </p>
< f o o t e r x a h r e f = " . ./" > I r para a Home P a g e < / a x / f o o t e r >
</body>
2.4.13 header
Uma página poderá conter vários elementos header e estes, por sua vez, os ele
mentos hl-h6. Assim, é válido marcarmos na mesma página vários elementos hl-h6.
O elemento header em si não cria na marcação uma nova seção tal como criam
is elementos article, aside, nav e section.
Exemplo 1:
<body>
<header>
< h l> T ítu lo p rin c ip a l da página</hl>
</header>
// conteúdo da página
</body>
Exemplo 2:
<artic le >
<header>
< h l> T ítu lo da seção a rtic le < / h l>
<ul>
< l i > D a t a : . . ,< / l i >
< l i > H o r a :. . ,< / l i >
HTML 5
Exemplo 3:
<body>
<header>
<hl>Dogos online</hl>
<nav>
<ul>
< l i x a hre f=7jo go s">log os< /a >
< l i x a href="/forum">Forum</a>
< l i x a href="/download">Download</a>
</ul>
</nav>
<h2>Notícia impontante</h2> < ! - - aqui começa a segunda subseção -->
< ! - - conteúdo da subseção " N o t íc i a importante" -->
<p>Atualize seu software para o jogo de hoje.</p>
<h2>logos</h2> < ! - - aqui começa a t e r c e i r a subseção -- >
</header>
<p>Você tem t rê s jogos a t i v o s : </p>
< ! - - conteúdo da subseção "logos" -->
Esse elemento destina-se a agrupar os elementos hl-h6, quando existir mais de um de
les como cabeçalho de uma seção ou da página. Admite apenas os atributos globais.
Exemplo 1:
<hgroup>
<hl>Capítulo 2</hl>
<h2>Novidades na HTML5</h2>
</hgroup>
Capítulo 2 ■ Novidades na HTML5 75
Exemplo 2:
2.4.15 keygen
Esse elemento destina-se a manipular um par de chaves criptografadas, públicas e
privadas para autenticação da comunicação com o servidor por ocasião do envio
de formulários.
esse elemento destina-se a marcar uma palavra ou trecho de texto que deva ser desta
cado com o propósito de servir como referência. Admite apenas os atributos globais.
Por exemplo: em uma citação usamos esse elemento para marcar determinada
oalavra que se tornou relevante para o contexto em que a citação foi inserida.
Não confundir esse elemento com o elemento strong. O elemento strong destina-
se a marcar um trecho importante ao qual se pretende dar forte ênfase e o elemento
iark um trecho relevante para o contexto no qual está inserido e para o qual se
ore tende dar destaque.
2 A l 7 m eter
Esse elemento destina-se a marcar uma medida escalar compreendida entre deter
minados limites conhecidos.
Esse elemento não deve ser usado para marcar uma medida representativa do
andamento de uma tarefa, por exemplo, a porcentagem de arquivo sendo baixada
para o disco local em uma operação de download. Para isso existe o elemento
que estudaremos adiante. Também não é apropriado o uso desse elemento
progress
para marcar uma medida representativa de uma porção da qual não se conhecem
os limites superiores e inferiores, por exemplo, a altura de uma pessoa, já que não
existe limite superior e inferior para a altura de pessoas.
Alguns exemplos de uso adequado para o elemento meter seriam: para marcar
a porcentagem de uso do espaço em disco, o número de votos obtidos por um
candidato em uma eleição na qual a quantidade total de votantes é conhecida ou
a quilometragem atingida por um corredor de maratona em determinado instante.
O elemento meter admite os seguintes atributos: atributos globais, value, min, max,
low, high e optimum.
O atributo min define o valor mínimo da escala à qual a medida marcada pertence
e se for omitido será considerado igual a 0.
O atributo max define o valor máximo da escala à qual a medida marcada pertence
e se for omitido será considerado igual a 1.
O atributo high define um valor dentro da faixa à qual a medida marcada pertence
e acima do qual se considera um valor alto.
Se o valor dos atributos min e max não for especificado, eles serão, por padrão,
iguais a 0 e 1 respectivamente.
O atributo global t i t l e deve ser usado para indicar a unidade de medida do valor
representado pelo elemento.
Exemplos:
•oneter v a l u e = " 0 . 7 ' ' x / m e t e r > // 0 , 7 em um f a ix a de 0 a 1 ou seja 70%
<meter value="8" min="2" max="20"x/meter> // 8 em uma escala que va i de 2 a 20
2.4.18 nav
Esse elemento destina-se a marcar uma seção da página que contenha links para
outras páginas ou para outras partes dentro da própria página, ou seja, uma seção
contendo links para navegação externa ou interna. Admite apenas os atributos globais.
O exemplo a seguir esclarece o uso desse elemento em duas seções de uma página.
<body>
<hl>A linguagem de marcação HTML5</hl>
<nav>
<ul>
< l i x a h r e f= 7 " > H o m e < / a x / li >
< l i x a href="/codigos">Códigos dos e xe m plos < /a x /li >
. . . m a i s link s internos ao s i t e . . .
</ul>
</nav>
< artic le>
78 HTML 5
<header>
<hl>Elemento Canvas</hl>
<p>A API para gráficos criados com Ja va Script.< /p >
</header>
<nav>
<ul>
< l i x a href=''#metodos''>Métodos da A P I < / a x / l i >
< l i x a h re f= "# atrib utos "> Atrib uto s da A P I < / a x / l i >
. . . m a i s lin k s in ternos à p á g i n a . . .
</ul>
</nav>
<div>
csection id="metodos">
<hl>Métodos para formas complexas</hl>
< p > ...m a is conteúdo.. ,</p>
</section>
csection id = "a trib u tos ">
<hl>Atributos para e s t iliza ç ã o < /h l>
< p > . . . mais conteúd o ...< /p >
</section>
. . . mais conteúdo.. .
</div>
<fo oter> // não usado o elemento nav
► HTML
<p>Preço u n i tá r io do produto: R$320,00</p>
<form name="formulario" method="get" action="">
< pxla b el>Q uan tidad e: <input t yp e = " te x t" na m e = " q d e "x /la b e lx /p >
<p>Valor t o t a l : R$<output name="vtotal"x/outputx/p>
</form>
►JavaScript
fu nctio n c a lc u la V a l o r T o t a lQ {
var qdeltens = d o c u m e n t .f o r m s [ 'f o r m u l a r i o '] [ 'q d e '] .v a l u e ;
var v a lo r T o t a l = (qdeltens * 320), t o F i x e d ( 2 ) j
d o c u m e n t.fo rm s fT o rm u la rio d fv to ta iq .v a lu e = valorTotal;
}
window.onload = f u n c t i o n Q {
document.forms[' fo r m u l á r i o 1] [ ' q d e ' ] .onblur = ca lc u la V a lo rT o ta l;
IA
e fo r m .
<section>
<h2sAndamento da tarefa</h2>
<p>Progresso: « p r o g r e s s id="p" max="100"xspan>0</span>%</progressx/p>
« s c ri p t s
var barraAndamento = doc unient.getElementByldCp1) ;
fu nctio n up date Pro gre ss(va lo rA tual ) {
barraAndamento.value = v a lo r A t u a l ;
barraAndamento.getElementsByTagName('s p a n ' ) [ 0 ] . t e x t C o n t e n t = v a l o r A t u a l ;
}
« / s c r ip ts
«/sections
Capítulo 2 Q Novidades na HTÍWLS 81
2.4.21 ruby
Esse elemento destina-se a marcar pequenas anotações sobre textos, contendo in-
mrmações sobre a maneira correta de pronúncia do texto. Trata-se de uma forma
tipográfica usada em escrita oriental sem similares na escrita ocidental e que aqui
consta apenas a título de informação. Não faremos maiores considerações sobre esse
r.emento e seus elementos relacionados rp e rt. Para maiores informações sobre esses
c-ementos, consulte os itens 4.6.19, 4.6.20 e 4.6.21 das especificações para a HTML5.
<artic le >
<hgroup>
<hl>Região sul do Bra sil </hl>
<h2>A região com o maior índice de a lf a b e tiza ç ã o do Brasil<h2>
</hgroup>
<p>A região sul do Brasil compreende os estados do Rio Grande do Su l, Santa Catarina e Paraná.</p>
< s e c t io n >
<hl>Rio Grande do Sul</hl>
<p>0 maior e mais populoso estado da região sul possui clima temperado.. .</p>
</section>
<section>
<hl>Santa Catarina</hl>
<p>Santa Catarina possui as mais lindas praias do l i t o r a l b r a s i l e i r o . . . </p>
</section>
82 HTML 5
<section>
<hl>Paraná</hl>
<p>No Paraná encontramos a mata de arauc ária uma das mais importantes florestas
sub tropic ais do mundo...</p>
</section>
< /a rtícle >
Notar no exemplo mostrado que cada sec tion tem seu elemento h l. Usar mais
de um cabeçalho do nível 1 ou de qualquer outro dos seis níveis possíveis em uma
mesma página é perfeitamente válido em HTML5.
2.4.23 source
Esse elemento permite que se definam múltiplas alternativas para arquivos de mí
dia. Devem ser usados como elementos-filho dos elementos a u d i o e v i d e o apontando
para diferentes arquivos alternativos para uma das duas mídias. Esse elemento será
estudado com detalhes no capítulo 3.
2.4.24 time
Esse elemento destina-se a marcar tanto um horário na faixa 0-24h quanto uma
data do calendário gregoriano. Opcionalmente pode marcar, também, a diferença
do horário local para o horário GM T (time-zone offset). A finalidade desse elemento
é fornecer uma codificação para data-hora de modo que máquinas possam ler o
código e processar, por exemplo, agendando eventos em um calendário ou lembrando
datas de aniversário.
ou data que está sendo marcado. Se não for especificado esse atributo, o horário
e/ou data deverá ser inserido como conteúdo do elemento. O valor desse atributo
deve ser uma string representativa do grupo data-hora em formato válido para a
linguagem HTML.
ExemploB: com uso dos atributos pub da te e d ate tim e . Nesse exemplo navegadores
que não suportam HTM L5 nada renderizam e os que suportam renderizam a data
em formato local.
<art ic le >
<hl>Tarefas</hl>
<footer>Publicado em: <time pubdate date tim e="2010 -1 2-19 T09:15Z"></tim e>.</f ooter>
<p>Trocar a lâmpada da s a l a . </p>
< /a rticle >
2.4.26 v id e o
Esse elemento será estudado com detalhes no capítulo 3.
Áudio e vídeo
I
\
3 .1 audio
84
Capítulo 3 ■ Áudio e vídeo 85
<audio src="som.mp3">
< ! - - Código (X)HTML para inserção de som.mp3 com Flash -- >
</audio>
Ainda não há um consenso sobre qual codec adotar para ser implementado na-
uvamente. A tendência atual é deixar por conta do fabricante a implementação de
MP3 ou Ogg Vorbis. Isso nos obriga a servir marcação para ambos os formatos se
pretendemos criar uma implementação crossbrowser.
Observe o exemplo a seguir que esclarece o uso do elemento source e seus atributos.
<audio>
csource src="som.ogg" type="audio/ogg; c o d ecs = 'vo rbis '" media="screen">
csource src=''som.mp3" type="audio/mpeg; codecs='mp3"' media="screen">
< ! - - Código (X)HTML para inserção de som.mp3 com Flash -->
</audio>
Nesse exemplo escrevemos um código crossbrowser para servir som com HTML5.
86 HTML 5
Os atributos desse elemento são: atributos globais, src, preload, autoplay, loop,
Controls.
O atributo preload destina-se a indicar como o autor espera que seja o pré-carre-
gamento do som na página, tendo em vista otimizar a experiência do usuário. Esse
atributo admite os valores none, metadata, auto. O valor none instrui o navegador a não
fazer o pré-carregamento do som e talvez seja uma boa decisão usar esse valor em
uma página contendo vários diferentes sons incorporados. O atributo metadata ins
trui o navegador a fazer o pré-carregamento somente dos metadados do som, como
dimensões, duração, controles etc. O valor auto define que o som será pré-carregado.
A sintaxe XHTML5 por ser compatível com XML requer que seja declarado o valor
dos atributos. Assim, para atributos booleanos, como a u to p la y , lo op e C o n t r o ls ,
devemos declarar o valor do atributo igual seu nome, ou seja, autoplay=''autoplay",
loop="loop" e c o n t r o l s = " c o n t r o l s \
Não confundir atributo booleano com valor booleano. Um atributo booleano é aquele
que pode estar ou não presente na tag de abertura de determinado elemento e valor
booleano para atributo são os valores t ru e e f a l s e . Assim, é sintaticamente incorreto
declarar, por exemplo, c o n tro ls = " tru e " .
A presença do atributo Controls faz com que o navegador renderize uma barra de
controle nativa contendo botões do tipo play e pause bem como controle de volume.
O uso desse atributo é conforme mostrado a seguir.
►HTML
<audio controls>
<source src="som.ogg" type=,laudio/ogg,, >
csource src="som.mp3" type="audio/mpeg''>
<source src="som.wav" type="audio/wave">
<p>Seu navegador não suporta o elemento audio da HTML5.
<br>Faça <a href="som.mp3">download de som.mp3</ax/p>
</audio>
■ I [c3-audio-ex1.html]
Na figura 3.1 mostramos a renderização nativa dos controles de som nos nave
gadores Opera, Firefox e Safari.
Opera
firefox
l-kmsam m
Safari
► --------------- ------
t> JavaScript
4. }
5. fu nctio n i n i t () {
6. var container = i d ( ' f u n d o - c o n t r o l e s ' ) ;
7. var c t r = i d ( ' s o m ' ) ;
8. var play = i d ( ' p l a y ' ) ;
9. var pause = docum ent.getElem en tB yId('pau se');
10 . var vmais = doc um en t.g etElem entB yId('vm ais');
11. var vmenos = document.getElementById('vmenos');
12. i f (IM o d e r n izr.a u d io ) {
13 . c o n t a i n e r . s t y l e .d i s p l a y = 'n o n e ';
14. } else {
15. p l a y . a d d E v e n t Lis t e n e r( ‘ c l i c k 1, f u n c t i o n Q {
16 . ctr .p l a y ( ) ;
17. c tr.vo lu m e = 1 ;
18 . }, fa ls e );
19. p a u s e .a d d E v e n t L i s t e n e r ( 'c l i c k ', f u n c t i o n Q {
20. c tr.p a u s e Q ;
21 }, fa ls e );
22. vm a is.ad d Eve n tListen er('click', fu n c tio n Q {
23. c t r .p la y Q ;
24. c t r . v o l u m e += 0 . 1 ;
25. }, false);
26. vmenos.addEventListene r( ' c l i c k ' , f u n c t i o n Q {
27. ctr.playQ;
28. c t r . v o l u m e -= 0 . 1 ;
29. } , fa ls e );
30. }
31. }
32. window.onload = i n i t ;
33. </script>
Código comentado:
Linha 2 a 4 Cria uma função denominada id() que simplifica a sintaxe para
document. getEle m entB yID() .
Linhas 5 a 31 Cria uma função denominada initQ que contém o script a ser
executado depois que a página é carregada. Na linha 32 chama-
se essa função no evento onload.
Capítulo 3 b Áudio e vídeo 89
►HTML
<audio id="som">
<source src="som.ogg" type="audio/ogg">
tsource src='isom.mp3" type="audio/mpeg">
<source src="som.wav" type=''audio/wave">
<p>Seu navegador não suporta o elemento audio da HTML5.
<br>Faça <a href="som.mp3">download de som.mp3</ax/p>
</audio>
<div id ="fundo-cont roles">
<input type="button" src="play.png" value=''Play" id="play">
<input type="button " src="pause,png" value=''Pause" id="pause">
<input type="button " src="vmais.png" value="Volume(+)" id="vmais">
<input type="button " src=''vmenos.png" value="Vo lume(-)" id=''vmenos">
</div>
[t3-audio-ex2.html]
90 HTML 5
do tipo image, criando botões de qualquer forma, cor, tamanho ou efeito. O exemplo
mostrado a seguir é idêntico ao anterior, no qual alteramos a marcação HTM L e
acrescentamos regras de estilo.
►JavaScript
^css
<style>
#fundo-controles {
w id th : 163pxj
h e ig h t :4Bpx;
d is p la y : t a b l e - c e l l ;
ve rtica l-a lig n:m id dle;
t e x t - a l i g n : centerj
background:u r l ( f undo-c o n t r o l e s .png) no-repeat;
}
</style>
►HTML
<audio id="som">
csource src="som.ogg" type="audio/ogg">
csource src="soin.mp3" type="audio/mpeg">
<source src="som.wav" type="audio/wave">
<p>Seu navegador não suporta o elemento audio da HTML5.
<br>Faça <a href="som.mp3">download de som.mp3</ax/p>
</audio>
<div id ="fundo-cont roles">
<input typ e ="image" src="play.png" a lt = " P l a y " id="play">
<input typ e ="image” src="pause.png" alt="Pause" id="pause">
<input typ e ="image” src="vmais.png'' alt=''Volume(+}" id="vmais''>
cinput type="image" src="vmenos.png" alt= ''Volu m e(-) '' id="vmenos">
</div>
T S ; [c3-audio-ex3.html]
Nos dois últimos exemplos mostrados, se JavaScript estiver desabilitado, o usuário não
terá os controles de som-padrão. Por isso, é preferível que se use o atributo contro ls
na marcação H TM L e se retire esse atributo com JavaScript declarando document.
getElementsByTagName(' a u d i o ' ) [ 8 ] . r e m o v e A t t r i b u t e ( ' c o n t r o l s ' ) ;
Capítulo 3 ■ Áudio e vídeo 91
3.2 video
Esse elemento destina-se a incorporar um vídeo ou filme.
[c3-video-ex1.html]
Esse exemplo está disponível no site do livro e pode ser visualizado em nave
gadores que suportam o formato .ogv para vídeos. Ao visualizar o exemplo, como
não foram definidos os controles para o vídeo, em plataforma Windows, clique com
:■ botão direito do mouse sobre a imagem do vídeo e no menu de contexto que
aparece escolha “Exibir vídeo”.
Inserir vídeo, na prática, como mostrado no exemplo, não é uma boa opção, pois
esperar que o usuário abra um menu de contexto para iniciar o vídeo está fora de
cogitação. O exemplo simplesmente demonstra a forma mais simples de inserção.
E necessário o uso de alguns atributos no elemento video antes de publicá-lo para
consumo do usuário.
Existem dois tipos de arquivos de vídeo: o arquivo para manipulação local por
softwares de edição usados na fase de projeto e o arquivo para publicação, que é
o resultado do tratamento do arquivo finalizado na fase do projeto. O primeiro é
um arquivo em alta resolução e ocupando muitos Kb de memória ao passo que o
segundo é um arquivo otimizado para publicação.
0 tamanho do arquivo;
m resolução/qualidade;
. las isso não é tudo. Além da compressão, os arquivos de vídeo são também
. meados. E, para aumentar ainda mais a confusão causada pela falta de padroni-
: ;ão, existem diferentes formas de codificação, que, por sua vez, contribuem para
" cs confusão, uma vez que codificar igual em diferentes containers de compressão
c :.i resultados diversos.
a h t t p : //www.animemusicvideos. org/guides/avtech31/
a h t t p : / / p t . w ik ip e d ia . o r g / w ik i/H .264
■ h t t p : / / p t . w i k i p e d i a . o r g / w ik i/H . Theora
b h t t p : / / p t . w i k i p e d i a . org/wiki/VP8
n h t t p : / / e n .w ik i p e d ia . org/wiki/Comparison_of_container_formats
O elemento source admite os seguintes atributos: atributos globais, src, type, e media.
O atributo type admite ainda o parâmetro codecs que determinados MIME type defi
nem e deve ser informado para que o navegador saiba como o arquivo foi codificado.
Observe o exemplo a seguir que esclarece o uso d o elemento source e seus atributos.
<video>
csource src="video.ogv" type="video/ogg; codecs='theora, v o r b i s ' " media="screen">
<source src="video.mp4" type="video/mp4; codecs="mp4v,20.8, tnp4a.40.2"' media="screen">
<source src="video.webm" type=''video/webm">
< ! - - Código (X)HTML para inserção de video.mp4 com Flash -->
</video>
lr oítulo 3 * Audio e vídeo 95
Xesse exemplo escrevemos um código crossbrowser para servir vídeo com HTML5.
C o n tr o ls , p ô s t e r , a u dio, w id th e h e ig h t.
O atributo preload destina-se a indicar como o autor espera que seja o pré-carre-
gamento do vídeo na página, tendo em vista otimizar a experiência do usuário. Esse
atributo admite os valores no n e , m e t a d a t a , a uto . O valor none instrui o navegador a não
fazer o pré-carregamento do vídeo e talvez seja uma boa decisão usar esse valor em
uma página contendo diferentes vídeos incorporados. O atributo m e ta da ta instrui
o navegador a fazer o pré-carregamento somente dos metadados do vídeo, como
dimensões, duração, controles etc. O valor a u to define que o vídeo será pré-carregado.
-O. [c3-video-ex2.html]
A sintaxe XH TM L5 por ser compatível com X M L requer que seja declarado o valor
dos atributos. Assim, para atributos booleanos, com o autoplay, loop e Controls,
devemos declarar o valor do atributo igual seu nome, ou seja, autoplay=''autoplay",
loop="loop" e c o n t r o l s = " c o n t r o l s \
Não contundir atributo booleano com valor booleano. Um atributo booleano é aquele
que pode estar ou não presente na tag de abertura de determinado elemento e valor
booleano são os valores t rue e f a l s e . Assim, é sintaticamente incorreto declarar, por
exemplo, c o n tro ls = " tru e " .
A presença do atributo Controls faz com que o navegador renderize uma barra de
controle nativa contendo botões do tipo play e pause bem como controle de volume.
O uso desse atributo é conforme mostrado a seguir.
► H TM L
<video controls>
csource src="video.ogv" type="video/ogg">
csource src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
< ! - - Código (X)HTML para inserção de video com Flash -->
<p>Seu navegador não suporta o elemento video da HTML5.
<br>Faça, <a href="video.mp4">download do v id e o < /a x /p >
</video>
Oi.
■#il [c3-video-ex3.htm!]
Na figura 3.2 mostramos a renderização nativa dos controles de som nos nave
gadores Chrome, Firefox, Opera e Safari.
C hrom e
Firefox
O pera
Safari
<1 !►\ ■<<
► HTM L
d'- [c3-video-ex4.html]
O atributo audio admite o valor muted e, quando presente, faz com que o som do
■ideo (se o vídeo for sonoro) seja por padrão colocado no estado mudo. Há estudos
para a introdução de outros valores para esse atributo nas especificações para a
HTML5. Valores para definir, por exemplo, os padrões para o volume e trilha sonora
aliciais. O uso desse atributo é conforme mostrado a seguir.
► HTM L
[c3-video-ex5.html]
98 HTML5
Se definirmos apenas uma das dimensões, a outra será tal que o aspect ratio seja
preservado. Se definirmos as duas dimensões sem respeitar o aspect ratio a área de
apresentação será a definida; ctíntudo, o vídeo não sofrerá deformação, pois suas
dimensões serão tais que o aspect ratio seja preservado e teremos a área definida maior
do que a área do vídeo. O exemplo a seguir disponível no site do livro é interativo,
permitindo que você altere os atributos width e height e observe a renderização das
áreas de apresentação.
> HTML
cvideo Controls width="escolha" height="escolha">
<source src="video.ogv" type="video/ogg">
<source src="video,mp4" type="video/iiip4">
<source src="video.webm" type="video/webm">
< ! - - Código (X)HTML para inserção de video com Flash -- >
<p>Seu navegador não suporta o elemento video da HTML5.
<br>Faça <a href="video.mp4">download do vide o < /a x /p >
</video>
Os*
[c3-video-ex6.html]
3.2.1 track
usse elemento destina-se a definir trilhas externas para os elementos video e audio.
I : m eles o desenvolvedor pode personalizar trilhas que são gravadas e m arquivos
ernos e inseri-las no vídeo. Os atributos específicos desse elemento definem
i características da trilha e são: kind, src, charset, srclang e labei. O elemento track
cemite ainda os atributos globais.
0 atributo src aponta para um arquivo do tipo texto puro contendo basicamente
: s textos a serem inseridos e o tempo (momento) de inserção.
Atualmente nenhum navegador suporta esse elemento; contudo, você pode ter
uma ideia de como se pretende que essa facilidade funcione visitando a página http://
dev.mennerich.name/showroom/html5_video/. Nela você verá um exemplo que usa um player
de vídeo denominado LeanBack Player, desenvolvido em JavaScript e se destina a
inserir legendas em vídeos.
Outra página que demonstra a inserção de legendas está em http://p eople .opera.com /
bruce l/ dem o/video/m ultilingual- syn erg y.htm l; nessa há opção de escolha dos idiomas inglês
e japonês para as legendas.
Para maiores detalhes sobre arquivos WebSRT visite http://w w w .delp hik i.com /websrt/.
Assim, é improvável que você extraia da sua filmadora arquivos nas extensões
,mp4 e .webm prontos para publicar na sua página HTML5. Existem softwares
; mecializados em edição que fazem a conversão dos arquivos; contudo, você não
: ;ecisa instalar um desses sofisticados softwares somente para converter arquivos
vídeo, pois existem várias ferramentas de conversão gratuitas para download.
..lustraremos a seguir as ferramentas Firefogg para codificar vídeos em formato
. cg e WebM e Handbrake para formatos MPEG4. Ambas as ferramentas são li-
.enciadas sobre a bandeira do software livre, o que significa que você pode baixar
- usar gratuitamente.
As ferramentas serão mostradas nos itens 3.2.2.1 e 3.2.2.2, nos quais fizemos uso de
várias imagens para explicar passo a passo como formatar (comprimir) arquivos de
vídeo. A finalidade é simplesmente apresentar as ferramentas para aqueles que não
estão familiarizados com edição e gravação de vídeos. Assim, mostramos somente o
uso básico das ferramentas sem entrar em detalhes avançados. Se você optar pelo uso
dessas ferramentas, explore-as mais a fundo fazendo testes práticos e inspecionando
todas as opções que elas oferecem. Contudo, com o conhecimento aqui adquirido,
você será capaz de formatar seus vídeos de modo que eles possam ser inseridos em
páginas HTM L5 com uso do elemento video. Se você é um expert em edição de vídeo,
sinta-se à vontade para pular os itens 3.2.2.1 e 3.2.2.2.
3.2.2.1 Firefogg
firefogg é uma extensão para o navegador Firefox nas suas versões 3.5 e mais re
centes. E uma ferramenta de código aberto e licença General Public License (GPL),
destinada a codificar vídeos nos containers Ogg e WebM com os codecs Theora
vídeo) Vorbis (áudio) e VP8 (vídeo-áudio), respectivamente, formatos suportados
nativamente pelos navegadores Firefox e Chrome.
Visite o site do Firefogg em http://w ww.firefo gg.o rg e você encontrará um link para
instalação da extensão no Firefox (Figura 33).
fl
H
F iref o g y
v id e o e n c o d in g and u p lo a d in g fo r F ire fo x
S it e s u s in g F ir e fo q q - U s e F ir e f o g q o n v o u r S it e - M a k e w e b v id e o
:» !-< 1 - -> ílr ' ■—>I ■_> Jlj/Ç :>J"I l (i !• j. 1 n í.a ío . " / - 4 b 1 r ijtfl- j
z . . u - ,s \
A r q u iv o E d it a r E x ib ir H is t ó r ic o F a v o r ito s F e rra m e n ta s A ju d a
j\ , j http://www.FireFogg.org/ ~ 'r \!
r\
U
F s r $ ff o g g
v id e o e n c o d in g and u p lo a d in g f o r F ir e fo x
S it e s u s in g F ir e fo q q - U s e F ir e f o g q o n v o u r S it e - M a k e w e b v id e o
Fechar
Feche a tela inicial e abra o menu Fe rra m en ta s na barra superior do Firefox acio
nando o submenu M a k e W eb V ide o (Figura 3.8).
Nessa mesma tela existe um botão que ao ser clicado permite que você escolha
no seu disco local um arquivo de vídeo a ser comprimido. Clique o botão, faça sua
escolha e será apresentada a tela seguinte, conforme mostrado na figura 3.10. Essa
tela permite que você configure os parâmetros de compressão e escolha o formato
do arquivo comprimido. Notar que, no campo indicado na figura com o número 1,
aparece o arquivo que você escolheu para compressão.
; F ire fo g g - M a k e w e b v id e o "■
H e in T r a n s l a t e ff.
■ wilco.mov
■'^Segundo de fini:
O segundo item do menu permite que você defina o instante de início e fim da
compressão do vídeo expressos em segundos. Por exemplo: para um vídeo com 30
segundos de duração, escolha 0 (zero) e 30 respectivamente para compressão do vídeo
todo, ou 15 e 30 se você pretende que a compressão (e consequentemente o resultado
final) mostre o vídeo a partir da metade. A figura 3.12 mostra esse item do menu.
Capítulo 3 ■ Áudio e vídeo 107
\ L v q. Li http://firefogg.org/make/?useiang=pt#
Q u a lid a d e de vídeo:
a do vídeo:
>
O sexto item do menu permite que você escolha não incluir na compressão o
áudio do vídeo. Para isso marque a caixa checkbox do menu.
________ - ■■ w s e a a
1 Arquivo Editar Exibir Histórico Favoritos Ferramentas Ajuda
I :■j • ! ' •, ,: , ’ j*
5 5 % - T ra n sc o d ific a d o T e m p o re sta n te : u : 1 0
11.12 HandBrake
Clicando a opção Vídeo File abre-se a janela de diálogo para escolha do arquivo.
Escolha o arquivo no seu disco rígido e prossiga.
D V D / V I D E O _ T S F o ld e r
, 11 C h ap te rs: th ro u gh
[ N o D V D D r iv e R e a d y ]
File:
P ictu re V id e o F i l t e r s ; V id e o A u d io 5 S u b tit le s C h a p te rs A d v a n c e d *1
vou should set a "Default Path" in HandBrakes preferences. (See Tools'menu -o 'Options’ -> 'General' Tab -> Default Path')
I OK j
5 . Marque o checkbox Keep Aspect Ratio para garantir que a compressão não distor
cerá seu vídeo e escolha uma largura ou altura para o vídeo. Escolhendo uma
delas a outra será automaticamente escolhida para manter o “aspect ratio”.
’Q 3 l
í Tools Presets He!»
| Source - ; r !>_• Start Add to queue fífâg Show Queue Preview Activity Window
irr.orptii': Kone
Passe para a aba Video e configure como mostrado na figura 3.19. Notar que existem
três opções para a configuração da qualidade do vídeo. Na primeira opção, Targ e t
Size ( M B ), você define um tamanho máximo para seu arquivo formatado. A não ser
que você saiba exatamente o que está fazendo, é melhor não optar por essa forma
de definição da qualidade.
A segunda opção, Avg B itrate (kbps), permite que você defina a qualidade do vídeo
escolhendo uma taxa média de kilobytes por segundo para a compressão. Aqui
também, a não ser que você saiba exatamente o que está fazendo, é melhor não
optar por essa forma de definição da qualidade.
112 HTML 5
Video Quality
) A v g Bitrate (kbps):
Frarnerate (FPS): Sa m e a s source
Turbo firs t P a -
S o u rce : wilco
D e s tin a tio n :
j-ÍitgíÉ|Aí:‘ ' -í . o - - ’n x
Encoding: task í of í, 9 3 .2 6 jí < 76.07 f p s , a ug 6 5 . 9 5 fp s, £T8 00h00n»03s>
D> JavaScript
4- }
5. fu nctio n i n i t () {
6. var container = i d ( ' fu nd o -c o n tro le s ' ) ;
7. var c t r = i d ( ' v i d e o ' ) ;
8. var play = i d ( ' p l a y ' ) ;
9. var pause = document,getElementById(' pause') ;
10 . ctr.removeAttribute( 1controls'); // r e t i r a os controles nativos
11. var vmais = document.getElementByld('vmais’ ) ;
12. var vmenos = document.getEleinentByld('vmenos');
12. i f (IM o d e r n izr.vid e o ) {
13 . c o n t a i n e r .s t y l e .d i s p l a y = 'n o n e ';
14 . } else {
... // código id êntic o ao do arquivo c3-audio-ex3.html
33. </script>
15* HTML
<video poster="capa.jp g" co ntrols id="video">
csource src= "video.ogv" type="video/ogg">
csource src="video.inp4" type="video/mp4">
csource src="video.mp4" type="video/inp4">
< ! - - Código (X)HTML para inserção de video com Flash -- >
<p>Seu navegador não suporta o elemento video da HTML5.
<br>Faça <a href="video.mp4">download do vide o < /a x /p >
</video>
<div id="fundo-controles">
<input type="button" src="playv.png" value="Play" id="play">
<input type="button " src="pausev.png" value="Pause" id="pause">
<input type="button " src="vmais.png" value="Volume(+)" id="vmais">
<input type="button " src="vmenos.png" va lue="Volume(-)" id="vmenos">
</div>
[c3-video-ex7.html]
3.3.1 Atributos
error
Esse atributo retorna um objeto erro para a mídia e possui a propriedade code que
retorna um número código para o erro com o significado mostrado a seguir:
B> JavaScript
fu nctio n i d ( i d ) {
re turn document.getElementByld(id)
}
function init() {
var video = id('video');
var valor = id('valor');
var btn = id('btn');
var erro = video.error;
var tipoErro = erro.code;
btn.onclick = functionQ {
var texto = 'Objeto erro retornado: ' + erro + '<br>Código do erro: ' + tipoErro;
valor.innerHTML = (texto);
}
}
window.onload = init;
116 HTML 5
►HTML
<video poster="capa.jpg" Controls id="video">
<sounce s rc = " x p t o / v id e o .o g v " type="video/ogg">
<source s rc ="xpto/vid eo.m p4" type="video/mp4''>
<source src="xpto/video.webm" type="video/webm">
< ! - - Código (X)HTML para inserção de video com Flash -- >
<p>Seu navegador não suporta o elemento video da HTML5.
<br>Faça <a href=''video.mp4">download do v id e o < /a x /p >
</video>
■W [c3-video-ex8.html]
currentSrc
Esse atributo retorna o valor do atributo src da mídia, ou seja, o endereço do arquivo
de mídia e sua sintaxe, como mostrado a seguir.
var video = document.getElementById('video')
alert (video. currentSrc); // alerta o endereço do arquivo de vídeo
f"'Í\
■10 [c3-video-ex9.html]
networkState
case 1 :
// código;
break;
case 2:
// código;
break;
case 3:
// código;
break;
preload
Esse atributo fornece uma dica de quanto do arquivo de vídeo deve ser pré-carregado.
A sintaxe de uso é como mostrado a seguir.
var video = document.getElementById(' v i d e o ' )
a l e r t (v i d e o . p r e l o a d ) ;
buffered
readyState
paused
Esse atributo é booleano e retorna true caso a mídia tenha sido parada e fa ls e caso
contrário. No estado inicial de carregamento da página, o valor desse atributo é
true. A sintaxe de uso é como mostrado a seguir,
var video = document,g e t E le in e n tB y Id ('vid e o ') ;
i f ( v id e o .paused) {
/ / código para quando o v íd e o f o r parado
ended
Esse atributo é booleano e retorna tru e caso a mídia tenha chegado ao seu final. A
sintaxe de uso é como mostrado a seguir,
var video = d oc um ent.g etEle m entB yld('video');
i f ( v id e o .ended) {
/ / código para quando o víd e o chegar ao final
playbackRate
defaultPlaybackRate
seeking
seekafele
tracks
contrais
Esse atributo é booleano e retorna true se o atributo C o n tro ls foi definido para o
elemento mídia. A sintaxe de uso é como mostrado a seguir.
var video = document. getElementByld( 1v i d e o ' ) ;
if (video.C o n t r o l s ) {
video,removeAttributef'Controls 1) ; // remove os controles de mídia para inserir
// controles personalizados
}
autoplay
Esse atributo é booleano e retorna true se o atributo autoplay foi definido para o
elemento mídia.
posier
Esse atributo retorna o endereço definido no atributo poster para o vídeo. A sintaxe
de uso é como mostrado a seguir.
var video = document.getElementByld( ' v i d e o ' ) ;
v id e o .p o s te r = 1 / / remove a imagem inserida como capa do vídeo
120 HTML 5
loop
Esse atributo é booleano e retorna true se o atributo loop foi definido para o ele
mento mídia.
width
height
videoWidth
Esse atributo retorna a largura da mídia vídeo quer tenha sido definida ou não no
atributo width.
videoHeight
Esse atributo retorna a altura da mídia vídeo quer tenha sido definida ou não no
atributo height.
voiume
Esse atributo retorna o nível de volume de áudio, se existir som na mídia, em uma
escala que varia de 0 (silêncio) a 1 (máximo).
muted
Esse atributo é booleano e retorna true se o canal de áudio, se existir som na mídia,
estiver em silêncio.
currentTime
startTime
endTime
duration
O ideal é que você visualize e interaja em diferentes navegadores ou, pelo menos,
no Firefox e Opera.
Os atributos da API não são definitivos. Uns poderão ser abandonados; outros,
i acrescidos, pois as especificações para a HTM L5 estão em fase de rascunho. Os
atributos aqui mostrados são atualmente previstos na especificação, mas não significa
que podemos usá-los indiscriminadamente em fase de produção.
► JavaScript
fu nctio n i n i t ( ) {
var video = document.g e t E le m e n tB y l d ! 'v i d e o ') ;
var btn = document.getElementsByTagName('b u t t o n ' ) ;
b t n [ 0 ] .o n c lic k = fu n c t io n ! ) { v id e o .p o s te r =
b t n [ l ] . o n c l i c k = fu n c t io n ! ) { v id e o .p o s te r = ' c a p a . j p g ' ; }
b t n [ 2 ] . o n c l i c k = fu n c t io n ! ) { a l e r t ( ' L a r g u r a do víde o; ' + v i d e o . w i d t h + ' p x ') ; }
b t n [ 3 ] . o n c l i c k = fu n c t io n ! ) { vid e o.w id th = v id e o . w i d t h * l . 2 ; }
b t n [ 4 ] ,o n c l i c k = fu n c t io n ! ) { vid e o .w id th = ' 4 0 0 ' ; }
b t n [ 5 ] . o ncli ck = f u n c t i o n ! ) { a l e r t ( ' N í v e l de volume do áudio ( 0 - 1 ) : '+ vid e o .vo lu m e );}
b t n [ 6 ] . o n c l i c k = fu n c t io n ! ) {
i f ( v i d e o . paused) {
a l e r t ( '0 vídeo está em P a u s a ');
} else i f ( v i d e o . ended) {
a le r t('T e rm in o u a execução do v í d e o ' ) ;
122 HTML 5
} else {
a l e r t ( ' 0 vídeo está ro da nd o');
}
}
b t n [ 7 ] . o n c l i c k = f u n c t io n ( ) {
var a t r = 'Os a trib u to s do elemento vídeo são: \ n ' ;
i f (vid e o .c u rre n tS rc ) a t r += ' s r c \ n ' ;
i f ( v id e o .c o n t r o ls ) a t r += ' c o n t r o l s ' ^ ' ;
i f (vid e o .a u to p la y) a t r += ' auto p la y\n' ;
i f ( v id e o .lo o p ) a t r += 'l o o p \ n ' ;
i f ( v id e o .p o s te r) a t r += ' p o s t e r i n ' ;
i f ( v i d e o . i d ) a t r += ' i d \ n ' ;
i f (vid e o .w id th ) a tr += ' w id th \n' ;
i f (v id e o .h e ig h t ) a t r += 1h e ig ht\n' ;
a le rt(a tr);
}
btn [8 ] .o n c lic k = f u n c t i o n Q {
a l e r t ( ' A duração do video é de: '+ vid eo .d uratio n+ ' segundos1) ;
}
b tn [ 9 ] .o n c lic k = fu n c t io n ) ) {
a l e r t ) '0 tempo de execução no c l ic k f o i de: ' +vid eo . cu rre nt!im e+' segundos');
}
}
window.onload = i n i t ;
> HTML
<button typ e="b utto n">R etir ar capa</button>
cbutton type="button">Recolocar capa</button>
<button type="button">Largura do v i de o? < /b utto nx br>
cbutton type="button">Aumentar dimensõesc/button>
cbutton type=''button">Dimensões d e f a u l t< / b u t t o n x b r >
cbutton type="button''>Volurne?c/button> Rode o vídeo a lt e r e o volume e click<br>
cbutton type="button” >Estado do video?</button> C lick com vídeo rodando, em pause e final execução<br>
cbutton type="button">A tribu tos?c/butto n>
cbutton type="button">Duração?c/button>cbr> /
cbutton type="button">Tempo execução?c/button> C lic k com vídeo rodando
[c3-video-ex10.html]
Capítulo 3 aÁudio e vídeo 123
3.3.2 Métodos
load()
playO
pause()
canPlayType(f/po)
Esse método verifica se o agente de usuário é capaz de reproduzir o vídeo cujo tipo
é conforme especificado no parâmetro tipo. No parâmetro tipo deve-se especificar
o M IME type e os codecs do vídeo. O método retorna uma string vazia ou a string
“maybe” ou a string “probably”, conforme o navegador não ofereça suporte, ofereça
suporte com uso de plugin, ou não há certeza de suporte respectivamente.
}
124 HTML 5
}
</script>
O uso desse método, assim como do elemento track, ainda não é suportado pelos
navegadores atuais e o formato de sua implementação ainda é objeto de discussão.
loadstart
Evento ocorre quando o agente de usuário iniciou o processo de busca dos meta-
dados da mídia no endereço especificado no atributo src.
Capítulo 3 ■ Áudio e vídeo 125
progress
suspend
abort
Evento ocorre quando o agente de usuário parou a obtenção dos dados da mídia
sem que o processo de download tenha chegado ao fim e por motivo que não foi
causado por um erro.
error
Evento ocorre quando há um erro que interrompe a obtenção dos dados da mídia,
emptied
Evento ocorre quando o elemento de mídia, não vazio, foi esvaziado durante o
processo de obtenção e download dos dados da mídia (seja pela ocorrência de um
erro fatal, seja por ter sido evocado o método load() durante o processo)
stalled
Evento ocorre quando o agente de usuário está tentando a obtenção dos dados da
mídia, mas os dados não estão vindo.
play
pause
loadedmetadadta
Soadeddaía
waifing
playing
canplay
canplayfhrough
seeking
Evento ocorre quando o atributo seeking assume o valor true (está havendo busca
por uma nova posição de reprodução).
seeked
Evento ocorre quando o atributo seeking assume o valor false (terminou a busca
por uma nova posição de reprodução).
timeupdate
ended
ratechange
durationchange
volumechange
A sintaxe geral pa-ra atrelar uma função a ser executada na ocorrência de um evento
usa o método do DOM 2 addEventListener(evento, função, booleano).
►JavaScript
fu nctio n i n i t Q {
var video = documerrt.getElementById(' v i d e o ' ) ;
var btn = document.getElementsByTagName('button');
var v a lo r = document.getEleinentById(' v a l o r ' ) ;
128 HTML 5
}
v i d e o . a d d E v e n t L i s t e n e r f p l a y ' , evento, f a l s e ) ;
v id e o .a d d E v e n t Lis te n e r( 'p ro g r e s s 'j evento, f a l s e ) ;
v i d e o .a d d E v e n t L i s te n e r ( 'p a u s e ', evento, f a l s e ) ;
v id e o .a d d E v e n t L i s te n e r ( 1ended' , evento, f a l s e ) ;
vide o.a d dEventListe ner( 'volum echange', evento, f a l s e ) ;
}
window.onload = i n i t ;
► HTML
<video poster=”capa.jpg" Controls id="video" width="400">
csource src="video.ogv" type="video/ogg">
<source src="video.mp4" type="video/mp4">
<source src="video.w ebm" type="video/webm">
< ! - - Código (X)HTHL para inserção de video com Flash -- >
<p>Seu navegador não suporta o elemento video da HTML5.
<br>Faça <a href="video.mp4">download do vide o < /a x /p >
</video>
<p id = "v a lo r" c la s s = "d e s t" x / p >
^ > [c3-video-ex11.html]
Para ilustrar o uso dos atributos, métodos e eventos da API de mídia da HTML5,
desenvolveremos e comentaremos passo a passo um script para personalizar os
controles de um vídeo. Os diferentes arquivos constantes em cada um dos passos
mostrados estão disponíveis para visualização no site do livro.
► HTML
<video poster="capa.jpg" Controls id="video'' width="400">
csource src="video.ogv" type="video/ogg">
<source src="video.mp4" type="video/mp4">
Capítulo 3 o Áudio e vídeo 129
►HTML
cvideo poster="capa.jpg" Controls id="video" width="400">
</video>
<pxbutton type="button" id="btn">▶</buttonx/p>
Inserido o botão com o símbolo para play, vamos desenvolver um script para
iniciar a reprodução do vídeo quando nele ocorrer um click do usuário. Observe
a seguir.
►JavaScript
function init() {
var video = document.getElementById('video');
var btn = document.getElementById('btn');
var play = function { video.playQ;}
btn.addEventListener('click', play, false);
}
window.onload = init;
[c3-video-ex12-P1.htm!]
Segundo passo
Contudo, há uma solução mais elegante que consiste em usar um só botão para
desempenhar as funções de play e pause. A lógica da programação para conseguir
esse efeito quando o botão é clicado é a seguinte:
> JavaScript
function initQ {
var btn = document.getElementById('btn');
var video = document.getElementById('video');
var playPause = function() { .
if (video.paused || video.ended) {
video.playQ;
this.innerHTML = ’█ █';
} else {
video.pause()
this.innerHTML = '▶';
}
}
btn.addEventListener(’click'j playPause, false);
}
window.onload = init;
• .c [c3-video-ex12-P2.html]
Você observou o que acontece com o botão quando o vídeo chega ao final?
Capítulo 3 ■ Áudio e vídeo 131
Terceiro passo
Você deve ter observado que, quando a reprodução do vídeo chega ao final, ela
cessa e o vídeo entra em estado de pausa, mas o botão não muda para o símbolo
de reprodução como era de se esperar.
Vamos usar o evento ended da API de mídia da HTM L5 para detectar o instante
de chegada da reprodução do vídeo ao seu final e, quando esse evento ocorrer, fa
remos a mudança do símbolo do botão. O seguinte acréscimo deverá ser feito no
script anterior.
►JavaScript
function init() {
var btn = document.getElementByld('btn')j
// igual ao anterior
btn.addEventListener('click', playPause, false);
video.addEventlistenerCended', functionQ {
btn.innerHTML = '▶';
}j false);
}
window.onload = init;
[c3-video-ex12-P3.html]
Terminada a personalização dos botões play e pause? Ainda não. Você saberia
dizer o que falta sob o ponto de vista da funcionalidade dos botões?
Q u arto passo
■ Inicie o vídeo clicando o botão play e depois abra o menu de contexto e pare
a reprodução clicando a opção P a u sa .
^ jíj ;j file:,i',í/D:/5ites,i'livroHTML5,ii:odigos/cap_03/c3-video-exl2-P4.htriil
Capitulo 3
JavaScript W e b D evelope r ►
Quando o controle do vídeo é feito pelo menu de contexto, não está havendo
a troca do símbolo do botão, ou seja, acionar pausa pelo menu de contexto não
coloca o botão no estado play e vice-versa. Isso fica claro quando se compara o
botão personalizado com o botão do controle-padrão do navegador. Por que não
está ocorrendo o comportamento correto para o botão personalizado?
► JavaScript
function init() {
var btn = document.getElementById('btn1);
// igual ao anterior
video.addEventListener(1ended1j functionQ {
btn.innerHTML = ’▶’;
}; false);
video.addEventListener('pause', function() {
btn.innerHTML = '▶';
h false);
video.addEventListener('play', function() {
btn.innerHTML = '█ █ ';
}> false);
}
window.onload = init;
" fe [c3-video-ex12-P4.html]
Quinto passo
A remoção com uso de script é a solução mais indicada, pois, na falta de suporte
à JavaScript no navegador, o usuário não ficará privado dos controles.
► JavaScript
function initQ {
# 3 [<3-video-ex12-P5.html]
Sexto passo
Navegadores que não suportam o tipo range para o elemento input renderizam um
campo do tipo text. Atualmente os navegadores Chrome, Safari e Opera suportam
esse elemento.
Capítulo 3 ■ Áudio e vídeo 135
Slider horizontal
c 7
Slider vertical
► JavaScript
function init() {
var video = document.getElementByldCvideo');
var slider = document.getElementByldCslider ")5
var vol = document. getElementByld('vor);
slider.addEventListener('change', functionQ {
video.volume = this.value;
vol.innerHTML = (this.value);
}, false);
// a partir daqui igual ao anterior
— secao.insertDefore(btn, video);
secao.insertBefore(btn, slider);
var video = document.getElementByld('video');
}
window.onload = init;
136
HTML 5
► HTM L
</video>
<input type="range" min="0" max="l" value="l" step="0.1" id=''slider" />
<span id="vol">l</span>
[c3-video-ex12-P6.html]
Sétim o passo
Nesse passo vamos inserir controles personalizados para adiantar (Fast Forward),
atrasar (Rewind) e reproduzir o vídeo em câmera lenta.
►JavaScript
function init() {
btnFF,addEventListener('click', functionQ {
video.playQ;
video.playbackRate = 3;
}> false);
btnRW.addEventLlstenerCclick', function() {
video.play();
video.playbackRate = -20;
}, false);
btnSM.addEventListener('click', function() {
video.play();
video.playbackRate = 0.3;
}, false);
}
window.onload = init;
M .' [c3-video-ex12-P7.html]
Oitavo passo
JavaScript
function init() {
► HTML
<br>
«progress max=""x/progress>
«span id="pp">0«/span>%
Nono passo
Você deve ter notado que os botões de controle foram inseridos no DOM com uso
de script; contudo, o slider de controle do som e a barra de progresso da reprodução
do vídeo constam da marcação EITML da página. Nesse nono passo, proponho que
você retire esses controles da marcação e insira-os no DOM com uso de script tal
como fizemos com os botões.
4.1 Canvas
O elemento canvas destina-se a delimitar uma área para criação dinâmica de ima
gens, como gráficos estáticos, jogos e gráficos dinâmicos e imagens em geral criadas
com linguagem de programação dinâmica. Todo o trabalho de criação e animação
é feito com JavaScript.
E necessário que o desenvolvedor faça uma análise criteriosa para uso desse
elemento. Não devemos usá-lo se houver um elemento mais apropriado. Por exem
plo: para marcar o cabeçalho ou o topo de um site, ainda que ele tenha sido pro
jetado com uso maciço de imagens, talvez seja mais apropriado o uso do elemento
hl devidamente estilizado e não o uso de canvas. Como regra geral, não devemos
simplesmente decidir usar canvas e descartar outros elementos sempre que temos
uma imagem na página.
140
Capítulo 4 ■ Canvas 141
da página e ser inserido tendo canvas como seu Container. Tal como ocorre com o
elemento audio estudado anteriormente, o conteúdo inserido em canvas é ignorado
por navegadores que suportam esse elemento e renderizado pelos que não suportam.
► CSS
canvas {
border: lpx solid #000;
background: #ffc;
}
►HTML
<canvas>
<p> Conteúdo alternativo para navegadores que não suportam canvas.</p>
</canvas>
M l [c4-canvas-ex1.html]
Contudo, você não estará limitado a essas dimensões, pois, além dos atributos
globais, o elemento canvas suporta os atributos width e height destinados a definir
respectivamente a largura e a altura da área de criação das imagens dinâmicas. No
exemplo a seguir, usamos esses atributos para definir uma área com dimensões
personalizadas.
142 HTML 5
► css
canvas {
border: lpx solid #000;
background: #ffc;
► HTML
O 1.-,
w J [c4-canvas-ex2.htm!]
A unidade de medida das dimensões definidas com uso dos atributos é o pixel,
porém é admitido definir-se as dimensões de canvas com CSS; nesse caso, podemos
usar qualquer medida CSS válida, tais como em, porcentagem etc. O exemplo a seguir
ilustra o caso de definição das dimensões com CSS.
►CSS
canvas {
width:100%;
height:200px;
border: lpx solid #000;
background: #ffc;
}
► HTML
<canvas>
<p>Conteúdo alternativo para navegadores que não suportam canvas.</p>
</canvas>
T u [c4-canvas-ex3.html]
► HTML
ccanvas id="quadro" width="400" height="200">
<p>Conteúdo alternativo para navegadores que não suportam canvas.</p>
</canvas>
►JavaScript
Código comentado:
Linha(s) Descrição
Linha 1 Cria uma referência (var canvas) para o elemento canvas que servirá de
área para a criação gráfica.
Linha 2 Usa o método getContext ( ) previsto na API de canvas para criar a referência
(var ctx) ao contexto de criação gráfica. Essa referência é a chave para
acessar os métodos e atributos JavaScript da API.
A API de canvas prevê métodos e atributos próprios que visam a facilitar a criação
gráfica. Além deles, é claro, qualquer objeto e seus métodos e propriedades próprios
da linguagem JavaScript podem ser utilizados na criação.
144 HTML 5
> HTML
ccanvas id="quadro" width»"400" height=''200">
<p>Conteúdo alternativo para navegadores que não suportam canvas.</p>
</canvas>
>■ JavaScript
4 X 1 API de canvas
4 .1.1 .1 strokeRect(x,y,/,/])
4 .1.1.2 strokeStyle
Esse atributo destina-se a definir a cor das linhas do elemento gráfico criado. Os
valores possíveis são as cores válidas em CSS, tais como HSL, HSLA, RGB, RGBA
(hex e porcentagem) e keywords. Não sendo definida a cor com uso desse atributo,
o padrão é a cor preta # 000000.
Capítulo 4 a Canvas 145
4.1.1.3 lineWidth
4.1.1.4fillRect(x,y,l,/i)
4.1.1.5 filIStyle
Exemplo:
►JavaScript
1 <script>
2 var canvas = document.getElementByld('quadro');
3 var ctx = canvas.getContext('2d');
4 ctx.strokeStyle = '#f00';
5 ctx.lineWidth = 2;
6 ctx.strokeRect(30,30j 80,40);
7 ctx.strokeStyle = '#00f;
8 ctx.lineWidth = 4;
9 ctx.strokeRect(130,100, 140,90);
10 . ctx.strokeStyle = '#000';
11. ctx.lineWidth = 2;
12 . ctx.filIStyle = 'rgba(0,255,0,0.4)';
13. ctx.fillRect(150,60, 200,70);
14. ctx.strokeRect(148,58, 204,74);
15. </script>
■ ÏH [c4-canvas-ex4.html]
146 HTML 5
Código comentado:
Linha(s) Descrição
Notar que o elemento gráfico definido nas linhas 10 a 14 é formado pela criação
de dois retângulos. Um com uso do método strokeRectQ que criou o contorno e
outro com uso do método fillRect() que criou o retângulo sólido dentro do con
torno. Observe que as coordenadas e dimensões dos dois retângulos diferem para
compensar a espessura da borda.
4.l.1.6clearRect(x,y,/,fi)
Esse método destina-se a apagar uma área retangular de canvas. No exemplo a seguir.
desenhamos um retângulo e a seguir apagamos um retângulo menor nele contidc.
Exemplo:
►JavaScript
<script>
var canvas = document.getElementById('quadro');
var ctx = canvas.getContext('2d');
ctx.strokeStyle = '#000';
ctx.lineWidth = 2;
ctx.fillStyle = '#060';
ctx.fillRect(20,30, 300,150);
ctx.strokeRect(18,28, 304,154);
ctx.clearRect(50,60,180,100);
</script>
•ígQ [c4-canvas-ex5.html]
Capítulo 4 ■ Canvas 147
4 .1 .1 7 shadow
Exemplo:
►JavaScript
<script>
var canvas = document.getElementById('quadro');
var ctx = canvas.getContext('2d');
ctx.fillStyle = ’#©f 0';
ctx.shadowColor = cód_hexa_cor; // você escolhe a cor
ctx.shadowOffsetX = valor; // você escolhe o valor
ctx.shadowOffsetY = valor; // você escolhe o valor
ctx.shadowBlur = valor; // você escolhe o valor
ctx.fillRect(40,20, 290,150);
</script>
[c4-canvas-ex6.html]
4 .1.1.8 beginPath()
Esse método destina-se a resetar o path corrente e nativo do contexto canvas criando
condições para se iniciar a construção de um novo path. Todo path ou subpath a
ser construído deverá começar com esse método.
4.1.1.9moveTo(x,y)
4 .1.1.10 lineTo(x,y)
Esse método destina-se a desenhar uma linha reta desde a posição na qual se en
contra a pena até as coordenadas x e y
O exemplo a seguir cria uma linha poligonal com três segmentos de reta nas
cores vermelha, azul e verde.
►JavaScript
<script>
var ctx = canvas.getContext('2d');
ctx.beginPathQ;
ctx.strokeStyle = '#f00';
ctx.lineWidth = 2;
ctx.moveTo(20,20);
ctx.lineTo(80,120);
ctx.strokeQ;
ctx.beginPathQ;
ctx.strokeStyle = '#009';
ctx.moveTo(80,120);
ctx.lineTo(150,30);
ctx.stroke();
ctx.beginPathQ;
ctx.strokeStyle = '#090';
Capítulo 4® Canvas 149
ctx.moveTo(150,30);
ctx.lineTo(350,180);
ctx.strokeQ;
<script>
[c4-canvas-ex7.html]
O exemplo a seguir cria uma linha poligonal com três segmentos de arco nas
cores vermelha, azul e verde.
►JavaScript
<script>
var canvas = document.getElementByld('quadro');
var ctx = canvas.getContextQ2d');
ctx.beginPathQ;
ctx.moveTo(20,50);
ctx.strokeStyle = '#f00';
ctx.arcTo(100, 50, 100, 130, 80);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(100,130);
ctx.strokeStyle = '#009';
ctx.arcTo(200, 130, 200, 30, 100);
ctx.strokeQ;
ctx.beginPathQ;
ctx.moveTo(200,30);
ctx.strokeStyle = '#090';
ctx.arcTo(200, 190, 380, 190, 180);
ctx.strokeQ;
</script>
Dr,
♦ J [c4-canvas-ex8.html]
150 HTML 5
Esse método destina-se a desenhar um arco com centro nas coordenadas x e y com
raio r e ângulo inicial e final definidos em radianos (com sinal positivo ou negativo).
O sentido do ângulo pode ser anti-horário (sentido trigonométrico positivo) ou
horário (sentido trigonométrico negativo) e deve ser definido pelos booleanos true
e false respectivamente. Lembramos que ângulos medidos em radianos na sintaxe
JavaScript são medidos com o uso objeto Math da linguagem. Por exemplo: Math.
PI/2=90', Math.PI=180", 3/2*Math.PI=270°, Math.PI*2=360° e assim por diante.
►JavaScript
<script>
var canvas = document.getElementByldCquadro');
var ctx = canvas.getContext('2d');
ctx.beginPathQ;
ctx.strokeStyle = '#f00';
ctx.arc(80, 100, 40, 0, Math.PI*2, true);
ctx.strokeQ;
ctx.beginPath();
ctx.strokeStyle = '#090';
ctx.arc(200, 100, 40, 0, Math.PI, true);
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle = '#00f;
ctx.arc(200, 100, 40, 0, Math.PI, false);
ctx.strokeQ;
ctx.beginPath();
ctx.strokeStyle = 1#f90’;
ctx.arc(320, 100, 40, 0, 3/4*Math,PI, true);
ctx.strokeQ;
</script>
Qs>
[c4-canvas-ex9.html]
Capítulo 4 ■ Canvas 151
Esse método destina-se a preencher com uma cor sólida um caminho. Para de
monstrar esse método vamos fazer o preenchimento dos arcos do exemplo anterior
com uma cor amarela. Destacamos as alterações feitas no script anterior. Exemplo:
►JavaScript
<script>
var canvas = document.getElementByld('quadro');
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.strokeStyle = ’#f00’;
ctx.fillStyle = '#0ff1;
ctx.arc(80, 100, 40, 0, Math.PI*2, true);
ctx.fillQ;
ctx.strokeQ;
ctx.beginPath();
ctx.s“trokeStyle = '#090';
c t x . f i l l S t y l e = '#996';
ctx.arc(200, 100, 40, 0, Math.PI, true);
c tx .fillO ;
ctx.strokeQ;
ctx.beginPathQ;
ctx.strokeStyle = '#00f;
ctx.fillStyle = '#c6c';
ctx,arc(200, 100, 40, 0, Math.PI, false);
ctx.fillO;
ctx.strokeQ;
ctx.beginPathQ;
ctx.strokeStyle = '#f90';
ctx.fillStyle = '#0c0';
ctx.arc(320, 100, 40, 0, 3/4*Math.PI, true);
ctx.fillQ;
ctx.strokeQ;
</script>
[c4-canvas-ex10.html]
152 HTML 5
4 .1.1.15 rect(x,y,/Q)
Exemplo:
►JavaScript
<script>
var canvas = document.getElementByld('quadro');
var ctx = canvas,getContext('2d');
ctx.lineWidth = 4;
ctx.beginPathQ;
ctx.strokeStyle = '#f00';
ctx.fillStyle = '#0ff';
ctx.rect(50, 60; 200; 120);
ctx.fillO;
ctx.strokeQ;
</script>
[c4-canvas-ex11.html]
4 .1 .1 .1 6 closePathO
Exemplo:
►JavaScript
<script>
var canvas = document.getElementById('quadro');
var ctx = canvas.getContext('2d');
ctx.lineWidth = 2;
ctx.beginPathQ;
ctx.moveTo(20,20);
ctx.strokeStyle = '#f001j
ctx.lineTo(80,190);
ctx.lineTo(180,160);
ctx.lineTo(220,20);
ctx.closePathQj
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle = '#090';
ctx.arc(300, 100, 80, 0, -3/2*Math.PI, true);
ctx.closePathO;
ctx.stroke();
</script>
■$} [c4-canvas-ex12.html]
4 .1 .1 .1 7 globalAlpha
4 .1.1.18 lineJoin
Esse atributo destina-se a definir a forma como as linhas se unem. Os valores pos
síveis são: miter, bevel e round.
4.1.1.19 lineCap
►JavaScript
<script>
var canvas = document.getElementByldf'quadro');
var ctx = canvas.getContext('2d’);
ctx.lineloin = escolha;
ctx.lineCap = escolha;
ctx.globalAlpha = escolha;
ctx.lineWidth = 50;
ctx.beginPathQ;
ctx.moveTo(100,40);
ctx.strokeStyle = '#f00‘;
ctx.lineTo(100jl30);
ctx.lineTo(350jl30);
ctx.stroke();
</script>
"'í [c4-canvas-ex13.html]
4 .1.1.2 0 createLinearGradient(x,y,xí,y7)
4 .1 .1 .2 1 createRadialGradientfx, y ,r ,x 1 ,y 1 ,r l )
do gradiente. Em um gradiente de duas cores, esse método será aplicado duas vezes,
uma com offset 0 e cor inicial e outra com ofíset 1 e cor final. Podemos criar um
gradiente de várias cores definindo várias vezes esse método com offset crescente,
por exemplo: 0.1,0.2, 03,0.4,0.8,1 (seis cores).
►JavaScript
<script>
var canvas = document.getElementByld('quadro');
var ctx = canvas.getContext('2d');
// cria um gradiente de vermelho para azul
gradient = ctx. createLinearGradient(10,10,250,100);
gradient.addColorStop(0, '#f00');
gradient.addColorStop(l, '#00f');
// cria um gradiente de verde para amarelo e azul claro
gradientl = ctx.createLinearGradient(330,20,330,160);
gradientl.addColor$top(0, '#090');
gradientl.addColorStop(0.5, 1#ff9 1);
gradientl.addColorStop(1, '#9cf');
// cria um gradiente de laranja para amarelo claro
gradient2 = ctx.createLinearGradient(60,120,180,120);
gradient2.addColorStop(0, '#f90');
gradient2.addColorStop(l, '#ffc1);
// aplica os gradientes em dois retângulos e um círculo
ctx.fillStyle = gradient;
ctx.fillRect(10,10,250,100);
ctx.fillStyle = gradientl;
ctx.fillRect(280,20,100,160);
ctx.fillStyle = gradient2;
ctx.arc(120,120,60,0,2*Math.PI, true);
ctx.fillQ;
</script>
•#’.] [c4-canvas-ex14.html]
Exemplo:
►JavaScript
<script>
var canvas = document.getElementByld('quadro ') ;
var ctx = canvas.getContext('2d');
gradient = ctx.createRadialGradient(130,60,10,130,60,168);
gradient.addColorStop(0, 1#f00');
gradient.addColorStop(l, '#00f');
gradientl = ctx.createRadialGradient(330,50,5,330,50,130);
gradientl.addColorStop(0, '#090');
gradientl.addColorStop(0.5, '#fd8');
gradientl.addColorStop(l, '#9cf');
gradient2 = ctx.createRadialGradient(100,100,5,100,100,60);
gradient2.addColorStop(0, '#f90');
gradient2.addColorStop(l, '#f5f5f5');
ctx.fillStyle = gradient;
ctx. fillRect(10,10,250,100);
ctx.fillStyle = gradientl;
ctx.fillRect(280,20,100,160) ;
ctx.fillStyle = gradient2;
ctx.arc(120,120,60,0,2*Math.PI, true);
ctx.fillO;
</script>
[c4-canvas-ex15.html]
►JavaScript
<script>
var canvas = document.getElementById('quadro');
var ctx = canvas.getContext(’2d');
var imagem = new ImageQ;
imagem, src = 'flor. png';
imagem.onload = function!) { // importante executar o desenho depois de a imagem ter sido carregada
var pattern = ctx.createPattern(imagem, 'no-repeat');
var patternl = ctx.createPattern(imagem, 'repeat');
ctx.lineWidth = 4;
ctx.strokeStyle = '#f00';
ctx.fillstyle = pattern;
ctx. fillRect(2,2,190,196);
ctx.strokeRect(2,2,190,196);
ctx.fillstyle = patternl;
ctx.fillRect(200,2,198,196);
ctx.strokeRect(200,2,198,196);
}
</script>
[c4-canvas-ex16.html]
4 .1.1.2 4 globalCompositeOperation
Esse atributo destina-se a definir como uma imagem será desenhada em relação
ao estado atual do desenho em canvas, ou, ainda, como será a composição das duas
imagens.
A composição das imagens destination e source pode ser feita de onze maneiras
diferentes. Por padrão, a imagem source é colocada sobre a imagem destination, ou
seja, o empilhamento das imagens em canvas se dá com a imagem declarada por
último no código sobre as imagens anteriores. Em resumo, esse atributo interfere não
só na ordem de empilhamento, mas também na integração entre as duas imagens.
►JavaScript
<script>
var canvas = document.getElementByld('quadro');
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#900';
ctx.fillRect(60,60,220,130);
ctx.globalCompositeOperation = escolha;
ctx.fillStyle = '#090';
ctx.beginPath();
ctx.arc(300,100,80,0,2*Math.PI,true);
ctx.fillQ;
</script>
- [c4-canvas-ex17.html]
Antes, porém, vamos examinar o esquema gráfico mostrado na figura 4.2 que es
clarece o mecanismo de aplicação de estilos e transformações com uso desses métodos.
^ estilos (transformações)
desenho 1
s@ve()
estilos (transformações)
desenho 2
estilos (transfòrmações)
desenho 3
saveQ
. estilos (transformações)
desenho 4
saveQ
1 \ restore
r€ ()_
%
I esenhoô
\
% restoreQ
'4 desenho 6
\ restoreQ
"!'"^>desenhb 7
Figura 4.2 - Mecanismo saveQ restoreQ.
Podemos usar quantos métodos saveQ quisermos em nosso script para armazenar
estilos, mas, é lógico, devemos posicioná-los no código após declarações de estilos
(ou transformações) a serem armazenados.
160 HTML 5
No segundo canvas usamos duas vezes o método save)) para armazenar os estilos
do primeiro (vermelha) e segundo (verde) retângulos.
► JavaScript
<script>
var canvas = document.getElementByld('quadro');
van ctx = canvas.getContext)'2d'); // canvas
ctx.fillStyle = 'red';
ctx.fillRect (40,20,40,140);
ctx.fillStyle = 'green';
ctx.fillRect(110,20,40,140);
ctx.fillStyle = 'blue';
ctx.fiilRect(180,20,40,140);
ctx.fillRect(250,20,40,140);
ctx.fillRect(320,20,40,140);
Capítulo 4 0 Canvas 161
c tx l.r e s to r e ();
c t x l . f i l l R e c t ( 2 5 0 ,2 0 ,4 0 ,1 4 0 );
c tx l.r e s to r e ();
c t x l . f i l l R e c t ( 3 2 0 ,2 0 ,4 0 ,1 4 0 ) ;
</s cripts
«5 [c4-canvas-ex18.html]
4.1.1.25 scale(x,y)
Para diminuir, os parâmetros devem ser definidos com números maiores que
zero e menores que um. Assim, x = 03 resulta em redução de 70% nas dimensões
horizontais, x=0.5 em redução pela metade e assim por diante.
►JavaScript
<script>
var canvas = document.getElementById('quadro');
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#ddd';
ctx.fillRect(10,5,90,90); // quadrado referência
ctx.scale(escolha,escolha);
c tx .fillS ty le = 'r g b a ( 0 ,1 0 0 ,0 ,0 .5 ) ';
ctx.fillRect(10,5,90,90);
</script>
dp7.) [c4-canvas-ex19.html]
4 .1.1.2 6 transSatefx, y)
►JavaScript
<script>
var canvas = document.getElementByld(’quadro1);
var ctx = canvas.getContext('2d');
Capítulo 4 b Canvas 163
c t x . f i l l S t y l e = '# ddd';
c t x .f i l l R e c t ( 1 9 0 , 9 0 ,2 0 ,2 0 ) ; // quadrado re ferência
ctx.translate(escolha,escolha);
c tx .f illS ty le = 'r g b a ( 0 ,1 0 0 ,0 ,0 .5 ) ';
c t x .f i l l R e c t ( 1 9 0 ,9 0 , 2 0 , 2 0 ) ;
</script>
[c4-canvas-ex20.html]
4 .1 .1 .2 7 rotate(ánguto)
o.o.
ângulo de rotação
j +m
J
/
K /
►JavaScript
<script>
var canvas = document.g etEle m e n tB yId ('q u ad ro ');
var c tx = c a n v a s .g e tC o n te x t( '2 d ') ;
c t x . f i l l S t y l e = ’ #ddd';
c t x .f il lR e c t ( 7 0 j7 0 j2 6 0 j6 0 ) ; // retângulo re ferência
var angulo = escolha;
c t x .r o t a t e (a n g u lo ) ;
c t x . f i l l S t y l e = ' rgba(0j 100j 0j 0 . 5 ) ' ;
c t x . f i l l R e c t ( 7 0 ,7 0 ,2 6 0 ,6 0 ) ;
</script>
■Cs» [c4-canvas-ex21.html]
Insere a imagem definida no parâmetro imagem com seu canto superior esquerdo
nas coordenadas definidas nos parâmetros dx e dy O exemplo a seguir esclarece o
uso desse método.
►JavaScript
<script>
var canvas = document. getEle m entB yId(' quadno' ) ;
var ctx = canvas. g e t C o n t e x t ( ' 2d ' ) ;
var ellmagem = document. cre ateEle m ent(' im g ') j
ellmagem.src = 'fl o r .p n g ';
c t x .d r a w l m a g e ( e l l m a g e m , 2 0 , 5 0 ) ; // insere a imagem ellmagem nas coordenadas 20, 5ß
</script>
■■te [c4-canvas-ex22.html]
Insere a imagem definida no parâmetro imagem com seu canto superior esquerdo
nas coordenadas definidas nos parâmetros dx e dy redimensionando a imagem para
as dimensões em pixel dl de largura por dh de altura. O exemplo a seguir esclarece
o uso desse método.
Capítulo 4 ■ Canvas 165
► JavaScript
<script>
var canvas = document.getElementById('quadro');
var ctx = canvas.getContext('2d');
var ellmagem = document.createElement('img');
ellmagem.src = 'flor. png';
ctx .drawlmage(ellmagem, 20, 50, 100, 140); // insere a imagem ellmagem com 100xl40px
// nas coordenadas 20, 50
</script>
■ 9 J [c4-canvas-ex23.html]
4 .1.13 0 drawlmage(/magem, sx, sy, sl, sh, dx, áy, dl, dh)
►JavaScript
<script>
var canvas = document.getElementByldf1quadro');
var ctx = canvas.getContextf'2d')j
var ellmagem = document.createElement('img');
ellmagem.src = 'flor.png1;
// recorta a imagem ellmagem e insere com o dobro do tamanho nas coordenadas 100,100
ctx.drawlmage(ellmagem, 10, 5, 25, 30, 100, 100, 50, 60);
</script>
[c4-canvas-ex24.html]
4.1.131 font
Esse atributo define as características da fonte a ser usada nos textos a serem inse
ridos em canvas. A sintaxe para a definição das características é a mesma usada nas
CSS e mostrada a seguir a título de recordação.
font: [font-style || font-variant || font-weight]? font-size[/line-heigth]? font-family |
caption | icon | menu | message-box | small-caption | status-bar | inherit
}
Capítulo 4 ■ Canvas 167
}
ctx.font = ctx.font = '250% Arial, serif; // a fonte em canvas será com tamanho igual a
// 250% de 10px = 25px
Esse método destina-se a definir o contorno do texto a inserir. Admite três parâ
metros obrigatórios e um parâmetro facultativo. O parâmetro texto é uma string e
define o texto a ser inserido, os parâmetros x e y definem as coordenadas de inserção
do texto. O parâmetro facultativo cM ax define o comprimento máximo do texto
e, quando definido para um valor numérico menor do comprimento-padrão do
texto, faz com que ele sofra um efeito de compressão na horizontal, diminuindo o
espaçamento e a largura das letras.
► JavaScript
<script>
var canvas = document.getElementById('quadro');
var ctx = canvas.getContext('2d');
168 HTML 5
[c4-canvas-ex25.html]
4 .1.1.3 4 textAlign
►JavaScript
<script>
var canvas = document.getElementByld('quadro');
van ctx = canvas.getContext(12d');
// Texto referência em cinza
ctx.font = '50px serif;
ctx.fillStyle = '#ccc';
ctx.fillText( 'Maujor', 200, 100);
// Ponto referência em azul
ctx.fillStyle = ’#006';
ctx.arc(200, 100, 3, 0, 2*Math.PI, true);
ctx.fillQ;
// Texto a alinhar em vermelho
ctx.font = '50px serif;
ctx.fillStyle = 'rgba(200, 0, 0, 0.6)';
ctx.textAlign = escolha;
ctx.fillTextf'Maujor', 200, 100);
</script>
[c4-canvas-ex26.html]
Capítulo 4 h Canvas 169
4.1.1.35 lextBaseline
> JavaScript
<script>
var canvas = document.getElementById('quadro');
var ctx = canvas.getContext('2d’);
// Texto referência em cinza
ctx.font = '50px serif';
ctx.fillStyle = '#ccc';
ctx.fillTextCMaujor', 200, 100);
// linha de referência em azul
ctx.moveTo(0,101);
c t x .l i n e T o ( 4 0 0 ,1 0 1 ) ;
c t x .s t r o k e S t y l e = ' # 0 0 f ;
c tx .s tr o k e Q ;
// Texto a alinhar em vermelho
ctx.font = '50px serif;
ctx.fillStyle = 'rgba(200, 0, 0, 0.6)';
ctx.textBaseline = escolha;
ctx.fillTextCMaujor', 200, 100);
</script>
4 Ô [c4-canvas-ex27.html]
A figura 4.5 retirada das especificações para a HTM L5 mostra as linhas de base
para alinhamento de texto.
♦ 3 [c4-canvas-ex28.html]
170 HTML 5
MMMMMÈ nanglng
- — f-
i. , middle
-h f alphabets ideographic
bottom of square
5.1.1 accesskey
Esse atributo destina-se a definir uma tecla de atalho para ativar ou dar o foco ao
elemento quando o usuário navega com auxílio do teclado.
171
172 HTML:'
Exemplo 1:
►HTML
<nav>
<P>
<a href="http://maujor.com" accesskey="M">Site do Maujor</a> |
<a href=''http://w3.org" accesskey="W">Site W3C</a> |
<a h r e f http://google.com.br" accesskey="G">Google</a>
</p>
</nav>
- t ó [c5-accesskey-ex1.html]
Exemplo 2:
No exemplo a seguir teclados com a tecla da letra “S” usam essa como accesskey
e teclados numéricos usam a tecla para o número 2.
Capítulo 5 ■ Atributos HTML 173
►HTML
<form action="/busca" method="get">
<label>Buscar: <input type="search" name="q'' accesskey="s 2"></label>
<input type="submit">
</form>
■íí) [c5-accesskey-ex2.html]
5.1.2 dass
Esse atributo destina-se a definir uma classe para o elemento com a finalidade de
servir de referência para estilização e Scripts.
O valor desse atributo é constituído por uma lista de strings separadas por
espaço, não havendo qualquer restrição de caracteres para a formação das strings.
Nas versões anteriores da HTM L, esse atributo é definido para todos os elemen
tos, exceto os elementos base, basefont, head, htrnl, meta, param, script, style e title. Na
H TM L5 tornou-se um atributo global podendo ser usado para todos os elementos.
Por exemplo:
< s c rip t ty p e = " t e x t / ja v a s c r ip t" class="script-um"> // in v á l id o em HTML4 e XHTML1
< s crip t typ e = " t e x t / ja v a s c rip t'' class="script-u m"> // v á lid o em HTML5
5.1.Bcontenteditable
Esse atributo foi inventado pela M icrosoft e implementado em seus navegadores
desde a versão 5 e que agora foi reconhecido e adotado pela HTML5. Admite os
valores true, false e inherit que definem se o conteúdo do elemento é editável ou
não ou se sua condição de edição é herdada. A edição se faz no próprio agente de
usuário que renderiza o conteúdo.
f ’K.
[c5-contenteditable.html]
174 HTML 5
5.1.4 contexmenu
Esse atributo destina-se a associar o elemento ao qual foi aplicado com um menu
de contexto criado com uso do elemento menu.
Esse é um atributo não existente nas versões anteriores da E1TML, tendo sido
criado pela especificação da HTML5.
.1.5 dir
Esse atributo destina-se a definir o sentido de escrita dos textos. Os valores possíveis
para esse atributo são: ltr, r t l e auto.
O valor a u to define o sentido de escrita com base nos padrões do dispositivo que
renderiza os conteúdos.
Capítulo 5 « Atributos HTML 175
Nas versões anteriores da HTM L esse atributo é definido para todos os elementos
exceto os elementos a p p l e t , b a s e , b a s e f o n t , b r , fr a m e , f r a m e s e t , i f r a m e , param e script. Na
HTM L5 tornou-se um atributo global podendo ser usado para todos os elementos.
►JavaScript
window.onload = fu n c t io n ( ) {
var botão = document.getElementsByTagName('b u t t o n ' ) ;
var pg = document.getElementsByTagName('b o d y ' ) ;
b o t a o [ 0 ].o n c li c k = fu n c t io n ! ) {
pg[0]. setA ttrib u te(' d i r ' , 'l t r ');
}
b o ta o [l].o n c lic k = fu nctio n!) {
pg[0]. s e tA ttrib u te ('d ir' , ' r t l ');
1
b o t a o [ 2 ].o n c l ic k = fu n c t io n ! ) {
p g [ 0 ] . s e t A t t r i b u t e ( ' d i r ' , ' a u to ' ) ;
1
1
►HTML
<body>
<h3>Demonstração</h3>
<p>Essa página in te gra o conjunto de páginas exemplo do l i v r o HTML5 do Maujor.</p>
<p>Foi criada para demonstrar o a t r i b u t o g lo bal dir<p>
<p>Clique os botões a seguir para definir os a trib u to s
l t r , r t l e e auto para o elemento body dessa página</p>
cbutton type="b utto n">ltr c/b utto n>
<button typ e ="butto n">rtl</button>
cbutton typ e =''b utto n">auto< /buttonx/sectio n>
-W [c5-dir.html]
5.1.6 draggable
Esse atributo destina-se a definir se o elemento será ou não arrastável na página. Os
valores possíveis para esse atributo são: tru e , fa ls e e a u t o . O atributo apenas define o
176 h tm l;
O valor true faz com que seja possível arrastar pela página o elemento para c
qual o atributo foi definido.
Esse é um atributo não existente nas versões anteriores da HTM L, tendo sido
criado pela especificação da HTML5.
move e link.
O valor copy faz com que seja criada uma cópia do elemento arrastável na área
de recebimento.
O valor link faz com que seja criado um link para o elemento arrastável na área
de recebimento.
Esse é um atributo não existente nas versões anteriores da HTML, tendo sido
criado pela especificação da HTML5.
5,1.8 hidden
Não confundir atributo booleano com valor booleano para o atributo. Neste
atribuem-se os valores t r u e ou f a l s e e naqueles a presença ou ausência do atributo
sem declaração de valor é suficiente.
Esse é um atributo não existente nas versões anteriores da HTML, tendo sido
criado pela especificação da HTML5.
Capítulo 5 0 Atributos HTML 177
► HTML
<hl>Star Trek Game</hl>
<section id="login ">
<h2>Login</h2>
<form>
}
</script>
</section>
csection id = ,,game'' hidden»
< ! - - In te rfa ce do, jogo -->
</section
5.1.9 id
Esse atributo destina-se a criar um identificador único para o elemento na página.
O valor desse atributo deve conter pelo menos um caractere e não poderá conter
caracteres vazios.
Um valor para esse atributo deve ser único na página, ou seja, a dois ou mais
elementos de uma página não é permitido atribuir um mesmo valor de id.
Esses atributos não existem nas versões anteriores da HTM L, tendo sido criados
pela especificação da HTML5.
5.1.11 lang
Esse atributo destina-se a identificar o idioma primário do texto inserido no elemen
to para o qual foi definido. O valor desse atributo deve ser uma abreviatura-padrãc
identificadora de idiomas.
Nas versões anteriores da HTM L esse atributo é definido para todos os elementos
exceto os elementos applet, base, basefont, br, frame, frameset, iframe, param e script. Na
HTM L5 tornou-se um atributo global podendo ser usado para todos os elementos.
►HTML
<p>A palavra <span lang ="en">star< /span> em inglês significa e s tre la .</p>
5.1.12 spellcheck
Esse atributo destina-se a marcar conteúdos inseridos pelo usuário que devam te:
sua grafia e sintaxe verificada por um corretor ortográfico.
Esse atributo admite os valores true, false e default que definem se o conteúdc
do elemento deve ser submetido ao corretor ortográfico ou não ou se sua condiçâc
de correção é aquela definida pelo navegador.
Capítulo 5 ■ Atributos HTML 179
Esse é um atributo não existente nas versões anteriores da HTM L, tendo sido
criado pela especificação da H T M L 5 .
. HTML
<div contenteditable="true">
<p s p e ll c h e c k = " tru e " > C o n te ú d o e d itá v e l a ser verificado pelo co rre to r ortográfico</p>
</div>
5.1.13 style
Esse atributo destina-se a definir regras CSS para o elemento ao qual foi aplicado.
►HTML
<p style="color:red; backgnound:black;">Conteúdo e s t i l i z a d o com o a tr i b u to style</p>
5 „ 1 .1 4 ta b m d e x
Esse atributo destina-se a definir se um elemento pode receber o foco. O valor desse
atributo é um número inteiro positivo ou negativo e cria uma ordem de tabulação
para o elemento ao qual foi aplicado. Ordem de tabulação é a sequência na qual o
foco é dado quando o usuário navega com auxílio do teclado acionando continu
amente a tecla Tab.
Se o valor do atributo for zero, o elemento poderá receber o foco e sua posição
na ordem de tabulação é determinada por padrão pela plataforma.
5.1.15 title
Esse atributo destina-se a fornecer uma informação adicional sobre o conteúdo
do elemento para o qual é definido. O valor desse atributo é um texto contendo a
informação.
Nas versões anteriores da HTM L esse atributo é definido para todos os elemen
tos exceto para os elementos base, basefpnt, head, html, meta, param, script, e title. Na
HTM L5 tornou-se um atributo global podendo ser usado para todos os elementos.
Se esse atributo for omitido para um elemento, fica implícito que para ele é
relevante o atributo title de seu ancestral mais próximo, caso tenha sido definido
para aquele ancestral.
►HTML
<a h re f= "http://maujor.com t i t l e = " S i t e sobre CSS" >Site do Maujor</a>
<img src="imagem.png" t i t l e = " C r é d i t o : Maujor" a lt= " " >
<p tit le = " R e g iõ e s geográficas do B ra s il"> Te x to d e s c r it iv o da regiões geográficas do Brasil</p>
A HTM L5 criou vários atributos não existentes na HTML4. Alguns desses atributos
são globais e foram mostrados no item anterior. Outros são atributos específicos de
um ou mais elementos e serão mostrados a seguir.
Capítulo 5 ■ Atributos HTML 181
5.2.1 async
Esse atributo destina-se a indicar como um script deve ser executado. Quando pre
sente, faz com que o script seja executado de modo assíncrono tão logo ele tenha
sido carregado e esteja disponível.
5.2.2 autocomplete
Alguns agentes de usuário oferecem uma funcionalidade que consiste em preen
cher ou sugerir opções de preenchimento de um campo com base no que nele foi
digitado anteríormente pelo usuário.
Esse atributo admite os valores on e off que definem se o campo deve ser auto-
preenchido ou não.
5.2.3 autofocus
Esse atributo destina-se a definir em qual elemento deve ser dado o foco tão logo
a página seja carregada.
Os elementos que admitem o uso desse atributo são: button, input, keygen, select
e textarea.
Não confundir atributo booleano com valor booleano para o atributo. Neste
atribuem-se os valores true ou f a l s e e naqueles a presença ou ausência do atributo
'' sem declaração de valor é suficiente.
O exemplo a seguir esclarece a sintaxe e uso desse atributo. Nele o foco é dado
ao campo para a coleta do nome. Atualmente somente os navegadores Opera e
Chrome suportam esse atributo.
►HTML
<fonn method="get" action="">
< p x la b e l> N o m e :< b rx in p u t typ e = "tex t" a u t o f o c u s x / l a b e l x / p >
< p x l a b e l > E m a i l :< b r x i n p u t t y p e = " t e x t " x / l a b e l x / p >
< p x l a b e l > C i d a d e :< b r x i n p u t t y p e = " t e x t " x / l a b e l x / p >
</form>
[c5-autofocus.html]
5 . 2 „ 4 a u t o p I a y e Controls
Esses são atributos para os elementos video e audio e foram estudados com detalhes
em 3.3.1.
Esse atributo destina-se a definir um texto a ser anexado ao pacote a ser enviado
ao servidor contendo a chave gerada pelo elemento keygen. Atualmente a forma de
implementação do elemento keygen não está definida.
5 2 .6 default
Esse atributo destina-se a habilitar um texto default para o elemento track sempre
que não for definido um texto personalizado para o elemento.
5.2.7 dirname
Esse atributo destina-se a definir um dado adicional a ser anexado aos dados en
viados por um formulário. O dado adicional informa a direção de escrita (ltr ou
rtl) do texto que está sendo enviado.
5.2.8 form
Esse atributo destina-se a associar um controle de formulário a um elemento
formulário. Nas versões anteriores da EITM Lum controle de formulário está asso
ciado (ou pertence) ao formulário no qual está inserido. Esse atributo permite que
se associem a um formulário controles inseridos fora dele e até mesmo controles
dentro de outro formulário.
Os elementos que admitem o uso desse atributo são: button, fieldset, input, keygen,
lab ei, meter, object, output, progress, s e l e c t e te x ta re a .
5 .2 .9 fo rm a c tio n
Esse atributo tem o mesmo efeito do atributo action para o elemento form, ou seja,
destina-se a definir um URL para o qual o formulário será enviado para processamento.
Os elementos que admitem o uso desse atributo são: button e input. Assim, a
definição do URL para processamento é definida pelo valor desse atributo inserido
em um desses dois elementos.
5 .2 .1 O fo rm e n c fy p e
Esse atributo tem o mesmo efeito do atributo enctype para o elemento form, ou seja,
destina-se a definir o tipo de conteúdo que está sendo enviado pelo formulário.
184 HTML 5
Os elementos que admitem o uso desse atributo são: button e input. Assim, a
definição da codificação é definida pelo valor desse atributo inserido em um desses
dois elementos.
Esse atributo tem o mesmo efeito do atributo method para o elemento form, ou seja.
destina-se a definir o método usado para enviar os dados do formulário.
Os elementos que admitem o uso desse atributo são: button e input. Assim, a
definição do método é definida pelo valor desse atributo inserido em um desses
dois elementos.
Esse atributo tem o mesmo efeito do atributo novalidate para o elemento forra, ou seja.
destina-se a desabilitar a validação dos dados do formulário. (O atributo novalidata
é novo na HTML5. Ver 5.2.23).
Os elementos que admitem o uso desse atributo são: button e input. Assim, a de
finição da necessidade ou não de se validar os dados é definida pela inserção desse
atributo em um desses dois elementos.
5.2.13 formtarget
Esse atributo define o destino do documento que será aberto após o envio dc
formulário.
Os elementos que admitem o uso desse atributo são: button e input. Assim, c
destino do documento é definido pela inserção desse atributo em um desses dois
elementos.
Os valores possíveis para esse atributo são: _b lank ,_to p,_self e _parent ou qualquer
nome no contexto da janela atual.
5.2.14 icon
Esse atributo é para uso exclusivo com o elemento command e destina-se a definir um
URL apontando para a imagem de um ícone representativo do comando.
► HTML
<menu type="toolb ar">
<command typ e="ra dio" radiogroup="alinhamento" checked="checked"
la b e l= " A lin h a r à esquerda" icon=',icons/alL.png" o n c li c k = " a li n h a r ( ’ esquerda')">
<command typ e="ra dio" radiogroup=" alinhamento "
la b e l = " C e n t r a liz a r " icon="icons/alC.png" o n c li c k = " a li n h a r ( ' ce n tro ' ) " >
ccommand type="ra dio" radiogroup=" alinhamento"
label=" A lin h a r à d i r e i t a " icon="icons/alR.png" o n c lic k = "a lin h a r('d ire ita ')">
<hr>
<command type="command" disabled
la b el="Pub li ca r" icon="icons/pub.png" o n cli ck = "p ub li sh ()">
</menu>
5.2.15 keytype
Esse atributo é para uso exclusivo com o elemento keygen e destina-se a definir o
tipo de algoritmo para codificar a chave gerada pelo elemento.
5.2.16 kind
Esse atributo é para uso exclusivo com o elemento track e destina-se a definir o tipo
de trilha a ser acrescentado na mídia pelo elemento. Os valores possíveis para esse
atributo são: subtitles, captions, d e s crip tio n s , chapters, metadata para trilhas de subtí
tulos, legendas, descrições, capítulos e metadados, respectivamente.
► HTML
<video src="brave.webm">
<track kind=subtitles s r c = b r a v e .e n .v tt srclang=en la b e l = " In g lê s ">
<track kind=captions s r c = b r a v e .e n .v tt srclang=en la bel="ln glê s para deficientes aud itivo s">
<track kind=subtitles s r c = b r a v e . f r . v t t src lang=fr label="Francês">
<track kind=subtitles s r c = b r a v e .d e .v t t srclang=de label="Alemão">
</video>
186 H TM L:
5.2.17 list
Esse atributo é para uso exclusivo com o elemento in put e destina-se a definir um :
lista de opções para preenchimento de um campo de texto. O seu valor deve se:
igual ao valor do id de um elemento d a ta lis t.
► HTML
<label>Informe sua cidade p r e f e r i d a x b r />
<input list= "cid a de s">
< / l a b e l x b r />
d a t a l i s t id="cidades">
ou <label>escolha uma<br />
<select>
coption value="Bruxelas">Bruxelasc/option>
<option value="Lisboa">Lisboac/option>
coption value="Londres">londresc/option>
coption value="Moscou">Moscouc/option>
coption value=', Oslo’, >Tokyoc/option>’
coption valu e="Pa ris">Pa risc/ option>
coption value="Roma">Romac/option>
coption value="Tokyo">Tokyoc/option>
c/select>
c/label>
c / d a ta lis t>
[c5-list.html]
Esse atributo é para uso exclusivo com os elementos audio e video e foi estudado
com detalhes no capítulo 3.
Capítulo 5 ■ Atributos HTML 187
5.2.19 low
Esse atributo é para uso exclusivo com o elemento m ete r e destina-se a definir um
valor dentro da faixa à qual a medida pertence e abaixo do que se considera um
valor baixo. Ver 2.4.17.
5.2.20 manifest
Esse atributo é para uso exclusivo com o elemento html que será estudado com
detalhes no capítulo 10.
Esse atributo é para uso exclusivo com os elementos m ete r, progre ss e i n p u t e destina-se
a definir um valor máximo. O uso desse atributo para os elementos m ete r e p ro g re s s
foi estudado em 2.4.17 e 24.20 respectivamente.
Para o elemento m ete r ele destina-se a definir o valor máximo da escala à qual a
medida marcada pertence e, se for omitido, será considerado igual a 1; para o ele
mento p rog re s s ele destina-se a definir o quanto é necessário para realizar uma tarefa.
Usar esse atributo com o elemento input define um valor numérico máximo per
mitido como entrada no campo. Usado em conjunto com o atributo min estabelece
uma faixa de entrada de dados no campo.
► HTML
<input name="quantidade" required type="number" min="10" max="20" value=''15">
-ifó [c5-max-min.html]
5.2.22 min
Esse atributo é para uso exclusivo com os elementos m e te r e input e destina-se :
definir um valor mínimo. O uso desse atributo para o elemento m e te r define o vale:
mínimo da escala à qual a medida marcada pertence e, se for omitido, será consi
derado igual a 0. Ver 2.4.17.
Usar esse atributo com o elemento input define um valor numérico mínimo per
mitido como entrada no campo. Usado em conjunto com o atributo max estabelece
uma faixa de entrada de dados no campo. Ver 5.2.21.
5.2.23 novalidate
Esse atributo é para uso exclusivo com o elemento fo rm e tem o mesmo efeito de
elemento fo rm n o va lid a te que foi estudado em 5.2.12.
Esse atributo é para uso exclusivo com o elemento d e ta ils e destina-se a definir se
o conteúdo do elemento deve ou não ser apresentado ao usuário. Trata-se de um
atributo booleano, ou seja, é ou não definido para um elemento. A ausência desse
atributo no elemento indica que seu conteúdo não deve ser apresentado ao usuáric.
Não confundir atributo booleano com valor booleano para o atributo. Neste
atribuem-se os valores true ou fa ls e e naqueles a presença ou ausência do atributo
sem declaração de valor é suficiente.
5.2.25 optim um
Esse atributo é para uso exclusivo com o elemento meter e destina-se a definir um valor
considerado ótimo dentro da escala à qual a medida marcada pertence. Ver 2.4.17.
5.2.26 pattern
Esse atributo é para uso exclusivo com o elemento input e destina-se a definir uma
expressão regular (um padrão) com a qual o valor entrado em um campo de for
mulário deve ser comparado.
Capítulo 5 ■ Atributos HTML 189
► HTML
<input t yp e = " te x t" p a t t e r n = " [ 0 - 9 ] { 5 } - [ 0 - 9 ] { 3 } " name="cep"
t it le ="U m CEP é co n s titu id o de 5 números um tra ço e mais 3 números." />
Nesse exemplo, caso o usuário entre com um valor que não seja um número de
CEP válido, o valor é recusado e é apresentada uma mensagem informando ao usu
ário que o valor digitado não está de acordo com o formato exigido pelo controle.
5.2.27 ping
Esse atributo é para uso exclusivo com os elementos a e area e destina-se a definir
URLs relacionadas interessados em serem notificadas caso o usuário siga o link. O
valor desse atributo é um URL ou uma lista de URLs separados por espaço.
5.2.28 placeholder
Esse atributo é para uso exclusivo com os elementos input e textarea e destina-se a
definir uma dica (palavra ou frase curta) de preenchimento do campo.
►HTML
<legend>Conta de e-mail</legend>
<pxlabel>Nome:<br / x i n p u t typ e =''tex t" name="name" placeholder="Maurício Samy Silva">
< / la b e l x / p >
< p x l a b e l > E - m a i l :< b r / x i n p u t type="email" name="email" placeholder="[email protected]">
< / la b e l x / p >
< pxla bel>Senh a:<br / x i n p u t type="password" na me="password "x/la belx/p >
</fieldset>
C [c5-placeholder.html]
5.2.29 pôster
Esse atributo é para uso exclusivo com o elemento video e foi estudado com detalhes
em 3.3.1.
5 .2 3 0 preload
Esse atributo é para uso exclusivo com os elementos video e audio e foi estudado
com detalhes em 3.3.1.
5.2.31 pubdate
Esse atributo é para uso exclusivo com o elemento time e destina-se a definir a data
de publicação. Trata-se de um atributo booleano, ou seja, é ou não definido par;,
um elemento.
,.Or, Não confundir atributo booleano com valor booleano para o atributo. Neste
'i í atribuem-se os valores tru e ou f a l s e e naqueles a presença ou ausência do atributo
í; , sem declaração de valor é suficiente.
► HTML
< artic le>
<hl>Pequenas tare fa s</hl>
<footer>Publicado em <time pubdate>05/02/20ll</time>.</footer>
<p>Trocar a lâmpada da sala da sala.</p>
< /a rticle >
5 .2 3 2 radiogroup
Esse atributo é para uso exclusivo com o elemento command e destina-se a agrur ;
comandos do tipo radio. Só deve ser usado se o comando é do tipo radio.
► HTML
<menu type="toolb ar">
<command type="ra dio" radiogroup="alinhamento" checked="checked"
label=''Esquerda" ic on="ic ons/a lL .png" o n c li c k = " s e t A lig n ( 'e s q ') " >
ccommand type="ra dio" radiogroup="alinhamento"
label="Centro" icon="icons/alC.png" o n c l i c k = '' s e t A l i g n ( ' c e n t r o ' )">
ccommand type="ra dio" radiogroup="alinhamento"
l a b e l = " D i r e i ta " icon= "icons/alR.png " o n c l i c k = " s e t A l i g n ( ' d i r ' ) " >
</menu>
5.2.33 required
Esse atributo é para uso exclusivo com os elementos input, select e textarea e destina-
se a marcar um controle de formulário como sendo de preenchimento obrigatório.
Veremos, com detalhes, o uso desse atributo em formulários no capítulo 6.
Não confundir atributo booleano com valor booleano para o atributo. Neste
atribuem-se os valores t ru e ou fa l s e e naqueles a presença ou ausência do atributo
sem declaração de valor é suficiente.
► HTML
<P>
<la bel fo r= "e m a il"> E-m a il:< / lab e l>
<input id="email" type=email required name=email>
</p>
5.2.34 reversed
Esse atributo é para uso exclusivo com o elemento ol e destina-se a definir uma con
tagem descendente para o marcador da lista ordenada, isto é, a numeração começa
do número mais alto para o mais baixo (...4,3,2,1) em lugar da numeração-padrão
crescente (1,2,3,4 ...).
Não confundir atributo booleano com valor booleano para o atributo. Neste
atribuem-se os valores t rue ou fa ls e e naqueles a presença ou ausência do atributo
sem declaração de valor é suficiente.
► HTML
<ol reversecb
<li>Maçã</li>
<li> Pena</li>
< li>Uva</li>
< li> La ra n ja < /li>
</ol>
5 .2.35 sandbox
Esse atributo é para uso exclusivo com o elemento iframe e destina-se a deffo:
permissões para inserção de conteúdos no elemento.
►HTML
d fra m e sandbox=allow-same-origin allow-forms allow-scripts
src=" http : //maujor. com/xpto. htm l"></iframe>
Capítulo 5 B Atributos HTML 193
5.2.36 scoped
Esse atributo é para uso exclusivo com o elemento style e destina-se a definir o
escopo para aplicação de estilos. Quando definido, faz com que as regras de estilo
contidas no elemento style sejam aplicadas somente no elemento-pai do elemento
style e nos seus elementos-filho.
Não confundir atributo booleano com valor booleano para o atributo. Neste
atribuem-se os valores t rue ou f a l s e e naqueles a presença ou ausência do atributo
sem declaração de valor é suficiente.
► HTML
Nesse exemplo todo texto inserido no div será na cor vermelha e os inseridos no
restante do documento serão na cor definida pelas CSS para o documento. Notar
que em sintaxe HTM L5 é válido inserir o elemento style dentro do elemento body.
5 .2 3 7 seamless
Esse atributo é para uso exclusivo com o elemento iframe e destina-se a fazer com
que o iframe seja inserido no mesmo contexto do documento que o contém.
Isso significa que links existentes no iframe abrem no mesmo contexto de abertura
dos links do documento (a não ser que o atributo ta rg e t= " _ s e lf ” esteja presente),
regras de estilo para o documento sejam aplicadas ao conteúdo do iframe e que todos
os comportamentos do documento se apliquem ao conteúdo do iframe.
T ra ta -s e d e u m a tr ib u to b o o le a n o , o u seja, é o u n ã o d e fin id o p a ra u m e le m e n to .
194 H TM L;
Não confundir atributo booleano com valor booleano para o atributo. Neste
atribuem-se os valores true ou false e naqueles a presença ou ausência do atributo
sem declaração de valor é suficiente.
►HTML
d fra m e seamless src="http://m aujo r.com/xpto.h tm l"> </ifra ine>
5.2.38 sizes
Esse atributo é para uso exclusivo com o elemento link e destina-se a definir as
dimensões do ícone eventuaímente definido para o link.
Os valores possíveis para esse atributo são: a palavra-chave any ou o par largur;.
x altura do ícone em pixels.
►HTML
< lin k nel-ico n hre f= favicon.png s i z e s = ' T 6 x l 6 " type="image/png">
< lin k re l-i c o n href=windows.ico s i z e s = " 3 2 x 3 2 4 8 x4 8 " type="iinage/vnd. m ic ro s o ft . ic o n " >
c l in k r e l- i c o n href=mac.icns s i z e s = " 1 2 8 x l 2 8 5 1 2 x 5 1 2 8 19 2 x 8 19 2 3 2 7 6 8 x 3 2 7 6 8 ")
< lin k re l=icon href- ipho ne.png s i z e s = " 5 7 x 5 7 " type="image/png">
< lin k re l-i c o n href=gnome.svg s i z e s = " a n y " type="i«age/svg+xml">
5.2.39 srcdoc
Esse atributo é para uso exclusivo com o elemento ifra m e e destina-se a definir :
marcação H T M L a ser inserida no ifra m e .
►HTML
<artic le >
c h D T i t u l o do post</hl>
<p>Conteúdo do post</p>
<footer>
Capítulo 5 ■ Atributos HTML 195
Esse exemplo resume uma marcação para um post publicado em blog com dois
comentários. Na marcação os comentários foram inseridos no documento com uso
do elemento iframe no qual o atributo s rc foi usado em conjunto com os atributos
seamless e sandbox (estudados anteriormente), fornecendo um layer extra de proteção
contra injeção de scripts maliciosos pelo formulário de comentário.
5.2.41 step
Esse atributo é para uso exclusivo com o elemento input e será estudado com de
talhes no capítulo 6 .
Esse atributo é para uso exclusivo com o elemento textarea e destina-se a definir
como será o fluxo de texto quando submetido para processamento. Será enviado
em uma linha ou conterá quebras de linhas.
Quando for usado o valor hard devemos especificar o atributo co ls para a textarea.
Nesse caso, quebras de linhas inseridas pelo usuário serão consideradas no envio
do texto ao servidor.
CAPÍTULO 6
Formulários
6.1 Introdução
Um formulário HTM L é uma seção do documento contendo texto normal, marcação,
elementos especiais chamados de controles (Inputs, checkboxes, rad io-b u tton s, te x ta re a
etc.) e seus respetivos rótulos (labei).
1%
;=?ítulo 6 » Formulários 197
Uma quantidade impressionante de sites mais antigos e outro tanto não tão
antigos validam seus formulários com uso somente de JavaScript. Isso é uma te
meridade, pois desabilitar JavaScript e anular os efeitos da validação é uma tarefa
trivial, realizada com dois cliques somente, em qualquer navegador.
6.2 Atributos
As funcionalidades da HTM L5 para formulários foram introduzidas na linguagem
com uso de atributos a serem usados nos controles do formulário. Os novos atributos
198 HTML
6.2.1 placeholder
Esse atributo é para uso exclusivo com os elementos input e te x ta re a e destina-se
definir uma dica (palavra ou frase curta) de preenchimento do campo. Esse atribu:
foi estudado com detalhes e exemplo online em 5.2.28.
►HTML
< p x la b e l > E - m a il :< b r / x i n p u t type="email" name="email" placeholder="[email protected],'>
< / la b e l x / p >
6.2.2 autofocus
Esse atributo destina-se a definir em qual elemento deve ser dado o foco tão log :
a página seja carregada.
Os elementos que admitem o uso desse atributo são: button, input, keygen, s e le ct
te x ta re a . Esse atributo foi estudado com detalhes e exemplo online em 5.2.3.
I- HTML
6.23 required
Não confundir atributo booleano com valor booleano para o atributo. Neste
atribuem-se os valores true ou fa ls e e naqueles a presença ou ausência do atributo
sem declaração de valor é suficiente.
► HTML
<form method="get" action="">
< p x l a b e l for="nome">Nome: < / l a b e l x i n p u t id="noine" typ e =te xt r e q u i r e d name=nome>
<input type=submit va lue ="O K "x/ p>
</form>
9 ú [c6-required.html]
C a p ítu lo 8
Atributo required
Nome:: ( ” : | OK 1
: j g y f E s t e é u m cam po obrigatório
Lit
. ■ _ ÿj l-ï-v - i P V xt
N
Capítulo I
J
i QK
6„2o4autocom plete
Alguns navegadores atuais implementam de forma variada uma funcionalidade
que consiste em sugerir uma lista de opções para preenchimento de um controle
200 HTML 5
de formulário, quando a ele se dá o foco, com base no que nele foi digitado ante
riormente pelo usuário. Esse atributo destina-se a padronizar o comportamento
de autopreenchimento.
Quando não for especificado esse atributo para determinado controle do formu
lário, fica subentendido que ele assume o comportamento de autopreenchimento
especificado para o elemento form ao qual pertence o controle.
►HTML
<form method="get" action="">
< p x la b e l for=''nome''>Nome: < /la b e lx in p u t id="nome" type=text required autocomplete=off name=nome>
<input type=submit value="0K“ x / p >
</form>
Qhi [c6-autocomplete.html]
Esse exemplo é idêntico ao anterior exceto pelo fato de termos incluído o atribute
a u to c o m p l e t e no controle para entrada do nome do usuário. O navegador Firefox j á
oferece essa funcionalidade nativamente há algum tempo. Assim você pode cons
tatar o funcionamento do atributo a u to c o m p le t e naquele navegador comparando c
comportamento do controle para a entrada do nome nos dois exemplos anteriores.
No exemplo do item anterior, é apresentada uma lista de sugestões de nomes par;,
completar o controle; no exemplo desse item, como declaramos a u t o c o m p l e t e = o f f
lista não será apresentada.
6.2.5 dirname
Esse atributo destina-se a definir um dado adicional a ser anexado aos dados en
viados por um formulário. O dado adicional informa a direção de escrita (ltr ov.
rtl) do texto que está sendo enviado.
O e x e m p lo a se g u ir esclarece a s in ta x e e u s o desse a tr ib u to .
Capítulo 6 ■ Formulários 201
► HTML
<form method="get" action='"’ >
<pxlabel>Nome: <input t yp e = " te x t" nam e="nome"x/labelx/p>
< p x la b e l > E m a il : <input t yp e = " te x t" n a m e = " e m a ü " x / la b e lx / p >
<pxlabel>Mensagem: <textarea name="msg" dirname=''msg.din” ></textarea></label></p>
< p x i n p u t type="submit" name="enviar" va lu e = " e n v ia r" x /p >
</form>
6.2.6 form
Os elementos que admitem o uso desse atributo são: button, fieldset, input, keygen,
► HTM L
6.2.7 formaction
Esse atributo tem o mesmo efeito do atributo a ction para o elemento form , ou se :
destina-se a definir um URL para o qual o formulário será enviado para processamen:
► HTML
<forin method="get">
<pxla bel>Nome: <input ty p e = " t e x t " na me="nom e"x/la belx/p >
< p x la b e l > E m a i l : <input ty p e = " t e x t " n a m e = " e m a il" x /la b e lx /p >
<pxlabel>Mensagem: <textarea n a m e = " m s g " x / t e x t a r e a x / l a b e lx / p >
< p x i n p u t type="submit" name="enviar" value="envi ar” f o r m a c t i o n = " p r o c e s s a - f o r m . p h p " x :
</form>
6.2.8 formenctype
Esse atributo tem o mesmo efeito do atributo enctype para o elemento fo rm , ou se'
destina-se a definir o tipo de conteúdo que está sendo enviado pelo formulário
► HTML
<form method="post" action="processa-form.php">
< p x la b e l > A r q u iv o : <input typ e=,lfile" n a m e = " a r q " x / la b e lx / p >
6.2.9 formmethod
Esse atributo tem o mesmo efeito do atributo method para o elemento fo rm , ou s--
destina-se a definir o método usado para enviar os dados do formulário.
Capítulo 6 « Formulários 203
► HTML
<form action="processa-form.php">
<pxlabel>Nome: <input t yp e = " te x t" nam e="nome"x/labelx/p>
< p x la b e l > E m a il : d n p u t t yp e = " te x t" name="email"></labelx/p>
<pxlabel>Mensagem: <textarea n a m e = " m s g " x / t e x t a r e a x / l a b e lx / p >
< p x i n p u t type="submit" name="enviar" value="enviar" f o r m m e t h o d = " g e t " x / p >
</form>
Não confundir atributo booleano com valor booleano para o atributo. Neste
atribuem-se os valores t r u e ou f a l s e e naqueles a presença ou ausência do atributo
sem declaração de valor é suficiente.
Esse atributo define o destino do documento que será aberto após o envio do
formulário.
204 HTML 5
Os elementos que admitem o uso desse atributo são: button e input. Assim, o destine
do documento é definido pela inserção desse atributo em um desses dois elementos.
Os valores possíveis para esse atributo são: _blank, _top, _ s e lf e _parent ou qualquer
nome no contexto da janela atual.
6.2.12 list
Esse atributo é para uso exclusivo com o elemento input e destina-se a definir uma list;
de opções para preenchimento de um campo de texto. O seu valor deve ser igual ac
valor do id de um elemento datalist. Esse atributo foi estudado com detalhes em 5.2.1”.
6.2.13 max
Esse atributo é para uso exclusivo com os elementos meter, progress e input e destina-se
a definir um valor máximo. O uso desse atributo para os elementos meter e progress
foi estudado em 2.4.17 e 2.4.20 respectivamente.
Para o elemento meter ele destina-se a definir o valor máximo da escala à qual a
medida marcada pertence; se for omitido, será considerado igual a 1 ; para o elementc
progress ele destina-se a definir o quanto é necessário para realizar uma tarefa.Usa:
esse atributo com o elemento input define um valor numérico máximo permitide
como entrada no campo. Usado em conjunto com o atributo min estabelece ume
faixa de entrada de dados no campo.
► HTML
6.2.14 min
Esse atributo é para uso exclusivo com os elementos meter e input e destina-se
definir um valor mínimo. O uso desse atributo para o elemento meter define o va.
Capítulo 6 a Formulários 205
mínimo da escala à qual a medida marcada pertence; se for omitido, será conside
rado igual a 0. Ver 2.4.17.
Usar esse atributo com o elemento input define um valor numérico mínimo per
mitido como entrada no campo. Usado em conjunto com o atributo max estabelece
uma faixa de entrada de dados no campo. Ver 6.2.13.
6.2.15 novalidate
Esse atributo é para uso exclusivo com o elemento form e tem o mesmo efeito do
elemento formnovalidate que foi estudado em 6 .2 .1 0 .
6.3.1 search
Destina-se a definir u m controle input do tipo busca. O efeito desse atributo é alterar
a estilização e comportamento do controle diferenciando-o dos demais controles
input. O modo como o controle é estilizado e seu comportamento fica por conta
do fabricante do navegador.
Por exemplo: o navegador Chrome 9.0, que oferece suporte para esse atributo,
apresenta uma letra “x” à direita da área de digitação do controle que se destina
a fazer desaparecer o texto colocado como placeholder com uso do atributo value
quando o usuário dá o foco ao controle. Não sendo definido o placeholder, a letra
“x ” aparece tão logo o usuário comece a digitar no controle.
O exemplo a seguir, disponível no site do livro, demonstra o uso desse valor para o
atributo type de controles input usando dois campos: um com e outro sem placeholder.
206 HTML 5
► HTML
<h3>Com placeholder</h3>
<input name="q” type="search" value="palavra-chave">
<h3>Sem placeholder</h3>
<input name="q" type="search">
< R í [c6-search.html]
6.3.2 tel
Destina-se a definir um controle input para a coleta de um número de telefone. Uma
vez que números de telefone variam em formato, dependendo da região ou país, esse
valor de atributo não força a entrada de uma sintaxe particular, ele apenas identifica
a destinação do controle.
A validação de um controle para número de telefone deve ser feita com uso d:
atributo pattern ou do novo método setCustomValidity() disponível como mécanisme
JavaScript nativo do navegador.
O exemplo a seguir, disponível no site do livro, demonstra o uso desse valor par:
o atributo type de controles input e a respectiva validação com uso do atributo patterr
<form>
< p x la b e l > T e l e f o n e : <input required name="tel" p a t t e r n = " \ ( [ 0 - 9 ] { 2 } \ ) [ \ s ] [ 0 - 9 ] { 4 } - [ 0 - 9 ] { 4 } " > < /
l a b e l ) (xx) xxxx-xxxx</p>
< p x i n p u t type=submit v a lu e = E n v ia rx / p >
</form>
íf^ .w a tta ra h t m ll
Esse exemplo está disponível no site do livro e deverá ser visualizado no navegador
Opera que suporta o atributo. O atributo pattern recebe como valor uma expressa
regular construída com sintaxe JavaScript e o que for digitado no controle dever:
satisfazer à expressão. No exemplo a expressão casa com números começando coro
(xx) seguido de um espaço em branco e duas vezes quatro números separados per
um traço. Deve-se informar ao usuário o formato esperado para a entrada do númer:
de telefone no controle, que, no caso do exemplo, foi (xx) xxxx-xxxx.
Outra opção para validar o dado inserido em um controle pelo usuário é cor
uso do novo método JavaScript setCustomValidityQ conforme mostrado a seguir.
Capítulo 6 ■ Formulários 207
> JavaScript
<script>
var padrao = / A\ ( [ 0 - 9 ] { 2 } \ ) [ \ s ] [ 0 - 9 ] { 4 } - [ 0 - 9 ] { 4 } $ / ;
fu nctio n v a li d a r ( i n p u t ) {
i f ( ! p a d p a o . t e s t ( i n p u t . v a lu e ) ) {
// Mensagem de erro
i n p u t . setCustomVa lidity (
'O número ( ' + in p u t .v a lu e + ' ) não está no formato re querido. Por fa vo r c o r r i j a . ' ) ;
} else {
// limpa mensagem de erro
i n p u t . s e tC u s to m V a lid ity (" ) ;
}
document. getElementByld( ' msg-erro' ) . innerHTML = i n p u t . validationMessage;
}
</script>
► HTML
<form>
<pxlabel>
Telefone: <input required name="tel" onblur="validar(this)">
</label> (xx) xxxx-xxxx</p>
<div id="msg-erro" style="color:red;"></div>
<input type="submit'' value="OI<">
</form>
•íiy [c6-setCustomValidity.html]
Esse exemplo está disponível no site e deverá ser visualizado nos navegadores
Opera ou Chrome.
6.3.3 uri
Destina-se a definir um controle input para receber um URL absoluto.
Entre outras aplicações, podemos usar essa funcionalidade para fornecer uma
indicação visual ao usuário sobre a validade do URL digitado no controle.
O exemplo a seguir, disponível no site do livro, demonstra esse uso. Nele usa
mos as pseudoclasses para o elemento input previstas nas CSS3 : valid e : invalid que
identificam se um controle recebeu ou não um dado válido para seu tipo.
►css
<style>
.c s s v a l:valid {
208 HT.V.:-
background:#0f0;
}
. c s s v a l: in v a l id {
background:#f00;
c o l o r :# f f f
}
</style>
►HTML
<form>
< p x la b e l > U R L : <input t y p e = u r l name="url" c l a s s = " c s s v a l " x / l a b e l x / p >
</form>
C A [c6-url.html]
As regras CSS aplicam uma cor de fundo ao elemento input identificado p ei
dasse cssval. A cor será verde (#0f0) se o dado digitado no controle for válido
vermelha (# f 0 0 ) caso contrário.
O exemplo a seguir, disponível no site do livro, demonstra o uso desse valor para
o atributo type de controles input e a respectiva validação por mecanismos nativo;
cio navegador.
►HTML
<form>
< p x l a b e l > E - m a i l : <input t y p e = e m a i l required n a m e= em a ilx/la be lx /p >
< p x i n p u t type=submit v a lu e = E n v ia r x / p >
</form>
"Sfi [c6-email.html]
Capítulo 6 ■ Formulários 209
63.5 datefime
Destina-se a definir um controle input para receber uma string representando uma
data e hora UTC. A representação do grupo data/hora fica a cargo do agente de
usuário em um formato conveniente considerando o local e o usuário. Para isso o
agente de usuário normalmente apresentará um widget do tipo date picker quan
do for dada entrada no controle da data e um campo com slider do tipo seta para
entrada da hora.
► HTML
<form>
< px la b e l> D a ta / h o ra : <input type=datetime name=', datahorai,x la b e l> < /p >
< p x i n p u t type=submit va lu e = E n v ia rx /p >
</form>
¥ ) [c6-datetime.html]
6.3.6 date
Destina-se a definir um controle input para receber uma string representando uma
data. A representação da data fica a cargo do agente de usuário em um formato con
veniente considerando o local e o usuário. Para isso o agente de usuário normalmente
apresentará um widget do tipo date picker quando for dada entrada no controle.
► HTML
<form>
< px la b e l> D a ta / h o ra : <input type=date n a m e = " d a t a " x la b e lx /p >
< p x i n p u t type=submit v a lu e = E n v ia rx / p >
</form>
•# J [c6-date.html]
6.3.7 time
Destina-se a definir um controle input para receber uma string representando uma
hora. Normalmente o agente de usuário apresentará um slider do tipo seta para
entrada da hora.
O exemplo a seguir, disponível no site do livro, demonstra o uso desse valor para
o atributo type de controles input. Nele você poderá observar a renderização do
slider do tipo seta em navegadores que suportam esse valor de atributo, tal como
o Opera, por exemplo.
►HTML
<form>
< p x la b e l> H o ra : <input type=time n a m e = " h o ra " x la b e lx /p >
< p x i n p u t type=submit v a lu e = E n v ia rx / p >
</form>
[c6-time.html]
► HTML
<form>
<pxla b el>M ês: <input type=month name="mes"><labelx/p>
< p x i n p u t type=submit v a lu e = E n v ia r x / p >
</form>
« 5 [c6-month.html]
6.3.9 week
Destina-se a definir um controle input para receber uma string representando uma
semana do ano. A representação da semana fica a cargo do agente de usuário em
um formato conveniente considerando o local e o usuário; para tanto, o agente de
usuário normalmente apresentará um widget do tipo date picker quando for dada
entrada no controle.
► HTML
<form>
<pxlabel>Semana: <input type=week name=''semana,,x l a b e l x / p >
< p x i n p u t type=submit v a lu e = E n v ia rx / p >
</form>
C j [c6-week.html]
6.3.10 datetime-local
Destina-se a definir um controle input para receber uma string representando uma data
e hora local. A representação do grupo data/hora fica a cargo do agente de usuário
em um formato conveniente considerando o local e o usuário. Para isso o agente de
usuário normalmente apresentará um widget do tipo date picker quando for dada
entrada no controle da data e um campo com slider do tipo seta para entrada da hora.
► HTM L
<form>
<pxla b el>D ata/ho ra Lo ca l: <input type=date tim e-lo cal na m e= "d a ta h o ra lo c a l" xla b e lx /p >
< p x i n p u t type=submit v a lu e = E n v ia rx / p >
</form>
^ [c6-datetime-local.html]
6.3.11 number
Destina-se a definir um controle in pu t para receber um número. Normalmente o
agente de usuário apresentará um slider do tipo seta para entrada do número.
► HTM L
<form>
<pxlabel>Número: <input type=number na me="num ero"xlabelx/p>
< p x i n p u t type=submit v a lu e = E n v ia rx / p >
</form>
■Sj [c6-number.html]
6.3.12 range
Destina-se a definir um controle input para receber um número contido dentro
de um intervalo. Normalmente o agente de usuário apresentará um slider do tipo
controle deslizante para a entrada do número.
► HTM L
<form>
<pxlabel>Número: <input type=range min="5'' max="20" value="12" step="l" name=numerox/labelx/p>
< p x i n p u t type=submit va lu e = E n v ia rx /p >
</form>
- l í j [c6-range.html]
Capítulo 6 ■ Formulários 213
► CSS
<style>
input {
wid th: 40px;
heig ht: 120px;
}
</style>
. HTM L
<form>
<pxlabel>Número: <input type=range min=T" max=T00" value="20" step="2" name=numerox/labelx/p>
< p x i n p u t type=submit v a lu e = E n v ia rx / p >
</form>
' • ’j [c6-range-vertical.html]
6.3.13 color
Destina-se a definir um controle input para receber o código sRGB de uma cor.
Normalmente o agente de usuário apresentará um widget do tipo color-pick para
a entrada da cor.
►HTML
<form>
< p x la b e l > C o r : d n p u t t y p e = c o l o r x / l a b e l x / p >
< p x i n p u t type=submit v a lu e = E n v ia r x / p >
</form>
[c6-color.html]
Geolocalização
A ideia marcou tanto que sempre que surge um tema relacionado à HTML5
como um todo, o assunto Geolocation vem à discussão. Assim, antecipando a um
anseio do leitor, suponho que ele espere encontrar esse assunto neste livro e por
essa razão o presente capítulo é dedicado à API Geolocation.
214
Capítulo 7 ■ Geolocalização 215
A API foi projetada para prover três estados de localização do dispositivo de usu
ário, a saber: a posição estática atual, a localização dinâmica obtida por atualização
repetida e contínua da posição atual e a possibilidade de recuperar uma posição
anteriormente armazenada no dispositivo do usuário (posição em cache).
•;Ataiam; í ■ -la i x
MrQüivG Editar Exicr Histórico =®vontos ^errementa
a Açora não
73 Interface Geolocation
A API Geolocation está implementada em um agente de usuário que contenha o
objeto JavaScript navigator se existir o objeto geolocation filho de navigator. Assim,
para testar a existência da funcionalidade Geolocation em um dispositivo, devemos
testar a existência do objeto geolocation como mostrado no código a seguir.
►JavaScript
i f ( n a v i g a t o r . geolocation) {
a l e r t ( " Este navegador suporta a fu ncionalidade Ge o lo ca tio n ");
/ * Faça alguma coisa com Geolocation */
} else {
a l e r t ( " E s t e navegador não suporta a funciona lidade G e oloca tio n");
[c7-teste-geolocation.html]
►JavaScript
<script>
i f ( M o d e r n i z r . geolocatio n) {
a l e r t ( ' ' E s t e navegador suporta a funciona lidade G e o l o c a tio n " );
I* Faça alguma coisa com Geolocation * /
} else {
a l e r t ( " E s t e navegador não suporta a funciona lidade Geoloca tion11) ;
}
</script>
s g e tC u rre n tP o s itio n j)
■ w atc h P osition ()
■ clearW atch()
callback sucesso
A função callback para sucesso recebe como parâmetro um objeto contendo, entre
outras estudadas adiante, duas propriedades das coordenadas geográficas do dis
positivo de usuário que são a latitude e a longitude. A sintaxe para obtenção dessas
propriedades é mostrada a seguir.
functio n sucesso ( p o s itio n ) {
var la t i t u d e = p o s i t i o n . coords.l a t i t u d e ;
var longitude = p o s it io n .c o o r d s ,lo n g i t u d e ;
►JavaScript
<script>
fu nctio n o bte rPos ica oQ {
i f (na vig a to r.g e o lo c a tio n ) {
n a v ig a t o r. g eo lo catio n. g etC urre ntPositio n(sucesso);
} else {
a l e r t ( " E s t e navegador não suporta a funciona lidade Ge oloca tio n'');
}
}
fu nctio n sucesso(position) {
var la t i t u d e = p o s it i o n . c o o r d s . l a t i t u d e ;
var longitude = p o s it io n .c o o rd s .lo n g it u d e ;
}
</script>
► HTML
ç p x i n p u t type=button value="Clique para obter posição" o n c lic k = "o b te rP o s ic a o ( ) " x / p >
<p id="msg" c la s s = "d e s t" x /p >
'"fii [c7-sucesso.html]
►JavaScript
<script>
fu nctio n pro p rie d ad e sPositionQ {
i f ( n a v ig a t o r .geolocatio n) {
n a v ig a t o r, g eo lo catio n, g etCurrentPo sitio n(suce sso);
} else {
a l e r t ( " E s t e navegador não suporta a funciona lidade Ge oloca tio n'');
}
}
fu nctio n sucesso(position) {
var la t i t u d e = p o s i t i o n . c o o r d s . l a t i t u d e ;
var longitude = p o s it io n .c o o r d s .lo n g it u d e ;
var a lt i t u d e = p o s i t i o n . c o o r d s . a l t i t u d e ;
var precisão = p o s it io n.co o rds .a ccura cy ;
var p rec is ao Alt it ud e = p o s it io n .c o o rd s .a ltitu d e A c c u ra c y ;
var direcao = p o s it io n.co o rds .he a ding;
var velocidade = pos it io n.co o rds .s p ee d ;
var tempo = position.tim estam p;
var mensagem = "As propriedades de Po s itio n são: <br>";
mensagem += " L a t i t u d e : " + l a t i t u d e + "<br>";
220 H T M L;
► HTML
c p x i n p u t type=button value="Clique para obter propriedades" oncli ck="pro priedadesPo sition()> </
P>
<p id="msg" c la s s = "d e s t" x /p >
Qs,
■ w [c7- propriedades-position.htm!]
callback erro
A função callback para erro admite um parâmetro destinado a coletar duas proprie
dades que são um código de erro e uma mensagem de erro. A sintaxe para obtenção
dessas propriedades é mostrada a seguir.
fu nctio n erro ( e r r ) {
var codigo = e rr.cod e ;
var mensagem = err.message;
No código mostrado o parâmetro da função callback para erro foi denominado err.
►JavaScript
fu nctio n e r r o ( e r r ) {
switch ( e r r ) {
case 1 :
a l e r t ( " A permissão para obter a sua posição f o i negada");
break;
case 2 :
a l e r t ("Não f o i possível estabelecer uma conexão para obter a sua p o s iç ã o ." ) ;
break;
case 3 :
a l e r t ("Tempo esgotado");
break;
d e f a u l t:
a le r t( " N ã o f o i possível obter sua p osiç ão");
}
}
►JavaScript
fu nctio n in s p e c io n a rE rro Q {
i f ( n a v i g a t o r .geo locatio n) {
n a v i g a t o r . g eo lo c a tio n .g e tC u rre n tP o s itio n (s u c e s s o ,e rr o );
} else {
a l e r t ( " E s t e navegador não suporta a funciona lidade Ge o lo ca tio n ");
}
}
functio n e r r o ( e r r ) {
switch ( e r r . code) {
case 1 :
var mensagemErro = "A permissão para obter a sua posição f o i negada.";
break;
case 2 :
var mensagemErro = "Não f o i possível estabelecer uma conexão para obter a sua posição.";
break;
case 3 :
var mensagemErro = "Tempo esgota do.";
break;
d e f a u l t:
var mensagemErro = "Não f o i possível obter sua p o s iç ã o .";
}
222 HTML 5
►HTML
c p x i n p u t type=button va lue="Clique para inspecionar erro" o n c li c k = " i n s p e c i o n a r E r r o ( ) " x / p >
<p id="msg" c la s s = "d e s t" x /p >
[c7-erro.html]
Ao consultar o arquivo, você deverá forçar um erro para visualizar o script err.
ação. No navegador Firefox, acione o menu Ferramentas > Propriedades da página > Permissões
desmarque a opção Perguntar e marque a opção Bloquear no item Compartilhar localização
Com essa ação, você causará o erro PERMISSION_DENIED sempre que o script tentar obter
sua posição. Clique o botão “Clique para inspecionar erro” no arquivo exemplo -
uma mensagem de erro será apresentada. Não esqueça de desfazer o bloqueio n :
menu Ferramentas depois de concluir a visualização do exemplo.
(opções posição}
});
Segundo esse exemplo, a obtenção da posição deverá ser feita com a maior pre
cisão possível (depende do dispositivo de usuário), em, no máximo, 3s e se houver
em cache uma posição que tenha sido obtida nos últimos 5 minutos, ela deverá
ser usada.
Esse método admite um, dois ou três parâmetros. Os dois primeiros parâmetros
são funções callback a serem chamadas nos casos de sucesso ou falha na obtenção
da posição do dispositivo de usuário e o terceiro parâmetro é um objeto contendo
pares nome/valor de propriedades da posição.
A única diferença desse método para o método g e tC u rre n tP o s itio n Q é que ele
obtém a posição do dispositivo de usuário continuamente. Conclui-se de imediato
que é indicado para situações nas quais há um deslocamento ou movimentação
do dispositivo.
Esse método é usado em conjunto com o método c learW atch (id) e seu funciona
mento é semelhante ao funcionamento dos métodos s e tln te rv a lQ e c le a rln te rva lQ .
}
func tio n e r r o Q {
// corpo da função erro
}
functio n pararPosicionamentoQ {
// ...
b o t ã o .onclick = f u n c t i o n Q {
clearW atch(positionld);
}
}
224 HTML 5
7.5.1 introdução
O serviço do Google denominado Google Maps oferece várias APIs para usa
público e gratuito, com inúmeros métodos e propriedades devidamente documen
tados em seu site. Para ilustrar alguns empregos da API Geolocation, mostraremos
exemplos de integração e requisição de mapas do Google explicando de forma su
cinta algumas das funcionalidades disponíveis em duas das suas APIs, bem coma
a sintaxe para requisitar mapas.
O URL que contém o mapa estático gerado pelo Google segue uma sintaxe-padrão,
conforme mostrado anteriormente, e admite uma série de parâmetros que definem
como o mapa deve ser apresentado. Veremos a seguir a descrição e o significado
desses parâmetros.
Os parâmetros são pares nome/valor separados por & e são descritos a seguir,
center
Parâmetro obrigatório caso não haja marcadores (estudados adiante). Seu valor é
o par latitude, longitude do dispositivo do usuário e destina-se a definir a região
terrestre onde se encontra o dispositivo de usuário.
zoom
Parâmetro obrigatório caso não haja marcadores (estudados adiante). Seu valor é um
número inteiro e destina-se a definir o nível de ampliação do mapa. O valor 0 (zero)
define a apresentação do mapa de todo o mundo e o valor 21 ou maior possibilita
a visualização de construções individuais.
size
Parâmetro obrigatório. Seu valor é uma string no formato largura x altura destinada
a definir as dimensões do mapa em pixels.
format
Parâmetro facultativo. Destina-se a definir o idioma a ser usado para exibição dc;
marcadores do mapa.
A sintaxe geral para definição de valores para esse parâmetro é mostrada a segui:.
s i z e : v a l o r ]c o lo r : v a l o r | l a b e i : valo r
m labei — define um rótulo a ser inserido no marcador. O valor para esse parâ
metro é um caractere alfanumérico {A-Z, 0 -9 } em caixa-alta. Não é possível
inserir rótulo em marcadores de tamanhos tiny e small. Rótulos são mostra
dos somente em marcadores do tamanho-padrão e mid. O valor-padrão é um
pequeno círculo na cor preta.
Você não está restrito ao uso dos marcadores-padrão do Google Maps (balõe
zinhos coloridos) e pode usar marcadores personalizados. Para isso construa seu
marcador nos formatos png, jpg ou gif (o recomendado é png), com tamanho máximo
de 64 x 64 pixel, hospede a imagem em um servidor e use a sintaxe a seguir.
Você pode usar até cinco marcadores personalizados diferentes em cada solici
tação. Notar que a inserção de marcadores personalizados é ilimitada desde que
respeitado o uso dos cinco.
path
Esse parâmetro não se aplica para o nosso caso e não entraremos em maiores
detalhes sobre ele.
visible
Esse parâmetro não se aplica para o nosso caso e não entraremos em maiores
detalhes sobre ele.
228 HTML:
sensor
►css
<style>
#mapa {
width:420px;
height:420px;
display:none;
}
</style>
►JavaScript
<script>
function mostrarMapaQ {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(sucesso,erro);
} else {
alert("Este navegador não suporta a funcionalidade Geolocation");
}
}
function erro(err) {
switch (err.code) {
case 1 :
var mensagemErro = "A permissão para obter a sua posição foi negada.";
break;
case 2 :
var mensagemErro = "Não foi possível estabelecer uma conexão para obter a sua posição,".:
break;
case 3 :
var mensagemErro = "Tempo esgotado.";
break;
default:
var mensagemErro = "Não foi possível obter sua posição.'1;
}
var codigoErro = err.code;
var mensagem = "Ocoreu um erro na determinação da posição: <br>";
mensagem += "Código do erro: " + codigoErro + "<br>";
Capítulo 7 ■ Geolocalização 229
►HTML
<section>
cpxinput type=button value="Clique para mostrar sua posição no mapa" onclick="mostrarMapa()"x/p>
<p id="msg" class="dest"x/p>
</section>
<section>
<img id="mapa" />
</section>
♦ 1 [c7-mapa-estatico-google.html]
Para receber um mapa dinâmico da API do Google Maps, uma página web pre
cisa carregar a respectiva API. O carregamento é feito com uso do elemento script
na seção head do documento apontando para um URL no site do Google, como
mostrado a seguir.
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true ou false">
</script>
230
O valor latLong para a propriedade center é uma variável obtida com a sintax;
mostrada a seguir.
var latLong = new google.maps.LatLng(latitude, longitude)
Estes são os passos básicos para inserção de um mapa. API do Google Maps prevê
uma grande quantidade de métodos e propriedades que possibilitam personalizar
seus mapas. Não é do escopo deste livro detalhar aquela API. Se você estiver interes
sado em aprofundar o assunto, consulte a documentação online no site do Google.
}
}
function erro(err) {
switch (err.code) {
case 1 :
var mensagemErro = "A permissão para obter a sua posição foi negada.";
break;
case 2 :
var mensagemErro = "Não foi possível estabelecer uma conexão para obter a sua posição.";
break;
case 3 :
var mensagemErro = "Tempo esgotado.";
break;
default:
var mensagemErro = "Não foi possível obter sua posição.";
}
var codigoErro = err.code;
var mensagem = "Ocoreu um erro na determinação da posição: <br>";
mensagem += "Código do erro: " + codigoErro + "<br>";
mensagem += "Mensagem: " + mensagemErro;
document.getElementById('msg1) .innerHTML = mensagem;
}
232 HTML 5
function sucesso(position) {
var mapa= document.get£lementById("mapa");
mapa.style.display = "block";
var opcoes = {
zoom: 15,
mapTypeld: google.maps.MapTypeld.ROADMAP
}
var map = new google.maps.Map(document.getElementById("mapa"), opcoes);
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var local = new google.maps.LatLng(latitude,longitude);
contentstring = "<br>Legal! Achei voce usando a funcionalidade<br> Geolocation do W3C e o Google Maps.”;
map.setCenter(local);
infowindow.setContent(contentstring);
infowindow.setPosition(local);
infowindow.open(map);
}
</script>
# 1 1 [c7-mapa-dinamico-google.html]
Armazenamento de
/ dados
8 .1 Web Storage
O conceito de cookie foi criado em 1994 por Lou Montulli da Netscape, que,
naquela época, desenvolvia uma aplicação e-commerce para um cliente. Em resumo,
trata-se de um mecanismo capaz de armazenar pequenas peças de dados gravadas
em um arquivo de texto no computador do usuário. Um cookie é criado e apagado
233
234 HTML;
A busca por soluções alternativas para o uso de cookies não começou com a
HTML5, A Microsoft introduziu no Internet Explorer 5.5, lançado em julho de 2000,
uma tecnologia denominada DHTM L Behaviors que, em resumo, permite criar
componentes contendo funcionalidades específicas ou comportamentos (behaviors)
reusáveis em uma página web.
É um mecanismo que foi projetado com a finalidade de armazenar dados para tran
sação em um documento HTML, isto é, para cada novo documento HTM L, é criada
uma área de armazenamento de dados independente. Assim, é possível coexistirem
múltiplas transações em diferentes janelas ou abas do navegador ao mesmo tempo,
cada uma com seus conjuntos de dados independentes. Os dados pertencentes a um
documento são excluídos quando o usuário fecha a janela ou a aba do navegador e
não são transmitidos e nem se comunicam com outras janelas ou abas.
236 HTML 5
Esse comportamento resolve uma das limitações impostas pelos cookies: o fato
de existirem em diferentes janelas ou abas ao mesmo tempo e somente serem exclu
ídos por ocasião do fechamento do navegador, desde que não tenha sido prevista
uma vida útil para eles.
►JavaScript
<script src="cokieutil.js"x/script> <!-- Objeto CookieUtil -->
<script>
function salvarCookie(name) {
var valor = document.forms['cookieform'].cookievalue.value;
var itemStorage = sessionStorage.setltem('datastorage', valor);
var valorltemStorage = sessionStorage.getltem('datastorage');
if (!valor)
alert('Entre um valor para o cookie e dado.');
else {
CookieUtil.set(name,valor);
var mensagem = 'Um cookie denominado "meuCookie" com o valor ’+valor+'\n';
mensagem += 'e um dado com o nome "datastorage" com o valor 'rvalorltemStorage +'\n';
mensagem += 'foram criados'
alert(mensagem);
}
}
function lerCookie(name) {
var valorltemStorage = sessionStorage.getltem('datastorage');
var mensagem = 'Um cookie denominado "meuCookie" com o valor '+CookieUtil.get(name)+'\n'j
mensagem += 'e um dado com o nome "datastorage" com o valor '+valorItemStorage +'\n';
mensagem += 'foram lidos'
alert(mensagem);
}
function apagarCookie(name) {
CookieUtil.unset(name);
sessionStorage.removeItem('datastorage');
alert('Cookie com o nome "meuCookie" e dado com o nome "datastorage" foram apagados');
}
</script>
Capítulo 8 ■ Armazenamento de dados 237
►HTML
<section>
<form name="cookieform'' action="#"xp>
<label>Escolha um valor para o cookie de nome "meuCookie".
<br>0 mesmo valor será usado para o dado de nome "dataStorage":</labelxbr>
<input name="cookievalue" />
</p>
</form>
<p x a href="#" onclick="salvarCookie('meuCookie')">Armazenar cookie e dado</ax/p>
<p x a href="#" onclick="lerCookie('meuCookie')">Ler cookie e dado</ax/p>
< p x a href="#" onclick="apagarCookie('meuCookie')">Apagar cookie e dado</ax/p>
</section>
v- [c8-cookies-sessionstorage.html]
8.1.2 localStorage
É um mecanismo que foi projetado com a finalidade de armazenar dados que persis
tem em diferentes janelas ou abas do navegador. Assim, é possível que uma transação
compartilhe em diferentes janelas ou abas do navegador o mesmo conjunto de dados.
Os dados são excluídos quando o usuário fecha o navegador e são transmitidos e se
comunicam com outras janelas ou abas enquanto o navegador estiver aberto.
►JavaScript
<script>
function salvarDado(name) {
var valor = document.forms['dadoform'].dadovalue.value;
var itemStorage = localStorage.setItem('dataStorage', valor);
var valorltemStorage = localStorage.getltem('dataStorage');
if (!valor)
alertCEntre um valor para o dado a armazenar.');
else {
mensagem = 'Um dado com o nome "dataStorage" com o valor '+valor!temStorage +'\n';
238 HTML
> HTML
<section>
<form name="dadoform" actíon="#">
<pxlabel>Escolha um valor para o dado "meuDado":</label>
<brxinput name="dadovalue" /></p>
</form>
< p x a href="#" onClicl<="salvarDado('meuDado')">Armazenar dado</ax/p>
< p x a href="#" onClick="lerDado('meuDado')">Ler dado</ax/p>
< p x a href="#" onClick="apagarDado('meuDado')">Apagar dado</ax/p>
</section>
<,>j [c8-localstorage.htm!]
!> JavaScript
<script>
<label>
dnput type="checkbox" onchange="sessionStorage.seguroViagem = checked")
Quero fazer o seguro viagem
</label>
t> JavaScript
<p>Você visualizou esta páginacspan id="count"x/span> vezes.</p>
<script>
if (llocalStorage.pageLoadCount)
localStorage.pageLoadCount = 0;
localStorage.pageLoadCount += 1;
document.getElementByldf'count').textContent = localStorage.pageLoadCount;
</script>
set!íem('nome' 'valor'}
sessionStorage.setltem('site', 'http://maujor.com');
e
localStorage.setltem('site', 'http://maujor.com');
e
localStorage.site = 'http://maujor.com';
getltem('nome')
e
localStorage.getltem('site'); // retorna http://maujor.com
e
localStorage. site; // retorna http://maujor.com
removeltem('nome')
ou
localStorage.removeltem('site'); // remove o par site/http://maujor.com
dear!)
Esse método não requer parâmetros e se destina a apagar todo o conteúdo da área
de armazenamento, isto é, esvazia o objeto sessionStorage ou localStorage. A sintaxe
para esse método é mostrada a seguir.
sessionStorage.clearQ; // esvazia o objeto sessionStorage
ou
localStorage.clear(); // esvazia o objeto localStorage
Capítulo 8 ■ Armazenamento de dados 241
key(n)
ou
localStorage.key(0); // retorna o nome do primeiro dado armazenado
Podemos usar uma sintaxe alternativa para os métodos que admitem o parâmetro
nome, usando o retorno desse método como parâmetro. Observe a seguir a sintaxe
alternativa para o método get().
sessionStorage.getItem(sessionStorage.key(2)); // retorna o valor do terceiro dado armazenado
íength
ou
localStorage.Íength; // retorna um número maior ou igual a zero
► JavaScript
<script>
window.onload = functionQ {
var campos = document.getElementsByTagName('input');
var limpar = document.getElementByld('limpar');
limpar.onclick = functionQ {
campos[0].value = 'clique';
camposjl].value = 'clique';
}
}
sessionStorage.um = 4;
242 HTML 5
sessionStorage.dois = 3;
</script>
►HTML
<section>
<p>Armazenamento sem tratamento (como string) - Operação de concatenação.<br>
4 + 3 = <input onclick="this.value = sessionStorage.getItem('um')
+ sessionStorage.getItem('dois');" value="clique"x/p>
<p>Armazenamento com <code>parselnt()</code> (como número) - Operação de adição.<br>
4 + 3 = <input onclick="this.value = parseInt(sessionStorage.getItem('um'))
+ parseInt(sessionStorage.getItem('dois'));’' value="clique"x/p>
cbutton type="button" id="limpar''>Limpar</button>
</section>
õSi [c8-nurneros.html]
JSO N permite que se use texto para representar objetos JavaScript e, em con
sequência, é possível armazenar localmente objetos e recuperá-los pôsteriormerr:;
com uso dos métodos ISON.stringifyQ e DSON. parseQ. A sintaxe para armazenar
recuperar objetos com JSO N é mostrada a seguir.
sessionStorage.setltem('ObjetoJson', 3 S 0 N .síringify(ObjetoJson)); // armazena
JSON.parse(sessionStorage.getItern(1ObjetoJson’)); // recupera
O exemplo a seguir é idêntico ao exemplo anterior, mas agora estamos u san c..
JSO N para recuperar o objeto Number armazenado como string.
Capítulo 8 ■ Armazenamento de dados 243
►JavaScript
<script>
window.onload = functionQ {
var campos = document.getElementsByTagName('input');
van limpar = document.getElementßyld('limpar');
sessionStorage.setItem('a', 4);
sessionStorage.setltem('b', 3);
a = sessionStorage.getltem('a');
b = sessionStorage.getltem('b');
campos[0].onclick = function() {
this.value = a+b;
}
var numeros = {
a: 4,
b: 3
}
sessionStorage.setItem('numeros', JSON.stringify(numeros));
JSQN.parse(sessionStorage.getltem('numeros' ));
campos[l].onclick = functionQ {
this.value = numeros.a + numeros.b;
}
limpar.onclick = functionQ {
campos[0].value = 'clique';
campos f1].value = 'clique';
}
}
</script>
> HTML
<section>
<p>Armazenar com sessionStorage simples (operação de concatenação):<br>
4 + 3 = <input value="clique"x/p>
<p>Armazenar com sessionStorage e 3S0N (operação de adição):<br>
4 + 3 = <input value=''clique"x/p>
cbutton type="button" id="limpar">Limpar</button>
</section>
[c8-numeros-jsoii.html]
244 H TM L:
m key - é uma string com o nome do dado que foi modificado, adicionado ou
removido.
Não é possível cancelar o evento storage. Uma vez iniciada uma função callback
para o evento, não há como interrompê-la. O evento não se propaga pelo efeito bolha.
Convém ressaltar, com ênfase, que, ao contrário da maioria dos eventos JavaS
cript, o evento storage não é disparado na mesma janela ou aba do navegador onde
se encontra o disparador do evento, e sim em outras janelas ou abas abertas que
pertençam ao mesmo domínio. Esse comportamento pode parecer muito estranho,
mas é assim que foi implementado, embora a especificação não deixe claro que
assim deve ser.
O método get It em() não dispara o evento, pois esse método não altera a área de
armazenamento.
►JavaScript
<script>
function msgEvento(e) {
if (!e) {e = window.event;}
var limpar = document.getElementByldplimpar');
var containerMensagem = document.getElementById('mensagem');
if (window.addEventListener) {
window.addEventListener('storage', msgEvento, false);
} else {
window.attachEvent('onstorage', msgEvento);
}
► HTML
<form name="dadoform" action="#">
<pxlabel>Escolha um valor para o dado "meuDado" :</labelxbr> <input name="dadovalue"x/p>
</forms
< p x a href="#" onClick="salvarOado('meuDado,),,>Arniazenar - setltem()</ax/p>
< p x a href="#" onClick="apagarDado('meuDado')">Apagan dado - removeItem()</ax/p>
< p x a href="#" onClick="clearDados()">Apagar todos os dados - clear()</ax/p>
<p id="mensagem"x/p>
<button type="button" id="limpar">Limpar</button>
■til [c8-evento-storage.html]
Não iremos aprofundar o assunto, pois a especificação, como dito, ainda se en
contra em fase inicial e instável, contudo mostraremos os principais fundamentei
do armazenamento com uso da API IndexedDB. Os conceitos e códigos que ilustram
Capítulo 8 s Armazenamento de dados 247
□ Fazer a requisição para realizar uma operação com o banco, por exemplo,
adicionar ou requisitar um dado armazenado.
O objeto indexedDb admite um método denominado open() que, por sua vez, ac-
mite dois parâmetros. Os parâmetros são: o nome do banco de dados e uma breve
descrição do banco. Esse método destina-se tanto a criar um banco novo quanto ;
abrir um banco existente. Em nosso exemplo, o banco criado foi atribuído àvariáve.
request que passa a representar o banco.
Convém ressaltar que bancos de dados locais são criados e atrelados a domínios.
Assim, poderemos ter dois bancos de dados com o mesmo nome e completamente
independentes desde que criados para diferentes domínios, ainda que páginas dos
dois domínios estejam abertas em diferentes janelas ou abas do mesmo navegador.
Uma vez que as especificações para indexedDB ainda estão em fase inicial, a fun
dação Mozilla implementou as funcionalidades para esse banco de dados usandc
o prefixo moz que adotaremos nos exemplos a seguir com a finalidade de ilustrar c
funcionamento da API. Assim, nosso código para a criação de um banco de dados
será escrito com a sintaxe mostrada a seguir.
window.indexedDB = window.mozIndexedDB;
var request = window.indexedDB.open('Catalogo', 'Catalogo de email e telefone');
Uma vez aberto ou criado o banco de dados, o próximo passo será verificar se a
requisição foi bem-sucedida ou falhou, como mostrado a seguir.
►JavaScript
<script>
window.onload = function!) {
window.indexedDB = window.mozIndexedDB;
var mensagem = document.getElementById('mensagem');
var limpar = document.getElementByld('limpar');
var request = window. indexedDB. open ('Catalogo', 'Catalogo endereços de email e telefone');
request.onsuccess = function(event) {
mensagem.innerHTMl = 'Banco de dados "Catalogo" criado/aberto com sucesso.';
limpar.style.display = 'block';
}
request.onerror = function(event) {
mensagem.innerHTML = 'Falha ao criar/abrir banco de dados.';
limpar.style.display = 'block';
}
Capítulo 8 ■ Armazenamento de dados 249
limpar.onclick = functionQ {
mensagem.innerHTML = " ;
limpar.style.display = 'none';
}
}
</script>
►HTML
<section>
<p id=,,mensagem”x /p>
<button type="button'' id="limpar" style="display:none;'’>Remover mensagem</button>
</section>
[c8-indexedDB-exl .html]
B B g g ^ m ^ c g g ^ :z c : : .....- •siSlis!
Arquivo Ecitc- Ex.o r hstènco Fsvoriiös Serrsmentas Alyds
1*3-
E s t e s :te O iw o h m v s.ió c c lh o s t: e s t á s o t e s n d a o
s r m a w r « m e n t o cie a a t t e n o s e u c o m p u t a d o ' p a r s
liso offi.ne.
JavaScript
Com essa ação, você provocará um erro na criação do banco de dados e a funçâ:
callback para o evento onerror será executada mostrando uma mensagem de erro ac
usuário, conforme consta no código mostrado.
-ira x i:
2e-r - --
pêCc liV'Oll
Carregar tmagetss
Usar o pB" ? :
A b rir ja n e la s oopup
W Usar o padrão C rurrar■ C fifuqpea;"
f c o o k te s
W' Usar o padrão r ■ ■■■
: U”Unquenr
Instalar e x te n s õ e s o o t e m a s
W. Usar o padrão ("■ & 5.raraex.'
Compa rttlhar localização
C 'v '.fir í?
c
W Perguntar
Convém notar que, se você estiver navegando no modo “Navegação privada”, não
será permitida a armazenagem de dados localmente em nenhuma hipótese, mesmo
que você habilite a permissão no submenu Permissões, como mostrado na figura 8.2.
Para iniciar a navegação privada no Firefox, tecle Ctrl+Shift+P.
8 2 Verificando suporte
Nos exemplos mostrados neste capítulo não usamos a verificação de suporte nos
navegadores para as funcionalidades descritas. Como vimos em capítulos anteriores,
o uso da biblioteca Modernizr fornece uma maneira simples de se processar essa veri
ficação. A seguir, mostramos a sintaxe para a verificação com uso da biblioteca citada.
if (ÍModennizr.sessionstorage) {
// código alternativo para sessionstorage
}
if (iModernizr.localstorage) {
// código alternativo para localStorage
}
if (IModernizr.indexeddb) {
// código alternativo para indexedDB
}
■ M m -.' s
252
Capítulo 9 ■ APIs para comunicação 253
http://maujor.com/dicas/centrar.php Sim -
http://maujor.com/ Sim -
https://maujor.com/area-restrita.php Não protocolo diferente
http://maujor.com:Sl/w3c/css2.php Não porta diferente
http://fw.maujor.com/bezier.php Não host diferente
};
function receberMensagem(e) {
// faz alguma coisa com a mensagem recebida
}
</script>
message
No documento A:
►JavaScript
<script>
window.onload = function() {
var objetolframe = document.getElementsByTagName('iframe')[0];
var btnEnviar = docutnent.getElementsByTagName('button')[0]j
Capítulo 9 a APIs para comunicação 255
btnEnviar.onclick = functionQ {
var textoMensagem = document.getElementsByTagName('input')[0].value;
if (textoMensagem == " ) {
alert('Digite a mensagem a ser enviada');
} else {
objetoIframe.contentWindow.postMessage(textoMensagem, 'http://maujor.com');
}
}
}
</scripts
► HTML
<section>
<pxlabel>Mensagem: dnput type=textx/label>
cbutton type=button>Enviar mensagem</buttonx/p>
ciframe src="http ://maujor.com/messaging.html"></ifrarae>
</section>
No documento B:
► JavaScript
<script>
if (window.addEventListener) {
window.addEventListener('message'j receberMensagem, false);
} else {
window.attachEvent("onmessage", receberMensagem);
};
function receberMensagem(e) {
var mensagem;
var containerMensagem = document.getElementByld('recebe-mensagem');
if (e.origin == 'http://livrohtml5.com.br') {
mensagem = 'Recebida a seguinte mensagem: <br>';
mensagem += 'Texto: 1 + e.data + '<br>1;
mensagem += 'Origem: ' + e.origin;
containerMensagem.innerHTML = mensagem;
} else {
containerMensagem.innerHTML = 'Tentativa de envio de mensagem de uma origem não autorizada';
}
}
► HTML
<p id="recebe-mensagem "x/p>
[c9-messaging.html]
256 HTiV. :
►JavaScript
<script>
window.onload = functionQ {
var objetolfratne,btnEnviar,nomeUsuario,horaMensagem,textoMensagem,dadosEnviar,stringEnvia-
objetolframe = document.getElementsByT agName(1iframe1)[0]J
btnEnviar = document.getElementsByIagName(1button')[0];
btnEnviar.onclick = functionQ {
now = new DateQ;
hour = now.getHours();
minute = now.getMinutes();
second = now.getSecondsQ;
}
stringEnviar = 3 S 0 N . stringify(dadosEnviar);
Capítulo 9 ■ APIs para comunicação 257
► HTM L
<section>
<pxlabel>Seu nomexbrxinput type=textx/labelx/p>
<pxlabel>Mensagem:<brxtextareax/textareax/labelx/p>
cpxbutton type=button>Enviar mensagem</buttonx/p>
<iframe src="json.htmrix/iframe>
</section>
► JavaScript
<script>
if (window.addEventListener) {
window.addEventListener('message', receberMensagem, false);
} else {
window.attachEvent("onmessage", receberMensagem);
};
function receberMensagem(e) {
var containertlensagem, msgRecebida, nomeRecebido, textoRecebido, para, span, conteudoSpan, conteudoPara;
containerMensagem = document.getElementByld('recebe-mensagem');
if (e.origin == 'http://livrohtml5.com.br') {
osgRecebida = DSON.parse(e.data);
nomeRecebido = msgRecebida.nome;
textoRecebido = msgRecebida. texto;
horaRecebida = msgRecebida. bora;
para = document.createElement('p');
span = document.createElement('span');
conteudoSpan = document.createTextNode(nomeRecebido);
conteudoPara = document.createTextNode(' ('+horaRecebida+') '+ textoRecebido);
span.appendChild(conteudoSpan);
para.appendChild(span);
para.appendChild(conteudoPara );
containerMensagem.appendChild(para);
} else {
containerMensagem.innerHTML = 'Tentativa de envio de mensagem de uma origem não autorizada
}
}
</script>
í> HTML
<section>
<div id="recebe-mensagem"x/div>
</section>
[c9-json.html]
Notar que enviamos três dados: nome, mensagem e hora. A hora poderia te:
sido aferida no documento de destino; contudo, optamos pela tomada da hora na
origem apenas para ilustrar o envio de mais um dado.
NAVEGADOR
D
'DOR web socket, full-duplex
•M n
X
1
ò O
8,
■f. V.
i 8
te iZ C£ te
N AV EG AD O R
terriiao
Em resumo: Web Sockets pode tornar uma aplicação mais rápida, mais eficiente
e mais escalável.
W ebSocket(i/r/ Iprotocolos])
se n d(do do )
Esse método destina-se a enviar dados para o servidor. Os dados a enviar sã:,
padrão, em formato de string e tal como ocorre com Web Messaging o us ;
métodos U S O N . stringifyO e 3S0N.parse() viabiliza o envio de objetos.
stringDados = 3S0N.stringify(objetoDados');
send(stringDados);
Para que os dados sejam enviados, é necessário que o atributo readyState tenha
assumido o valor OPEN e ainda não tenha entrado no valor CLOSING. Além disso, é
necessário que o buffer não esteja cheio.
readyState
b u ffe r e d A m o u t
Esse atributo retorna o número de bytes contido no texto UTF-8 a ser enviado como
dado. Evocar o método send() com o buffer cheio fecha a conexão aberta, por isso é
essencial que se verifique a situação do buffer antes de enviar um dado.
9.2.2 Eventos
onopen
Esse atributo, que define o evento open, está disponível para todos os objetos imple
mentados pela interface W ebSocket. O evento é disparado quando a comunicação
é estabelecida.
262 HTi\
onmessage
Esse atributo, que define o evento message, está disponível para todos os os .
implementados pela interface W ebSocket. O evento é disparado quando os c s ;
enviados chegam ao destino.
ondose
Esse atributo, que define o evento c lo s e , está disponível para todos os o b jec
plementados pela interface W ebSocket. O evento é disparado quando a cc .
encerrada.
function (e) {
w s C o n n .o n c l o s e =
o n e rro r
Esse atributo, que define o evento error, está disponível para todos os objetos im
plementados pela interface W ebSocket. O evento é disparado quando ocorre um erro.
93 Web Workers
Web Workers é uma API não incluída na especificação para a HTML5 e desenvolvida
pelo W 3C. Trata-se de mais uma tecnologia que começou a ser implementada pelos
navegadores com as funcionalidades da HTM L5 e ficou a ela vinculada embora
dela não fazendo parte.
Scripts que demandam muito tempo para execução são detectados pelos m e:. -
nismos internos dos navegadores e, depois de passado determinado tempo, acab:
por fazer com que uma caixa de diálogo seja apresentada ao usuário informand: .
demora e perguntando se ele quer que interrompa ou continue a execução do s e n ::
23|
tim sd p lse sr.f soes ests-' em execução ou p?n?do de respor.Ces
- j Voçé pode r: :e7 orpe-lo açor* 0 7 pare véní-:-?'' se e!e terror* a exea ção,
Scrst:
httpi/; Bvrc*!' ' 5. :o-r.
P tpC‘p£:‘5-.7:!:?7 ce -‘ovo
Algumas técnicas têm sido usadas para contornar essa restrição, como uso des
métodos s etln tervalQ, s e t T i m e o u t Q e do objeto XMLHttpRequest, contudo são soluções
que nem sempre simulam a execução de múltiplos Scripts simultaneamente.
Notar que com Web Workers é possível realizar as tarefas B e D ao mesmo tempo
que são realizadas as tarefas A e C. O cálculo de A e B começa ao mesmo tempo e.
ao terminar, a tarefa C que depende de A e B é iniciada com a tarefa D. Terminadas
estas, o cálculo final é processado.
Capítulo 9 ■ APIs para comunicação 265
'\
( COM \
[ Web I
VWorkers /
N*.
T a r e fe i A j Tarefa B
Tarefa B
it 1
Tarefa c
MB j Tarefa C I J Tarefa O J
Tarait OJ
Por outro lado, com JavaScript tradicional, todas as tarefas são realizadas em
um processo semelhante a um passo a passo com cada uma das tarefas iniciando
somente quando a anterior for concluída.
Porém, Web Workers tem acesso apenas aos seguintes conjuntos de funcionali
dades da JavaScript.
■ Objeto navigator.
■ Objeto XMLHttpRequest.
■ M é t o d o c le a rln te rva lQ .
a M é t o d o setTim eou tQ .
a Método clearTimeoutQ.
Web Workers não tem acesso ao D O M nem aos objetos window, document e parem.
Por exemplo, não é possível o uso dos métodos alert () e getElementById() quando w
usa Web Workers.
Segundo o W3C, a finalidade da especificação para Web Workers é definir uma API
que possibilite aos autores de aplicações web criar mecanismos (chamados workers
capazes de executar scripts em background e em paralelo com a página web principal.
Aexecução de workers em uma aplicação web não interfere com os scripts da GUI
(Graphical User Interface ou interface gráfica do usuário); portanto, não impede a
interação do usuário e muito menos “congela” uma página web.
r = 0
for (i=0; i<=le+8; i++) {r += i;}
campoResultado.value = r;
1, 100)
if (window.addEventListener) {
btnSemWorker.addEventListener('click', calcula, false);
btnLimpan.addEventListener('click1, function() {
campoResultado. value =
}, false);
} else {
btnSemWorker.attachEvent(’onclick1, calcula);
btnLimpar.attachEvent('onclick', function)) {
campoResultado.value = ";
});
}
// com worker
function calcWorker)) {
campoResultado.value = ’Calculando...’;
var worker = new Worker('calcula.js’);
worker.onmessage = function (evt) {
campoResultado.value = evt.data;
}J
};
if (window.addEventListener) {
btnComWorker.addEventListener)'click', calcWorker, false);
} else {
btnComWorker.attachEvent)'onclick', calcWorker);
};
}
window.onload = init;
// ]]>
</script>
►HTML
<section>
<h3>Cálculo da soma dos números naturais de 0 a 100.000.000</h3>
<p>Iniciar cálculo: cbutton type=button>Sem Worker</button> cbutton type=button>Com Worker
</buttonx/p>
268 HT:V.
<pxlabel>Resultado:<brxinput type=textx/labelx/p>
<button type=button>Limpar</button>
</section>
Q sí
•W.I [c9-webworkers-ex1.html]
Em uma primeira análise, somos levados a acreditar que podemos criar worker;
indiscriminadamente para executar várias tarefas JavaScript pesadas. Contudo,
criar workers, o desenvolvedor deve considerar que nem sempre é apropriado uir.
elevado número de workers na página. A especificação do W 3C ilustra esse cuida
do citando que não é apropriada a criação de um worker para cada pixel de uma
imagem com tamanho de quatro megapixel. Afirma ainda que, em geral, workers
a princípio devem ter uma vida longa, além de um desempenho e alocação de me
mória que justifiquem seu uso.
Essa é a sintaxe para criar um worker. Usa o operador new para criar um objeto que
na API foi chamado de Worker. O parâmetro único aponta para um arquivo JavaS
cript contendo o script para a realização da tarefa. Esse objeto armazena todas as
funcionalidades da API. A sintaxe JavaScript permite que você escolha livremente o
nome de uma variável para armazenar um objeto recém-criado. Observe os códigos
a seguir.
var worker = new Workerj'tarefa-um.js');
var xpto = new Workerf1blablabla.js')j
Notar que as tarefas a serem executadas em cada um dos workers de uma página
devem ser definidas em arquivos externos.
Capítulo 9 ■ APIs para comunicação 269
posíMessage('mensogem')
message
oninessage = function(e) {
var mensagemRecebida = e.data; // armazena a mensagem recebida
}, false)
}, false)
O exemplo não apresenta valor prático algum e tem por finalidade, apenas, de
monstrar a mecânica e sintaxe para a troca de mensagens entre a página e o Worker.
►Javascript na página
<script>
function initQ {
if (IModernizr.webworkers) {alert('Lamento, seu navegador não suporta Web Workers’);}
var campoMensagem,btnLimpar,btnlniciarWorker,campoResultado;
carnpoMensagem = document. getElementsByíagName(1input') [0];
btnLimpar = document.getElementsByT agName('button')[0];
btnlniciarWorker = document.getElementsByTagName('button')[!];
campoResultado = document.getElementById(1msg');
function comunicarWorkerO {
if (carnpoMensagem. value == " ) {
alertCDigite sua mensagem para o Worker');
return;
}
campoResultado.style.display = 'block';
var textoMensagem = carnpoMensagem.value;
var worker = new Work e r ( 'exemplo2.js');
worker,postMessage ( t e x to M e n s a g e m ) ; // envia mensagem para o Worker
worker.onmessage = f u n c t i o n (e) { // recebe mensagem do Worker
campoResultado.innerHTML = e .dataj
};
if (window.addEventListener) {
btnlniciarWorker.addEventListener('click', comunicarWorker, false);
btnLimpar.addEventListener('click', function() (
carnpoMensagem. value = ";
campoResultado.style.display = 'none';
}, false);
} else {
btnLimpar,attachEvent('onclick', functionQ {
carnpoMensagem. value = ";
campoResultado.style.display = 'none';
});
btnlniciarWorker.attachEvent('onclick', comunicarWorker);
};
}
window.onload = init;
</script>
Capítulo 9 a APIs para comunicação 271
> HTML
<section>
<h3>Comunicação da página com o Worker e vice-versa</h3>
<pxlabel>Entre uma mensagemxbrxinput type=textx/label>
cbutton type=button>Limpar</buttonx/p>
cpxbutton type=button>Iniciar Worker</button>
<p id=”msg“x /p>
</section>
<>J [c9-webworkers-ex2.html]
error
campoResultado.style.display = 'block';
var textoliensagem = campoMensagem.value;
var worker = new Worker(’exemplo3.js ')j
worker. onerror = function (e) {
linhaErro = e.lineno;
msgErro = e.message;
arquivoErro = e.filename;
erro = 'Ops! Ocorreu o seguinte erro:<br>';
erro += 'Linha: '+ linhaErro + '<br>';
erro += 'Erro: '+ msgErro + '<br>';
erro += 'Arquivo: '+ arquivoErro;
campoResultado.innerHTML = erro;
};
worker,postMessage(textoMensagem); // envia mensagem para o Worker
worker.onsnessage = function (e) { // recebe mensagem do Worker
campoResultado.innerHTML = e.data;
};
};
if (window.addEventListener) {
btnIniciarWorker.addEventListener('click', comunicarWorker, false);
btnLimpar.addEventListener('click', functionQ {
campoMensagem. value = ";
campoResultado. style, display = 'none';
false);
} else {
btnLimpar.attachEventConclick', function() {
campoMensagem. value = ";
campoResultado.style.display = 'none';
});
btnlniciarWorker.attachEvent('onclick'^ comunicarWorker);
};
}
window.onload = init;
</script>
► HTML
<section>
<h3>Comunicação da página com o Worker e vice-versa <br>
<small>Mostra o uso do evento error. 0 script do worker contém erro</smallx/h3>
<pxlabel>Entre uma mensagem: cbrxinput type=textx/label>
cbutton type=button>Limpar</buttonx/p>
cpxbutton type=button>Iniciar Worker</button>
<p id="msg"x/p>
</section>
® [c9-webworkers-ex3.html]
Suponha que para realizar seus cálculos o worker faça uso da biblioteca jQ uery
e de um script que o desenvolvedor resolveu separar em dois blocos independentes
para a facilidade de manutenção. O arquivo ta.refa-um.js é escrito conforme mostrado
a seguir.
274 HTML 5
tem inaíeO
dose()
self .close()j // A palavre chave self (ou, opcionalmente this) refere-se ao próprio o worker
Offline
275
276 HTML 5
A relação dos arquivos não necessários para uso offline é opcional e destina-se
a garantir que as requisições do navegador para os arquivos nela listados ocorram
somente quando o usuário estiver online. Por exemplo: em uma aplicação que con
tenha uma funcionalidade para atendimento online (chat), os arquivos necessários
ao funcionamento do chat não devem ser armazenados localmente, pois é óbvio
que a funcionalidade não funcionará offline.
10 .2 M anifesto
CACHE:
# lista dos arquivos para uso offline
index.html
/estilos/main.css
/scripts/jquery.js
NETWORK:
# lista dos arquivos não necessários para uso offline
/login.php
http://facebook/api/comments
FALLBACK:
# lista dos arquivos alternativos para uso offline
/login.php /offline/login.html
http://facebook/api/comments /offline/facebook-comentarios.html
*. html /offline/offline.html
# Exemplo de arquivo manifesto
# para uso em aplicações offline
Capítulo 10 b Offline
m a seção CACHE pode ser omitida e os arquivos nela listados podem vir logo
abaixo do título. Tudo se passa como se CACHE M ANIFEST assumisse as
funções de título e seção CACHE cumulativamente;
Na terceira linha qualquer acesso offline a um arquivo .html que não esteja
armazenado para uso offline acessará o arquivo offline.html armazenado em cache.
Possivelmente esse arquivo conterá uma mensagem ao usuário informando que o
acesso à página que ele acaba de requisitar somente é possível quando online.
278 HTML 5
Um arquivo manifesto pode ser gravado com qualquer extensão, porém é de boa
prática não escolher uma extensão reservada a outros tipos de arquivo (por exemplo:
. h t m l , .d o e , . j p g , . x i s ) ou, melhor ainda, adote a extensão .m a n ife s t que, embora não
obrigatória, já está consagrada pelo uso.
Atualizar o arquivo manifesto é uma opção que tem sido adotada na maioria das
vezes. Qualquer alteração feita no arquivo é suficiente para provocar uma atualização
dos dados armazenados quando o usuário retorna à aplicação online. Até mesmo a
mudança de um comentário no arquivo provoca a atualização. E é exatamente esse
tipo de mudança que vem sendo empregado.
A última opção é fazer a atualização do cache com uso de script. O script que
faz a atualização automática será mostrado em 1033.
Application cache, uma API prevista nas especificações para HTML5, que define
métodos, propriedades e eventos destinados a monitorar e manipular o estado dos
280 HTML 5
dados armazenados para uma aplicação offline. A interface dessa API fornece um
objeto denominado applicationCache contendo todas as funcionalidades da API.
10 .3 .1 Propriedades e métodos
status
■ 0BS0LETE (5) - O cache foi marcado como obsoleto. Acontece quando o arquivo
manifesto não é encontrado.
}
Capítulo 10 »Offline 281
update()
swapCacheO
Esse método informa ao navegador que, uma vez feito o download de um manifesto
atualizado, os dados deverão substituir o cache atual pelo atualizado. O uso desse
método deve seguir-se ao uso do evento updateready. Convém notar que apesar de o
cache ter sido atualizado seu efeito sobre a página aberta somente será sentido se
o usuário recarregar a página ou fechar o navegador e voltar à página.
Um script completo que faz a atualização e a coloca em uso será mostrado adiante,
pois nele usaremos um manipulador de eventos e precisamos estudar primeiro os
eventos da API.
10 3.2 Eventos
Esse atributo, que define o evento checking, é disparado quando se constata a exis
tência de atualizações de cache ou a tentativa de download do manifesto pela pri
meira vez que a página é carregada no navegador. Esse é sempre o primeiro evento
da sequência de eventos.
o n u p d a te
Esse atributo, que define o evento update, é disparado quando se constata a não
existência de atualizações.
progress
Esse atributo, que define o evento progress, é disparado quando se inicia o downloac
de cada um dos arquivos de atualizações.
cached
Esse atributo, que define o evento cached, é disparado quando atualizações foram
baixadas e se encontram em condições de ir para o cache.
o b s o ie te
Esse atributo, que define o evento obsoiete, é disparado quando a requisição para
o arquivo manifesto resulta em um erro 404 - arquivo não encontrado ou 403 - ,
arquivo em endereço de acesso proibido.
e rro r
Esse atributo, que define o evento error, é disparado quando a requisição para o
arquivo manifesto resulta em um dos seguintes erros:
1 0 3 3 Atualizando o cache
Vimos que uma das três maneiras de se atualizar o cache é com uso de script.
Veremos a seguir um script que, valendo-se dos métodos, propriedades e eventos
estudados nos itens anteriores, faz a atualização automática do cache. Na verdade,
a atualização imediata depende da autorização do usuário.
var appCache = window.applicationCache;
window.addEventListener('load', function(e) {
appCache.addEventListener(1updateneady1, function(e) {
if (appCache.status == appCache.UPDATEREADY) {
appCache.swapCacheQ;
284 HTML 5
ou ainda
if (!window.applicationCache) {alert(’Lamento seu navegador não suporta navegação offline’);
a offline.css - uma folha de estilos definindo fundo e cor de fontes para o ele
mento body.
► index.html
</section>
<footer>
</footer>
</div>
</body>
</html>
286
HTML
► offline.css
body {
background-color:black;
coloriwhite;
}
► e xe m p lo .m a n ife s t
CACHE MANIFEST
#05/04/2011:vl
CACHE:
index.html
offline.css
NETWORK:
. ,/estilos/main.css
FALLBACK:
.,/estilos/main.css offline.css;
■9:1 [c10-index.html]
Acessibilidade
\
1 1 .1 WAI-ARIA
ARIA é a sigla para Aplicações de Internet Rica que em definição informal são
interfaces gráficas que oferecem possibilidade de interação com o usuário com base
em funcionalidades instaladas ao lado do cliente.
287
288 H TM L:
11.1.1 Role
Para definir a finalidade de um elemento estrutural adicionando-lhe semântica para
uso por uma tecnologia assistiva, usamos o atributo role. A sintaxe para definição
desse atributo é mostrada a seguir.
<div id="principal" role="main">
</div>
Por outro lado, um leitor de tela ao ler a marcação mostrada encontrará a palavra
principal como valor do ID e nada concluirá, pois o idioma que uma tecnologia
assistiva entende não é uma linguagem humana, e sim uma linguagem de máquina
previamente definida em uma taxionomia própria para a linguagem de marcação.
Capítulo 11 q Acessibilidade 289
Faz parte daquela taxionomia o atributo role e seu valor main que são interpre
tados por uma máquina como sendo uma região da aplicação na qual se encontra
o conteúdo principal da aplicação. Não se trata de uma região contendo um menu
ou um rodapé.
Corno foi dito, existe uma gramática destinada à máquina definindo a finalidade
e função de cada uma das funcionalidades da ARIA. Vamos a seguir fornecer uma
visão geral dessa gramática. A especificação categoriza roles em quatro áreas:
□ Abstract roles
® Widget roles
□ Landmark roles
1 1 .1 .1 .1 Abstract roles
Os roles abstratos constituem a base para a construção dos demais roles da WAI-
AR1A. São usados exclusivamente para definir a semântica relacionada à natureza
dos elementos ou seções da. aplicação, ou seja, destinam-se à construção da ontologia
dos roles. Assim, não devem ser usados pelos autores para definir a semântica de
conteúdos.
□ command - uma estrutura destinada a executar uma ação, mas que não recebe
nenhum tipo de dado.
a landm ark - uma região da página na qual se supõe necessidade de rápido acesso.
Por exemplo, uma estrutura de navegação ou de busca.
a sectionhead - uma estrutura que serve de rótulo ou sumário para uma seção.
Os roles para Widgets devem ser usados, pelos autores, para definir a semântica dc
componentes de um Widget da interface do usuário.
□ checkbox —um controle do tipo checkbox com três estados possíveis: true, f a l s e
e raixed.
h log - uma região na qual se armazenam informações essenciais que vão sendo
sobrescritas por informações que se atualizam.
Fazem parte ainda dessa categoria os roles destinados a marcar containers de ge
renciamento dos Widgets. Os valores possíveis para esses roles são mostrados a seguir.
292 HTML 5
a combobox - uma caixa de seleção, em geral similar a uma caixa de texto na qual
o usuário escolhe uma opção ou digita um item de sua escolha.
Os roles para Document Structure devem ser usados, pelos autores, para definir
a semântica de componentes estruturais destinados a organizar os conteúdos r.;.
página. Normalmente não são usados em estruturas interativas.
■ img - um Container para uma coleção de objetos que formam uma imagem.
e note - uma seção cujo conteúdo é uma anotação sobre o conteúdo principal.
1 1 .1 .1 .4 Landmark roles
Os Landmark roles devem ser usados, pelos autores, para definir a semântica de
componentes estruturais aos quais se supõe que o usuário deseje um rápido acesso,
como estruturas de navegação, de busca, formulários etc.
11 .1 .2 Atributos
Os atributos são listados na tabela e aqueles que se referem a estado estão devida
mente identificados, os demais são propriedades. Os valores de estado normalmente
são true e false e os valores das propriedades são definidos pelo autor.
295
Capítulo 11 a Acessibilidade
Características Valor
Superclasse do role: landmark
Conceitos relacionados: elemento nav
aria-atomic
aria-busy (estado)
aria-controls
aria-describedby
aria-disabled (estado)
aria-dropeffect
aria-expanded (estado)
aria-flowto
aria-haspopup
aria-hidden (estado)
aria-invalid (estado)
aria-label
aria-labelledby
aria-live
aria-owns
aria-relevant
Nome de: autor
</ul>
< /li>
</ul>
296 HTML 5
Os seguintes atributos são globais, isto é, podem ser usados para todos os elemento;
independentemente do seu role.
n aria-invalid (estado) - indica que o valor fornecido não está de acordo com o
formato esperado pela aplicação. Os valores possíveis para esse atributo são
grammar, spelling, true e false, sendo false o valor-padrão. O valor grammar indica
um erro gramatical, spelling em erro de grafia, true um erro de validação e
false a não existência de erros.
11 JM icrodados
A especificação do W 3C para Microdados encontra-se na fase de Rascunho de
Trabalho, porém as funcionalidades dessa tecnologia, em sua maioria, são bem su
portadas pelos navegadores e clientes para os quais foram criadas. Na especificação
está dito o seguinte, em tradução adaptada:
298 HTML S
1 1 .2.1 S in ta »
O termo item é usado para designar uma estrutura de dados a serem definidos com
uso dos mecanismos de Microdados.
Propriedade Descrição
name (fn) Nome da pessoa
nickname Apelido da pessoa
photo Link para uma imagem da pessoa
title Título da pessoa (por exemplo: Gerente Financeiro)
role Função da pessoa (por exemplo: Contador)
uri Link para uma página, tal como a home page pessoal
Capítulo 11 □ Acessibilidade 299
Propriedade Descrição
affiliation (org) Nome da organização a qual a pessoa é associada (por exemplo: empregado)
friend Nome de outra pessoa de seu relacionamento social como amigo
contact Nome de outra pessoa de seu relacionamento social como contato
acquaintance Nome de outra pessoa de seu relacionamento social como conhecido
0 local da pessoa. As subpropriedades são: street-address, locality, region, postal-code
address (adr)
e country-name
Os nomes das propriedades entre parênteses são conforme a grafia definida para
Microformatos.
documení.getltems([f/po])
Esse método retorna uma lista dos nós do DOM (elementos) do documento que
criam um item. Da lista não constam os nós que criam itens aninhados em outro
item. O método admite um parâmetro facultativo de uma lista de tipos de item se
parados por vírgula. Os valores da lista de parâmetros são os URL designados no
atributo itemtype.
e/emenfo.properties
e/eme/ifo.iíemValue[=ra/or]
Essa propriedade retorna o valor do atributo itempropo. Pode ser ainda usada para
definir por script o valor do atributo itempropo.
e/emenfo.iíemScope
Essa propriedade retorna um valor booleano conforme tenha ou não sido declarado
o atributo itemscope para o elemento.
e/emenfo.itemType
e/emenfo.itemld
e/emenfo.itemRef
e/emenfo.slemPrap
e/ememo.propeities
};
i f (suportaM icrodadosQ) {
// s c rip t para navegadores que suportam
} else {
// mensagem ou s c rip t para navegadores que não suportam
}
Elementos da HTML
303
HTML 5
header
j Conteúdo introdutório ou de auxílio de I globais
__j_navegação para uma página ou seção
------------------- [.
hgroup j Grupamento de cabeçalhos I globais
_ i m|______ . 11
Imagem _^globais; a l t ; src; usemap; ismap; w idth; height
globais; accept; a l t ; autocomplete; autofocus;
checked; dirname; d isabled; form; form action;
formenctype; formmethod; form novalidate;
in put Controle de formulário
I fo rm targ e t; height; l i s t ; max; maxlength; min;
|m u ltip le ; nam e;pattern; placeholder; readonly;
__^required; s ize ; src; step; typ e ; value; w idth
Apêndice A □ Elementos da HTML5 305
P Parágrafo globais j
param Parâmetro para o elemento object globais; name; value
pre Bloco de texto pré-formatado globais
progress Barra de progresso globais; value; max; form
Atributos da HTML5
307
308 HTML 5
Esta tabela foi extraída do site do W3C e relaciona os atributos para eventos da
HTML5. Fornece ainda uma relação dos elementos a que se aplicam, além de uma
breve descrição do atributo.
Atributo Elemento(s) Descrição
onabort elementos HTML Manipulador do evento abort
onafterprint body Manipulador do evento afterprint para o objeto Window
onbeforeprint body Manipulador do evento beforeprint para o objeto Window
onbeforeunload body Manipulador do evento beforeunload para o objeto Window
onblur body Manipulador do evento blur para o objeto Window
onblur elementos HTML Manipulador do evento blur
oncanplay elementos HTML Manipulador de evento canplay
oncanplaythrough elementos HTML Manipulador de evento canplaythrough
onchange elementos HTML Manipulador de evento change
onclick elementos HTML Manipulador de evento click
oncontextmenu elementos HTML Manipulador de evento coníextmenu
oncuechange elementos HTML Manipulador de evento cuechange
ondblclick elementos HTML Manipulador de evento dblclick
ondrag elementos HTML Manipulador de evento drag
ondragend elementos HTML Manipulador de evento dragend
ondragenter elementos HTML Manipulador de evento dragenter
ondragleave elementos HTML Manipulador de evento dragleave
ondragover elementos HTML Manipulador de evento dragover
ondragstart elementos HTML Manipulador de evento dragstart
ondrop elementos HTML Manipulador de evento drop
ondurationchange elementos HTML Manipulador de evento durationchange
onemptied elementos HTML Manipulador de evento emptied
onended elementos HTML Manipulador de evento ended
311
312 HTML 5
KEITH, Jeremy. DOM Scripting: Web Design with JavaScript and the Document Object
Model. New York: Friends of ED, 2005.
KEITH, Jeremy HTML5 for Web Designers. New York: Jeffrey Zeldman, 2010.
314
indice remissive) 315
k markers 226
Alerta 16 mobile 226
API de canvas path 227
addColorStopO 154 sensor 228
arc() 150 size 225
arcTo() 149 visible 227
beginPathO 148 zoom 225
clearRectO 146 aria-* 294
closePathO 152 ARIA 287
createLinearGradient() 154 Abstract roles 289
createPattern() 156 composite 289
createRadialGradientO 154 input 289
drawImageO 164,165 landmark 290
fill() 151 propertie 288
fillRectO 145 range 290
fillStyle 145 role 288
fillTextO 167 roletype 290
font 166 section 290
globalAlpha 153 sectionhead 290
globalCompositeOperation 157 select 290
lineCap 153 state 288
linejoin 153 structure 290
lineToO 148 widget 290
lineWidth 145 window 290
moveToO 148 Arquivos para download 18
rect() 152 Atributos globais 56
rotateO 163 accesskey 56
scale() 161 class 57
shadow 147 contenteditable 57
shadowBlur 147 contextmenu 58
shadowColor 147 dir 59
shadowOfïset 147 draggable 59
shadowOfïsetX 147 hidden 60
shadowOffsetY 147 id 60
strokeO 148 item 61
strokeRect() 144 lang 61
strokeStyle 144 spellcheck 61
strokeTextO 167 style 62
textAlign 168 tabinde 62
textBaseline 169 title 62
translate () 162 Atributos globais da HTML5 171
API do Google Static Maps 224 accesskey 171
center 225 class 173
format 225 contenteditable 173
language 226 contexmenu 174
maptype 226 dir 174
draggable 175
316 HTML 5
row 2 9 3
L
ro w h ead er 2 9 3
L an d m ark roles 2 9 3
sep arato r 293
ap p lication 2 9 3
to o lb ar 293
b an n er 2 9 3
E co m p le m e n ta ry 2 9 3
en ded 127
M
erro r 125
M an ifest
lo ad ed d ata 126
A pp lication cach e 2 7 9
lo ad ed m etad ad ta 125
A tu alização do m an ifesto 2 7 8
lo a d s ta rt 124
cach ed 2 8 2
p ause 125
C A C H E M A N IF E S T 2 7 7
play 125
d o w n load in g 2 8 2
playing 126
e rro r 2 8 3
p rogress 125
FA L L B A C K 2 7 7
ratech an g e 127
m an ifest 2 7 8
seeked 126
NETW O RK 277
seekin g 126
HTML 5
figure 70 em ail 2 0 8
footer 71 m o n th 210
h ead er 73 n u m b er 212
h gro u p 74 ran ge 212 ’
keygen 75 search 2 0 5
m ark 75 tel 2 0 6
m en u 65 tim e 210
m eter 76 url 2 0 7
nav 7 7 w eek 211
o u tp u t 7 8
p rogress 8 0 V
ru b y 81 V ideo 91
section 81 asp ect ratio 9 8
so u rce 8 2 au d io 9 7
s u m m a ry 6 9 au to 95
tim e 82 au top lay 95
track 83 co d ecs 9 4
vid eo 83 con trols 9 6
H .2 6 4 93
s h eigh t 9 8
SG M L 22 loop 95
Site d o livro 19 m ed ia 9 4
style 62 m e ta d a ta 95
m p 4 93
I m u ted 9 7
T erm in o log ia 16 ogv 93
T im B ern ers-L ee 21 p o ster 9 6
title 62 p reload 9 5
T rack 9 9 sou rce 9 4
cap tio n s 9 9 src 95
ch ap ters 9 9 typ e 9 4
ch arset 9 9 W eb M 93
d escrip tion s 9 9 w id th 9 8
Firefogg 101
H an d B rak e 109 w
k ind 9 9 W 3 C 24
label 100 W A I-A R IA 2 8 7
m e ta d a ta 9 9 W eb M essaging 252
srclan g 100 m essage 2 5 4
subtitles 9 9 p olítica d a m esm a origem 252
W eb SR T 9 9 w in dow .p ostM essage 253
W e b V T T 100 W eb S o ck et 2 6 0
typ e 2 0 5 b u ffered A m ou t 261
co lo r 213 E ven tos 261
d ate 2 0 9 on clo se 2 6 2
d atetim e 2 0 9 o n e rro r 2 6 3
d atetim e-lo cal 211 o n m essage 2 6 2
320 HTML 5