curso de desenvolvimento de sistemas web - (x)html

170
UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA CURSO DE CIÊNCIA DA COMPUTAÇÃO DESENVOLVIMENTO DE SISTEMAS WEB – 2014.1 Fábio M. Pereira ([email protected])

Upload: fabio-moura-pereira

Post on 20-Jun-2015

337 views

Category:

Technology


3 download

DESCRIPTION

Aula de (X)HTML do Curso de Desenvolvimento de Sistemas Web Universidade Estadual do Sudoeste da Bahia - UESB

TRANSCRIPT

Page 1: Curso de Desenvolvimento de Sistemas Web - (X)HTML

UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA CURSO DE CIÊNCIA DA COMPUTAÇÃO

DESENVOLVIMENTO DE SISTEMAS WEB – 2014.1

Fábio M. Pereira

([email protected])

Page 2: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Roteiro

• Hello World!

• As Especificações HTML e XHTML

• Estrutura de Um Documento (X)HTML

• As Regras de (X)HTML

• HTML 4 x HTML5

• Adicionando Semântica

• Esforço de Mídia Aberta de HTML5

• Gráficos do Lado Cliente

• Mudanças em Formulários HTML5

• Elementos e Atributos para Aplicações Web

Page 3: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 4: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Hello World!

Page 5: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Hello World!

• HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;

charset=utf-8">

<title>Hello HTML 4 World</title>

<!-- Simple hello world in HTML 4.01 strict example -->

</head>

<body>

<h1>Welcome to the World of HTML</h1>

<hr>

<p>HTML <em>really</em> isn't so hard!</p>

<p>Soon you will &hearts; using HTML.</p>

<p>You can put lots of text here if you want.

We could go on and on with fake text for you

to read, but let's get back to the book.</p>

</body>

</html>

Page 6: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Hello World!

• HTML5:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;

charset=utf-8">

<title>Hello HTML5 World</title>

<!-- Simple hello world HTML5 example -->

</head>

<body>

<h1>Welcome to the World of HTML5</h1>

<hr>

<p>HTML <em>really</em> isn't so hard!</p>

<p>Soon you will &hearts; using HTML.</p>

<p>You can put lots of text here if you want.

We could go on and on with fake text for you

to read, but let's get back to the book.</p>

</body>

</html>

Page 7: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Hello World!

• XHTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

<meta http-equiv="Content-Type" content="text/html;

charset=utf-8“ />

<title>Hello XHTML World</title>

<!-- Simple hello world in XHTML 1.0 strict example -->

</head>

<body>

<h1>Welcome to the World of XHTML</h1>

<hr />

<p>XHTML <em>really</em> isn't so hard!</p>

<p>Soon you will &hearts; using XHTML too.</p>

<p>There are some differences between XHTML

and HTML but with some precise markup you'll

see such differences are easily addressed.</p>

</body>

</html>

Page 8: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Hello World!

• Os exemplos utilizam algumas características dos elementos mais comuns em (X)HTML, incluindo: – A instrução <!DOCTYPE> que indica a versão do HTML e XHTML

que está sendo usada no documento

– As tags <html>, <head> e <body> usadas para especificar a estrutura geral do documento • A inclusão do atributo xmlns é necessária na tag <html> e é uma

pequena diferença do XHTML

– A tag <meta> que indica o tipo MIME (troca de mensagens) e conjunto de caracteres usados • Note que no exemplo XHTML, o elemento tem uma barra no final para

indicar que é um elemento vazio

– O par de tags <title> e </title> especificam o título do documento que aparece geralmente na barra de títulos do navegador Web

Page 9: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Hello World!

• Continuação:

– Comentários são especificados com <!-- -->

– O par de tags <h1> e </h1> indicam uma linha de cabeçalho especificando alguma informação importante

– A tag <hr>, em XHTML <hr />, insere uma linha horizontal ou barra através da tela

– As tags <p> e </p> indicam um parágrafo de texto

– Um caractere especial é inserido usando uma entidade com nome (&hearts;) – um coração

– O par de tags <em> e </em> são colocadas em torno de pequenas partes de texto para enfatização, geralmente com itálico

Page 10: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 11: Curso de Desenvolvimento de Sistemas Web - (X)HTML

As Especificações HTML e XHTML

• Todos os documentos (X)HTML devem seguir uma estrutura formal definida pelo W3C (World Wide Web Consortium)

• Tradicionalmente, o W3C definiu HTML como uma aplicação do SGML (Standard Generalized Markup Language) – Uma tecnologia usada para definir linguagens de marcação

através da especificação da estrutura permitida de um documento na forma de um DTD (document type definition)

– Um DTD indica a sintaxe que poder ser utilizada para os vários elementos de uma linguagem como a HTML

• Em 1999, o W3C reescreveu HTML como uma aplicação de XML chamada XHTML – XML, neste caso, tem o mesmo propósito de SGML

Page 12: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 13: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Estrutura de Um Documento (X)HTML

• Um modelo básico de um documento pode ser derivado da especificação do HTML 4.01 DTD:

Page 14: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 15: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Estrutura de Um Documento (X)HTML

• A estrutura de um documento XHTML é muito parecida:

Page 16: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 17: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Estrutura de Um Documento (X)HTML

• Tanto em HTML como em XHTML (mas não em HTML5), podemos substituir a tag <body> pela tag <frameset>, que permite a inclusão de várias tags <frame>, correspondentes a partes individuais da janela do navegador, chamadas de frames

Page 18: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 19: Curso de Desenvolvimento de Sistemas Web - (X)HTML

O Cabeçalho do Documento

• A informação no elemento head de um documento (X)HTML é muito importante por ser usada para descrever ou aumentar o conteúdo do documento

• Em muitos casos, o elemento head possui informação sobre a página que é útil para o estilo visual, definição de interatividade, atribuição do título da página e fornecer outra informação útil para descrever ou controlar o documento

Page 20: Curso de Desenvolvimento de Sistemas Web - (X)HTML

O Elemento title

• Um único elemento title é requerido no elemento head

e usado para atribuir o texto mostrado pela maioria dos navegadores na barra de títulos

• Também é utilizado pelo sistema de histórico de navegação, gravado quando uma página é marcada, e consultado por robôs de máquinas de busca para determinar o significado da página

• Em resumo, é muito importante ter um título de página sintaticamente correto, descritivo e apropriado

• Quando não especificado, a maioria dos navegadores mostram a URL da página ou o nome do arquivo na barra de título

Page 21: Curso de Desenvolvimento de Sistemas Web - (X)HTML

O Elemento title

• Um título pode conter texto padrão, linguagem de marcação não é interpretada, entretanto entidades de caracteres como &copy; (ou alternativamente &#169;), que especifica um símbolo de copyright, são permitidos

– Para que seja mostrada de maneira correta, é necessário se certificar de que o conjunto apropriado de caracteres está definido e de que o navegador dá suporte aos caracteres

– Caso contrário poderemos ver caixas ou outros símbolos no título

• Para atribuir o conjunto de caracteres apropriados, devemos incluir a tag <meta> antes do título da página

Page 22: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<meta>: Especificando Tipo de Conteúdo, Conjunto de Caracteres e Mais...

• A tag <meta> possui vários usos

• Por exemplo, ela pode ser usada para especificar valores que são equivalentes a cabeçalhos de resposta HTML

– Para garantir que o tipo MIME (Multipurpose Internet Mail Extensions) e o conjunto de caracteres para um documento HTML baseado no inglês esteja atribuído, poderíamos usar <meta http-equiv="Content-Type" content="text/html;

charset=ISO-8859-1“ />

– A barra no final pode ser utilizada uma vez que <meta> é um elemento vazio

• Utilizar o conjunto de caracteres UTF-8 é provavelmente uma boa ideia para autores ocidentais, por dar acesso a um conjunto internacional de glifos de caracteres

Page 23: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<meta>: Especificando Tipo de Conteúdo, Conjunto de Caracteres e Mais...

• Para o padrão HTML, o tipo MIME é sempre text/html

• Em XHTML podemos escolher entre text/html, text/xml, application/xml e application/xhtml+xml

• Daremos preferência ao tipo text/html

• Assim, a estrutura do cabeçalho sempre parecerá com: <head>

<meta http-equiv="Content-Type" content="text/html;

charset=utf-8" />

<title>Título da Página</title>

</head>

Page 24: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outros Elementos no Cabeçalho

• Em adição aos elementos title e head, nos DTDs HTML 4.01 e XHTML 1.0, os elementos permitidos dentro do elemento head incluem base, link, object, script e style

– Comentários também são permitidos

• <base>

– Especifica um endereço URL absoluto que é usado para indicar informação de servidor e pasta para endereços URL especificados parcialmente, chamados de links relativos, usados dentro do documento <base href="http://htmlref.com/baseexample" >

Page 25: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outros Elementos no Cabeçalho

• <link>

– Especifica um relacionamento especial entre o documento corrente e outro documento

– Geralmente é utilizado para especificar a planilha de estilos usada pelo documento <link rel="stylesheet" media="screen"

href="global.css" type="text/css" >

– Embora possua uma quantidade de outros possíveis usos interessantes como atribuir relacionamentos de navegação e avisar ao navegador sobre conteúdo pré-carregado

Page 26: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outros Elementos no Cabeçalho

• <object>

– Permite que programas e outros objetos binários sejam diretamente embutidos em uma página Web

– Por exemplo, um objeto Flash não visível está sendo referenciado para algum uso: <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

width="0" height="0" id="HiddenFlash" >

<param name="movie" value="flashlib.swf" />

</object>

– Existem várias tecnologias que podem ser utilizadas, como applets Java, plug-ins e controles ActiveX

Page 27: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outros Elementos no Cabeçalho

• <script>

– Permite que código de uma linguagem de script seja diretamente embutido <script type="text/javascript">

alert("Hi from JavaScript!");

/* more code below */

</script>

– Ou, de forma mais apropriada, chamada a partir de uma página Web: <script type="text/javascript"

href="ajaxtcr.js"></script>

– Quase sempre a linguagem JavaScript é utilizada, embora outras linguagem como VBScript também sejam permitidas

Page 28: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outros Elementos no Cabeçalho

• <style>

– Usada para inclusão de especificações de estilo do documento, tipicamente no formato CSS, relacionados a fontes, cores, posicionamento e outros aspectos de apresentação do conteúdo <style type="text/css" media="screen">

h1 {font-size: xx-large; color: red;

font-style: italic;}

/* h1 elements render as big, red and italic */

</style>

Page 29: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outros Elementos no Cabeçalho

• Comentários

– Seguindo o formato SGML, um comentário inicia com <!– e termina com --> e pode incluir várias linhas <!-- Hi I am a comment -->

<!-- Author: Thomas A. Powell

Book: HTML: The Complete Reference

Edition: 5

-->

Page 30: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Sintaxe Completa do Elemento head

Page 31: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo de Documento XHTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Sample Head Element</title>

<!-- Some example meta tags -->

<meta name="keywords" content="Fake, Head Example, HTML Ref" />

<meta name="description" content="A simple head example that shows

a number of the elements presented in action." />

<meta name="author" content="Thomas A. Powell" />

<!-- Set a global URI stem for all references --> <base href="http://htmlref.com/baseexample" />

Page 32: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo de Documento XHTML

… <!-- Linked and document specific styles --> <link rel="stylesheet" href="screen.css" media="screen" /> <link rel="stylesheet" href="printer.css“ media="print" /> <style type="text/css"> <!-- h1 {font-size: xx-large; color: red; font-style: italic;} --> </style>

… <!-- Embedded and linked scripts --> <script type="text/javascript"> <!-- var globalDebug = true; //--> </script> <script src="ajaxtcr.js" type="text/javascript"> </script> <script src="effects.js" type="text/javascript"> </script> </head> <body> <p>Some body content here.</p> </body> </html>

Page 33: Curso de Desenvolvimento de Sistemas Web - (X)HTML

O Corpo do Documento

• Após a seção de cabeçalho, o corpo de um documento é delimitado por <body> e </body>

• Apesar de ser um elemento opcional, sempre devemos incluí-lo

• Apenas um elemento body pode aparecer no documento

• Dentro do corpo de um documento Web está uma variedade de tipos de elementos

– Por exemplo, elementos de nível de bloco que definem blocos de conteúdo estrutural como parágrafos (p) ou cabeçalhos (h1 – h6)

– Formas especiais de blocos, como listas não ordenadas (ul), podem ser usadas para criar listas de informações

Page 34: Curso de Desenvolvimento de Sistemas Web - (X)HTML

O Corpo do Documento

• Dentro de blocos não vazios, são encontrados elementos internos

– Existem vários elementos internos, como negrito (b), itálico (i), forte (strong), ênfase (em) e vários outros

• Em outros tipos de elementos são incluídos aqueles que referenciam outros objetos, como imagens (img) ou elementos interativos (object)

• Podemos ainda incluir elementos textuais e comentários

Page 35: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

Page 36: Curso de Desenvolvimento de Sistemas Web - (X)HTML

O Corpo do Documento

Page 37: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Navegadores e (X)HTML

• Quando um navegador lê um documento, como o exemplo a seguir, ele constrói uma árvore para interpretar a estrutura do documento

• Estas árvores, também chamada de árvores DOM (Document Object Model), são a interpretação do navegador do código fornecido e são integrais para determinar como construir a página visualmente usando tanto o estilo padrão X(HTML) como qualquer CSS anexado

• JavaScript também utilizará esta árvore quando tentar manipular o documento

• Ela serve como o esqueleto da página, portanto a garantia de sua corretude é muito importante, mas muitas vezes negligenciada

Page 38: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Hello HTML World</title>

<!-- Simple hello world in HTML 4.01 strict example -->

</head>

<body>

<h1>Welcome to the World of HTML</h1>

<hr>

<p>HTML <em>really</em> isn't so hard!</p>

<p>Soon you will &hearts; using HTML.</p>

<p>You can put lots of text here if you want.

We could go on and on with fake text for you

to read, but let's get back to the book.</p>

</body>

</html>

Page 39: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 40: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 41: Curso de Desenvolvimento de Sistemas Web - (X)HTML

As Regras de (X)HTML

• HTML não é sensível à caixa, XHTML é – Os exemplos a seguir são equivalentes em HTML tradicional,

mas XHTML requer minúsculas <B>Go boldly</B> <B>Go boldly</b>

<b>Go boldly</B> <b>Go boldly</b>

• Atributos podem ser sensíveis à caixa – Considerando <img SRC="test.gif"> e <IMG src="test.gif">, em HTML tradicional, elas são equivalentes, embora em XHTML devam sempre estar em minúsculas

– Considerando os valores dos atributos, em <img src="test.gif"> e <img src="TEST.GIF">, caso o servidor seja Windows, onde nomes de arquivos não são sensíveis à caixa, se referem ao mesmo arquivo, mas caso o servidor seja baseado no UNIX, podem se referir a arquivos diferentes

Page 42: Curso de Desenvolvimento de Sistemas Web - (X)HTML

As Regras de (X)HTML

• (X)HTML é sensível à caracteres de espaço únicos – Quaisquer espaços em branco entre caracteres são mostrados

como um único espaço

– Isto inclui tabulações, quebras de linhas e retornos de carro <strong>T e s t o f s p a c e s</strong><br>

<strong>T e s t o f s p a c e s </strong><br>

<strong>T

e s

t o f s p a c e s</strong><br>

– Irá resultar em T e s t o f s p a c e s

T e s t o f s p a c e s

T e s t o f s p a c e s

– Caso mais espaços sejam necessários, é possível utilizar a entidade &nbsp;

Page 43: Curso de Desenvolvimento de Sistemas Web - (X)HTML

As Regras de (X)HTML

• (X)HTML Segue um Modelo de Conteúdo

– Especifica que certos elementos somente ocorrem dentro de outros elementos

<ul>

<p>What a simple way to break the content model!</p>

</ul>

– O exemplo acima não segue o modelo de conteúdo da especificação (X)HTML: a tag <ul> deveria conter apenas tags <li>, a tag <p> não é apropriada neste contexto

– Em alguns navegadores a tag <input> encontrada fora de uma tag <form> é simplesmente ignorada, não sendo mostrada, já em outros sim

Page 44: Curso de Desenvolvimento de Sistemas Web - (X)HTML

As Regras de (X)HTML

• Elementos devem possuir tags de fechamento, a não ser que sejam vazias

– Em HTML, alguns elementos possuem tags de fechamento opcional, assim, os exemplos abaixo são permitidos, embora o segundo seja melhor: <p>This isn't closed

<p>This is</p>

– Entretanto, o fechamento do primeiro parágrafo é inferido uma vez que segundo o modelo de conteúdo não é permitido uma tag <p> dentro de outra

– Em XHTML devemos sempre fechar as tags, assim devemos escrever <br></br> ou, mais comumente, usar o formato com um caractere “/” no final, como em <br />

Page 45: Curso de Desenvolvimento de Sistemas Web - (X)HTML

As Regras de (X)HTML

• Elementos devem estar aninhados

– E não cruzados, assim <b><i>is in error as tags cross</b></i>

– Está incorreto, enquanto <b><i>is not since tags nest</i></b>

– Está em sua sintaxe correta

• Atributos devem estar entre aspas

– Embora em HTML atributos simples não precisem estar entre aspas (conteúdo alfanumérico, traços e pontos), a falta das aspas pode levar a confusão, além do uso ser obrigatório em XHTML

– Evite <img src=robot.gif height=10 width=10 alt=robot>

– Use <img src="robot.gif" height="10" width="10"

alt="robot" />

Page 46: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 47: Curso de Desenvolvimento de Sistemas Web - (X)HTML

HTML 4 x HTML5

• HTML5 removeu vários elementos e atributos, muitos deles foram removidos por serem mais de apresentação do que de semântica

– Por exemplo, <small> continua sendo permitido, mas <big> está obsoleto

– A ideia é preservar o elemento, mas mudar o significado: <small> não corresponde mais ao texto com fonte reduzida, similar a <font size=“-1”>, mas tem a intenção de representar o uso de textos pequenos, como em notas legais e de rodapé

Page 48: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Elementos HTML 4 Removidos

Page 49: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Elementos Redefinidos em HTML5

Page 50: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Atributos Removidos em HTML5

Page 51: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Atributos Removidos em HTML5

Page 52: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outros Elementos Removidos em HTML5

Page 53: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Novos Elementos HTML5

• Para muitos autores de páginas Web, a inclusão de novos elementos é o aspecto mais interessante de HTML5

• Alguns desses elementos ainda não possuem suporte, mas muitos navegadores já estão implementando os mais interessantes, como audio e video

Page 54: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Novos Elementos HTML5

Page 55: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Novos Elementos HTML5

Page 56: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Atributos Chave Adicionados Por HTML5

Page 57: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Atributos-Chave Adicionados Por HTML5

Page 58: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Mudanças na Estrutura do Documento HTML5

• Documentos HTML5 podem conter um elemento header, usado para definir a seção de cabeçalho de um documento e que contém os elementos padrões h1 a h6

<header>

<h1>Welcome to the Future World of HTML5.</h1>

<h2>Don't be scared it isn't that hard!</h2>

</header>

• De maneira similar, o elemento footer é fornecido para definir o conteúdo do rodapé de um documento, que geralmente contém navegação, informação legal e de contato

<footer>

<p>Content of this example is not under copyright</p>

</footer>

Page 59: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>HTML5 header and footer example</title> </head> <body> <header> <h1>Welcome to the Future World of HTML5.</h1> <h2>Don't be scared it isn't that hard!</h2> </header> <p>Some body content here.</p> <p>Some more body content here.</p> <footer> <p>Content of this example is not under copyright.</p> </footer> </body> </html>

Page 60: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Elemento section

• O elemento estrutural HTML5 com mais possibilidades de uso é o elemento section

• Uma tag <section> pode ser usada para agrupar conteúdo arbitrário e pode conter outras tags <section> para criar a ideia de subseções

Page 61: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

<section>

<h1>Chapter 2</h1>

<p>New HTML5 elements.</p>

<section>

<h2>HTML5's section Element</h2>

<p>These elements are useful to create outlines.</p>

<section>

<h3>Nest Away!</h3>

<p>Nest your sections but as you nest you might

want to indent.</p>

</section>

</section>

<p>Ok that's enough of that.</p>

</section>

Page 62: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Elemento section

• Um elemento section pode conter elementos header e footer

<section>

<header>

<h1>I am Section Heading</h1>

</header>

<h2>I am outside the section header I'm just a

plain headline.</h2>

<p>Some more section content might go here.</p>

<footer>

<p>Hi from the footer of this section.</p>

</footer>

</section>

Page 63: Curso de Desenvolvimento de Sistemas Web - (X)HTML

section x div

• De acordo com a semântica, elementos de seção HTML5 não são apenas uma formalização de tags <div> com valores de class apropriados

• Equivalente utilizando div: <div class="header">

<!-- header here -->

</div>

<div class="section">

<div class="header">

<h2>Section Heading</h2>

</div>

<p>Content of section.</p>

</div>

<div class="footer">

<!-- footer here -->

</div>

Page 64: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Elemento article

• HTML5 introduz uma série de elementos estruturais

• O elemento article é usado para definir uma unidade discreta de conteúdo como em um post de um blog, comentário, artigo, etc.

• A ideia por traz da de definição destas unidades de conteúdo discretas é a possibilidade de extração automática

• Um outro elemento novo em HTML5 é o elemento aside, que pode ser usado com conteúdo que representa material que é tangencial ou, como o nome sugere, colocado à parte ou de lado

Page 65: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

Page 66: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 67: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Elementos Semânticos

• Muitos dos elementos adicionados por HTML5 são semânticos por natureza

• Desta maneira, HTML5 continua com seu objetivo de separar estrutura de estilo

• A princípio não veremos muito valor nestes elementos a não ser adicionar significado

– Posteriormente veremos como torná-los legíveis para a maioria dos navegadores e como aplicar estilos simples para usuários finais

Page 68: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Marcando Texto

• O novo elemento HTML5 mark foi introduzido para destacar conteúdo similarmente a uma caneta que marca partes importantes de um texto em um livro

• Exemplo: <p>Here comes <mark>marked text</mark> was it

obvious?</p>

• A seguir apresentamos um exemplo com estilos “internos” apenas para mostrar a ideia

• Observação:

– Por que não utilizar uma tag <span> ou <em>?

– Novamente, semântica é o elemento chave – isto torna o significado dos documentos HTML mais óbvio

Page 69: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Marcando Texto

Page 70: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Marcando Texto

Page 71: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Indicando Datas e Tempo

• time é um outro elemento semântico de HTML5 usado para indicar conteúdo que é uma data, hora ou ambos

• Exemplos: <p>Today it is <time>2009-07-08</time> which is an

interesting date.</p>

<p>An interesting date/time for SciFi buffs is

<time>1999-09-13T09:15:00</time>!</p>

• O elemento deve conter um valor de data/hora no formato YYYY-MM-DDThh:mm:ssTZD, onde

– YYYY-MM-DD correspondem a ano, mês e dia

– T é a letra ‘T’

– hh:mm:ss correspondem a hora, minutos e segundos

– ZD corresponde ao designador de zona de tempo

Page 72: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Indicando Datas e Tempo

• Para utilizar um formato que possa ser processado facilmente por uma máquina, o atributo datetime é fornecido:

<p>My first son was born on <time datetime="2006-

01-13">Friday the 13th</time> so it is my new lucky

day.</p>

Page 73: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Inserindo Figuras

• Sempre é necessário incluir imagens, gráficos e outros objetos que contém textos e imagens em documentos Web, todos eles normalmente chamados de figuras

• HTML5 introduziu o elemento figure <figure id="fig1">

<dd>

<img src="figure.png" height="100" width="100“

alt="A screen capture of the figure element

in action">

<p>This mighty &lt;figure&gt; tag has returned

from HTML 3 to haunt your dreams.</p>

</dd>

<dt>Figure Ex-1</dt>

</figure>

Page 74: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Inserindo Figuras

Page 75: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Especificando Navegação

• Um novo elemento HTML5 com propósito de encapsular um grupo de links que serve como uma coleção de links para outros sites, navegação no documento ou navegação no site, é o elemento nav: <nav>

<h2>Offsite Links</h2>

<a href="http://www.w3c.org">W3C</a><br>

<a href="http://www.htmlref.com">Book site</a><br>

<a href="http://www.pint.com">Author's Firm</a><br>

</nav>

...

<nav id="mainNav">

<ul>

<li><a href="about.html">About</a></li>

<li><a href="services.html">Services</a></li>

<li><a href="contact.html">Contact</a></li>

<li><a href="index.html">Home</a></li>

</ul>

</nav>

Page 76: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Especificando Navegação

Page 77: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 78: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Esforço de Mídia Aberta de HTML5

• Um aspecto interessante de HTML5 que vem de esforço anterior da Netscape e da Microsoft é o suporte a multimídia baseada em tags em documentos HTML

• Tradicionalmente, multimídia tem sido inserida com os elementos embed e object, particularmente quando inserimos Adobe Flash, Apple QuickTime, Windows Media e outros formatos

• Entretanto, ouve um tempo em que eram suportadas tags específicas para inserção de mídia – Interessante que algumas dessas características, como o

atributo dynsrc para tags <img>, continuam até hoje

• HTML5 trouxe de volta o conceito de multimídia baseada em tags

Page 79: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<video>

• Para inserir um vídeo utilizamos a tag <video> e seu atributo src para uma URL local ou remota contendo um filme

• Também podemos mostrar controles de playback incluindo o atributo controls, bem como ajustar as dimensões do filme

<video src="http://htmlref.com/ch2/html_5.mp4"

width="640" height="360" controls>

<strong>HTML5 video element not supported

</strong>

</video>

Page 80: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<video>

• Com seu formato de vídeo aberto, HTML5 trouxe de volta a loucura de codec de suporte de mídia, resolvida por Flash

• Podemos diminuir o problema fornecendo formatos alternativos, incluindo uma série de tags <source>

<video width="640" height="360" controls

poster="loading.png">

<source src="html_5.mp4" type="video/mp4">

<source src="html_5.ogv" type="video/ogg">

<strong>HTML5 video element not supported

</strong>

</video>

Page 81: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<video>

• Note o atributo poster, usado para mostrar uma imagem no local do objeto para o caso de demora na carga

• Um outro atributo, autobuffer, pode ser usado para avisar ao navegador para carregar o conteúdo de mídia em background, a fim de melhorar a reprodução

• O atributo autoplay fará com que a reprodução inicie assim que for possível

Page 82: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<video>

Page 83: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<video>

Page 84: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<audio>

• O elemento audio de HTML5 e muito similar ao elemento video

• O elemento deve dar suporte a formato de sons comuns como a arquivos WAV:

<audio src="http://htmlref.com/ch2/music.wav">

</audio>

• Desta maneira, o elemento audio se parece com o elemento proprietário do Internet Explorer bgsound:

<audio>

<bgsound src="http://htmlref.com/ch2/music.wav">

</audio>

Page 85: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<audio>

• Se desejarmos que o usuário controle a execução do som, se não utilizarmos o JavaScript para controlar isto, podemos mostrar controles com o mesmo o atributo de mesmo nome (controls)

– A depender do navegador, a aparência destes controles pode mudar <audio src="http://htmlref.com/ch2/music.wav"

controls></audio>

• Assim como no elemento video, também existem os atributos autobuffer e autoplay

Page 86: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<audio>

• Da mesma forma, podemos especificar diferentes formatos usando tags source:

<audio controls autobuffer autoplay>

<source src="http://htmlref.com/ch2/music.ogg"

type="audio/ogg">

<source src="http://htmlref.com/ch2/music.wav"

type="audio/wav">

</audio>

Page 87: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>HTML5 audio examples</title>

</head>

<body>

<h1>Simple Audio Examples</h1>

<h2>wav Format</h2>

<audio src="http://htmlref.com/ch2/music.wav" controls></audio>

<h2>ogg Format</h2>

<audio src="http://htmlref.com/ch2/music.ogg" controls></audio>

<h2>Multiple Formats and Fallback</h2>

<audio controls autobuffer autoplay>

<source src="http://htmlref.com/ch2/music.ogg" type="audio/ogg">

<source src="http://htmlref.com/ch2/music.wav" type="audio/wav">

<!--[if IE]>

<bgsound src="http://htmlref.com/ch2/music.wav">

<![endif]-->

</audio>

</body>

</html>

Page 88: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

Page 89: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 90: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Gráficos do Lado Cliente

• O elemento canvas é usado para renderizar gráficos simples como linhas, gráficos e outros elementos gráficos customizados do lado cliente

• Do ponto de vista de linguagem de marcação, a pouco que podemos fazer com uma tag <canvas> – Apenas colocamos elementos em uma página, atribuímos um

nome com o atributo id, e definimos as suas dimensões com os atributos height e width <canvas id="canvas" width="300" height="300">

<strong>Canvas Supporting Browser Required</strong>

</canvas>

• Note o conteúdo alternativo colocado dentro do elemento para navegadores que não dão suporte ao elemento

Page 91: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Gráficos do Lado Cliente

• Após colocarmos a tag <canvas> em um documento, o próximo passo é usar JavaScript para acessar e desenhar no elemento

• O exemplo a seguir captura o objeto por seu valor id e cria um contexto para desenho em duas dimensões:

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

• Uma vez que tenhamos o contexto para desenho, podemos empregar vários métodos para desenhar nele

• Por exemplo, um retângulo azul com tamanho 150x50 pixels, iniciando nas coordenadas 10,10:

context.strokeStyle = "blue";

context.strokeRect(10,10,150,50);

Page 92: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Gráficos do Lado Cliente

• De maneira similar, podemos usar o método fillRect(x,y,width,height) para criar um retângulo sólido:

context.fillRect(150,30,75,75);

• Por padrão, a cor de preenchimento é preta, mas podemos definir uma cor diferente usando o método fillColor():

context.fillStyle = "rgb(218,0,0)";

• Podemos também usar funções de cores em CSS: context.fillStyle = "rgba(218,112,214,0.4)";

Page 93: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>HTML5 canvas example</title>

<script type="text/javascript">

window.onload = function() {

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

context.strokeStyle = "orange";

context.strokeRect(10,10,150,50);

context.fillStyle = "rgba(218,0,0,0.4)";

context.fillRect(150,30,75,75);

}

</script>

</head>

<body>

<h1>Simple Canvas Examples</h1>

<canvas id="canvas" width="300" height="300">

<strong>Canvas Supporting Browser Required</strong>

</canvas>

</body>

</html>

Page 94: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

Page 95: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Desenhando Linhas e Formas

• HTML5 define uma API completa para desenhar em um elemento canvas, composta de muitas sub-APIs para tarefas comuns

• Por exemplo, para fazer formas mais complexas, a API path pode ser usada – Ela armazena uma coleção de subpaths, formada por várias funções

de formas e conecta os subpaths via chamadas a fill() ou stroke()

– Para iniciar um caminho, context.beginPath() é chamada

– Em seguida, qualquer variedade de chamadas de formas pode ocorrer para adicionar um subpath à coleção

– Uma vez que todos subpaths foram adicionados, context.closePath() pode opcionalmente ser chamada para fechar o laço

– Então fill() ou stroke() também irão mostrar o path como uma nova forma criada

Page 96: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

• O exemplo a seguir desenha uma forma em V usando lineTo():

context.beginPath();

context.lineTo(20,100);

context.lineTo(120,300);

context.lineTo(220,100);

context.stroke();

• Se adicionarmos context.closePath() antes de context.stroke(), então a forma em V se tornaria um triângulo, conectando o último ponto ao primeiro

• Da mesma forma, chamando fill() em vez de stroke(), o triângulo iria ser preenchido – Podemos chamar os dois em qualquer forma para termos uma

linha em torno de uma região preenchida

Page 97: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

• Para mudar o estilo do desenho, podemos especificar fillStyle e strokeStyle, e também definir a largura da linha com lineWidth:

context.strokeStyle = "blue";

context.fillStyle = "red";

context.lineWidth = 10;

context.beginPath();

context.lineTo(200,10);

context.lineTo(200,50);

context.lineTo(380,10);

context.closePath();

context.stroke();

context.fill();

Page 98: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

Page 99: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>HTML5 canvas lines and shapes example</title>

<script type="text/javascript">

window.onload = function() {

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

<!-- Triângulo -->

context.strokeStyle = "blue";

context.fillStyle = "red";

context.lineWidth = 10;

context.beginPath();

context.lineTo(200,10);

context.lineTo(200,50);

context.lineTo(380,10);

context.closePath();

context.stroke();

context.fill();

...

Page 100: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

...

<!-- Quadrado -->

var lg = context.createLinearGradient(10, 150, 200, 200);

lg.addColorStop(0, "#B03060");

lg.addColorStop(0.5, "#4169E1");

lg.addColorStop(1, "#FFE4E1");

context.fillStyle = lg;

context.beginPath();

context.rect (10, 150, 200, 200);

context.fill();

...

Page 101: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

...

<!-- Círculo -->

var rg = context.createRadialGradient(50,50,10,60,60,50);

rg.addColorStop(0, "#A7D30C");

rg.addColorStop(0.9, "#019F62");

rg.addColorStop(1, "rgba(1,159,98,0)");

context.fillStyle = rg;

context.beginPath();

context.fillRect(0,0,130,230);

...

Page 102: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

...

<!-- V -->

context.beginPath();

context.lineTo(250,150);

context.lineTo(330,240);

context.lineTo(410,150);

context.stroke();

}

</script>

</head>

<body>

<h1>Simple Shapes on canvas Example</h1>

<canvas id="canvas" width="500" height="500">

<strong>Canvas Supporting Browser Required</strong>

</canvas>

</body>

</html>

Page 103: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Aplicando Alguma Perspectiva

Page 104: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Canvas Cube Example</title>

<style type="text/css" media="screen">

body {background-color: #E67B34;}

</style>

<script type="text/javascript" src="excanvas.js"></script>

<script type="text/javascript">

window.onload = function(){

var context = document.getElementById("canvas").getContext("2d");

context.fillStyle = "#fff";

context.strokeStyle = "black";

context.beginPath();

context.moveTo(188, 38);

context.lineTo(59, 124);

context.lineTo(212, 197);

context.lineTo(341, 111);

context.lineTo(188, 38);

context.closePath();

context.fill();

context.stroke();

...

Page 105: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

context.fillStyle = "#ccc";

context.strokeStyle = "black";

context.beginPath();

context.moveTo(341, 111);

context.lineTo(212, 197);

context.lineTo(212, 362);

context.lineTo(341, 276);

context.lineTo(341, 111);

context.closePath();

context.fill();

context.stroke();

context.fillStyle = "#999";

context.strokeStyle = "black";

context.beginPath();

context.moveTo(59, 289);

context.lineTo(59, 124);

context.lineTo(212, 197);

context.lineTo(212, 362);

context.lineTo(59, 289);

context.closePath();

context.fill();

context.stroke();

}

...

Page 106: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

</script>

</head>

<body>

<h1>Canvas Perspective</h1>

<canvas id="canvas" width="400" height="400">

<strong>Canvas Supporting Browser Required</strong>

</canvas>

</body>

</html>

Page 107: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Desenhando Arcos e Curvas

• É possível criar linhas curvas usando arc(), arcTo(), quadraticCurveTo() e bezierCurveTo()

• Podermos usar o método arc(x,y, radius, startAngle, endAngle, counterclockwise) para desenhar círculos ou partes de círculos – A sua localização é determinada pelo ponto do seu centro (x,y)

bem como pelos seu raio (radius)

– O quanto deve ser desenhado é definido pelo ângulo inicial (startAngle) e final (endAngle) em radianos

– A direção da curva é determinada por um valor booleano (counterclockwise): se true, sentido anti-horário; caso contrário, sentido horário

• Para desenhar um círculo completo: context.arc(150,150,100,0,Math.PI*2,true);

Page 108: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Desenhando Arcos e Curvas

• O método quadraticCurveTo(cpx, cpy, x, y) inicia no último ponto no path e desenha uma linha até (x, y)

– Os pontos de controle (cpx, cpy) é usada para puxar a linha nesta direção, resultando em uma linha curvada

– Devemos chamar moveTo() inicialmente, para determinar o último ponto do path

– No exemplo a seguir, a linha é desenhada de (155,130) até (155,155), como as coordenadas do ponto de controle (130,145) são à esquerda e no centro, a linha é puxada nesta direção context.moveTo(155,130);

context.quadraticCurveTo(130,145,155,155);

Page 109: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Desenhando Arcos e Curvas

• O método bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) é similar a quadraticCurveTo() exceto pelo fato de possuir dois pontos de controle e a linha ser puxada para ambos:

context.moveTo(80,110);

context.bezierCurveTo(95,85,115,85,130,110);

• Utilize arcTo(x1, y1, x2, y2, radius) para criar duas linhas e um arco com o raio especificado, contendo um ponto de tangência entre cada uma das linhas – A primeira linha é desenhada a partir do último ponto até (x1, y1) – A segunda linha é desenhada a partir de (x1, y1) até (x2, y2)

context.moveTo(50,20);

context.arcTo(280,20,280,280,30);

context.arcTo(280,280,20,280,30);

context.arcTo(20,280,20,20,30);

context.arcTo(20,20,280,20,30);

Page 110: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

Page 111: Curso de Desenvolvimento de Sistemas Web - (X)HTML

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Canvas Face Example</title>

<script type="text/javascript" src="excanvas.js"></script>

<script type="text/javascript">

window.onload = function(){

var canvas = document.getElementById('canvas');

var context = canvas.getContext('2d');

context.strokeStyle = "black";

context.lineWidth = 5;

/* create a frame for our drawing */

context.beginPath();

context.fillStyle = "blue";

context.moveTo(50, 20);

context.arcTo(280, 20, 280, 280, 30);

context.arcTo(280, 280, 20, 280, 30);

context.arcTo(20, 280, 20, 20, 30);

context.arcTo(20, 20, 280, 20, 30);

context.stroke();

context.fill();

...

Page 112: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

/* draw circle for head */

context.beginPath();

context.fillStyle = "yellow";

context.arc(150,150,100,0,Math.PI*2,true);

context.fill();

/* draw the eyes, nose and mouth */

context.beginPath();

context.moveTo(80,110);

context.bezierCurveTo(95, 85, 115, 85, 130, 110);

context.moveTo(170,110);

context.bezierCurveTo(185, 85, 205, 85, 220, 110);

context.moveTo(155,130);

context.quadraticCurveTo(130, 145, 155, 155);

context.moveTo(100,175);

context.quadraticCurveTo(150, 250, 200, 175);

context.moveTo(50, 20);

context.stroke();

}

</script>

</head>

...

Page 113: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

<body>

<h1>Smile you're on canvas</h1>

<canvas id="canvas" width="300" height="300">

<strong>Canvas Supporting Browser Required</strong>

</canvas>

</body>

</html>

Page 114: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Escala, Rotação e Transformação

• scale(x,y) – usada para mudar a escala de objetos

– O parâmetro x determina a escala na direção horizontal

– O parâmetro y determina a escala na direção vertical /* scale tall and thin */

context.scale(.5,1.5);

writeBoxes(context);

/* move short and wide */

context.scale(1.75,.2);

writeBoxes(context);

Page 115: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Escala Simples

Page 116: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

<script type="text/javascript">

window.onload = function(){

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

/* draw original boxes */

writeBoxes(context);

/* reset canvas and context */

canvas = document.getElementById("canvas2");

context = canvas.getContext("2d");

/* scale tall and thin */

context.scale(.5, 1.5);

writeBoxes(context);

/* reset canvas and context */

canvas = document.getElementById("canvas3");

context = canvas.getContext("2d");

/* move short and wide */

context.scale(1.75, .2);

writeBoxes(context);

}

...

Page 117: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

function writeBoxes(context){

context.fillStyle = "rgba(166,42,42,.4)";

context.beginPath();

context.fillRect (0, 0, 100, 100);

context.beginPath();

context.fillStyle = "rgba(74,118,110,.6)";

context.fillRect (50, 50, 100, 100);

context.beginPath();

context.fillStyle = "rgba(166,42,42,.4)";

context.fillRect (100, 100, 100, 100);

}

</script>

...

Page 118: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Escala, Rotação e Transformação

• rotate(angle) – usado para rotacionar um desenho na direção horária por um ângulo definido em radianos:

/* rotate to the right */

context.rotate(Math.PI/8);

writeBoxes(context);

/* rotate to the left */

context.rotate(-Math.PI/8);

writeBoxes(context);

Page 119: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Rotação Simples

Page 120: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

<script type="text/javascript">

window.onload = function(){

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

/* rotate to the right */

context.rotate(Math.PI/8);

writeBoxes(context);

/* reset canvas and context */

canvas = document.getElementById("canvas2");

context = canvas.getContext("2d");

/* rotate to the left */

context.rotate(-Math.PI/8);

writeBoxes(context);

}

...

Page 121: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Escala, Rotação e Transformação

• translate(x,y) – modifica a origem de (0,0) para uma outra localização no desenho

– O exemplo a seguir modifica a origem para (100,100)

– Assim, quando as coordenadas iniciais do retângulo são especificadas em (0,0), na verdade é iniciada em (100,100) context.translate(100,100);

context.fillRect(0,0,100,100);

Page 122: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Mudança Simples

Page 123: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

<script type="text/javascript">

window.onload = function(){

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

/* translate to the bottom right */

context.translate(100, 100);

writeBoxes(context);

/* reset canvas and context */

canvas = document.getElementById("canvas2");

context = canvas.getContext("2d");

/* move a bit off top left */

context.translate(-20, -10);

writeBoxes(context);

}

Page 124: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Escala, Rotação e Transformação

• setTransform(m11,m12,m21,m22,dx,dy) – modifica a matriz identidade com os parâmetros dados

Page 125: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

<script type="text/javascript">

window.onload = function(){

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

context.fillStyle = "rgba(255,0,0,.4)";

context.rect (0, 0, 100, 100);

context.fill();

context.setTransform(1, 1, 1 ,0, 0, 0);

context.beginPath();

context.fillStyle = "rgba(0,255,0,.4)";

context.rect (75, 75, 100, 100);

context.fill();

context.setTransform(0, .5, 1 ,.8, 0, 0);

context.beginPath();

context.fillStyle = "rgba(0,0,255,.4)";

context.rect (50, 50, 100, 100);

context.fill();

}

</script>

...

Page 126: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Utilizando Bitmaps em Desenhos

• Uma característica muito interessante de canvas é a habilidade para inserir imagens em desenhos

• Existem várias maneiras de fazer isso, a mais básica, drawImage(img, x, y), recebe um objeto de imagem e as coordenadas onde a imagem será colocada em seu tamanho natural – Podemos usar drawImage(img,x,y,w,h) se quisermos modificar o

tamanho da imagem, atribuindo o comprimento (w) e a altura (h)

• A imagem passada como parâmetro pode vir de vários locais:

– Uma imagem já carregada na página

– Dinamicamente criada através do DOM

– Um outro objeto canvas

– Uma imagem criada atribuindo-se seu src para uma variável (URL)

Page 127: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Utilizando Bitmaps em Desenhos

• É importante lembrar que a imagem deve ser carregada a tempo do canvas estar pronto para acessá-la

– Isto querer o uso da função onload para a imagem var img = new Image();

img.onload = function(){

context.drawImage(img,0,0,400,400);

}

img.src = "dog.jpg";

Page 128: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Utilizando Bitmaps em Desenhos

• drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh) pode ser chamada para que parte da imagem seja removida e desenhada no canvas

– As coordenadas (sx, sy) representam a localização na imagem

– sw e sh são o comprimento e a altura, respectivamente

– Os restos dos parâmetros (d?), são os mesmos do formato anterior var img = document.getElementById("image1");

/* slices a 100px square from image1 at location (200,75)

Places on the canvas at (50,50) and stretches it to 300px

square. */

context.drawImage(img,200,75,100,100,50,50,300,300);

Page 129: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Utilizando Bitmaps em Desenhos

• Uma vez que a imagem esteja no canvas, é possível desenhar sobre ela

• O exemplo a seguir carrega uma imagem e desenha uma região em preparação para eventualmente adicionar uma legenda

Page 130: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

<script type="text/javascript">

window.onload = function(){

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

var img = new Image();

img.src = "dog.jpg";

img.onload = function(){

context.lineWidth = 5;

context.drawImage(img,0,0,400,400);

context.beginPath();

context.lineWidth = 5;

context.fillStyle = "orange";

context.strokeStyle = "black";

context.rect(50,340,300,50);

context.fill();

context.stroke();

}

}

</script>

...

Page 131: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Suporte de Texto para canvas

• Podemos escrever texto usando fillText(text,x,y [,maxWidth]) ou strokeText(text,x,y [,maxWidth])

– Ambas as funções recebem um parâmetro final opcional, maxWidth, que irá cortar o texto se seu comprimento for maior que o especificado

• Tanto fillText() como strokeText() serão utilizados para mostrar uma linha ao redor do texto

• No exemplo a seguir utilizamos uma cor de preenchimento azul com uma linha preta ao redor das letras:

context.fillStyle = "rgb(0,0,255)";

context.strokeStyle = "rgb(0,0,0)";

context.fillText("Canvas is great!",10,40);

context.strokeText("Canvas is great!",10,40);

Page 132: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Suporte de Texto para canvas

• Para um texto mais customizado, podemos usar a propriedade font, da mesma forma que em CSS

• Podemos usar textAlign e textBaseline para atribuir o alinhamento horizontal e vertical do texto

– textAlign tem como valores possíveis: start, end, left, right e center

– textBaseline tem como valores possíveis: top, hanging, middle, alphabetic, ideographic e bottom context.font = "bold 30px sans-serif";

context.textAlign = "center";

context.textBaseline = "middle";

Page 133: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Suporte de Texto para canvas

• Podemos adicionar sombras a formas simplesmente atribuindo as propriedades de sombra shadowOffsetX, shadowOffsetY, shadowBlur, e shadowColor

– Os valores de offset simplesmente indicam a distância da sombra da imagem: números positivos faz com que a sombra apareça a direita e abaixo, números negativos faz com que a sombra apareça a esquerda e acima

– A propriedade shadowBlur indica o quão embaçada a sombra será

– A propriedade shadowColor indica a cor da sombra

context.shadowOffsetX = 10;

context.shadowOffsetY = 5;

context.shadowColor = "rgba(255,48,48,0.5)";

context.shadowBlur = 5;

context.fillStyle = "red";

context.fillRect(100,100,100,100);

Page 134: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

Page 135: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

<script type="text/javascript">

window.onload = function(){

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

var img = new Image();

img.src = "dog.jpg";

img.onload = function(){

context.lineWidth = 5;

context.drawImage(img,0,0,400,400);

context.beginPath();

context.lineWidth = 5;

context.fillStyle = "orange";

context.strokeStyle = "black";

context.rect(50,340,300,50);

context.fill();

context.stroke();

...

Page 136: Curso de Desenvolvimento de Sistemas Web - (X)HTML

...

context.lineWidth = 2;

context.font = '40px sans-serif';

context.strokeStyle = "black";

context.fillStyle = "white";

context.fillText("Canvas is great!", 60, 375);

context.shadowOffsetX = 10;

context.shadowOffsetY = 5;

context.shadowColor = "rgba(0, 48, 48, 0.5)";

context.shadowBlur = 5;

context.strokeText("Canvas is great!", 60, 375);

}

}

</script>

...

Page 137: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 138: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Novos Tipos de Campos de Formulários

• Tradicionalmente, o elemento input de HTML é usado para definir a maioria dos campos de formulários

– O tipo em particular do campo de interesse é definido pelo atributo type, o qual é atribuído text, password, hidden, checkbox, radio, submit, reset, image ou button

• HTML5 adiciona vários outros valores que serão vistos aqui

Page 139: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Seletor de Cor

• Atribuindo type igual a color deverá criar um seletor de cores <p><label>color:<input type="color" name="favColor">

</label></p>

Page 140: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Seletores de Data e Hora

• Uma variedade de controles de data podem ser diretamente criados através do atributo type: – date

– datetime

– datetime-local

– month

– week

– time

• Isto deveria restringir a escolha de datas, mas qualquer restrição também pode ser feita através de script

Page 141: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Seletores de Data e Hora

<p><label>date:

<input type="date" name="date"></label></p>

<p><label>datetime:

<input type="datetime" name="datetime"></label></p>

<p><label>datetime-local:

<input type="datetime-local" name="datetime2">

</label></p>

<p><label>time:

<input type="time" name="time"></label></p>

<p><label>month:

<input type="month" name="month"></label></p>

<p><label>week:

<input type="week" name="week"></label></p>

Page 142: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Seletores de Data e Hora

Page 143: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Seletor de Números

• Atribuindo a type o valor number, mostra uma spin box de valor numérico

<p><label>number:<input type="number"

name="number"></label></p>

• Sem restrição, a spin box não imporá limites, embora seja possível definir valores permitidos

– Utilize os atributos max, min, ou ainda step (salto) <input type="number" name="number2" min="-5"

max="25" step="5">

Page 144: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Slider

• Um controle similar a number pode ser criado com range: <input type="range" name="range" max="100" min="1"

step="5">

• Da mesma forma que number, os atributos min, max e step

podem ser usados para limitar valores: <p><label>range (1-100 step 5):

<input type="range" name="range" max="100" min="1"

step="5">

</label></p>

<p><label>range (-1000-1000 step 100):

<input type="range" name="range" max="1000" min="-

1000" step="100">

</label></p>

Page 145: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outras Restrições Semânticas

• Conseguidas atribuindo tel, email ou url ao atributo type da tag <input>:

<p><label>Telephone Number: <input type="tel"

name="telno"></label></p>

<p><label>Email: <input type="email" name="email">

</label></p>

<p><label>URL: <input type="url" name="url">

</label></p>

• Observação:

– Não implementada pelo Google Chrome

– Apenas email e url atualmente implementadas pelo Mozilla Firefox

Page 146: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outras Restrições Semânticas

Page 147: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outras Restrições Semânticas

• Também é possível atribuir a type o valor search, que pode eventualmente ter uma lista associada

• Atualmente, alguns navegadores fornecem alguns controles para limpar o campo de busca:

<p><label>Search: <input type="search"

name="search"></label></p>

Page 148: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Validando a Entrada de Dados

• Podemos forçar a entrada de dados, sem recorrer a JavaScript, em navegadores compatíveis, atribuindo o atributo required para um controle de formulário:

<input type="text" name="firstname" id="firstname"

required>

– Não implementado no Google Chrome

Page 149: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Validando a Entrada de Dados

• O atributo pattern pode ser empregado para forçar a entrada de dados conforme uma expressão regular fornecida

<label for="phonenum" class="required">Phone

Number:</label>

<input type="text" name="phonenum" id="phonenum"

required pattern="^\(\d{2}\) \d{4}-\d{4}$">

Page 150: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Validando a Entrada de Dados

• Se title é especificado quando pattern é aplicado, o navegador pode mostrar uma informação de advertência:

<label for="phonenum" class="required">Phone

Number:</label>

<input type="text" name="phonenum" id="phonenum"

required pattern="^\(\d{2}\) \d{4}-\d{4}$"

title="Phone number of form (xx) xxxx-xxxx

required">

Page 151: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Validando a Entrada de Dados

• Em alguns casos, além de aplicar o padrão (pattern) podemos também atribuir o tipo de valor semântico apropriado, como em email

– Nesse caso não sabemos como o navegador irá se comportar

– No caso do Mozilla Firefox prevaleceu o tipo e não o padrão <label for="email" class="required">E-mail:</label>

<input type="text" name="email" id="email" required

pattern="^\w+([\.-]?\w+)*@\w+([\.-

]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|

biz|aero|name|coop|info|pro|museum))$" title="E-

mail format required">

Page 152: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Exemplo

Page 153: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 154: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Listas Autocompletar

• Em HTML5, o atributo list do elemento input é usado para indicar ao DOM uma id para um elemento de lista de dados (datalist) usado para fornecer uma listra predefinida de opções sugeridas para a entrada do usuário:

<p><label>Favorite Dog: <input type="text"

list="dogs"></label></p>

<datalist id="dogs">

<option>Angus</option>

<option>Tucker</option>

<option>Cisco</option>

<option>Sabrina</option>

</datalist>

• Similar ao atributo autocomplete discutido adiante, mas permite que especifiquemos dados padrões em vez do que foi digitado anteriormente no navegador

Page 155: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Melhorias de Usabilidade

• É comum autores de páginas Web utilizarem o atributo value para preencher com algum texto um campo de formulário:

<input type="text" name="firstname" id="firstname"

value="Thomas">

• Da mesma maneira, são colocados textos de aviso: <input type="text" name="middlename"

id="middlename"value="Enter your middle name here">

– Entretanto, usar value desta maneira é inapropriado porque o seu objetivo não é fornecer instruções sobre o uso do campo e sim fornecer um valor potencial para o usuário submeter ao servidor

Page 156: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Melhorias de Usabilidade

• HTML5 introduziu o atributo placeholder com essa finalidade:

<input type="text" name="firstname" id="firstname"

placeholder="Enter your name here">

• HTML5 também introduziu o atributo autofocus, que faz com que o navegador imediatamente transfira o foco para o campo quando a página é carregada:

<label>Search:<input type="search" name="query"

id="searchBox" autofocus></label>

• Também é possível avisar ao navegador para mostrar sugestões de auto completar (autocomplete) fornecidas para campos se nomes similares de campos foram usados no passado:

<input type="text" name="firstname" id="firstname"

placeholder="Enter your name here" autocomplete>

Page 157: Curso de Desenvolvimento de Sistemas Web - (X)HTML
Page 158: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Elementos e Atributos para Aplicações Web

• Um tema chave na especificação de HTML5 é a ênfase em dar suporte ao desenvolvimento de aplicações Web

• Vários elementos e atributos foram introduzidos na especificação para dar continuidade à migração de páginas Web para aplicações Web

• Alguns dos elementos apresentados aqui, uma vez que estas características ou ainda não são implementadas ou são ainda controversas, podem ser considerados apenas ilustrativos uma vez que mudanças em HTML podem encorajá-los ou em alguns casos, modificá-los ou removê-los – Lembrando que uma biblioteca JavaScript possivelmente

poderá simular o seu uso

Page 159: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Novo Propósito do Elemento menu

• Tradicionalmente este elemento era usado para criar um menu de escolhas simples, mas a maioria dos navegadores simplesmente o renderizavam como uma lista não ordenada:

<menu type="list" id="oldStyle">

<li>Item 1</li>

<li>Item 2</li>

<li>Item 3</li>

<li>Item 4</li>

</menu>

Page 160: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Novo Propósito do Elemento menu

• Em HTML5 o elemento menu retornou ao seu propósito original

• Um novo atributo type foi introduzido e pode assumir os valores toolbar, context ou list (o padrão)

• Este exemplo cria um menu File para uma aplicação Web: <menu type="toolbar" id="fileMenu" label="File">

<li><a href="javascript:newItem();">New</a></li>

<li><a href="javascript:openItem();">Open</a></li>

<li><a href="javascript:closeItem();">Close</a></li>

<hr>

<li><a href="javascript:saveItem();">Save</a></li>

<li><a href="javascript:saveAsItem();">Save as...

</a></li>

<hr>

<li><a href="javascript:exitApp();">Exit</a></li>

</menu>

Page 161: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Novo Propósito do Elemento menu

• Deveria renderizar...

• Mas...

Page 162: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Novo Propósito do Elemento menu

• Da mesma forma, deveria ser possível a definição de um menu de contexto, normalmente chamado por um clique no botão direito:

<menu type="context" id="simpleMenu">

<li><a href="javascript:add();">Add</a></li>

<li><a href="javascript:edit();">Edit</a></li>

<li><a href="javascript:delete();">Delete</a></li>

</menu>

• Que deveria se parecer com:

Page 163: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Novo Propósito do Elemento menu

• O atributo global contextmenu é usado para definir um elemento com um menu de contexto

– O valor do atributo deve ser uma string que referencia o id de uma tag <menu> existente no DOM

• Por exemplo, <div contextmenu="simpleMenu">Widget</div>

– Deveria referenciar o menu previamente definido com id

simpleMenu

Page 164: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Elemento command

<menu type="command" label="Main Menu">

<command type="command" label="Add" icon="add.png">

<command type="command" label="Edit" icon="edit.png">

<command type="command" label="Delete" icon="delete.png">

<hr>

<menu type="command" label="Skin" id="skinMenu">

<command type="radio" radiogroup="skin" label="Classic">

<command type="radio" radiogroup="skin"

label="Modern" checked>

<command type="radio" radiogroup="skin" label="Neo">

</menu>

<hr>

<command type="checkbox" label="Secure Mode">

</menu>

Page 165: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Outros Elementos

• Outros elementos que foram introduzidos por HTML5 incluem:

– meter

– progress

– detail

– output

Page 166: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Arrastar e Soltar

Page 167: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Atributo contenteditable

• Permite modificar o texto diretamente ao clicar no texto: <p contenteditable="true">This paragraph of text is editable.

Click it and you will see. Of course there is no sense of saving

it with code to transmit the information to the server. This

paragraph of text is editable. Click it and you will see. Of

course there is no sense of saving it with code to transmit the

information to the server.</p>

Page 168: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Atributo contenteditable

• Modificando o estilo usando JavaScript para alterar a nome da classe: <p ondblclick="this.contentEditable=true;this.className='inEdit';"

onblur="this.contentEditable=false;this.className='';">This

paragraph uses some simple script to be editable. Double-click the

text to begin editing.</p>

Page 169: Curso de Desenvolvimento de Sistemas Web - (X)HTML

Ainda Outros...

• Caso tenha interesse:

– Atributo spellcheck (correção de erros)

– Internacionalização

– Metadados (permitir/aprimorar processamento por máquina)

– Atributo defer (para melhorar renderização da página)

– ...

Page 170: Curso de Desenvolvimento de Sistemas Web - (X)HTML

UNIVERSIDADE ESTADUAL DO SUDOESTE DA BAHIA CURSO DE CIÊNCIA DA COMPUTAÇÃO

DESENVOLVIMENTO DE SISTEMAS WEB – 2014.1

Fábio M. Pereira

([email protected])