Baixar capítulo de amostra

Propaganda
Introdução ao
HTML5 e CSS3:
A Evolução da Web
Richard Clark, Oil Studholme,
Christopher Murphy and Divya Manian
Rio de Janeiro, 2014
PFCG_BeginningHTML5AndCSS3.indb 1
29/09/2014 09:21:04
Introdução ao HTML5 e CSS3: A Evolução da Web
Copyright © 2014 da Starlin Alta Editora e Consultoria Eireli.
Translated from original Beginning HTML5 and CSS3: the Web evolved 2012 by APRESS, ISBN 978-1-4302-2874-5. This translation is published and sold by permission APRESS, Inc, the owner of all rights to publish and sell the same. PORTUGUESE language
edition published by Starlin Alta Editora e Consultoria Eireli. Copyright © 2014 by Starlin Alta Editora e Consultoria Eireli.
Todos os direitos reservados e protegidos por Lei. Nenhuma parte deste livro, sem autorização prévia por escrito da editora,
poderá ser reproduzida ou transmitida.
Erratas: No site da editora relatamos, com a devida correção, qualquer erro encontrado em nossos livros bem como disponibilizamos arquivos de apoio se aplicável ao livro. Acesse o site www.altabooks.com.br e procure pelo título do livro desejado
para ter acesso as erratas e/ou arquivos de apoio.
Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou Comercial são de responsabilidade de seus proprietários. A Editora informa não estar associada a nenhum produto e/ou fornecedor apresentado no livro.
Impresso no Brasil — 1ª Edição, 2014 Vedada, nos termos da lei, a reprodução total ou parcial deste livro.
Produção Editorial
Editora Alta Books
Gerência Editorial
Anderson Vieira
Supervisão e
Qualidade Editorial
Angel Cabeza
Sergio Luiz
Design Editorial
Aurélio Corrêa
Captação e Contratação
de Obras Nacionais
Cristiane Santos
Marco Pace
J. A. Rugeri
[email protected]
Vendas Atacado e Varejo
Daniele Fonseca
Viviane Paiva
[email protected]
Marketing e Promoção
Hannah Carriello
[email protected]
Ouvidoria
[email protected]
Equipe Editorial
Tradução
Leonardo Castilhone
Auleriano Messias
Claudia Braga
Livia Brazil
Letícia Vitoria
Marcelo Vieira
Mayara Coelho
Milena Lepsch
Milena Souza
Natália Gonçalves
Revisão Gramatical
Copidesque
Revisão Técnica
Isis Batista Pinto
Victor Madei Martins Flávio Silveira
Analista de Tecnologia
Raquel ferreira
Rodrigo Araujo
Thiê Alves
Diagramação
Diniz Gomes
Dados Internacionais de Catalogação na Publicação (CIP)
I61
Introdução ao HTML5 e CSS3 : a evolução da Web / Richard Clark
... [et al.]. – Rio de Janeiro, RJ : Alta Books, 2014.
654
656 p. : il. ; 24 cm.
Inclui índice.
Tradução de: Beginning HTML5 and CSS3: the Web evolved.
ISBN 978-85-7608-856-1
1. HTML (Linguagem de marcação de documento). 2. Sites da
Web - Desenvolvimento. 3. Folhas de estilo 3.0. 4. HTML 5.0. I.
Clark, Richard. II. Studholme, Oil. III. Murphy, Christopher. IV.
Manian, Divya.
CDU 004.738.52
CDD 006.76
Índice para catálogo sistemático:
1. Linguagens de marcação
004.738.52
(Bibliotecária responsável: Sabrina Leal Araujo – CRB 10/1507)
Rua Viúva Cláudio, 291 – Bairro Industrial do Jacaré
CEP: 20970-031 – Rio de Janeiro – Tels.: (21) 3278-8069/8419
www.altabooks.com.br – e-mail: [email protected]
www.facebook.com/altabooks – www.twitter.com/alta_books
PFCG_BeginningHTML5AndCSS3.indb 2
29/09/2014 09:21:04
Sumário — Acesso Rápido
Sumário v
Prefácio xxiii
Sobre os Autores xxv
Sobre os Revisores Técnicos xxvi
Agradecimentos xxvii
Introdução xxix
Capítulo 1: HTML5: Agora, Não em 2022 1
Capítulo 2: Seu Primeiro Mergulho no HMTL5 21
Capítulo 3: Novos Elementos Estruturais 47
Capítulo 4: Uma Melhor Abordagem para a marcação do Conteúdo 93
Capítulo 5: Rich Media 145
Capítulo 6: Abrindo Caminhos para Aplicativos Web 197
Capítulo 7: CSS3, Aqui e Agora 241
Capítulo 8: Mantendo Sua Marcação Leve Usando Seletores CSS 291
Capítulo 9: Um Layout Para Cada Ocasião 329
Capítulo 10: Melhorando a Tipografia Web 415
Capítulo 11: Colocando as Propriedades CSS3 para Funcionar 457
Capítulo 12: Transformações, Transições e Animação 525
Capítulo 13: O Futuro do CSS, ou Coisas Legais que Estão Chegando 603
Índice 615
iv
PFCG_BeginningHTML5AndCSS3.indb 4
29/09/2014 09:21:04
Sumário
Sumário — Acesso Rápido iv
Prefácio xxiii
Sobre os Autores xxv
Sobre os Revisores Técnicos (obra original) xxvi
Agradecimentos xxvii
Introdução xxix
Para quem é este livro? xxix
Como é estruturado este livro? xxix
Convenções usadas neste livro xxx
Capítulo 1: HTML5: Agora, Não em 2022 Pressupostos básicos Uma abordagem dos padrões web 1
1
2
O que são padrões web? 2
Por que usar padrões web? 3
Marcação semântica 4
O pavê da web: separando aquelas camadas 4
O Dao do design web: aceitando a incerteza 5
Acessibilidade 7
Criando sua marcação 7
Como foi criado o HTML5? 8
Além do HTML4... 9
XHTML 1.0 9
XHTML 2.0 e o retrocesso 10
HTML5 avançando! 11
Princípios de design do HTML5 13
Suportando o conteúdo existente 13
Degradando graciosamente 14
Não reinventando a roda 14
Pavimentando as trilhas 14
Evoluindo, não revolucionando 15
Uma dúzia de mitos sobre o HTML5 15
v
PFCG_BeginningHTML5AndCSS3.indb 5
29/09/2014 09:21:04
1. navegadores não têm suporte a HTML5. 15
2. OK, a maioria dos navegadores dão suporte ao HTML5, mas o IE
com certeza não 15
3. O HTML5 não estará acabado até 2022 16
4. Agora tenho que reaprender tudo! 16
5. O HTML5 usa elementos de apresentação 16
6. O HTML5 é um retorno à sopa de tags 16
7. O HTML5 mata rebentos de acessibilidade 17
8. O Flash já era 17
9. O HTML5 vai acabar com a web! 17
10. O desenvolvimento do HTML5 é controlado pelos vendedores
de navegadores 17
11. O HTML5 abrange CSS3, Geolocalização, SVG e todas as outras
tecnologias modernas que existem 17
12. Então, quando posso começar a usar o HTML5? 18
Sumário 18
Lição de casa 19
Lição do Capítulo 1 19
Leitura dirigida 19
Capítulo 2: Seu Primeiro Mergulho no HTML5 Revisão da Lição de Casa 21
22
Nossa página 22
84,8% da sua marcação permanece 24
Está tudo na cabeça 24
Um DOCTYPE mais perfeito 25
Declarando idiomas no HTML5 26
Codificação de caractere 28
Sr. Memória 28
Uma jornada ao “Olá, Mundo!” 29
“Olá, Mundo!” no estilo XHTML 1.0 29
“Olá, Mundo!” no estilo HTML4 30
“Olá, Mundo!” em estilo “relaxado” HTML5 30
“Olá, Mundo!” no estilo “estrito” do HTML5 31
Dando suporte ao HTML5 em vários navegadores 32
Como os navegadores lidam com elementos desconhecidos? 32
Conheça o shiv 34
vi
PFCG_BeginningHTML5AndCSS3.indb 6
29/09/2014 09:21:05
IE Print Protector 35
Declarando elementos de bloco 36
Uma página de texto-padrão HTML5 37
Não tem mais atributo type 37
Polyfills e alternativas 38
Validação 39
Validador HTML5 40
HTML Lint 41
Revisitando Miss Baker 42
Resumo 45
Lição de casa 45
Capítulo 3: Novos Elementos Estruturais 47
Práticas de fluxo de trabalho, evoluindo? 48
Uma nova aurora na semântica 49
Blocos de construção estruturais: <div>, <section> e <article> 53
A diferença entre <div>, <section> e <article> 53
O elemento <div> 53
O elemento <section> 54
O elemento <article> 54
Qual escolher? 54
Estruturas básicas usando esses elementos 55
Um artigo em blog web 55
Um longo artigo com subseções (como uma tese) 56
Cabeçalhos: <header>, <hgroup> e <h1>–<h6>, além de <footer> 57
Um artigo com um cabeçalho 58
Um artigo <header> com cabeçalho e metadados 59
Um artigo com um subtítulo com <hgroup> incluso 59
Um artigo com cabeçalho, subtítulo e metadados 59
Alguns exemplos de uso do <hgroup> 60
O algoritmo de esboço HTML5 60
Esboço em ação 61
Elementos raiz de seccionamento 63
O flagelo da seção sem título 64
Níveis de elementos no cabeçalho ao estilo HTML5 66
Exemplo de agrupamento de níveis de elemento de cabeçalho 67
Exemplo do novo estilo para níveis de elemento de cabeçalho 67
vii
PFCG_BeginningHTML5AndCSS3.indb 7
29/09/2014 09:21:05
Ainda mais elementos estruturais: <nav>, <aside>, <figure> (e <figcaption>) 68
Juntando tudo 71
Os novos elementos de seccionamento de conteúdo em resumo 72
Convertendo uma página simples para HTML5 73
Introduzindo “HTML4.5”: adicionando semântica HTML5 via <div class=”> 78
Adicionando semântica ao “HTML4.5” e ao HTML5 por meio de ARIA
(marcos de função) Chuvas de realidade em nossa festa de acessibilidade Acessibilidade e HTML5 Técnicas de acessibilidade, evoluindo 83
84
85
86
O atributo alt em <img> 86
O obsoleto atributo longdesc em <img> 88
O obsoleto, mas adaptado, atributo summary em <table> 89
O obsoleto atributo axis em <th> e <td> 90
Outras questões de acessibilidade HTML5 90
Acessibilidade HTML5: uma nova esperança 90
Resumo 91
Lição de casa 91
Leitura avançada 92
Capítulo 4: Uma Melhor Abordagem para a marcação do Conteúdo 93
Assando o melhor bolo que pudermos 93
Ex-elementos de apresentação e amigos 94
Dando aos elementos <i> e <b> novos significados semânticos 95
O elemento <i> 95
O elemento <b> 96
Os elementos <em> e <strong> 98
O elemento <em> 98
O elemento <strong> 98
O elemento <small> 99
O elemento <hr> 99
O elemento <s>, junto com <del> e <ins> 101
O elemento <u> 103
Elementos de apresentação: relíquias de uma era passada 104
Links em bloco com o elemento <a> 104
Escrevendo um Link em bloco 105
Advertências do navegador com Firefox 4 106
viii
PFCG_BeginningHTML5AndCSS3.indb 8
29/09/2014 09:21:05
Outros elementos com mudanças menores a partir do HTML4 107
O elemento <ol> e novos (e antigos) atributos relacionados 107
O atributo type 107
Os atributos start e value 108
O atributo reversed 109
O elemento <dl> 109
Definindo palavras num dicionário ou glossário 110
Metadados 110
O elemento <cite> 111
Usando <cite> 112
Quando não usar <cite> 112
Novos elementos semânticos 113
O elemento <mark> 113
Comentários Ruby com <ruby>, <rt> e <rp> 114
Usando <ruby> para o inglês 116
Usando polyfill para suporte a <ruby> em idiomas do Leste Asiático 117
O elemento <time> 119
Quando não se usa <time> 121
Mudanças em <time> 121
Estendendo o HTML5
121
O elemento <data> 122
O atributo data personalizado (data-*) 123
Microformatos 124
Uma rápida introdução aos microformatos 124
Usando licença rel para informação de licenciamento 124
Usando XHTML Friends Network (XFN) 125
Usando hCard para informações de contato 126
Usando microformatos em HTML5 128
Microdata: um pouco de semântica HTML5 128
Sintaxe Microdata 129
itemscope e itemprop 130
Valor itemprop de um atributo 130
Itens agrupados 131
Propriedades múltiplas 132
Referências in-page 132
Usando <meta> para adicionar conteúdo por meio de atributos 132
ix
PFCG_BeginningHTML5AndCSS3.indb 9
29/09/2014 09:21:05
Identificadores globais com itemid 133
Itens digitados (itemtype) e nomes globalmente únicos 134
Microdados em ação 134
Usando vocabulários schema.org 135
Ferramentas e suporte a navegador 139
Criando seu próprio vocabulário 140
Considerações finais sobre os microdados 141
Resumo 142
Leitura Posterior e Links Relacionados 143
Capítulo 5: Rich Media O caso do Flash 145
146
Formatos proprietários vs. padrões abertos 146
Entrando no mundo do HTML5 e seus amigos 147
O HTML5 aponta para o fim do Flash? 147
O vídeo à maneira do HTML5 Formatos de vídeo 148
151
Recipientes de vídeo e codecs 152
Suporte de navegadores 153
Adicionando video source 155
Inserindo nosso velho amigo Flash 157
O elemento track 159
WebVTT 160
Faça mais com video Lição de casa extra? Tirando um pouco do peso das costas 163
165
165
JW Player 165
Playr 166
MediaElement.js 167
VideoJS 167
SublimeVideo 168
Áudio 168
Codecs de áudio 169
Suporte do navegador 170
Adicionando audio source 170
Usando jPlayer 171
Resumo de áudio e vídeo 171
x
PFCG_BeginningHTML5AndCSS3.indb 10
29/09/2014 09:21:05
Canvas 171
Liberdade baseada em pixels 172
Adicionando/implementando canvas 172
O contexto 2D 173
Canvas no IE 181
O poder e o potencial do canvas 182
Jogos 183
Cut the Rope 183
Canvas Rider 183
3D Tetris 184
Aplicativos 185
Darkroom 185
Sketchpad 185
Picozu Editor 186
Combinando video e audio com canvas 187
O experimento da 9elements com canvas HTML 187
Ambilight 188
Video destruction 188
Leitura complementar sobre o canvas 189
SVG 189
Poder vetorial Escolhendo entre canvas e SVG Vetores liberados com o SVG Implementando SVG básico Leitura relacionada a SVG 190
190
191
191
194
Resumo 195
Lição de casa 195
Capítulo 6: Abrindo Caminhos para Aplicativos Web Formulários HTML5 197
198
Um pouco da história de formulários HTML5 198
Usando os princípios de design HTML5 198
Atributos de formulários HTML5 199
placeholder 199
autofocus 200
autocomplete 201
required 201
xi
PFCG_BeginningHTML5AndCSS3.indb 11
29/09/2014 09:21:05
pattern 202
list e o elemento datalist 203
multiple 204
novalidate e formnovalidate 205
form 205
formaction, formenctype, formmethod e formtarget 206
formaction 206
formenctype 206
formmethod 206
formtarget 206
Resumo dos atributos form Novos tipos de entrada 207
207
search 207
email 208
url 211
tel 212
number 212
range 214
Datas e horários 215
date 215
month 216
week 216
time 217
datetime 217
datetime-local 218
color 219
Resumo dos tipos de entrada 219
Validação e como prover fallbacks 220
A diferença entre validação lado cliente e lado servidor 220
Processando e lidando com erros de navegador 220
Detecção de recursos com JavaScript 221
Polyfills para formulários 222
Suporte a navegadores atuais 222
APIs de formulários HTML5 228
Resumo de formulários HTML5 228
Aplicativos Web 229
xii
PFCG_BeginningHTML5AndCSS3.indb 12
29/09/2014 09:21:05
Introdução a elementos para aplicativos web 229
Elementos de formulário 229
datalist 229
keygen 230
output 231
progress 231
meter 232
Elementos interativos 232
details 232
summary 233
command 233
menu 233
Introdução às APIs relacionadas ao HTML5 233
APIs na especificação HTML5 234
API Drag and Drop 235
Aplicativos web off-line/cache de aplicativo 235
Interação do usuário 236
API History 236
MIME type e protocol handler registration 237
APIs na especificação WHATWG 237
As APIs “HTML5” da moda 238
A gloriosa aurora de uma era de internet baseada em padrões, acessível a todos,
num mundo de navegadores compatíveis, em uma imensidão de dispositivos 238
Lição de casa: fazer a marcação do formulário “Join Gordo’s Space Cadets”
usando a marcação estudada 239
Capítulo 7: CSS3, Aqui e Agora Relembrando a importância dos padrões web 241
242
CSS 1, CSS 2.1, CSS3... 243
O CSS3 está pronto? 244
Contexto 244
Modularidade CSS3 245
Níveis de maturidade 246
Os benefícios do CSS3 246
Simplificando o Design 247
Trabalhos de contorno e hacks reduzidos 247
Revisão do básico de CSS 248
xiii
PFCG_BeginningHTML5AndCSS3.indb 13
29/09/2014 09:21:05
Anatomia de uma regra (ou rule set) 248
Uma propriedade 249
Um valor 249
Uma declaração 249
Bloco de declaração 250
Palavras-chave 250
Unidades CSS 250
Notação funcional 251
Seletores 252
Combinadores 253
Regras At 253
Extensões específicas de fabricantes 253
Taquigrafia CSS 253
Efeito cascata, especificidade e herança 255
Efeito cascata no CSS 255
Calculando a especificidade 256
Herança CSS 257
Organização e manutenção CSS Convenções CSS 258
258
CSS em linha única vs. linhas múltiplas 258
Ordenando declarações 260
Ordenando conjuntos de regras 261
Convenções de nomes 262
Comentando as melhores práticas 263
Criando um índice 263
Folha de referência de cor e tipografia 264
Resets CSS e normalize.css 265
Usando resets 265
Usando normalize.css 267
Frameworks e ferramentas CSS 267
CSS Sustentável 268
Criando um pattern primer ou uma biblioteca de componentes 269
CSS prático e sustentável 271
CSS Orientado a Objetos (OOCSS) 272
Validação CSS 273
CSS Lint 274
xiv
PFCG_BeginningHTML5AndCSS3.indb 14
29/09/2014 09:21:05
Suporte a navegador, prefixos de fabricantes, polyfills e Melhoria progressiva 275
Melhoria progressiva 275
Melhoria progressiva em ação 276
Suporte a browser CSS3 277
Prefixos de fabricantes 278
Prefixos de fabricantes em ação 279
O Efeito Opera 280
Juramento do Bom Desenvolvedor CSS 281
-prefix-free 281
Filtros, padrões e performance do IE 282
Detecção de recursos e polyfills 283
Polyfills 285
Polyfills específicos para IE 285
Selectivizr 285
CSS3 PIE 286
Resumo 287
Lição de Casa 288
Apêndice: Status dos Módulos CSS3 289
Capítulo 8: Mantendo sua marcação Leve Usando Seletores CSS 291
Redução de seletores 292
Seletores CSS3 294
Combinadores 294
Seletores de atributo e substring 296
Seletor de atributo substring “começa com” 297
Seletor de atributo substring “termina com” 299
Seletor de atributo substring “contém” 299
Pseudoclasses de estados de elemento de UI
(Users Interface-Interfaces de Usuário) 301
Pseudoclasse target 303
Pseudoclasses estruturais 309
:first-child 309
:last-child 311
:nth-child 311
:nth-last-child 314
:only-child 314
:first-of-type 314
xv
PFCG_BeginningHTML5AndCSS3.indb 15
29/09/2014 09:21:05
:last-of-type 315
:nth-of-type 315
:nth-last-of-type 318
:only-of-type 319
:empty 320
:root 320
Pseudo-elementos 320
::before e ::after 321
Explorando mais os pseudo-elementos 322
Pseudoclasse de negação 323
Suporte ao navegador 324
Seletores do futuro 325
Resumo 326
Lição de casa 326
Apêndice 327
Capítulo 9: Um Layout para Cada Ocasião A web de muitos dispositivos 329
329
Evolução dos tamanhos dos monitores 330
Sites separados otimizados para cada dispositivo?
Mas isso é uma loucura! 331
O Modelo de Formatação Visual do CSS — caixas a torto e a direito! O Modelo Caixa: conteúdo, preenchimento, borda, margem 333
333
Caixas block-level com display: block 337
O algoritmo de cálculo de largura e altura 339
A propriedade box-sizing 340
Margens em caixas block-level 342
Conflitando margens verticais 344
Caixas inline com display: inline 346
Outros valores para display (notadamente inline-block e none) 348
Caixas anônimas 349
Esquemas de posicionamento e a propriedade position 350
Camadas e a propriedade z-index 352
Introduzindo Flutuações 352
Limpeza de floats 354
Contexto de formatação de bloco 356
Floats para layout 358
xvi
PFCG_BeginningHTML5AndCSS3.indb 16
29/09/2014 09:21:05
Métodos de layout em duas colunas 359
Métodos de layout para três ou mais colunas 359
Fingindo backgrounds de coluna de altura total 360
Mudando a ordem das colunas com margens negativas 361
Os efeitos das diferentes unidades para layouts 363
Layouts por pixel 363
Layouts flexíveis 364
Seja igual à água com layouts líquidos 364
Problemas de suporte de navegador a layout líquido 367
Foco tipográfico com layouts elásticos 368
Tão flexível quanto quiser com layouts híbridos 369
Outros métodos de layout CSS 2.1 370
Usando display: inline-block; para layout 370
Usando display: table; para layout 374
Comparando layouts inline-block e table 374
Media queries e Web Design Responsivo 375
Introduzindo media queries 375
Sintaxe media queries 376
Design desktop primeiro, móvel primeiro, e conteúdo primeiro 378
Suporte a navegador para media queries 379
Viewport em celulares 380
Complicações com imagens 381
Layouts CSS3 385
CSS Positioned Layout Module Level 3 386
CSS Fragmentation Module Level 3 387
Multi-column Layout Module 388
Fundamentos de multicoluna 389
Suporte a navegador para layout multicoluna 391
Leitura complementar 392
CSS Regions Module Level 3 Leitura complementar CSS Exclusions and Shapes Module Level 3 Leitura complementar CSS Paged Media Module Level 3 Leitura complementar CSS Generated Content for Paged Media Module 393
394
395
396
396
398
398
xvii
PFCG_BeginningHTML5AndCSS3.indb 17
29/09/2014 09:21:05
Leitura complementar The Flexible Box Layout Module Leitura Complementar The CSS Grid Layout Module Leitura complementar Módulos de layout CSS3 em resumo 400
400
408
408
411
411
Conclusão 411
Leitura posterior 412
Especificações Lição de casa Capítulo 10: Melhorando a Tipografia Web 413
414
415
Estilos de fontes e fontes 415
Uma breve história dos tipos na web 417
Texto como imagem 418
Farhner Image Replacement (FIR) 418
Método Leahy/Langridge 419
Método Phark 419
Método Gilder/Levin 420
Substituição de Imagem JavaScript (JIR) 420
sIFR 421
Cufón 422
Fontes SVG 422
@font-face 423
Web fonts 423
No início 423
@font-face contra-ataca 424
Dissecando a sintaxe do font face: declaração @font-face 424
Sintaxe blindada para @font-face 426
Evitando o flash de texto sem estilo (FOUT) 426
WebFont Loader do Google 427
Usando font.js 428
Coisas a lembrar ao se usar fontes web 429
Encontrando fontes web 430
Fontes web gratuitas 430
Fontes web comerciais 431
Fonte como um serviço 431
xviii
PFCG_BeginningHTML5AndCSS3.indb 18
29/09/2014 09:21:06
Desenhando com fontes web 433
Usando fontes web como ícones 433
Fontes web em resumo 434
Linhas de base 434
Definindo a família da fonte 434
Definindo espaçamento vertical 435
Definindo tamanhos de fonte 435
A unidade rem Desenhando com uma grade 435
436
Com pixels 437
Com ems 439
Definindo a grade 440
Automatizando ritmos verticais 441
Grade de linha de base em resumo 441
Diversão com tipos web 441
Escolha o peso dos glifos 442
Escolhendo a largura de fonte correta 443
Controle o overflow do texto 443
Alinhar texto verticalmente a partir da linha de base 444
Controlar o espaço em branco entre as letras
de uma palavra 445
Ajustando espaçamento entre palavras 446
Quebra de palavras longas 447
Controlar espaço em branco e quebras de linha 448
Hifens de impressão 449
hifens 449
Hífens condicionais 450
Controle os quote glyphs 452
Controle de exibição de tipos web não latinos 454
word-break 454
text-emphasis 454
Use ligaturas e recursos de fonte OpenType adicionais 455
Resumo 456
Leitura Complementar 456
Capítulo 11: Colocando as Propriedades CSS3 para Funcionar Cor e transparência 457
457
xix
PFCG_BeginningHTML5AndCSS3.indb 19
29/09/2014 09:21:06
RGB 458
Transparência RGBa 459
HSLa 461
Opacity 463
Backgrounds 464
background-clip 465
background-origin 467
background-size 470
Múltiplos backgrounds 474
Bordas 482
border-radius 482
border-image 489
Sombreado 493
box-shadow 493
text-shadow 499
Gradientes Gradientes 501
501
Gradientes lineares 502
Gradientes radiais 507
Gradientes repetitivos 512
Detectando suporte e auxiliando outros navegadores 514
Usando o Modernizr 515
CSS3 Pie 516
Combinando efeitos CSS3 Alto lá! 516
521
Resumo 523
Lição de casa 523
Capítulo 12: Transformações, Transições e Animação Traslade, gire, dimensione, incline, transforme: CSS Transforms 2D e 3D Usando transformações e as funções transform 525
527
531
Movendo elementos com transform: translate(); e transform: translate3d(); 532
Dimensionando elementos com transform: scale(); e transform: scale3d(); 535
Distorcendo elementos com transform: skew(); e similares 537
A fenomenal força cósmica de transform: matrix(); e
transform3d: matrix(); 539
Pondo coisas 3D em perspectiva com perspective e transform:perspective() 542
xx
PFCG_BeginningHTML5AndCSS3.indb 20
29/09/2014 09:21:06
Mudando a origem da perspectiva com a propriedade perspective-origin 544
Mudando transformações via transform-origin 544
Transformações 3D ou planas com transform-style 547
Ocultando e mostrando a parte de trás de um elemento transformado com
backface-visibility 548
Suporte a navegador para transformações CSS 549
Suporte a browser para transformações 2D 550
Suporte a navegador para transformações 3D 551
Polyfills, fallback e propriedade de filtro do Internet Explorer 551
Pegadinhas das transformações CSS 552
Transformações CSS em resumo 553
Transições CSS e animações CSS: compare e contraste 554
Transições CSS: preciosidades em 4D! 556
Definindo o que transicionar com transition-property 557
Propriedades animáveis para transições CSS e animações CSS 558
Imitando auto na largura e altura com max-width e max-height 562
Controlando a duração de uma transição com transition-duration 563
transition-timing-function, curvas Bézier cúbicas e steps() 564
Atrasando o início de uma transição com transition-delay 569
Múltiplos valores de transição e a propriedade taquigráfica transição 570
Ordem da propriedade taquigráfica transition 570
Suporte a navegador para transições CSS 571
Pegadinhas das transições CSS 572
Pegadinhas com transformações transitando (ou animações) 573
Transformações confusas, z-index e aceleração de hardware 573
Fazendo as transformações pararem de tremer quando
transicionadas (e animadas) 574
Transições CSS em resumo 574
Keyframes com animações CSS 575
Um simples exemplo de animação com animation-name e animation-duration 579
Controlando uma animação usando @keyframes 581
Funções temporais com animation-timing-function 582
Mudando como começa uma animação usando animation-delay 584
Quantas vezes? animation-iteration-count lhe dirá! 585
Misturando com animation-duration 586
Controle como os elementos se comportam antes e depois de uma
animação com animation-fill-mode 587
xxi
PFCG_BeginningHTML5AndCSS3.indb 21
29/09/2014 09:21:06
Pausando uma animação usando animation-play-state 589
A propriedade taquigráfica animation e valores animation-*
separados por vírgula 590
Suporte a navegador para animações CSS 592
Um pequeno desvio para ver JavaScript relacionado a animações 594
Pegadinhas das animações 595
Animações CSS em resumo 596
Juntando tudo 598
Leitura complementar
599
Capítulo 13: O Futuro do CSS ou, Coisas Incríveis Que Estão Por Vir 603
Aceleração de hardware e performance CSS 604
Internacionalização 604
Defina seus próprios contadores de lista com o CSS Counter Styles Module 605
As funções calc() e attr() 606
Variables, mixins e nesting 609
Anime-se com 11 novos CSS shaders 610
Siga em frente e seja o máximo 610
Apêndice: links essenciais 611
Índice 615
xxii
PFCG_BeginningHTML5AndCSS3.indb 22
29/09/2014 09:21:06
Prefácio
HTML5 é a mais significativa especificação da web hoje em dia, e a primeira atualização
da onipresente linguagem da Web em uma década. Junto com sua prima CSS3, é muito
poderosa, muito excitante e ridiculamente superdivulgada. Alguns “especialistas” vão lhe
dizer que você só pode usar HTML5/CSS3 com a tecnologia de ponta da mais recente
versão do seu navegador preferido. Outros sábios vão lhe dizer que você não pode usá-las porque “as especificações não estão concluídas”, ou que não há suporte no Internet
Explorer, ou outros tantos blablablas.
Quando você está tentando aprender, precisa de professores confiáveis que não sejam
nem fanáticos pedantes nem marqueteiros arrogantes. Você precisa de gente como Rich,
Oli, Chris e Divya.
Richard Clark é um companheiro na HTML5 Doctor, curador da galeria HTML5 e, de maneira crucial, um homem que constrói coisas. Oli Studholme é também um companheiro
na HTML5 Doctor e um desenvolvedor que trabalha nas trincheiras, só que essas trincheiras são na sua terra adotada, o Japão. Chris é Diretor Adjunto de Design de Multimídia
Interativa, na Universidade de Ulster — uma das poucas universidades no mundo que
ensinam design moderno para a web, que os empregadores realmente necessitam que os
formandos conheçam. Divya faz parte do grupo por trás do HTML5 Boilerplate, e é uma
representante da Adobe no Grupo de Trabalho CSS Working Group.
Bruce Lawson
Coautor de Introducing HTML5 (New Riders), Pregador da Web aberta, Opera Software
É difícil de acreditar, mas houve um tempo em que a especificação CSS foi considerada
uma tecnologia em extinção. Rasgada por implementações incompletas e (pior) incompatíveis, atolada por uma herança que não a sua própria, parecia destinada a se juntar à
crescente pilha de tecnologias interessantes mas que não se mantiveram — e agora, graças a alguns intervalos de sorte e a trabalho duro, aqui está ela, um aspecto fundamental
da web. Com certeza, ela se espalhou além da web, mostrando-se como o dispositivo
de apresentação em softwares tão diversos, como chats e sistemas operacionais. Se ela
é menos crítica para nossas modernas redes do que o HTML, não pode ser por muito.
Ainda mais instigante, depois de um período relativamente acomodada, a CSS está sendo
rapidamente expandida e enriquecida em múltiplas frentes. Ideias tiradas de frameworks
e bibliotecas estão sendo mescladas dentro das especificações oficiais. Propostas que
permaneceram paradas bastante tempo estão ganhando movimento. Omissões antigas
estão sendo abordadas. De modo geral, existe tanta coisa acontecendo, que seria uma
atividade de tempo integral para um especialista acompanhar tudo isso.
xxiii
PFCG_BeginningHTML5AndCSS3.indb 23
29/09/2014 09:21:06
Felizmente, o que vocês têm aqui em mãos é o produto de conhecimento, habilidades,
e percepção de vários especialistas. Chris, Divya, Oli, e Rich são todos veteranos em
navegar na por vezes densa linguagem das especificações do W3C para extrair as joias
brilhantes encontradas em seu interior. E, além disso, eles se superam em pegar os diamantes brutos e em lapidá-los até se tornarem exemplos brilhantes de como e por que
uma determinada função deveria ser usada. Se eu estivesse começando agora, dificilmente poderia desejar ter melhores guias para entender o que é importante e interessante
no CSS hoje — e sendo o velho grisalho e esquisito que sou hoje, eu olho para as pistas
deles sobre para onde eu deveria ou não deveria olhar para me manter atualizado com
tudo o que está acontecendo.
CSS é experimentar algo nada menos que uma Renascença. Desfrute aprender com
esses quatro mestres de sua arte.
Eric A. Meyer
Autor de “CSS: The Definitive Guide” (O’Reilly); Cofundador de “An Event Apart”
xxiv
PFCG_BeginningHTML5AndCSS3.indb 24
29/09/2014 09:21:06
Sobre os Autores
Richard Clark é o Chefe de Interatividade na KMP Data, uma agência de
serviços digitais localizada em Manchester, GB. Com mais de 10 anos de
experiência na indústria, ele supervisiona a experiência de usuário, o design
e a interface com o usuário na KMP, além de ser um colaborador regular
da publicação líder da indústria, a .net magazine. É o fundador e curador da
HTML Gallery (www.html5gallery.com), cofundador, editor e autor da HTML
Doctor (www.html5doctor.com). Você o verá ocasionalmente organizando
a Speak the Web, uma série de conferências sobre web.
Christopher Murphy (www.christophermurphy.org) é um escritor,
designer e educador de Belfast. A revista Creative Review o descreveu
como “um William Morris da era digital”, um epíteto a que ele aspira por
fazer jus diariamente.
Transmitindo seu conhecimento como educador, Murphy é um designer
praticante cujo trabalho abrange uma variedade de aspectos da mídia e
foi publicado em numerosas revistas e livros, incluindo a Eye Magazine,
largamente reconhecida como uma das publicações líderes em design,
e Influences: A Lexicon of Contemporary Grahic Design Practice.
Escritor participante do time da 8 Faces, ele também tem escrito para
The Manual, 24 Ways e para a revista .net. Como um palestrante internacionalmente respeitado, ele é convidado regularmente para falar
sobre padrões da web e a importância de desenvolver a educação do
design, e tem palestrado em conferências no mundo todo, incluindo:
Build, New Adventures e The Future of Web Design.
Oli Studholme é um neozelandês morando junto às luzes brilhantes de
Tokyo, Japão. Seu amor pela web começou com o seu primeiro site,
em 1995, e compartilhar esse amor o fez envolver-se na organização
da Web Directions West e a se tornar um dos participantes da HTML5
Doctor. Ele é atualmente um desenvolvedor para a internacionalmente
renomada agência de design Information Architects, Inc.
Divya Manian é uma engenheira de Tecnologia da Informação por formação. Alternou entre desenvolvimento de drivers de dispositivos para
telefones na Motorola e o desenvolvimento de websites e, desde então,
não olhou mais para trás. Divya Manian faz parte da Web Platform Team
da Adobe em São Francisco e é um membro do CSS Working Group.
Ela leva seu trabalho seriamente como vigilante da Web Aberta, o que
resultou em projetos como o HTML5 Please e o HTML Boilerplate.
xxv
PFCG_BeginningHTML5AndCSS3.indb 25
29/09/2014 09:21:06
Introdução
Para quem é este livro?
Introdução ao HTML5 e CSS3: A Evolução da Web é destinado a qualquer um que tenha
conhecimento básico de HTML e CSS. Se você só se aventurou há pouco tempo no
mundo do HTML ou do CSS, ou se já tem desenvolvido sites há anos, sempre haverá
coisas interessantes para você. No entanto, você aproveitará mais esse livro se já teve
alguma experiência com HTML5 e CSS3, mas ainda não entendeu direito tudo o que eles
têm a oferecer. Este livro é cheio de conselhos e exemplos práticos e concretos para
ajudá-lo a dominar padrões web modernos.
Como é estruturado este livro?
Este livro é dividido em duas grandes seções. Os primeiros seis capítulos abrangem o
HTML5, e os sete capítulos seguintes abrangem o CSS3, complementados por uma visão
do que está para vir no futuro dos Padrões Web.
Na primeira parte, veremos de onde veio o HTML5 e como transitar do HTML4 para o
HTML5. Depois, mostraremos como criar um Texto Padrão HTML5. Isso será seguido
pela introdução de novos elementos, atributos e tipos de campos antes de discutir sobre
algumas APIs de HTML5 novinhas em folha.
Na segunda parte do livro, vamos aprender sobre a história do CSS e dar uma olhada em
alguns fundamentos do CSS. Vamos, então, introduzir novos seletores CSS, módulos de
layout e técnicas.
Passamos, em seguida, para uma visão sobre tipografia na web, novas propriedades de
CSS3, entre outros, antes de guiá-lo pelas transições, transformações e animações de CSS.
O livro se encerra com uma visão sobre o futuro do CSS e dos padrões web, mostrando o que provavelmente veremos em um navegador próximo de você, nos próximos
anos vindouros.
Se quiser acompanhar os exemplos neste livro e fazer o download de quaisquer
arquivos de lição de casa que possa vir a precisar, você poderá fazê-lo no endereço
http://thewebevolved.com.
Este livro pode ser lido de cabo a rabo ou mantido ao lado de seu computador como
material de referência de dicas, truques e técnicas modernas. A decisão é só sua.
xxix
PFCG_BeginningHTML5AndCSS3.indb 29
29/09/2014 09:21:06
Convenções usadas neste livro
Este livro usa algumas convenções que valem a pena serem ressaltadas. Os seguintes
termos são usados no decorrer da obra:
• HTML refere-se às linguagens HTML e XHTML.
• A menos que seja dito o contrário, CSS está relacionado à especificação CSS3.
• Por browsers modernos entende-se que são as últimas versões do Firefox, Safari
e Opera, além do IE9 e posteriores.
Presume-se que todos os exemplos HTML neste livro estejam inseridos na tago corpo
(<body>) de um documento válido, enquanto que o CSS esteja contido dentro de uma
folha de estilo externa. Ocasionalmente, HTML e CSS foram colocados no mesmo código
de exemplo, para efeito de concisão. Porém, num documento real, esses itens precisam
ficar em seus respectivos lugares para funcionar corretamente.
p {color: red;}
<p>I’m red</p>
Finalmente, para exemplos HTML que contenham dados repetitivos, em vez de escrever
todas as linhas, o sinal de reticências (...) é usado para denotar continuação do código:
<ul>
<li>Red</li>
<li>Yellow</li>
<li>Pink</li>
<li>Green</li>
…
</ul>
Tendo passado pelas formalidades, vamos começar.
xxx
PFCG_BeginningHTML5AndCSS3.indb 30
29/09/2014 09:21:06
Capítulo 1
HTML5: Agora, Não em 2022
Parabéns, você chegou ao Capítulo 1! Sua jornada pela evolução da Web está prestes
a começar. Este capítulo estabelece princípios básicos. Seu foco, junto com o resto da
primeira parte deste livro, é, em sua maioria, no HTML5. Vamos cobrir como surgiu o
HTML5, quais problemas ele veio resolver, quais princípios de design guiaram seu desenvolvimento e quais as novas características que ele traz para nós. Vamos também
desmascarar alguns mitos do HTML5. Vamos iniciar, no entanto, dando uma olhada nos
pressupostos básicos que seguimos em nosso trabalho de desenvolvimento web, por
que os padrões são tão importantes e por que devemos nos esforçar para deixar nossa
marcação universalmente acessível e bem construída.
É um passeio de montanha-russa, com altos e baixos, mas é uma jornada empolgante.
Sem mais delongas, vamos começar...
Pressupostos básicos
A informação presente neste livro é baseada num conjunto de princípios profundamente
arraigados: a importância de padrões web abertos, o estabelecimento de marcação
semântica bem estruturada e uma crença sólida de que um HTML bem escrito é parte
do processo de desenvolvimento. Nossa estrutura sólida do HTML deveria ser estilizada
com o CSS (uma abordagem que abrangeremos quando passarmos por separação de
camadas, mais tarde neste capítulo).
PFCG_BeginningHTML5AndCSS3.indb 1
29/09/2014 09:21:07
Capítulo 1
Uma abordagem dos padrões web
O movimento voltado a uma web direcionada por padrões tem acontecido graças, em
grande parte, ao Projeto de Padrões Web (Web Standards Project) ou, na sigla em inglês,
WaSP (http://j.mp/webstandardsproject1). No final dos anos 1990, o Internet Explorer
e o Netscape brigavam para alcançar a supremacia da Web, em um período conhecido
como “guerra dos navegadores”. Foi uma época terrível, já que esses rivais estavam
tentando ganhar usuários introduzindo incontáveis novos atributos que eram incompatíveis em diferentes navegadores. O resultado eram sites que ou só funcionavam em um
navegador, ou tinham duas diferentes versões para operar nas duas maiores plataformas.
Era um pesadelo para desenvolvedores web, e prejudicava os usuários.
Fundado em 1998, o WaSP fez uma campanha para implementações de padrões que
funcionassem em diferentes navegadores e uma abordagem baseada em padrões para
web design. As metas eram reduzir o custo e a complexidade do desenvolvimento web e
aumentar a acessibilidade das páginas ao tornar o conteúdo web mais consistente e mais
compatível com os diferentes dispositivos e com as tecnologias de assistência. Fizeram lobby
com os vendedores de navegadores e ferramentas para desenvolver suporte para padrões
web recomendados pelo World Wide Web Consortium (W3C), tais como HTML e CSS.
Nota: O World Wide Web Consortium, ou W3C, é uma comunidade
internacional que desenvolve padrões para assegurar o crescimento da
Web a longo prazo. Em suas próprias palavras, “a missão do W3C é levar
a World Wide Web ao seu potencial pleno, desenvolvendo protocolos e
diretrizes que assegurem o crescimento da Web a longo prazo”.
E eles tiveram muito sucesso. Pulemos para os dias atuais e os padrões web são consistentemente implementados nos maiores navegadores. Embora você ainda obtenha
esquisitices ocasionais no comportamento de alguns navegadores, está mil vezes melhor
do que era antes. Vamos dar uma rápida olhada no que são, de verdade, os padrões web.
O que são padrões web?
Usamos padrões diariamente, frequentemente sem perceber. Quando compramos uma
lâmpada, por exemplo, sabemos que se comprarmos algum tipo de rosca, ela vai se
encaixar na nossa luminária quando chegarmos em casa. Os padrões garantem que a
lâmpada que compramos não seja um pouquinho maior ou só um pouco mais larga para
se adaptar à nossa luminária. Os padrões estão todos à nossa volta: veja as tomadas em
sua casa, as potências de seus aparelhos domésticos e as medidas de tempo, distância
e temperatura usadas em tudo na nossa sociedade.
www.webstandards.org
1
2
PFCG_BeginningHTML5AndCSS3.indb 2
29/09/2014 09:21:07
HTML5: Agora, Não em 2022
Padrões web seguem o mesmo princípio. À medida que os fabricantes e os desenvolvedores web têm ido na direção de incorporar os padrões, a necessidade de escrever
marcações específicas para cada navegador diminuiu. Ao usar HTML bem estruturado
para definir o conteúdo e o CSS para controlar a apresentação, deveríamos ser capazes
de desenhar um site que será apresentado consistentemente em navegadores compatíveis com padrões, independentemente de sistemas operacionais (embora um bug
sempre exista de vez em quando). Igualmente importante, quando a mesma marcação
é reproduzida por navegadores menos capazes e incompatíveis com padrões — em
navegadores baseados em texto ou para dispositivos móveis — o conteúdo deverá
ainda permanecer acessível. Na posição de designers, os padrões web poupam-nos
tempo e nos permitem dormir à noite, com a segurança de saber que nossa obra de
arte artesanalmente criada está acessível, independentemente de quem esteja vendo,
em qual navegador, e em qualquer plataforma.
Nota: O que nós chamamos de padrões, oficialmente é chamado de
“Recomendações” pela W3C. São as maneiras recomendadas de funcionamento para as tecnologias web. Não há nenhum tipo de lei que obrigue
navegadores e vendedores de ferramentas a adotá-las; em vez disso, a
adoção é um acordo para o bem da Web e o benefício mútuo de todos.
Por que usar padrões web?
Talvez uma pergunta melhor a ser feita seja “Por que ignorar os padrões web?”. Os
benefícios de adotar uma abordagem de padrões web são tão convincentes, por que
não usá-los?
Os benefícios de se usar padrões web incluem os seguintes:
• Reduz o tempo de desenvolvimento: você pode construir um único site que funcionará em diversas plataformas, navegadores, dispositivos etc. Sem os padrões,
você provavelmente teria que desenvolver um site diferente para cada navegador.
• Cria sites que são fáceis de atualizar e manter: com os padrões web e melhores
práticas, você pode, por exemplo, atualizar um único arquivo de CSS para mudar o
estilo para um site inteiro de várias páginas HTML. Antes disso ser a norma, costumávamos inserir a informação de estilo dentro do HTML, o que significava mudar a
informação em cada página. Isso era realmente muito repetitivo e inconveniente.
• Melhora as classificações por mecanismos de busca: o conteúdo dentro do HTML
é baseado em texto e, por conseguinte, legível por mecanismos de busca. Além
disso, escrever boas cópias e usar uma semântica HTML (como cabeçalhos) apropriada pode dar mais peso para palavras-chave apropriadas e jogar suas páginas
para o topo das pesquisas do Google.
• Melhora a acessibilidade: HTML e CSS bem escritos tornam os sites mais acessíveis a diversos grupos de usuários, como pessoas com deficiências, pessoas
usando dispositivos móveis, pessoas com baixas taxas de conexão etc.
3
PFCG_BeginningHTML5AndCSS3.indb 3
29/09/2014 09:21:07
Capítulo 1
Agora que tivemos uma visão mais clara dos principais benefícios de uma abordagem de
padrões web, vamos dar uma olhada em dois princípios que vamos olhar com profundidade neste livro: a importância da marcação semântica e do infame pavê da web.
Marcação semântica
Acreditamos na importância da marcação semântica (às vezes, chamado de POSH —
Plain Old Semantic HTML —, sigla em inglês para Bom e Velho HTML Semântico). Acreditamos que o HTML é um elemento de design e que, antes de adicionar uma camada de
apresentação (que aprimora a marcação subjacente), é importante focar a construção de
uma sólida fundação de conteúdo bem estruturado.
Marcação semântica é autodescritiva e usa os elementos corretos de HTML para o trabalho certo. Por exemplo, você poderia marcar um cabeçalho da seguinte forma:
<div id=”heading” style=”font-size:300%; padding: 10px;”>My heading</div>
Pareceria, é claro, com um cabeçalho, mas não funcionaria como um cabeçalho em termos de significado e propósito. Por conseguinte, teria um efeito negativo na otimização
de mecanismos de busca (palavras-chave em cabeçalhos têm mais peso), acessibilidade
(leitores de tela usam elementos de cabeçalho como orientação de navegação), desenvolvimento (é muito mais difícil atingir elementos com estilo e scripts quando você não
usa os elementos semânticos apropriados) e muito mais.
É muito melhor usar o elemento apropriado, assim:
<h1>My heading</h1>
Marcação semântica deveria ser também o mais leve possível, ou seja, removendo todas
aquelas <divs> agrupadas e outros códigos macarrônicos. Isso torna os tamanhos dos
arquivos menores e os códigos mais simples.
Agora que entendemos a importância de construir uma sólida fundação HTML, está na
hora de conhecer o pavê da Web.
O pavê da web: separando aquelas camadas
Todo mundo adora um pavê, principalmente no Natal.
Andy Clarke, escrevendo no Stuff & Nonsense (Coisas e Bobagens) ( http://j.mp/
stuffandnonsense 2), em 2005, levou a metáfora do humilde pavê a novas alturas quando
o usou para descrever o “Web Standards Trifle” (o pavê dos padrões web), uma espessa
mistura de pão de ló, geleia de fruta, creme de baunilha, creme de leite e a cobertura, que é
o mais importante. Você poderá ler seu post original em http://j.mp/standarstrifle3. A
maioria do que foi escrito ainda é válido hoje.
www.stuffandnonsense.co.uk/blog
2
www.stuffandnonsense.co.uk/archives/web_standards_trifle.html
3
4
PFCG_BeginningHTML5AndCSS3.indb 4
29/09/2014 09:21:07
HTML5: Agora, Não em 2022
A essência do que ele disse é que você deveria separar sua estrutura de dados, informação de estilo e script/comportamento em camadas distintas.
• O HTML semântico fornece à estrutura dos dados um conjunto de conteúdo limpo
e de fácil acesso. O HTML5 provê isso muito bem. Você deveria tornar esses
dados tão acessíveis e utilizáveis quanto possível, sem qualquer estilização de
melhorias de script.
• O CSS fornece a informação de estilo, que pega a informação dos nossos dados
e lhes dá a apresentação visual que desejamos. O CSS3 fornece ferramentas mais
poderosas que seu antecessor, o CSS2.
• O JavaScript (incluindo a linguagem básica e a codificação de APIs (Application
Programming Interface — Interface de Programação de Aplicativos) definidas dentro do HTML5 e em outros lugares) fornece a camada de script/comportamento,
que adiciona melhorias de usabilidade e funcionalidade mais rica aos nossos sites.
O Dao do design web: aceitando a incerteza*
O panorama dos navegadores está evoluindo rapidamente. No entanto, ao contrário da
época do Velho Oeste das guerras de navegadores, o panorama de hoje está evoluindo
e convergindo na direção dos padrões. Firefox, Safari, Opera, Chrome e, é claro, nosso
velho amigo, o IE, estão todos — reconhecidamente em níveis diferentes — progredindo
no sentido de dar suporte a todos os novos recursos do padrão dentro do HTML5, CSS3,
etc. Muitos desenvolvedores estão também progredindo no sentido dos padrões web e
suas melhores práticas associadas, embora muitos deles estejam sendo deixados de lado.
Mas agora temos um novo tipo de incerteza com que se preocupar: não temos mais apenas
navegadores de desktop para dar suporte. Há um rápido crescimento de pessoas acessando a internet via dispositivos móveis, tablets, TVs, consoles de videogame, e muito mais. A
explosão de dispositivos como o iPhone e o iPad, da Apple, dispositivos com Android, da
Google, Blackberrys, o Wii, o DS e as TVs com acesso à internet da Philips e da Sony estão
abrindo caminho para um aumento significativo no número de pessoas acessando a web
enquanto estão em movimento, na sala de estar, bem longe de suas mesas.
A Opera, criadora do Opera Mini (uma das plataformas de navegador móvel mais populares ao redor do mundo), relata um significativo crescimento ano após ano (e mês após
mês) de usuários que utilizam a internet em movimento. Isso parece destinado a crescer
exponencialmente com o inexorável aumento do número de smartphones.
* N.E. : Dao — O caminho, da filosofia religiosa de vida chinesa Daoismo, que enfatiza a harmonia, baseada
na ideia de em que a vida deve ser vivida com equilíbrio e virtude, e que nada é totalmente bom ou totalmente ruim, em tudo convivendo o Yin (negativo) e o Yang (Positivo). No caso, a aceitação das incertezas
da Web.
5
PFCG_BeginningHTML5AndCSS3.indb 5
29/09/2014 09:21:07
Capítulo 1
Com tantos dispositivos diferentes para se consumir conteúdo web, está se tornando
cada vez mais difícil prever exatamente como seu site vai aparecer em todos os dispositivos de seus usuários. Em vez de ficarmos obcecados em ter o controle pleno dos pixels,
precisamos aceitar o duvidoso e projetar sites flexíveis que se adaptem a diferentes
contextos de navegação.
Isso não é de forma alguma uma ideia nova. “The Dao of Web Design”, de John Allsopp,
publicado no “A List Apart”, lá no ano de 2000, destacou a importância de os web designers aprenderem a se desapegar, aprendendo a conviver com a complexidade — e
incontrolabilidade — da web, e aceitar a falta de controle, que é uma parte inerente do
complexo mundo da web com o qual trabalhamos. Enfatizando as variáveis que surgem
quando se desenha para a web (tamanho de tela, diferentes resoluções, profundidade do
monitor, fontes instaladas etc.), Allsopp encorajou web designers na virada do milênio
a aceitarem a imprevisibilidade inerente do ofício e desenhar para uma internet que não
dispunha do controle preciso como na mídia impressa.
Encorajando os web designers a olharem “pela outra ponta do microscópio”, ele reinterpretou o “controle” do design impresso como uma “limitação”, afirmando que “o fato
de podermos controlar uma folha de papel é realmente uma limitação desse meio”. Leia
novamente; é um sutil, mas importante ponto.
Transporte-se para o presente e verá que essa visão não está tão distante da realidade. A
fluidez da web é celebrada por muito mais pessoas hoje em dia. Você ainda vai conhecer
muitos designers e clientes que são obcecados com a perfeição de pixels do design
impresso na web, mas é mais fácil convencê-los de que a maneira fluida é a mais certa,
principalmente agora que os dispositivos de navegação são mais variados que nunca.
O site de Dan Cederholm, de 2007, Do Web Sites Need to Look the Same in Every Browser (Os sites precisam ser iguais em todos os navegadores?), na figura 1-1, responde à
questão claramente com um enfático “Não!”.
Figura 1-1. Os sites precisam ser iguais em todos os navegadores? Não!
6
PFCG_BeginningHTML5AndCSS3.indb 6
29/09/2014 09:21:07
HTML5: Agora, Não em 2022
Como coloca Allsopp, os web designers não são controladores e a Web não é impressa.
Essa é uma mudança fundamental. Para os designers acostumados à estrutura fixa de referência que é típica do mundo da impressão, pode levar algum tempo para se acostumar
com isso. Allsopp reitera, “como designers, precisamos repensar esta função, abandonar
o controle e buscar uma nova relação com a página”.
Repense a falta de controle; pare de ver isso como uma fraqueza, e veja como uma
força. Esse é o ponto-chave do trabalho de Allsopp. Como ele propõe, “faça páginas
que sejam adaptáveis”. Por quê? Porque o adaptável é acessível. Como coloca Allsopp,
pense sobre “projetar a página universal”.
Esta próxima citação reforça o que dissemos antes sobre o HTML semântico: onde o
HTML provê um elemento apropriado, use-o. Onde não, use classes. Simples. HTML é,
apesar da tendência de muitos designers preguiçosos de confiar demais em atributos de
classe desnecessários, uma linguagem semântica rica e compreensiva, portanto deveríamos usá-lo para nosso proveito.
E, como veremos quando virmos o HTML5 em capítulos posteriores, há elementos semânticos mais ricos ao nosso dispor. Sendo assim, precisamos confiar cada vez menos
em classes no futuro. De fato, nossa tarefa parece ficar mais fácil. Boas novas!
Acessibilidade
Acessibilidade, às vezes abreviada como a11y (uma abreviatura da palavra “accessibility”, em inglês, que mistura letras e números: “a, depois 11 letras, então y”), deveria ser um
fundamento de nossa abordagem. Aceitar o Dao do web design traz consigo um número
de benefícios, inclusive mais acessibilidade a um público mais amplo e diverso.
Fundamental para isso é considerar como diferentes usuários usam a web. Algumas
pessoas usam-na da mesma forma que você. Outras usam diferentes dispositivos ou
possuem conexões mais lentas com a internet. Outras ainda usam apenas o teclado.
Algumas usam leitores de tela para ler páginas enviadas para eles. Algumas pessoas
não conseguem ouvir o conteúdo de áudio. O que quer que faça, familiarize-se com
uma população diversa de usuários. Não presuma que todos usem a internet exatamente como você.
Achamos que a acessibilidade é AGoodThing™ (uma coisa boa), portanto não fique
surpreso em nos ver destacando alguns dos benefícios (e potenciais armadilhas) que o
HTML5 traz à festa da acessibilidade.
Criando sua marcação
Acreditamos piamente na ênfase na arte do design para a web e do desenvolvimento
web. Prestar atenção aos detalhes é importante, assim como se orgulhar do próprio
trabalho, mesmo quando se escreve marcação.
7
PFCG_BeginningHTML5AndCSS3.indb 7
29/09/2014 09:21:07
Capítulo 1
Em seu excelente livro, The Craftsman (O Artesão), Richard Sennett escreve sobre os
artesãos envolvidos na criação do Linux, enfatizando seu foco “em alcançar qualidade [e]
em fazer um bom trabalho”. Mais próximo ao mundo do web design, Dan Cederholm, em
Handcrafted CSS (CSS feito à mão), afirma:
Os detalhes nem sempre são óbvios. Em um móvel bem feito, talvez
você só perceba o quanto ele é bem feito até começar a usá-lo. Puxe a
gaveta e note os encaixes em asa de andorinha, por exemplo.
Tudo isso pode ser relacionado com o web design. Igualmente, detalhes pouco óbvios podem, frequentemente, separar um bom design
web de um ótimo design web. Talvez você não aprecie a qualidade
de um site bem desenhado, até começar a usá-lo, ver sua intimidade,
colocá-lo para fazer alguns testes.
Concordamos plenamente com o Sr. Cederholm. A diferença entre bom conteúdo web e
um ótimo conteúdo web é artesanal, é gastar um tempo extra para colocar os pingos nos
“is” — prestar atenção nos detalhes.
Conforme o mundo do design web evolui, nós nos vemos, cada vez mais, colaborando
com outros e trabalhando em equipe. Uma abordagem sólida e bem construída de
marcação — baseada em regras e padrões acordados — pode melhorar consideravelmente a colaboração, dinamizando o processo e (chegaríamos até ao ponto de dizer)
tornando-o mais agradável.
Achamos que um bom artesanato é importante, e temos certeza de que você também.
Como foi criado o HTML5?
You may ask yourself, well, how did I get here?
— Talking Heads, “Once in a Lifetime”
HTML5 é apenas um ponto numa longa linha no desenvolvimento do HTML, que tem visto
uma variedade de versões com diferentes especificações. Embora elas tenham diferido
em seus detalhes, cada versão do HTML teve um aspecto fundamental em comum: HTML
é uma linguagem de marcação.
Sim, HTML 4.01 e XHTML 1.0 podem diferir no estilo do código, mas eles dividem esta
mesma meta em comum. Com as opiniões divergentes e, em diversos momentos, firmemente manifestadas pelos dois — por vezes opostos — campos que os suportam, tem
sido frequentemente fácil perder de vista os pontos de convergência.
8
PFCG_BeginningHTML5AndCSS3.indb 8
29/09/2014 09:21:07
HTML5: Agora, Não em 2022
O HTML5, de várias maneiras, representa o melhor de todos os mundos, com uma grande
quantidade de potencial novo acrescentado com boa prática, como se verá mais tarde.
Antes de apresentarmos o HTML5 e suas diferentes facetas, façamos uma breve recapitulação de como nos encontramos onde estamos agora.
Além do HTML4...
Não havia nada de errado com o HTML4, sério. Era uma especificação perfeitamente boa,
e a tecnologia funcionava perfeitamente para executar o trabalho para o qual havia sido
feito inicialmente: fazer marcação em documentos estáticos com links entre eles. Mas as
coisas nunca param quietas. Os desenvolvedores web não estavam felizes por simplesmente
continuarem fazendo marcações em documentos estáticos para o resto de suas vidas. Eles
queriam fazer sites dinâmicos que se comportassem mais como aplicativos do que páginas,
e estavam começando a fazer isso usando tecnologias como PHP, JavaScript e Flash.
Daí a necessidade para evoluir.
Nota: O Flash originalmente se tornou popular porque o suporte a
padrões web entre vários tipos de navegadores era muito ruim no fim
dos anos 1990, e o plugin oferecia uma maneira de fazer com que
o conteúdo se comportasse consistentemente entre navegadores.
Além do mais, o Flash permitia que os desenvolvedores web fizessem
coisas, como animação e vídeo na web. Os padrões web, na época,
não tinham facilidades para dar suporte a isso.
XHTML 1.0
Foi, na verdade, lá nos idos de 1998, mais ou menos na época em que as especificações
do HTML4 estavam perto de ficarem prontas, quando a decisão foi tomada pelo W3C para
direcionar a web no sentido do XHTML em vez de HTML (ver http://j.mp/futuremarkup4).
Eles, então, colocaram um ponto-final no assunto do HTML4 (a última versão foi, na
verdade, a 4.01, que incluía alguns ajustes de bugs e coisas do gênero) e, em vez disso,
concentraram esforços nas especificações do XHTML 1.0.
Em agosto de 2002, o W3C comentou que:
A família XHTML é o próximo passo na evolução da internet. Ao migrar
para o XHTML hoje, os desenvolvedores de conteúdo podem entrar no
mundo XML (Extensible Markup Language — Linguagem de Marcação
Extensível), com todos seus benefícios inerentes, enquanto que ainda
podem permanecer confiantes na compatibilidade de seus conteúdos
do passado e do futuro.
www.w3.org/markup/future/
4
9
PFCG_BeginningHTML5AndCSS3.indb 9
29/09/2014 09:21:07
Capítulo 1
Com essa chamada tão revigorante, não foi nenhuma surpresa que, quando se considerou como seria a melhor maneira de evoluir o HTML, o W3C inicialmente pôs todo o
seu empenho no XHTML (perceba a palavra “inicialmente”). O XHTML 1.0 parecia um
movimento sensato. Era, basicamente, apenas o HTML4 reformulado como um vocabulário XML, que trouxe consigo as mais estritas regras de sintaxe de XML (por exemplo,
os valores de atributo devem possuir aspas envolvendo-os, os elementos precisam estar
fechados). O objetivo era melhorar a qualidade e ter marcações mais eficientes.
XHTML 2.0 e o retrocesso
No entanto, o passo seguinte do W3C não funcionou muito bem. A versão seguinte do
XHTML, XHTML 2.0, foi criada com uma abordagem um tanto quanto utópica. Ele continha algumas ideias muito boas e era uma especificação bem escrita, mas simplesmente
não refletia o que os desenvolvedores web estavam, de fato, fazendo na web. Era mais
algo que o W3C gostaria que eles estivessem fazendo, num mundo ideal.
Além disso, não era compatível com o conteúdo anterior já existente na web. Muitos recursos funcionavam diferentemente; por exemplo, o mimetype (application/xhtml+xml)
não funcionava de jeito nenhum no IE, e as ferramentas de desenvolvedor disponíveis não
estavam prontas para funcionar com o XML.
A comunidade ficou consternada com isso e ocorreu um retrocesso. Mais notadamente,
em 2004, um grupo de desenvolvedores e implementadores com ideias semelhantes
(incluindo representantes do Opera, Mozilla e, mais tarde, a Apple) uniram-se para
formar um grupo dissidente de especificações, chamado de WHATWG (www.whatwg.
org), que visava escrever especificações de marcação com um conjunto de recursos
mais efetivo para construir a nova espécie de aplicativos web, sem — crucialmente —
romper com a compatibilidade passada.
O WHATWG criou a especificação Web Applications 1.0 (http://j.mp/webapplications15),
que documentava comportamentos e recursos interoperáveis de navegadores existentes,
assim como novos recursos para o acervo da web aberta, tais como APIs e novas regras
de análise de DOM (Document Object Model — Modelo do Objeto Documento). Após
muitas discussões entre membros do W3C, em 7 de março de 2007, o trabalho sobre
HTML foi reiniciado com um novo Grupo de Trabalho de HTML, num processo de participação aberta. Uma das primeiras decisões do grupo de trabalho HTML WG foi adotar a
especificação do Web Applications 1.0 e chamá-la de HTML5.
O WHATWG e o W3C agora desenvolvem a especificação do HTML5, em conjunto com
duas diferentes especificações.
www.whatwg.org/specs/web-apps/2005-09-01/
5
10
PFCG_BeginningHTML5AndCSS3.indb 10
29/09/2014 09:21:07
Download