Aplicações para WEB
Transcrição
Aplicações para WEB
Centro Federal de Educação Tecnológica de Minas Gerais Técnico em Informática Aplicações para WEB Aplicações para WEB Professor: Marcelo Corrêa Mussel Varginha 2016 . Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Sumário 1 HTML 1.1 Introdução . . . . . . . . . . . . . . . . . . 1.2 Sintaxe HTML . . . . . . . . . . . . . . . 1.3 Elementos HTML . . . . . . . . . . . . . . 1.3.1 html . . . . . . . . . . . . . . . . . 1.3.2 head . . . . . . . . . . . . . . . . . 1.3.3 title . . . . . . . . . . . . . . . . . 1.3.4 meta . . . . . . . . . . . . . . . . . 1.3.5 body . . . . . . . . . . . . . . . . . 1.3.6 h1-h6 . . . . . . . . . . . . . . . . 1.3.7 p . . . . . . . . . . . . . . . . . . . 1.3.8 a . . . . . . . . . . . . . . . . . . . 1.3.9 ul e li . . . . . . . . . . . . . . . . 1.3.10 ol e li . . . . . . . . . . . . . . . . 1.3.11 dl, dt e dd . . . . . . . . . . . . . . 1.3.12 div . . . . . . . . . . . . . . . . . . 1.3.13 span . . . . . . . . . . . . . . . . . 1.3.14 b e strong . . . . . . . . . . . . . . 1.3.15 i e em . . . . . . . . . . . . . . . . 1.3.16 small . . . . . . . . . . . . . . . . . 1.3.17 code . . . . . . . . . . . . . . . . . 1.3.18 hr . . . . . . . . . . . . . . . . . . 1.3.19 br . . . . . . . . . . . . . . . . . . 1.3.20 img . . . . . . . . . . . . . . . . . 1.3.21 article . . . . . . . . . . . . . . . . 1.3.22 section . . . . . . . . . . . . . . . . 1.3.23 header . . . . . . . . . . . . . . . . 1.3.24 footer . . . . . . . . . . . . . . . . 1.3.25 aside . . . . . . . . . . . . . . . . . 1.3.26 nav . . . . . . . . . . . . . . . . . . 1.3.27 main . . . . . . . . . . . . . . . . . 1.3.28 audio . . . . . . . . . . . . . . . . 1.3.29 video . . . . . . . . . . . . . . . . . 1.4 Favicon - Como colocar imagem no title . 1.5 Table . . . . . . . . . . . . . . . . . . . . . 1.5.1 Inserindo um título na tabela . . . 1.5.2 Caption . . . . . . . . . . . . . . . 1.5.3 Criando linhas na tabela - tr . . . 1.5.4 Criando colunas - th, td . . . . . . 1.5.5 Cabeçalho e Rodapé - thead, tfoot 1.5.6 Tag tbody . . . . . . . . . . . . . . 1.5.7 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 7 9 9 9 9 9 9 9 9 9 9 10 10 11 11 12 12 12 12 13 13 13 14 14 14 15 15 15 16 16 16 16 17 17 17 17 17 17 18 18 2 CSS 2.1 Definição . . . . . . . . . . . . . . . . . . . 2.2 Regra CSS . . . . . . . . . . . . . . . . . . . 2.3 Modelo de formatação CSS . . . . . . . . . 2.3.1 Box Model CSS . . . . . . . . . . . . 2.3.2 Box Model CSS modificado . . . . . 2.3.3 Propriedades CSS para o Box Model 2.4 Categorias de valores CSS . . . . . . . . . . 2.4.1 Palavra-chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 20 20 21 22 23 24 27 27 Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 2.4.2 Número . . . . . . . . . . . . . . . 2.4.3 Número não negativo . . . . . . . . 2.4.4 Número com unidade de medida . 2.4.5 String . . . . . . . . . . . . . . . . 2.4.6 Notação funcional . . . . . . . . . 2.4.7 Casos especiais . . . . . . . . . . . 2.5 Cores CSS . . . . . . . . . . . . . . . . . . 2.6 Vinculando folhas de estilo a documentos 2.6.1 Estilos inline . . . . . . . . . . . . 2.6.2 Estilos incorporados . . . . . . . . 2.6.3 Estilos externos . . . . . . . . . . . 2.7 Exemplos de utilização das CSS3 . . . . . 2.7.1 Menu Drop-Down . . . . . . . . . . 2.7.2 Abas . . . . . . . . . . . . . . . . . 2.7.3 Botões . . . . . . . . . . . . . . . . 2.8 DOM e seletores CSS . . . . . . . . . . . . 2.8.1 DOM . . . . . . . . . . . . . . . . 2.8.2 Árvore do DOM . . . . . . . . . . 2.8.3 Seletores CSS . . . . . . . . . . . . 2.9 Flutuando elementos (floats) . . . . . . . . 2.9.1 Como isto é feito ? . . . . . . . . . 2.9.2 Outro exemplo : colunas . . . . . . 2.9.3 A propriedade clear . . . . . . . . 2.10 Posicionando elementos . . . . . . . . . . 2.10.1 O princípio de posicionamento CSS 2.10.2 Posicionamento absoluto . . . . . . 2.10.3 Posicionamento relativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 27 27 29 29 29 30 31 31 31 31 32 32 35 37 39 39 39 42 46 46 46 47 48 48 48 49 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 52 54 56 58 4 Javascript 4.1 Variáveis . . . . . . . . . . . . . . . . . . . . 4.2 Tipos . . . . . . . . . . . . . . . . . . . . . 4.3 Iteração . . . . . . . . . . . . . . . . . . . . 4.4 Interatividade na Web . . . . . . . . . . . . 4.5 Validação na busca com JavaScript . . . . . 4.6 Funções temporais . . . . . . . . . . . . . . 4.6.1 Exemplo: Banner rotativo . . . . . . 4.6.2 Desafio 1 . . . . . . . . . . . . . . . 4.6.3 Proposta de solução para o desafio 1 4.6.4 Desafio 2 . . . . . . . . . . . . . . . 4.6.5 Proposta de solução para o desafio 1 4.7 jQuery . . . . . . . . . . . . . . . . . . . . . 4.7.1 Características de execução . . . . . 4.7.2 jQuery Selectors . . . . . . . . . . . 4.7.3 Filtrando elementos com jQuery . . 4.7.4 Efeitos de exibir e esconder conteúdo 4.7.5 Utilitário de iteração do jQuery . . . 4.7.6 Executar somente após carregar . . . 4.8 Exemplos de utilização jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 62 62 63 63 65 67 67 68 68 69 69 71 71 72 74 76 77 77 78 3 Construindo um exemplo 3.1 Arquivo: index.html . . 3.2 Arquivo: sobre.html . . 3.3 Arquivo: contato.html . 3.4 Arquivo: layout.css . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 4.8.1 4.8.2 4.8.3 Exemplo 1 - carregamento de páginas dinâmico . . . . . . . . . . . . . . . . . . Exemplo 2 - janela modal simples . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo 3 - método load() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Bibliografia 78 81 83 89 . Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1 HTML 1.1 Introdução HTML é a sigla em inglês para HyperText Markup Language, que significa linguagem para marcação de hipertexto. Portanto, HTML não deve ser equivocadamente chamado de linguagem de programação. Hipertexto é todo texto inserido em um documento para a web e que tem como principal característica a possibilidade de se interligar a outros documentos da web através da utilização de links. Quando a HTML foi inventada, em 1992 por Tim Berners-Lee, os conteúdos eram essencialmente hipertextos, com a hipermídia (imagens, vídeos, gráficos, sons e conteúdos não textuais) surgindo posteriormente. Assim, hoje, a HTML é uma linguagem para marcação de conteúdos web em geral. Desde a sua invenção a HTML evoluiu por oito versões que são: • HTML • HTML+ • HTML 2.0 • HTML 3.0 • HTML 3.2 • HTML 4.0 • HTML 4.01 • HTML5 Tecnicamente, o W3C considera oficialmente somente as versões HTML 2.0, HTML 3.2, HTML 4.0, HTML 4.01 e HTML5. As versões HTML e HTML+ são anteriores à criação do W3c e a versão 3.0 não chegou a ser lançada oficialmente, transformando-se na versão 3.2. O World Wide Web Consortium, ou W3C, é um consórcio internacional com quase 400 membros, entre eles, empresas, órgãos governamentais e organizações independentes que têm por objetivo definir padrões destinados à criação de conteúdos para a web. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1.2 Sintaxe HTML Para iniciar a exploração do HTML, vamos imaginar o seguinte caso: o navegador realizou uma requisição e recebeu como corpo da resposta o seguinte conteúdo: Centro Federal de Educação Tecnológica Bem-vindo ao CEFET-MG unidade Varginha. Confira os cursos oferecidos em nossa unidade: Técnico em Informática. Técnico em Edificações. Técnico em Mecatrônica. Engenharia Civil. Para conhecer o comportamento dos navegadores quanto ao conteúdo descrito antes, vamos reproduzir esse conteúdo em um arquivo texto comum, que pode ser criado com qualquer editor de texto puro. Salve o arquivo como index.html e abra-o a partir do navegador à sua escolha. Figura 1: Documento sem formatação (marcação HTML) O resultado não foi o esperado. Apesar do navegador ser capaz de exibir texto puro, algumas regras devem ser seguidas caso desejemos que esse texto seja exibido com alguma formatação, para facilitar a leitura pelo usuário final. Para que possamos exibir as informações desejadas com a formatação, é necessário que cada trecho de texto tenha uma marcação indicando qual é o significado dele. Essa marcação também influencia a maneira com que cada trecho do texto será exibido. A seguir é listado o texto com uma marcação correta: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <! D O C T Y P E html > < html lang = " pt - br " > < head > < title > Centro F e d e r a l de E d u c a ç ã o Tecnológica </ title > < meta c h a r s e t=" utf -8 " > </ head > < body > <h1 > Centro F e d e r a l de E d u c a ç ã o Tecnológica </ h1 > <h2 > Bem - vindo ao CEFET - MG u n i d a d e V a r g i n h a . </ h2 > <p > C o n f i r a os cursos o f e r e c i d o s em nossa u n i d a d e : </p > <ul > <li > T é c n i c o em I n f o r m á t i c a . </ li > <li > T é c n i c o em E d i f i c a ç õ e s . </ li > <li > T é c n i c o em M e c a t r ô n i c a . </ li > <li > E n g e n h a r i a Civil . </ li > </ ul > </ body > </ html > Reproduza o código anterior em um novo arquivo de texto puro e salve-o como index-2.html. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Figura 2: Documento formatado (com marcação HTML) Código comentado: Linha Linha 1 Linhas 2 e 18 Linhas 3 e 6 Linha 4 Linha 5 Linhas 7 e 17 Linhas 8 e 9 Linha 10 Linhas 11 a 16 Descrição Declaração do tipo de documento (doctype). Essa linha informa ao navegador que a marcação a seguir é do tipo HTML. A declaração de DOCTYPE não é uma tag HTML. Tags de abertura e fechamento html. Esse é o chamado elemento raiz do documento,e é quem engloba toda a marcação HTML. Na tag de abertura desse elemento, linha 2, existe a declaração lang=”pt-br”. Isso é o que denominamos par atributo/valor sendo lang o atributo e pt-br o seu valor. Essa declaração é muito importante para fornecer informação do idioma em que a página foi escrita para tecnologias assistivas, tal como um leitor de tela que, sabendo o idioma, poderá ler a tela com a pronúncia adequada. Tags de abertura e fechamento do elemento head. Essa é a chamada seção HEAD do documento, e, dentro dela, são admitidos vários outros elementos HTML, entre eles, no mínimo os dois elementos conforme descritos a seguir. Tags de abertura e fechamento do elemento title. Ele se destina a ter como conteúdo o título do documento, importante para que mecanismos de busca e indexação, encontrem-na. Tag meta destina-se a fornecer informações adicionais sobre o documento. No nosso exemplo, indicamos a codificação utf-8, e essa declaração é de uso obrigatório na seção HEAD do documento. Tags de abertura e fechamento do elemento body. Tudo o que estiver nessa seção será renderizado pelo navegador e mostrado para o usuário. As tags de heading são tags de conteúdo e vão de <h1> a <h6>, seguindo a ordem de importância, sendo <h1> o título principal, o mais importante, e <h6> o título de menor importância. Utilizamos, por exemplo, a tag <h1> para o nome, título principal da página, e a tag <h2> como subtítulo ou como título de seções dentro do documento. A ordem de importância, além de influenciar no tamanho padrão de exibição do texto, tem impacto nas ferramentas que processam HTML. As ferramentas de indexação de conteúdo para buscas, como o Google, Bing ou Yahoo! levam em consideração essa ordem e relevância. Os navegadores especiais para acessibilidade também interpretam o conteúdo dessas tags de maneira a diferenciar seu conteúdo e facilitar a navegação do usuário pelo documento. marcação mais indicada para textos comuns é a tag de parágrafo. Se você tiver vários parágrafos de texto, use várias dessas tags <p> para separá-los. Criação de uma Lista não Numerada Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1.3 1.3.1 Elementos HTML html Ele é o elemento raiz do documento que engloba as seções HEAD e BODY. 1.3.2 head Ele se destina a marcar a seção cabeçalho do documento. Veremos mais adiante que é nesta seção que definiremos, ou indicaremos o caminho, dos códigos JavaScript e CSS. 1.3.3 title Se destina a marcar o título do documento. 1.3.4 meta Se destina a fornecer informações adicionais sobre o documento, tais como a codificação de caracteres, o nome do autor e outras. 1.3.5 body Tudo que está dentro dessa seção será renderizado pelo agente de usuário (por exemplo: navegador). 1.3.6 h1-h6 Eles são do tipo nível de bloco e destinam-se a marcaros textos de títulos e subtítulos dos conteúdos do documento. 1.3.7 p Ele é do tipo nível de bloco e se destina a marcar parágrafos. 1.3.8 a Esse elemento é do tipo inline e se destina a marcar links. Exemplo: 1 <a href = " http :// v a r g i n h a. c e f e t m g. br " > CEFET - MG U n i d a d e Varginha </a > Essa marcação cria um link para o site da Unidade Varginha do CEFET-MG. O atributo href possui o valor com o endereço que será carregado quando o usuário clicar no link. 1.3.9 ul e li Esses elementos são do tipo nível de bloco e se destinam a marcar listas que são chamadas de listas não ordenadas, ou não numeradas. Exemplo: 1 2 3 4 5 6 <ul > <li > Carros </ li > <li > Cores </ li > <li > Frutas </ li > <li > Paises </ li > </ ul > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Essa marcação cria uma lista com quatro itens. No início de cada item da lista é renderizado, por padrão, um círculo (bolinha cheia) que se denomina bullet. Na sintaxe para marcação de listas, o elemento ul é um container para os elementos li que marcam cada item da lista. É possível criar listas aninhadas, nas quais um item da lista pode conter subitens e estes seus subitens e assim indefinidamente em diversos níveis de aninhamento. Exemplo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <ul > <li > Carros <ul > <li > Honda </ li > <li > Audi </ li > <li > Ferrari </ li > </ ul > </ li > <li > Cores </ li > <li > Frutas <ul > <li > Abacate </ li > <li > Laranja </ li > <ul > <li > Lima </ li > <li > Seleta </ li > <li > Baía </ li > </ ul > <li > Uva </ li > </ ul > </ li > <li > Paises </ li > </ ul > 1.3.10 ol e li Esses elementos são do tipo nível de bloco e se destinam a marcar listas que são chamadas de listas ordenadas ou numeradas. Notar que o container para listas ordenadas é ol e a marcação é semelhante à mostrada anteriormente. A diferença é que, em lugar dos bullets gráficos, as listas ordenadas são renderizadas com números ou opcionalmente com outros tipos de marcador de ordenação. 1.3.11 dl, dt e dd Esses elementos são do tipo nível de bloco e se destinam a marcar listas que são chamadas de listas de definição. Exemplo: 1 2 3 4 5 6 7 8 9 10 <dl > <dt > Heavy Metal </ dt > <dd > Iron Maiden </ dd > <dd > Black Sabbath </ dd > <dd > Metallica </ dd > <dt > Progressivo </ dt > <dd > Jethro Tull </ dd > <dd > Pink Floyd </ dd > <dd > Rush </ dd > <dt > Blues </ dt > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 11 12 13 14 <dd > B . B . King </ dd > <dd > Robert Johnson </ dd > <dd > Allman Brothers </ dd > </ dl > O container geral de uma lista de definição é o elemento dl. Essa marcação cria uma lista de definição com três itens chamados de termos de definição (elementos dt) cada um deles com um ou mais termos descritivos (elementos dd). 1.3.12 div Esse é um elemento do tipo nível de bloco e se destina a criar um container geral para outros elementos. É um elemento sem destinação específica, ou seja, diferentemente dos elementos h1 e p, por exemplo, que se destinam a marcar cabeçalhos de nível 1 e parágrafos respectivamente, esse elemento pode conter (marcar) qualquer outro elemento em qualquer quantidade e até mesmo outros elementos div. Elementos com essas características são chamados de elementos sem valor semântico. Semântica é um aspecto de alta relevância em marcação HTML e diz respeito ao correto uso do elemento para marcar conteúdo. Exemplo: 1 2 3 4 < div > <h3 > Informativo </ h3 > <p > Este site destina - se a f o r n e c e r d e t a l h e s sobre .... </p > </ div > Nesse exemplo, a presença do container div em nada altera a renderização do cabeçalho de nível 3 e do parágrafo. Para efeito de renderização é como se o elemento div não estivesse presente na marcação. Então para que serve o div ? Conforme veremos adiante, o div poderá servir, entre outras inúmeras coisas, para determinar a região do documento que receberá uma formatação específica com o uso da CSS (bordas, fundo colorido ...). 1.3.13 span Esse é um elemento do tipo inline e destina-se a criar um container geral para outros elementos inline. É um elemento sem destinação específica e pode conter (marcar) qualquer outro elemento inline em qualquer quantidade e até mesmo outros elementos span. Tal como o elemento div, esse elemento é sem valor semântico. A diferença deste para o elemento div é que se trata de um elemento inline enquanto div é um elemento nível de bloco. Exemplo: 1 <p > Texto de um p a r a g r a f o com < span > palavra </ span > m a r c a d a com o e l e m e n t o SPAN </ p > Nesse exemplo a presença do container span em nada altera a renderização do texto palavra contido no parágrafo. Para efeito de renderização é como se o elemento span não estivesse presente na marcação. Então para que serve span? Conforme veremos adiante, o span poderá servir, entre outras inúmeras coisas, como uma espécie de caixa para que seu conteúdo seja renderizado em uma cor diferente, ou com um tamanho de letra diferente. Isso deverá ser feito com o uso das CSS. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1.3.14 b e strong Estes elementos são do tipo inline e causam o mesmo efeito de renderização, mas têm valor semântico diferente. Quando aplicados a um pequeno trecho de texto ou palavra, ambos causam renderização em negrito. Use o elemento b para dar aspecto visual negrito e use o elemento strong para dar forte ênfase. Para entender a diferença, suponha um internauta com visão normal e um internauta deficiente visual navegando com um leitor de tela. A marcação com o elemento b somente terá efeito (negrito) para o internauta com visão normal e a marcação com elemento strong terá efeito (negrito e forte ênfase) para os dois, pois além de negrito, o leitor de tela lerá o conteúdo de strong com voz em forte ênfase, e o internauta deficiente visual saberá que aquele trecho foi destacado pelo autor do documento. Exemplo: 1 2 <p > Texto u t i l i z a n d o <b > p a l a v r a em negrito </ b > m a r c a d a com o e l e m e n t o B </p > <p > Texto u t i l i z a n d o < strong > p a l a v r a com forte enfase </ strong > m a r c a d a com o e l e m e n t o STRONG </p > 1.3.15 i e em Esses elementos são do tipo inline e causam o mesmo efeito de renderização, mas têm valor semântico diferente. Quando aplicados a um pequeno trecho de texto ou palavra, ambos causam renderização em itálico. Use o elemento i para dar aspecto visual itálico às letras e use o elemento em para dar ênfase.A justificativa de uso é semelhante àquela descrita para os elementos b e strong no item anterior. Exemplo: 1 2 <p > Texto u t i l i z a n d o <i > p a l a v r a em italico </ i > m a r c a d a com o e l e m e n t o I </p > <p > texto u t i l i z a n d o <em > p a l a v r a com enfase </ em > m a r c a d a com o e l e m e n t o EM </p > 1.3.16 small Esse é um elemento do tipo inline e se destina a marcar pequenos trechos de texto. A renderização de textos marcados com esse elemento é feita com tamanho de fonte menor do que o do texto no qual foram marcados. Notas sobre direitos autorais no rodapé do site e pequenas notas de advertência são conteúdos para se marcar com o elemento small. Exemplo: 1 2 3 4 5 6 7 <h3 > V a l o r e s de diarias </ h3 > <dl > <dt > Quarto de solteiro </ dt > <dd > R$320 ,00 < small > cafe da manha incluso </ small > </ dd > <dt > Quarto de casal </ dt > <dd > R$490 ,00 < small > cafe da manha incluso </ small > </ dd > </ dl > 1.3.17 code Esse é um elemento do tipo inline e se destina a marcar trechos de código de computador ou qualquer string que um computador reconheça. Nomes de arquivo, nome de um programa de computador, nome de um elemento HTML, trechos de código tais como mostrados nos exemplos são conteúdos para se marcar com o elemento code. A renderização de textos marcados com esse elemento normalmente é Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel feita com tipo de fonte monoespaçada, diferente da fonte do texto no qual foram marcados. Exemplo: 1 <p > Os e l e m e n t o s < code > div </ code > e < code > span </ code > da HTML nao tem valor s e m a n t i c o . </ p > 1.3.18 hr Esse elemento é do tipo nível de bloco e destina-se a criar uma linha reta horizontal de 1px. Trata-se de um elemento vazio, isto é, existe apenas sua tag de abertura <hr>. A simples presença da tag de abertura é suficiente para criar uma linha horizontal. Exemplo: 1 2 3 <p > Trecho de um texto qualquer </ p > <hr > <! - - Cria uma linha h o r i z o n t a l entre os p a r a g r a f o s --> <p > Trecho de outro texto qualquer </ p > OBS: As tags <!– navegador. 1.3.19 –> criam um comentário no documento. Não são renderizadas pelo br Esse é um elemento vazio e existe apenas sua tag de abertura <br> e destina-se a criar uma quebra de linha. Múltiplos elementos br criam múltiplas quebras de linha. A simples presença da tag de abertura é suficiente para criar uma quebra de linha. Exemplo: 1 2 3 4 <p > P r i m e i r o Texto </ p > <p > S e g u n d o Texto </ p > <br > <br > <! - - cria duas q u e b r a s de linha a d i c i o n a i s entre os p a r a g r a f o s --> <p > T e r c e i r o Texto </ p > Não existe um elemento próprio para criar espaçamentos entre palavras (ou letras) de um texto. Existe o que chamamos de uma entidade HTML (caractere codificado) para obter tal efeito. Tratam-se das entidades e   que, quando colocadas entre palavras (ou letras) de um texto, criam um espaço em branco. Exemplo: 1 2 <! - - Insere quatro e s p a c o s em branco entre de e um --> <p > Texto de & nbsp ;& nbsp ;& nbsp ;& nbsp ; um paragrafo </ p > ou 1 2 <! - - Insere quatro e s p a c o s em branco entre de e um --> <p > Texto de & # 1 6 0 ; & # 1 6 0 ; & # 1 6 0 ; & # 1 6 0 ; um paragrafo </ p > 1.3.20 img Esse é um elemento inline e vazio e destina-se a inserir uma imagem no documento. O uso desse elemento exige no mínimo a inserção de dois atributos. Exemplo: 1 < img src = " imagem . jpg " alt = " imagem de uma p a i s a g e m q u a l q u e r" > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Esse exemplo insere uma imagem e o atributo src recebe como valor o endereço onde se encontra a imagem, e o atributo alt fornece uma descrição sumária da imagem. A descrição destina-se a ser lida pelos leitores de tela e outros softwares assistivos. Notar que até o leitor, mesmo sem ver a renderização, é capaz de fazer uma ideia de como seja a imagem. 1.3.21 article Esse é um elemento do tipo nível de bloco e destina-se a marcar conteúdos que possam ser distribuídos, reutilizados e entendidos isoladamente, como um post em um fórum, um comentário em blog, um widget interativo ou, finalmente, qualquer conteúdo independente de um documento. Exemplo: 1 2 3 4 5 < article > <h1 > C o m p u t a d o r Pessoal </ h1 > <p > Um c o m p u t a d o r p e s s o a l ou PC ( P e r s o n a l C o m p u t e r) refere - se a um c o m p u t a d o r de p e q u e n o porte e baixo custo ... </p > <p > C o n t i n u a o texto em outro p a r a g r a f o .... </p > </ article > 1.3.22 section Esse é um elemento do tipo nível de bloco e destina-se a criar um container genérico para conteúdos. Se houver necessidade de um container somente para fins de aplicação de regras de estilo, use o elemento div e não section. Use section de forma geral, quando o uso de article ou de outro elemento não for apropriado. Exemplo: 1 2 3 4 5 6 7 8 9 10 11 < section > <h1 > E s t a c a o de trabalho </ h1 > < article > <h2 > Computador </ h2 > <p > O c o m p u t a d o r ..... </p > </ article > < article > <h2 > Impressora </ h2 > <p > A i m p r e s s o r a ..... </p > </ article > </ section > 1.3.23 header Esse é um elemento do tipo nível de bloco e destina-se a marcar conteúdos introdutórios e de auxílio à navegação. Em geral, esses elementos contêm um cabeçalho dos níveis h1 a h6 e podem incluir também tabela de conteúdo (índice), formulário de busca, informações complementares e logotipo. Exemplo: 1 2 3 4 5 6 7 8 < article > < header > <h1 > C o m p u t a d o r Pessoal </ h1 > <p > P u b l i c a d o em : 01/02/2016 </ p > </ header > <p > Um c o m p u t a d o r p e s s o a l ou PC ( P e r s o n a l C o m p u t e r) refere - se a um c o m p u t a d o r de p e q u e n o porte e baixo custo ... </p > <p > C o n t i n u a o texto em outro p a r a g r a f o .... </p > </ article > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1.3.24 footer Esse é um elemento do tipo nível de bloco e destina-se a marcar conteúdos de rodapé. Em geral esses elementos contêm informações sobre quem escreveu o conteúdo, links para conteúdos relacionados e informações sobre direitos autorais. Exemplo: 1 2 3 4 5 6 7 8 9 10 11 < article > < header > <h1 > C o m p u t a d o r Pessoal </ h1 > <p > P u b l i c a d o em : 01/02/2016 </ p > </ header > <p > Um c o m p u t a d o r p e s s o a l ou PC ( P e r s o n a l C o m p u t e r) refere - se a um c o m p u t a d o r de p e q u e n o porte e baixo custo ... </p > <p > C o n t i n u a o texto em outro p a r a g r a f o .... </p > < footer > <p > C o p y r i g h t 2016 - Todos os d i r e i t o s reservados </ p > </ footer > </ article > 1.3.25 aside Esse é um elemento do tipo nível de bloco e destina-se a marcar conteúdo relacionado a outro conteúdo. Em geral, esses elementos são usados para marcar barras laterais de conteúdos, blocos de conteúdos relacionados a outro conteúdo, mas visualmente separados. Existem dois contextos distintos de uso desse elemento. Quando dentro de um elemento article, seu conteúdo deve estar relacionado ao conteúdo daquele elemento. Quando fora do elemento article, seu conteúdo deve estar relacionado ao conteúdo do site ou da página, como um banner de propaganda ou links de navegação. Exemplo: 1 2 3 4 5 6 7 8 9 10 11 < article > < header > <h1 > C o m p u t a d o r Pessoal </ h1 > <p > P u b l i c a d o em : 01/02/2016 </ p > </ header > <p > Um c o m p u t a d o r p e s s o a l ou PC ( P e r s o n a l C o m p u t e r) refere - se a um c o m p u t a d o r de p e q u e n o porte e baixo custo ... </p > <p > C o n t i n u a o texto em outro p a r a g r a f o .... </p > < aside > <! - - Dentro de a r t i c l e --> <! - - C o n t e u d o r e l a c i o n a d o a m a t e r i a c o m p u t a d o r p e s s o a l --> </ aside > </ article > 12 13 14 15 < aside > <! - - Fora de a r t i c l e --> <! - - C o n t e u d o r e l a c i o n a d o a pagina que contem a m a t e r i a C o m pu t a d o r P e s s o a l --> </ aside > 1.3.26 nav Esse é um elemento do tipo nível de bloco e destina-se a marcar o mecanismo principal de navegação da página, contendo links para outras páginas ou para partes da mesma página. Existem dois contextos distintos de uso desse elemento. Quando dentro de um elemento article, seu conteúdo deve estar relacionado ao conteúdo daquele elemento. Quando fora do elemento article, Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel seu conteúdo deve estar relacionado ao conteúdo do site ou da página, como um banner de propaganda ou links de navegação. Exemplo: 1 2 3 4 5 6 7 8 < nav > <ul > <li > <a <li > <a <li > <a <li > <a </ ul > </ nav > 1.3.27 href = " / " > Home </ a > </ li > href = " / h i s t o r i a. html " > Historia </ a > </ li > href = " / a r t i g o s. html " > Artigos </a > </ li > href = " c o n t a t o. html " > Contato </ a > </ li > main Esse é um elemento do tipo de nível de bloco e destina-se a marcar a seção do documento que contém o assunto principal da página. Não devem ser inclusos dentro desse elemento conteúdos tais como o topo da página, o rodapé da página e os links da navegação. 1.3.28 audio Esse é um elemento do tipo nível de bloco e destina-se a inserir um som ou stream de áudio. Exemplo: 1 2 3 4 5 6 7 < audio controls > < source src = " som . ogg" type =" audio / ogg" > < source src = " som . mp3" type =" audio / mpeg " > < source src = " som . wav" type =" audio / wave " > <p > Seu n a v e g a d o r nao s u p o r t a o e l e m e n t o audio da HTML5 . <br > Faca <a href =" som. zip " > d o w n l o a d de som . zip </a > </p > </ audio > 1.3.29 video Esse é um elemento do tipo nível de bloco e destina-se a inserir um vídeo. Exemplo: 1 2 3 4 5 6 7 8 < video controls > < source src = " video . ogv " type = " video / ogg " > < source src = " video . mp4 " type = " video / mp4 " > < source src = " video . webm " type = " video / webm " > <! - - Codigo ( X ) HTML para i n s e r c a o de video com flash --> <p > Seu n a v e g a d o r nao s u p o r t a o e l e m e n t o video da HTML5 . <br > Faca <a href = " video . zip " > d o w n l o a d do video </a > </ p > </ video > 1.4 Favicon - Como colocar imagem no title • Acesse o site http://tools.dynamicdrive.com/favicon/ (gerador de favicon), escolha o tamanho 32x32 ou 48x48, clique em Selecionar Arquivo, selecione e clique em Creat Icon, clique em Download FavIcon e pronto, só salvar. • E insira o seguinte código antes da tag </head> 1 < link rel = " s h o r t c u t icon " href = " f a v i c o n. ico " > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1.5 Table Toda tabela deve ser iniciada com o elemento básico de abertura e fechamento chamado table. OBS:No HTML5 não precisamos fechar as tags: <tbody>, <thead>, <tfoot>, <tr>, <th>, <td>, visto a seguir. 1.5.1 Inserindo um título na tabela A opção summary está obsoleta, portante não devemos utilizar. Obs.: Ela está obsoleta em XHTML1.1, porém no HTML5 é possível usá-la com algumas restrições. O W3C indica utilizar apenas o caption, descrito a seguir. 1.5.2 Caption Esse elemento é responsável pelo título/legenda da tabela. É ela que vai apresentar o que a tabela tem que transmitir para o usuário. 1.5.3 Criando linhas na tabela - tr Para criar as linhas na tabela utilizamos o elemento <tr>. Cada linha da tabela precisa ser criada, porém, cada linha pode ter muitas colunas. Todas as linhas abertas com o elemento <tr> devem ser fechadas com </tr>. OBS: Ao criar apenas linha(s) sem coluna(s) não aparecerá nada na página. 1.5.4 Criando colunas - th, td Para criar colunas em uma linha podemos utilizar 2 (dois) elementos, são eles: th e td. Mas quando utilizar o elemento TH e/ou TD? A principal diferença entre estes elementos é a seguinte: Geralmente as colunas da primeira linha e última linha utilizamos as tags TH, isso devido ao fato que estas tags deixam o conteúdo em negrito. A primeira linha e a última são marcadas pelos elementos THEAD(cabeçalho) e TFOOT(rodapé), respectivamente. Essa é a principal diferença entre elas. Serve como diferenciação do resto do conteúdo da tabela, onde utilizamos os elementos TD. 1.5.5 Cabeçalho e Rodapé - thead, tfoot Um conceito novo é a utilização de cabeçalho e rodapé na tabela. Essas tags devem ser utilizadas em conjunto com a tag TH para deixar as letras destacadas. thead: Esse elemento é extremamente importante. Ele é o cabeçalho da tabela. É ele que vai mostrar o que a coluna ou linha tem que apresentar ao usuário. Você deve criar cada linha com tr e th para as células dentro. tfoot: Usado bastante em tabelas grandes, essa tag deve conter as mesmas informações do thead, assim o usuário, ao chegar no final, não se perderá com as informações. Obs: Ela não precisa ser o último elemento dentro do elemento ”table”, tal como seu nome indica, mas no entanto deve ser colocado logo após o thead. Mas porque inserir um rodapé na tabela? Ao fazer uma tabela dinâmica (montada automaticamente com dados provenientes de uma base de dados) não sabemos quantas linhas essa tabela terá. Ok, mas no que isso implicará? O usuário ao navegar em um site com uma tabela gigantesca terá que voltar sempre ao topo do site para visualizar qual é o cabeçalho correspondente a coluna que ele está Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel visualizando. Inserindo um rodapé ele pode recorrer também ao rodapé. 1.5.6 Tag tbody Nesse novo conceito de tabela utilizamos um elemento específico para o corpo da tabela, no caso o TBODY. Todas as linhas que forem linhas de conteúdo devem ficar entre os elementos TBODY e /TBODY. É dentro dessa tag que ficará o conteúdo, o corpo, da sua tabela, onde irá as famosas tr e td, que serve para criar linha e célula, respectivamente. Obs.: Você pode, e deve quando necessário, usar th dentro do tbody para colocar a primeira célula como sendo responsável para dizer o conteúdo relacionado à linha. 1.5.7 Exemplo html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <! D O C T Y P E html > < html lang = " pt - br " > < head > < title > Tabelas </ title > < meta c h a r s e t=" utf -8 " > </ head > < body > < table > < caption > C a t a l o g o da Metal & amp ; Cia </ caption > < thead > <tr > < th c o l s p a n=" 4 " > Tabela de precos </ th > </ tr > </ thead > < tfoot > <tr > < td c o l s p a n=" 4 " > Visite nossa loja </ td > </ tr > </ tfoot > < tbody > <tr > < td r o w s p a n= " 2 " > Seminovos </ td > <td > Trompete </ td > <td > Trombone </ td > <td > Trompa </ td > </ tr > <tr > <td > $500 </ td > <td > $640 </ td > <td > $650 </ td > </ tr > </ tbody > </ table > </ body > </ html > css 1 2 3 4 5 6 7 table , td , th , tfoot { border : solid 1 px # 000; p a d d i n g :5 px ; } th { background - color :# 999; } Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 8 9 10 11 12 13 caption { font - size :x - large ; } colgroup { b a c k g r o u n d: # F60; } Figura 3: Tabela com estilização Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 2 CSS 2.1 Definição CSS é a abreviação para o termo Cascading Style Sheet, traduzido como folha de estilo em cascata. Folha de estilo em cascata é um mecanismo simples para adicionar formatação (por exemplo: fontes, cores, espaçamentos) aos documentos web.[site do W3C]. A HTML foi criada para ser uma linguagem exclusivamente de marcação e estruturação de conteúdos. Segundo seus idealizadores, não compete à HTML fornecer informações ao navegador sobre a apresentação dos elementos, por exemplo: cores de fontes, tamanhos de textos, posicionamentos e todo o aspecto visual de um documento não devem ser funções da HTML. Cabem à CSS todas as funções de apresentação de um documento, e essa é sua finalidade maior. ”HTML para estruturar os conteúdos e CSS para apresentá-los”. 2.2 Regra CSS Regra CSS (ou regra de estilo ou de estilização) é a unidade básica de uma folha de estilo. Uma regra CSS é composta de duas partes : o seletor e a declaração. A declaração compreende uma propriedade e um valor. Exemplo: 1 s e l e t o r { p r o p r i e d a d e : valor ; } • Seletor - É o elemento ou elementos da marcação HTML nos quais a regra CSS será aplicada. • Declaração - Determina os parâmetros de estilização. Compreende a propriedade e o valor. • Propriedade - Define qual será a característica do seletor a ser estilizada. • Valor - É a quantificação ou a qualificação da estilização da propriedade. Uma regra CSS, escrita conforme a sintaxe mostrada, poderá conter várias declarações separadas por ponto-e-vírgula. Exemplo: 1 p { color : white ; background - color : black ; font - size : 14 px ; 2 3 4 5 } • Seletor - É o elemento p (parágrafo). • Declarações – Propriedades - São três: color, que define a cor dos textos; background-color, que define a cor de fundo; e font-size, que define o tamanho da fonte. – Valores - São três: white, que define a cor branca; black, que definea cor preta; e 14px, que define o tamanho da fonte igual a 14 pixels. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Ocorre com frequência a necessidade de estilizar vários seletores com as mesmas declarações de estilos. Nesses casos, a sintaxe CSS permite que os seletores sejam agrupados. Para criar um agrupamento de seletores, separamos um do outro através de vírgula. Exemplo: 1 h2 , p , ul , em { font - size : 18 px ; } A regra acima define um tamanho de fonte igual a 18 pixels para os conteúdos textuais dos elementos h2, p, ul e em. Quando o valor de uma propriedade for uma palavra composta, separada por espaços , deve-se usar sinais de aspas duplas (” ”) ou, alternativamente, de aspas simples (’ ’), conforme mostrado no exemplo a seguir: 1 2 3 p { font - family : " Times New Roman " ; } ou 1 2 3 p { font - family : ’ Times New Roman ’; } Não se usam aspas em palavras compostas separadas por hífen: 1 2 3 p { font - family : Sans - serif ; } Um componente facultativo, mas de grande utilidade, é a inserção de comentários. Comentário em uma linha: 1 /* C o m e n t a r i o em uma linha */ Bloco de comentário 1 2 3 4 /* Bloco de c o m e n t a r i o c o n t e n d o varias linhas para e x p l i c a r as f u n c i o n a l i d a d e s d e f i n i d a s na regra CSS */ 2.3 Modelo de formatação CSS No modelo CSS cada elemento cria um caixa, dentro da qual está inserido o conteúdo do elemento. Se o elemento for nível de bloco, a caixa tem a largura igual à linha (ocupa toda a largura da tela) e altura suficiente para acomodar o conteúdo. Se inline, a caixa tem a largura do conteúdo. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 2.3.1 Box Model CSS O Box Model CSS descreve os boxes criados pelos elementos da marcação HTML. Figura 4: Diagrama do Box Model CSS No diagrama destacamos uma área mais interior, denominada área dos conteúdos, cujas dimensões (largura e altura) são definidas pelas propriedades CSS width e height. Segue uma área chamada de enchimento, cuja espessura é definida pela propriedade CSS padding. Em volta do enchimento, temos uma borda cuja espessura, cor e tipo são definidos por border. Finalmente, um espaço denominado margem com espessura definida pela propriedade margin. A área da margem é sempre transparente. As dimensões da área de conteúdos dependem de uma série de fatores, entre eles a definição explícita de dimensões, natureza do conteúdo e o tipo do conteúdo. A propriedade CSS background define o fundo a ser aplicado nas áreas de conteúdo, de enchimento e da borda. Exemplo: HTML 1 2 3 4 5 ... < body > <p > Lorem ipsum dolor sit amet ... </p > </ body > ... CSS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 body { margin : 0; p a d d i n g: 0; font - size : 20 px ; } p { width : 400 px ; text - align : j u s t i f y; line - height : 1; b a c k g r o u n d: # f6f6f6 ; margin : 20 px 80 px 100 px 40 px ; border : solid # ccc ; border - width : 10 px 30 px 50 px 15 px ; p a d d i n g: 35 px 50 px 20 px 0; } Na imagem abaixo apresentamos a renderização do código conforme o Box Model CSS. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Figura 5: Box Model CSS 2.3.2 Box Model CSS modificado A propriedade width refere-se à largura do conteúdo do box, o que ocorre é que a largura total do box acaba sendo variável em relação à propriedade width, já que a ela são acrescidas as larguras de padding e border (que são variáveis) para se obter a largura total. O mesmo ocorre com relação à altura do box. As CSS3 criaram uma nova propriedade denominada box-sizing, capaz de alterar esse comportamento padrão do Box Model, fazendo com que as larguras de padding e border sejam incluídas na largura width declarada por regra CSS. Para modificar o comportamento do Box Model para todos os boxes, inclua na folha de estilo do seu projeto a seguinte regra CSS. 1 2 3 4 5 6 html { box - sizing : border - box ; } * , *: before , *: after { box - sizing : i n h e r i t; } OBS: O símbolo * é chamado de seletor universal e representa todos os elementos da marcação. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel A imagem abaixo mostra a renderização do mesmo box do exemplo anterior com a inclusão da regra modificadora do Box Model. Figura 6: Box Model CSS modificado Observe que a largura do conteúdo no Box Model tradicional é igual ao valor declarado para width (400px), já no Box Model modificado passa a ser igual ao valor declarado para width (400px) menos as larguras de border (15px + 30px) e padding (0 + 50px). 2.3.3 Propriedades CSS para o Box Model O box criado no modelo é um quadrilátero em que cada um dos lados é identificado, ver figura 4. Ao definirmos a regra CSS para margin, border-width ou padding começamos com o lado superior e seguimos no sentido horário (top, right, bottom e left). Propriedade margin A propriedade margin define as dimensões das margens de um box. Pode-se definir cada uma das margens individualmente: 1 2 3 4 margin - top : 20 px ; margin - right : 30 px ; margin - bottom : 5 px ; margin - left : 10 px ; ou usar a sintaxe abreviada: 1 margin : 20 px 30 px 5 px 10 px ; /* na ordem d e s c r i t a a n t e r i o r m e n t e */ A declaração abreviada admite ainda as seguintes variações: • Se as quatro margens são iguais, declare um valor: 1 margin : 20 px ; /* margem de 20 px nos quatro lados */ • Se as quatro margens são iguais duas a duas, declare dois valores: 1 margin : 15 px 10 px ; /* m a r g e n s s u p e r i o r e i n f e r i o r de 15 px e d i r e i t a e e s q u e r d a de 10 px */ • Ou apenas direita e esquerda iguais, declare três valores: Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1 margin : 20 px 10 px 15 px ; /* margem s u p e r i o r de 20 px m a r g e n s d i r e i t a e e s q u e r d a de 10 px e margem i n f e r i o r de 15 px */ Propriedade padding A propriedade padding define as dimensões do enchimento (ou espessura) entre o conteúdo e a borda. Pode-se definir cada um dos quatro enchimentos individualmente: padding-top, padding-right, padding-bottom, padding-left ou utilizar a sintaxe abreviada conforme descrito na propriedade margin. Propriedade border A propriedade border define a espessura, o estilo e a cor das bordas do box. border-width: Define a espessura da borda. 1 2 3 4 border - top - width : 2 px ; border - right - width : 3 px ; border - bottom - width : 4 px ; border - left - width : 1 px ; ou usar a sintaxe abreviada: 1 border - width : 2 px 3 px 4 px 1 px ; Define-se a espessura da borda declarando uma medida CSS de comprimento ou usando as palavraschave thin, medium e thick, obtendo as espessuras de bordas fina, média e grossa. border-color: Define a cor da borda 1 2 3 4 border - top - color : red ; border - right - color : yellow ; border - bottom - color : black ; border - left - color : cyan ; ou usar a sintaxe abreviada: 1 border - color : red yellow black cyan Para declarar a cor da borda, usa-se um dos valores CSS para cores ou o valor transparent. border-style: Define o estilo da borda. 1 2 3 4 border - top - style : solid ; border - right - style : ridge ; border - bottom - style : double ; border - left - style : inset ; ou usar a sintaxe abreviada: 1 border - style : solid ridge double inset ; Pode-se aplicar nove estilos para bordas ou declarar o valor none para definir ausência de bordas. Na prática, a declaração none é muito usada para retirar bordas colocadas por padrão ou declaradas anteriormente em elementos específicos da marcação ou, ainda, retirar a borda-padrão colocada em imagens que são links. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Estilo none hidden dotted dashed solid double groove ridge inset outset Descrição Define espessura 0 para a borda. O mesmo efeito de none, mas com precedência na resolução de bordas conflitantes. Borda pontilhada. Borda tracejada. Borda contínua ou sólida. Borda constituída de duas linhas contínuas. A soma das espessuras das linhas com a do espaço que as separa é igual ao valor de border-width. Borda com aparência entalhada. Borda com aparência de ressalto. Borda em baixo relevo. Borda em alto relevo. border: Define abreviadamente a borda. 1 2 3 4 border - top : 1 px solid red ; border - right : 2 px ridge yellow ; border - bottom : 4 px double black ; border - left : 6 px inset cyan ; ou usar a sintaxe abreviada para bordas que sejam iguais nos quatro lados: 1 border : 2 px dotted white ; Ao usar a declaração abreviada border, não é obrigatório declarar os três valores, assim as regras CSS mostradas abaixo são válidas: 1 2 3 4 5 6 border : border : border : border : border : border : 5 px ; dotted ; red ; 2 px double ; solid red ; 4 px blue ; Os valores não declarados são interpretados pelo navegador como sendo o valor inicial da propriedade: 1 2 3 border - width : medium ; border - style : none ; border - color : /* o mesmo valor da p r o p r i e d a d e color do e l e m e n t o em que se aplica a borda */ Como o valor inicial para o estilo da borda é none (nenhum), concluímos que declarações abreviadas que omitem o estilo da borda, como as mostradas a seguir, isoladamente, não produzem nenhum efeito. 1 2 3 border : 5 px ; border : red ; border : 4 px blue ; Podemos combinar essas declarações com outras, obtendo um interessante método de estilização: 1 2 border : 4 px blue ; border - style : solid dotted groove double ; ou ainda: 1 2 border : solid blue ; border - width : 5 px 8 px 10 px 2 px ; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 2.4 Categorias de valores CSS Os valores CSS podem ser definidos através de valores absolutos (ex: medida em pixels) ou valores relativos (ex: medidas em porcentagem), que irão depender de um valor de referência. Os valores CSS podem ser agrupados em oito categorias, conforme descrito a seguir: 2.4.1 Palavra-chave Um valor CSS é do tipo palavra-chave quando expresso por uma string, predefinida nas especificações. Um exemplo desse caso é quando se utiliza palavras-chave para definir cores: 1 2 3 4 5 p{ color : red ; background - color : acqua ; border - color : teal ; } Os valores red, acqua e teal são palavras-chave para cores, previstas nas especificações para as CSS3. Outros exemplos de palavras-chave para expressar valores CSS são: Palavra-chave inherit collapse italic uppercase 2.4.2 utilização para definir para definir para definir para definir uma propriedade que deverá ser herdada. bordas de células de tabelas que devem ser unidas. fonte em itálico. texto em caixa-alta. Número Pose ser expresso por um número inteiro ou real. A especificação adota a sintaxe <integer > para designar números inteiros e <number > para designar números reais. Tal como na matemática, em CSS, números podem ser precedidos dos sinais ”+” e ”-” para indicar o sinal positivo ou negativo do número. 2.4.3 Número não negativo Muitas propriedades CSS fazem restrição quanto à faixa de números admitidos. Como exemplo, a propriedade width, destinada a definir a largura de um elemento, não admite números negativos. 2.4.4 Número com unidade de medida Comprimento Refere-se as medidas horizontal e vertical. Um valor CSS que usa uma medida de comprimento é formado por um número seguido da abreviatura para uma unidade de medida. Por exemplo: 14px, 12em, 18pt. Se o número for zero recomenda-se não utilizar a unidade de medida. A única exceção a essa grafia é na sintaxe quando utilizamos porcentagem, sendo obrigatório indicar o sinal (0%). Medida relativa É aquela cujo valor é determinado em função de outro valor de uma propriedade que lhe serve de referência. Definir medidas relativas facilita o escalonamento e possibilita servi-la para diferentes tipos de mídia, por exemplo: para uma tela de computador ou para uma tela de um smartphone. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Unidade em ex px gd rem vw vh vm ch Relativa à font-size do elemento (ou do elemento-pai). Elemento-pai é o elemento no qual um elemento está contido. ao valor x-height (altura da letra x minúscula) da fonte do elemento. ao dispositivo gráfico (tela, por exemplo) de renderização. ao grid definido pelo ”layout-grid”, descrito no Módulo Texto da CSS3. à font-size do elemento raiz do documento (html). à largura da viewport (área de renderização). à altura da viewport. à largura ou altura da viewport (a menor das duas). à largura do número ”0”, renderizado de acordo com font-size. Se não existir ”0” na fonte especificada, a largura média dos caracteres deverá ser usada. As unidades de medida relativas nas CSS3 são mostradas a seguir: Medida absoluta Aquela cujo valor é determinado e fixo. São úteis para uso quando as dimensões físicas da mídia (tela, impressora etc.) são conhecidas. Unidade in cm mm pt pc Descrição polegada; 1 polegada = 2,54cm centímetro milímetro ponto; 1 ponto = 1/72 polegada pica; 1 pica = 12 pontos Porcentagem As propriedades CSS que admitem valores em porcentagem também definem qual o valor de referência a considerar para cálculo da porcentagem. O valor de referência pode ser o valor de outra propriedade do mesmo elemento ao qual a porcentagem foi aplicada, o de um elemento ancestral (no qual o elemento está contido) ou o valor de um contexto de formatação, como a largura de um bloco de conteúdo. Ângulo O formato para definir um valor CSS em medida angular é um número imediatamente seguido por uma unidade de medida angular, e são usados, por exemplo, para definir propriedades destinadas à mídia speech (mídia falada, tal como leitores de tela) ou às transformações previstas nas CSS3. Unidade deg grad rad turn Descrição Graus Grados Radianos Volta Hora Valores expressos em medidas de tempo são usados, por exemplo, para definir propriedades destinadas à mídia speech (mídia falada, tal como leitores de tela) ou duração de animações e transições previstas nas CSS3. frequência Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Unidade ms s Descrição Milissegundo Segundo Valores expressos em medidas de frequência são usados, por exemplo, para definir propriedades destinadas à mídia speech. Unidade Hz kHz 2.4.5 Descrição Hertz Quilohertz String Valores CSS expressos com strings devem ser grafados com aspas simples ou duplas. Sendo da mesma grafia, uma não pode ocorrer dentro de outra, a menos que seja escapada com uma barra invertida (\). Uma string não pode conter uma quebra de linha, a menos que se use o caractere \A, que representa uma nova linha em CSS. Para fins de legibilidade, é possível quebrar uma string em substrings com uso do caractere barra invertida (\). Observe os exemplos a seguir: 1 2 3 4 " Esta ’ Esta " Esta ’ Esta e e e e uma uma uma uma ’ string ’. " /* aspas s i m p l e s dentro de aspas duplas */ " string ". ’ /* aspas duplas dentro de aspas s i m p l e s */ \" string \". " /* aspas duplas e s c a p a d a s dentro de aspas duplas */ \ ’ string \ ’. ’ /* aspas s i m p l e s e s c a p a d a s dentro de aspas s i m p l e s */ 5 6 " Esta string esta na p r i m e i r a linha . \ A E esta na s e g u n d a" 7 8 9 10 " Esta e uma string longa \ que foi q u e b r a d a para \ fins de l e g i b i l i d a d e. " 2.4.6 Notação funcional Em CSS3 valores funcionais são usados para definir cores, atributos e URIs (Uniform Resource Identifier - endereço web). A sintaxe para escrita de um valor funcional é: nome da função seguido de uma lista de argumentos entre parênteses. 1 2 3 p { background - color : rgb (255 , 0 , 0) ; } img { margin - top : attr ( height , px ) ; } div { background - image : url ( http : // u m s i t e q u a l q u e r . com / figura . gif ) ; } Nos três exemplos acima, os valores das propriedades CSS, em destaque no código, são do tipovalor funcional, e as respectivas funções CSS rgb, attr e url retornam um valor a ser aplicado nas propriedades definidas pelos seletores (elementos) p, img e div, respectivamente. 2.4.7 Casos especiais Valores CSS que não se enquadram em nenhuma das categorias anteriores pertencem a uma categoria denominada ”casos especiais”. Os valores CSS enquadrados nessa categoria são os valores para definição de famílias de fontes e valores para definição de cores em sintaxe hexadecimal. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1 2 p { background - color : # f00 ; } ou p { background - color : # ff0000 ; } h1 { font - family : Arial , Verdana , Sans - serif ; } 2.5 Cores CSS Para definir cores em CSS, são possíveis os seguintes tipos de valores: hexadecimal, as palavraschave: transparent, currentColor e outras palavras-chave que são o nome de algumas cores (ex: blue, red, grey, green, black ...), valores RGB, RGBA, HSL, HSLA. Exemplos 1 2 3 4 5 6 7 8 9 10 11 12 color : color : color : color : color : color : color : color : color : color : color : color : # ff0000 ; /* h e x a d e c i m a l m i n ú s c u l a s */ # FF0000 ; /* h e x a d e c i m a l m a i ú s c u l a s */ # f00 ; /* h e x a d e c i m a l a b r e v i a d a */ pink ; /* palavra - chave */ rgb (255 , 200 , 32) ; /* RGB i n t e i r o s */ rgb (100% , 26% , 47%) ; /* RGB p o r c e n t a g e m */ rgba (200 , 100 , 57 , 0.4) ; /* RGB i n t e i r o s com o p a c i d a d e */ rgba (90% , 86% , 37% , 0.6) ; /* RGB p o r c e n t a g e m com o p a c i d a d e */ hsl (120 , 75% , 50%) ; /* HSL */ hsla (120 , 75% , 50% , 0.8) ; /* HSL com o p a c i d a d e */ t r a n s p a r e n t ; /* palavra - chave */ c u r r e n t C o l o r; /* criada nas CSS3 */ currentColor: Esse valor declara que a cor a ser aplicada a uma determinada propriedade CSS em um elemento é igual à cor declarada para a propriedade color de seu elemento ancestral mais próximo. Exemplo: 1 2 div { color : red ; } p { border : 1 px solid c u r r e n t C o l o r ; } Todos os parágrafos contidos no div terão uma borda na cor vermelha. HSL: Criada a partir da CSS3, permite que você declare as cores com o uso de três parâmetros: (hue, saturation, lightness). O primeiro valor é para o tom (hue) da cor. O seu valor é um número que representa a medida de um ângulo (varia de 0 a 360 graus) apontando para um tom de cor na roda de cores. Ângulo 0 60 120 180 240 300 360 Tons de cor vermelho amarelo verde ciano azul púrpura vermelho Exemplos: 1 2 3 4 color : color : color : color : hsl (120 , hsl (120 , hsl (120 , hsl (120 , 100% , 50%) ; /* cor verde */ 100% , 25%) ; /* cor verde - escura */ 100% , 75%) ; /* cor verde - clara */ 75% , 75%) ; /* cor verde pastel */ HSLA: Os três primeiros parâmetros têm o mesmo significado de HSL, e o quarto (opacidade) é um valor compreendido entre 0 e 1, onde 0 representa a transparência total, e o valor 1, opacidade total. Assim, um valor igual 0.6 significa 60% opaco ou 40% transparente. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 2.6 Vinculando folhas de estilo a documentos As folhas de estilo podem ser escritas no próprio documento HTML ao qual serão aplicadas, ou em arquivos externos independentes. 2.6.1 Estilos inline O método direto e simples de aplicar estilos a um elemento da marcação é com o emprego do atributo style da HTML. Escreve-se as regras de estilo diretamente dentro da tag de abertura do elemento a estilizar: 1 2 3 <p style = " width : 200 px ; color : white ; b a c k g r o u n d: red ; font - size : 1.8 em ; " > <! - - P a r a g r a f o com a p l i c a c a o de e s t i l o s inline --> </p > Este método dificulta a manutenção e retira a possibilidade do controle centralizado da apresentação. Toda vez que for preciso alterar a apresentação, será necessário percorrer todo o código de marcação do documento à procura das regras de estilo inline. 2.6.2 Estilos incorporados Outro método de escrever a folha de estilos no próprio documento HTML é com o emprego do elemento style. Você escreve as regras de estilo dentro das tags <style></style>, declaradas na seção HEAD do documento: 1 2 3 4 5 6 7 8 9 10 11 12 < head > ... < style rel = " s t y l e s h e e t" type =" text / css " media =" all " > body { margin : 0; p a d d i n g: 0; font - size : 80%; color : black ; b a c k g r o u n d: white ; } </ style > </ head > Desta forma, as regras de estilização serão aplicadas somente ao documento em que estiver incorporada. Uma boa escolha para uso desse método é para o caso de aplicação de estilos específicos a um, e somente um, documento do site. Em HTML5 o uso de atributos no elemento style é facultativo. 2.6.3 Estilos externos Trata-se de um arquivo de texto contendo as regras de estilo e os comentários CSS e deve ser gravado com a extensão .css e pode ser vinculado a um documento HTML de duas maneiras distintas: Folhas de estilos lincadas: Vincula-se uma folha de estilo externa a um documento empregando o elemento link. Este elemento deve estar contido na seção HEAD do documento. 1 2 3 4 5 < head > ... < link rel = " s t y l e s h e e t" type = " text / css" href =" e s t i l o s. css " media = " all" > ... </ head > O atributo href aponta para o endereço no qual se encontra o arquivo da folha de estilos. Folhas de estilos importadas: Nesse método, vincula-se uma folha de estilo externa a outra folha de estilo externa usando a diretiva @import dentro da folha de estilo. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1 2 3 4 5 @ i m p o r t " main . css" body { margin : 0; font : 62.5% Arial , Sans - serif ; } A diretiva @import deve preceder todas as demais regras de estilo para o documento. Havendo necessidade de vincular outras folhas de estilo ao documento, elas deverão ser importadas uma após a outra. A declaração de importação de uma folha de estilos dentro de outra deve ocupar a primeira linha da folha, exceto no caso em que se une uma declaração de codificação de caracteres da folha de estilo. A diretiva @charset destina-se a declarar a codificação de caracteres de uma folha de estilos e deve ocupar a primeira linha da folha de estilo. 1 2 3 4 5 6 @ c h a r s e t " utf -8 " @ i m p o r t " main . css" body { margin : 0; font : 62.5% Arial , Sans - serif ; } 2.7 Exemplos de utilização das CSS3 Veremos a seguir alguns exemplos de aplicação das estilizações através das CSS3. 2.7.1 Menu Drop-Down Marcação HTML para criação do menu 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <! D O C T Y P E html > < html lang = " pt - br " > < head > < title > E x e m p l o Menu DropDown </ title > < meta c h a r s e t=" utf -8 " > < link rel = " s t y l e s h e e t" type = " text / css" href =" menu . css " media = " all " > </ head > < body > < nav > <ul > <li > <a href = " # " > Home </ a > </ li > <li > <a href = " # " > Tutoriais </a > <ul > <li > < a href = " # " > LP2 </ a > </ li > <li > < a href = " # " > PTI </ a > </ li > <li > < a href = " # " > A p l i c a c o e s Web </ a > <ul > <li > <a href =" # " > HTML </ a > </ li > <li > <a href =" # " >CSS </a > </ li > </ ul > </ li > </ ul > </ li > <li > <a href = " # " > Artigos </ a > <ul > <li > < a href =" # " > Web Design </ a > </ li > <li > < a href =" # " > Programacao </a > </ li > </ ul > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 29 30 31 32 33 34 </ li > <li > <a href = " # " > Extras </ a > </ li > </ ul > </ nav > </ body > </ html > Figura 7: Menu sem a estilização CSS Código CSS para estilização do Menu 1 2 3 4 5 nav ul ul { d i s p l a y: none ; b a c k g r o u n d: # 5 f6975 ; border - radius : 0 px ; p a d d i n g: 0; p o s i t i o n: a b s o l u t e; top : 100%; } 6 7 8 9 nav ul li : hover > ul { d i s p l a y: block ; } 10 11 12 13 14 15 16 17 18 19 20 21 22 nav ul { b a c k g r o u n d: # efefef ; b a c k g r o u n d: linear - g r a d i e n t( top , # efefef 0% , # bbbbbb 100%) ; b a c k g r o u n d: - moz - linear - g r a d i e n t( top , # efefef 0% , # bbbbbb 100%) ; b a c k g r o u n d: - webkit - linear - g r a d i e n t( top , # efefef 0% ,# bbbbbb 100%) ; box - shadow : 0 px 0 px 9 px rgba (0 ,0 ,0 ,0.15); p a d d i n g: 0 20 px ; border - radius : 10 px ; list - style : none ; p o s i t i o n: r e l a t i v e; d i s p l a y: inline - table ; } 23 24 25 26 nav ul : after { c o n t e n t: " " ; clear : both ; d i s p l a y: block ; } 27 28 29 30 nav ul li { float : left ; } 31 32 33 nav ul li : hover { b a c k g r o u n d: # 4 b545f ; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel b a c k g r o u n d: linear - g r a d i e n t( top , # 4 f5964 0% , #5 f6975 40%) ; b a c k g r o u n d: - moz - linear - g r a d i e n t( top , # 4 f5964 0% , #5 f6975 40%) ; b a c k g r o u n d: - webkit - linear - g r a d i e n t( top , # 4 f5964 0% ,#5 f6975 40%) ; 34 35 36 37 } 38 39 40 41 nav ul li : hover a { color : # fff ; } 42 43 44 45 46 nav ul li a { d i s p l a y: block ; p a d d i n g: 25 px 40 px ; color : # 7 5 7 5 7 5 ; text - d e c o r a t i o n: none ; } 47 48 49 50 51 52 53 nav ul ul li { float : none ; border - top : 1 px solid # 6 b727c ; border - bottom : 1 px solid # 575 f6a ; p o s i t i o n: r e l a t i v e; } 54 55 56 57 58 nav ul ul li a { p a d d i n g: 15 px 40 px ; color : # fff ; } 59 60 61 62 nav ul ul li a : hover { b a c k g r o u n d: # 4 b545f ; } 63 64 65 66 nav ul ul ul { p o s i t i o n: a b s o l u t e; left : 100%; top :0; } Figura 8: Menu Drop-Down com estilização CSS Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 2.7.2 Abas Marcação HTML 1 2 3 4 5 6 7 8 9 <! D O C T Y P E html > < html lang = " pt - br " > < head > < title > E x e m p l o Abas </ title > < meta c h a r s e t=" utf -8 " > < link rel = " s t y l e s h e e t" type = " text / css" href =" abas . css " media = " all " > </ head > < body > < a r t i c l e class =" tabs " > 10 < s e c t i o n id =" tab1 " > <h2 > < a href = " # tab1 " > Aba 1 </ a > </ h2 > <p > Aqui esta o c o n t e u d o da p r i m e i r a aba . </p > </ section > 11 12 13 14 15 < s e c t i o n id =" tab2 " > <h2 > < a href = " # tab2 " > Aba 2 </ a > </ h2 > <p > Aqui esta o c o n t e u d o da s e g u n d a aba . </ p > </ section > 16 17 18 19 20 < s e c t i o n id =" tab3 " > <h2 > < a href = " # tab3 " > Aba 3 </ a > </ h2 > <p > Aqui esta o c o n t e u d o da t e r c e i r a aba . </p > </ section > 21 22 23 24 25 </ article > 26 27 28 </ body > </ html > Figura 9: Página em abas sem a estilização CSS Código CSS para estilização das abas 1 2 3 4 5 6 a r t i c l e. tabs { p o s i t i o n: r e l a t i v e; d i s p l a y: block ; width : 40 em ; height : 15 em ; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 margin : 2 em auto ; } a r t i c l e. tabs s e c t i o n { p o s i t i o n: a b s o l u t e; d i s p l a y: block ; top : 1.8 em ; left : 0; height : 12 em ; p a d d i n g: 10 px 20 px ; background - color : # ddd ; border - radius : 5 px ; box - shadow : 0 3 px 3 px rgba (0 ,0 ,0 ,0.1) ; z - index : 0; } a r t i c l e. tabs s e c t i o n: first - child { z - index : 1; } a r t i c l e. tabs s e c t i o n h2 { p o s i t i o n: a b s o l u t e; font - size : 1 em ; font - weight : normal ; width : 120 px ; height : 1.8 em ; top : -1.8 em ; left : 10 px ; p a d d i n g: 0; margin : 0; color : # 999; background - color : # ddd ; border - radius : 5 px 5 px 0 0; } 41 42 43 44 45 a r t i c l e. tabs s e c t i o n: nth - child (2) h2 { left : 132 px ; } 46 47 48 49 50 a r t i c l e. tabs s e c t i o n: nth - child (3) h2 { left : 254 px ; } 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 a r t i c l e. tabs s e c t i o n h2 a { d i s p l a y: block ; width : 100%; line - height : 1.8 em ; text - align : center ; text - d e c o r a t i o n: none ; color : i n h e r i t; o u t l i n e: 0 none ; } a r t i c l e. tabs s e c t i o n: target , a r t i c l e. tabs s e c t i o n: target h2 { color : # 333; background - color : # fff ; z - index : 2; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 68 69 70 71 72 73 74 75 76 77 } a r t i c l e. tabs section , a r t i c l e. tabs s e c t i o n h2 { - webkit - t r a n s i t i o n: all 500 ms ease ; - moz - t r a n s i t i o n: all 500 ms ease ; -ms - t r a n s i t i o n: all 500 ms ease ; -o - t r a n s i t i o n : all 500 ms ease ; t r a n s i t i o n: all 500 ms ease ; } Figura 10: Página em abas com estilização CSS 2.7.3 Botões Marcação HTML para criação de botões 1 2 3 4 5 6 7 8 9 <! D O C T Y P E html > < html lang = " pt - br " > < head > < title > E x e m p l o Botoes </ title > < meta c h a r s e t=" utf -8 " > < link rel = " s t y l e s h e e t" type = " text / css" href =" botoes . css " media = " all " > </ head > < body > < button class =" btn btn - green " > Salvar </ button > 10 <a href = " # " class = " btn btn - purple " > Acessar </ a > 11 12 < input type = " submit " 13 14 15 16 </ body > </ html > class = " btn btn - red" value = " OK " > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Figura 11: Página com botões sem a estilização CSS Código CSS para estilização dos botões 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 . btn : focus , . btn :: - moz - focus - inner { o u t l i n e: none ; border : none ; } . btn { font - family : arial ; font - size :14 px ; text - t r a n s f o r m: u p p e r c a s e; font - weight :700; border : none ; p a d d i n g :10 px ; cursor : p o i n t e r; d i s p l a y: inline - block ; text - d e c o r a t i o n : none ; } . btn - green { b a c k g r o u n d: green ; color : # fff ; box - shadow :0 5 px 0 # 0 0 6 0 0 0 ; } . btn - green : hover { b a c k g r o u n d: # 0 0 6 0 0 0 ; box - shadow :0 5 px 0 # 003 f00 ; } . btn - purple { b a c k g r o u n d: purple ; color : # fff ; box - shadow :0 5 px 0 # 6 7 0 1 6 7 ; } . btn - purple : hover { b a c k g r o u n d: # 6 7 0 1 6 7 ; box - shadow :0 5 px 0 # 4 7 0 0 4 7 ; } . btn - red { b a c k g r o u n d: red ; color : # fff ; box - shadow :0 5 px 0 # d20000 ; } . btn - red : hover { b a c k g r o u n d: # d20000 ; box - shadow :0 5 px 0 # b00000 ; } . btn - green : active , . btn - purple : active , . btn - red : active { p o s i t i o n: r e l a t i v e; top :5 px ; box - shadow : none ; } Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Figura 12: Página com botões com estilização CSS 2.8 2.8.1 DOM e seletores CSS DOM DOM é a sigla em inglês para Document Object Model (Modelo de objeto de documento), e trata-se de uma convenção que, no contexto da marcação HTML, destina-se representar os componentes da marcação como objetos capazes de serem estilizados, acessados por programas e scripts e manipulados de formas variadas. O DOM é constituído de nós denominados nós do DOM. Os elementos da marcação, os atributos, os conteúdos e o próprio documento como um topo são considerados nós. 2.8.2 Árvore do DOM É uma representação gráfica da marcação do documento, mostrando o interrelacionamento entre os nós do DOM. No DOM o relacionamento entre os componentes da marcação, descrito na árvore do documento, usa também denominações adotadas em árvores genealógicas, tais como, elemento-pai, elementos irmãos, elementos descendentes, elementos ancestrais e assim por diante. Vamos elaborar o esboço de um site sobre uma banda de Rock n’Roll para exemplificar o relacionamento entre os componentes da árvore DOM e dos seletores CSS. Para este exemplo, serão criadas cinco páginas, como descrito a seguir: • Página principal do site (Página de apresentação) – index.html • Discografia (página contendo a discografia da banda) – discos.html • Agenda (página contendo agenda de shows) – agenda.html • Notícias (página contendo informações e curiosidades) – noticias.html • Contato (página com dados para enviar mensagens) – contato.html Abaixo a marcação HTML do esboço do site. Nesse rascunho teremos um topo contendo banner, título e a barra de navegação, uma coluna com o conteúdo principal da página e um rodapé. Abra um editor e salve esse arquivo como topoSite.html Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <! D O C T Y P E html > < html lang = " pt - br " > < head > < title > Iron Maiden Fans </ title > < meta c h a r s e t=" utf -8 " > </ head > < body class = " home " > < header class = " topo " > < hgroup > <h1 > < a href =" / " > Site sobre o Iron Maiden </ a > </ h1 > <h2 > Página não o f i c i a l d e s t i n a d a a d i v u l g a r a maior banda de heavy metal do mundo </ h2 > </ hgroup > <nav > <ul > <li > < a class =" c o r r e n t e" href = " home . html " > home </ a > </ li > <li > < a href = " discos . html " > Discografia </a > </ li > <li > < a href = " agenda . html " > Shows </ a > </ li > <li > < a href = " n o t i c i a s. html " > Notícias </ a > </ li > <li > < a href = " c o n t a t o. html " > Contato </ a > </ li > < div class = " clear " > </ div > <! - - " limpar " floats --> </ ul > </ nav > </ header > 24 <! - - mais c o n t e u d o --> 25 26 27 28 29 30 31 < footer class =" rodape " > <! - - c o n t e u d o do rodape do site --> </ footer > </ body > </ html > Observe que dentro da seção body existem os elementos header e footer. Diretamente dentro do elemento header existem os elementos hgroup e nav e assim por diante com os demais elementos. Observando esta marcação, veremos a árvore do documento cujo diagrama é mostrada na figura 13: Figura 13: Árvore do documento Da árvore do documento verificamos os graus de parentesco conforme alguns exemplos descritos a seguir: Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Elemento html hgroup e nav a h1 header li Descrição Elemento-pai de head e body e elemento-ancestral de todos os elementos da marcação. Elementos-filho do elemento header, logo, elementos-irmãos. Elementos-descendentes de ul. Elemento-irmão-adjacente do elemento h2. Não é elemento-irmão de meta. Não é elemento-descendente de hgroup, mas é descendente dos elementos nav, header, body e html. Arquivo para estilização topoSite.css 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 * { margin : 0; p a d d i n g: 0; } body { font - size : 18 px ; font - family : arial , sans - serif ; line - height : 1.4; } hgroup > h1 { font - size : 36 px ; margin - top : 12 px ; margin - bottom : 12 px ; } hgroup a { color : # c30 ; text - d e c o r a t i o n: none ; } h1 ~ h2 { font - size : 27 px ; margin - top : 14 px ; margin - bottom : 14 px ; color : # 090; } nav > ul { margin - left : 50 px ; } nav > ul > li : first - child > a { color : # c60 ; text - d e c o r a t i o n: none ; } nav > ul > li : first - child > a : hover { color : # 555; text - d e c o r a t i o n: u n d e r l i n e ; } nav > ul > li : last - child { font - size : 26 px ; list - style - type : square ; } nav > ul > li : nth - child (3) { b a c k g r o u n d: # ccc ; } Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 2.8.3 Seletores CSS CLASSES E IDS Para possibilitar uma organização melhor da página e da seleção de elementos por CSS, podemos utilizar classes e/ou ids para identificar tags. Uma id, como o nome diz, é uma identificação única: só pode ser utilizada uma vez no documento inteiro. Normalmente é utilizada para identificar elementos estruturais da página. Uma classe é reutilizável: pode se repetir na página e também combinar-se com outras (podemos pôr mais de uma classe em um elemento). É perfeitamente possível fazer um site apenas com ids, apenas com classes, com uma combinação das duas, ou sem nenhuma das duas. Tudo irá depender do seu estilo de fazer o código das páginas. O importante é definir um padrão e segui-lo. SELETORES Muito do poder da linguagem CSS está nos seletores. Com os seletores, conseguimos escolher qualquer elemento (ou elementos) na página para aplicar estilos. Vejamos primeiro os principais tipos de seletores: • Seletor de tipo: Com este seletor, selecionamos todas as tags de um mesmo tipo. Por exemplo, se digitamos h1 estaremos selecionando todas as tags h1 da página e poderemos aplicar estilos a elas. Útil para estilos gerais, mas para maior especificidade utilizamos outros seletores. • Seletor descendente: Com este seletor, podemos escolher um ou mais elementos que estão dentro de outro, ou seja, que são descendentes do elemento principal. Exemplo: p strong. Com isso, selecionamos apenas tags strong que estão dentro de parágrafos. Podemos selecionar com ainda mais especificidade, escrevendo mais elementos, como: div p strong a. Neste exemplo, selecionamos links que estão dentro de tags strong que estão dentro de parágrafos que estão dentro de tags div. • Seletor de classe: Seleciona elementos com uma classe específica aplicada. Exemplo: .destaque seleciona todos os elementos com a classe ”destaque”. • Seletor de id: Seleciona o elemento com a id especificada. Exemplo: #cabecalho irá selecionar o elemento com a id ”cabecalho”. Cada id é única e não pode ser repetida no mesmo documento. • > Seletor filho: Seleciona o elemento filho. No nosso exemplo (linha 10), estiliza o elemento h1 filho de hgroup. • Seletor irmão adjacente: No nosso exemplo (linha 19), estliiza o elemento h2 irmão adjacente de h1. COMBINANDO SELETORES Podemos também combinar os seletores que aprendemos acima, para conseguir diferentes elementos e partes mais específicas de nossos sites. Alguns exemplos: • p.destaque seleciona apenas os parágrafos que possuem a classe ”destaque”. • div#cabecalho h1 seleciona tags h1 que estejam dentro da div com a id ”cabecalho”. • #conteudo ul li a seleciona links (tag a) dentro de itens de lista dentro de tags ul que estejam dentro de um elemento com a id ”conteudo”. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel • #conteudo p.destaque strong seleciona elementos strong dentro de parágrafos com a classe ”destaque” que estejam dentro de um elemento com a id ”conteudo”. • .mensagem.destaque seleciona apenas elementos que tenham a classe ”mensagem” e a classe ”destaque”. • Separando itens por vírgulas, como p.destaque, h1, a.saiba-mais seleciona todos os respectivos elementos para as regras. Muito útil para diminuir a repetição de regras no arquivo CSS. • Linha 28 do exemplo: Seletor composto. Estiliza o elemento a filho do primeiro elemento li que é filho de ul que por sua vez é filho de nav. • Linha 40 do exemplo: Seletor composto. Essa regra estiliza o terceiro elemento li filho do elemento ul que por sua vez é filho de nav. PSEUDO-CLASSES Pseudo-classes são tipos de classes especiais que não são definidas pelo desenvolvedor (já são prédefinidas). A sua maior utilização é com links (tags a) para definir estilos diversos para quando o link é novo, visitado, etc. O seletor de pseudo-classe é escrito com o nome do elemento + dois pontos + nome da pseudo-classe. Para começar, vamos nos familiarizar com as pseudo-classes de links: • Com o seletor a:link, estilizamos apenas os links não-visitados, ou seja, links no seu estado normal. • Com o seletor a:visited, estilizamos apenas links visitados, ou seja, que já foram clicados. • Com o seletor a:hover, estilizamos links quando o mouse está em cima do mesmo. Com esta pseudo-classe podemos fazer diversos efeitos interessantes. Esta pseudo-classe pode ser aplicada a qualquer elemento, não apenas links, o que a torna ainda mais útil. • Com o seletor a:focus, estilizamos links quando os selecionamos com o teclado, através da tecla Tab. Esta pseudo-classe é útil para estilizar links para pessoas que possuem habilidade limitada e não conseguem utilizar o mouse, por exemplo. • Com o seletor a:active, estilizamos um link quando o mouse está sendo clicado ou pressionamos Enter, ativando o link. CASCATA (E HERANÇA) A cascata é outra das características importantes das CSS. Tão importante, que está até no nome: Cascading Style Sheets. O que ”Cascading” quer dizer é que a maioria das propriedades que aplicamos a um elemento, irá passar aos seus ”herdeiros”, ou seja, os elementos que estão contidos naquele. Vejamos um exemplo: 1 2 3 4 5 6 <! - - HTML --> < div class = " texto " > <p > Texto e x e m p l o < strong > com um destaque </ strong >. </p > </ div > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1 2 3 4 /* CSS */ . texto { color : # F00 ; } Perceba que, apesar da propriedade color ter sido aplicada à div ”texto”, esta propriedade passou para o parágrafo e para o destaque também. Isto parece óbvio neste exemplo, mas é importante se familiarizar com este conceito. Uma utilização comum da cascata é definir uma fonte para a página inteira. Exemplo: 1 2 3 body { font - family : Arial , sans - serif ; } Com esta regra, todos os elementos que estão dentro de body (ou seja, todo o conteúdo do site) irá usar a fonte Arial ou, se não estiver disponível, a fonte sans-serif padrão do sistema operacional. ESPECIFICIDADE E PRECEDÊNCIA As CSS também obedecem algumas regras de precedência. Quando várias regras se aplicam a um mesmo elemento, o navegador precisa decidir qual delas tem precedência. Vamos criar uma div: 1 2 3 4 5 < div id = " s i d e b a r" > <p class = " d e s c r i c a o" > Texto e x e m p l o. </p > </ div > Vamos supor que temos duas regras aplicadas à div: 1 2 3 # sidebar { color : # F00 ; } 4 5 6 7 div # s i d e b a r p { color : # F0F ; } Qual delas será aplicada? Se você pensou a ”mais específica”, acertou. O seletor div.sidebar p tem precedência. Por que ele é mais específico? Para termos uma ideia melhor de especificidade, há algumas regras gerais: • Regras em tags style tem precedência sobre regras em arquivos externos CSS; • Regras em linha (atributo style) tem precedência sobre regras em tags style ou arquivos externos CSS; • Seletores de elemento (por exemplo, p) tem a menor precedência (podemos dizer que, numa escala, este tipo de seletor vale ”1”); • Seletores de classe (por exemplo, .destaque) tem mais precedência (vale ”10”); • Seletores de id (por exemplo, #conteudo) tem maior precedência (vale ”100”). Tendo isto, se há duas regras (usando a mesma estrutura anterior): 1 2 div p . d e s c r i c a o {} # s i d e b a r p {} Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel O segundo seletor tem precedência (apesar de não parecer inicialmente) pois o seletor de id tem muito mais ”peso” e isso o torna mais específico para o navegador na hora de renderizar a página. Se utilizarmos a nossa escala, veremos que o primeiro seletor, div p.descricao, vale 12 (dois seletores de elemento, mais um de classe); enquanto o segundo seletor vale 101 (um seletor de id mais um seletor de elemento). Figura 14: Tabela de Seletores Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 2.9 Flutuando elementos (floats) Um elemento pode ser flutuado à esquerda ou à direita com uso da propriedade float. Isto significa que o box e seu conteúdo são deslocados para a direita ou para a esquerda do documento (ou do bloco container). A figura 15 a seguir ilustra o princípio de float: Figura 15: Princípio de funcionamento da propriedade float Se desejamos que um texto seja posicionado em volta de uma imagem como mostrado na figura 16, basta flutuarmos a imagem: Figura 16: Princípio de funcionamento da propriedade float 2.9.1 Como isto é feito ? O HTML para o exemplo acima é mostrado a seguir: 1 2 3 < div id = " p i c t u r e" > < img src = " bill . jpg " alt = " Bill Gates " > </ div > 4 5 6 <p > causas n a t u r a l e s et antecedentes , idciro etiam n o s t r a r u m v o l u n t a t u m ... </ p > Para conseguir o efeito mostrado, basta definir uma largura para o box que o contém e declarar para ele float: left; 1 2 3 4 # picture { float : left ; width : 100 px ; } 2.9.2 Outro exemplo : colunas Floats podem ser usados para construir colunas em um documento. Para criá-las, estruturamos no código HTML usando <div> como mostrado a seguir: Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1 2 3 4 < div id = " c o l u m n 1" > <p > Haec d i s s e r e n s qua de re agatur et in quo causa c o n s i s t a t non videt ... </ p > </ div > 5 6 7 8 9 < div id = " c o l u m n 2" > <p > causas n a t u r a l e s et antecedentes , idciro etiam n o s t r a r u m v o l u n t a t u m ... </ p > </ div > 10 11 12 13 14 < div id = " c o l u m n 3" > <p > nam nihil esset in nostra p o t e s t a t e si res ita se h a b e r e t ... </ p > </ div > A seguir definimos a largura de cada coluna, por exemplo 33%, e declaramos float: left; para cada uma das colunas: 1 2 3 4 # column1 { float : left ; width : 33%; } 5 6 7 8 9 # column2 { float : left ; width : 33%; } 10 11 12 13 14 # column3 { float : left ; width : 33%; } float pode ser declarado left, right ou none. 2.9.3 A propriedade clear A propriedade clear é usada para controlar o comportamento dos elementos que se seguem aos elementos floats no documento. Por padrão, o elemento subsequente a um float, ocupa o espaço livre ao lado do elemento flutuado. Veja no exemplo acima que o texto deslocou-se automaticamente para o lado da foto de Bill Gates. A propriedade clear pode assumir os valores left, right, both ou none. A regra geral é: se clear, for por exemplo definido both para um box, a margem superior deste box será posicionada sempre abaixo da margem inferior dos boxes flutuados que estejam antes dele no código. 1 2 3 < div id = " p i c t u r e" > < img src = " bill . jpg " alt = " Bill Gates " > </ div > 4 5 <h1 > Bill Gates </ h1 > 6 7 8 <p class = " f l o a t s t o p" > causas n a t u r a l e s et antecedentes , idciro etiam n o s t r a r u m v o l u n t a t u m ... </ p > Para evitar que o texto se posicione no espaço livre deixado pela foto do Bill Gates basta adicionar a seguinte regra CSS: 1 2 3 4 # picture { float : left ; width : 100 px ; } Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 5 6 7 8 . floatstop { clear : both ; } 2.10 Posicionando elementos Com posicionamento CSS podemos colocar um elemento em uma posição exata na página. Combinado com floats, o posicionamento abre muitas possibilidades para criação de layouts precisos e avançados. 2.10.1 O princípio de posicionamento CSS Considere a janela do navegador como um sistema de coordenadas: Figura 17: Janela do navegador O princípio de posicionamento CSS estabelece que você pode posicionar um elemento em qualquer lugar na tela usando um sistema de coordenadas. 2.10.2 Posicionamento absoluto Um elemento posicionado absolutamente não cria nenhum espaço no documento. Isto significa que não deixa nenhum espaço vazio após ser posicionado. Para posicionar um elemento de forma absoluta a propriedade position deve ser definida para absolute. Você pode então usar as propriedades left, right, top, e bottom para definir as coordenadas e posicionar o elemento. Para exemplificar o posicionamento absoluto escolhemos colocar quatro boxes nos quatro cantos da página: 1 2 3 4 5 # box1 { p o s i t i o n: a b s o l u t e; top : 50 px ; left : 50 px ; } 6 7 8 9 10 11 12 # box2 { p o s i t i o n: a b s o l u t e; top : 50 px ; right : 50 px ; } Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 13 14 15 16 17 # box3 { p o s i t i o n: a b s o l u t e; bottom : 50 px ; right : 50 px ; } 18 19 20 21 22 23 # box4 { p o s i t i o n: a b s o l u t e; bottom : 50 px ; left : 50 px ; } 2.10.3 Posicionamento relativo Para posicionar um elemento de forma relativa a propriedade position deve ser definida para relative. A diferença entre os dois tipos de posicionamento é a maneira como o posicionamento é calculado. O posicionamento para posição relativa é calculado com base na posição original do elemento no documento. Isto significa uma movimentação do elemento para a esquerda, para a direita, para cima ou para baixo. Assim fazendo o elemento ocupa um espaço após ser posicionado. Como exemplo de posicionamento relativo vamos tentar posicionar três imagens relativamente as suas posições originais na página. Notar como as imagens deixam um espaço vazio nas suas posições originais no documento: 1 2 3 4 5 6 7 <! D O C T Y P E HTML > < html > < head > < title > P o s i c i o n a m e n t o com CSS </ title > < meta c h a r s e t=" utf -8 " > < link rel = " s t y l e s h e e t" href = " p o s i c a o R e l a t i v a . css " type = " text / css " > </ head > 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 < body > < div id = " dog1 " > < img src = " P l u t o _ 1. png " / > </ div > < div id = " dog2 " > < img src = " P l u t o _ 1. png " / > </ div > < div id = " dog3 " > < img src = " P l u t o _ 1. png " / > </ div > </ body > </ html > # dog1 { p o s i t i o n: r e l a t i v e; left : 50 px ; top : 0; } # dog2 { p o s i t i o n: r e l a t i v e; left : 350 px ; top : 0; } # dog3 { p o s i t i o n: r e l a t i v e; left : 50 px ; top : 0; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 15 } Figura 18: Exemplo posicionamento relativo Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 3 Construindo um exemplo Para aplicarmos o que foi aprendido até o momento, nosso objetivo será criar um site, conforme a figura 19 abaixo: Figura 19: Página de exemplo Como ainda não aprendemos javascript e os conceitos de AJAX, criaremos um arquivo para cada opção do nosso menu: • Página Principal = index.html • Sobre = sobre.html • Contato = contato.html • Estilização = layout.css A arvore de diretórios para o nosso site, ficará conforme figura 20: Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Figura 20: Diretórios do site de exemplo 3.1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Arquivo: index.html <! D O C T Y P E html > < html > < head > < title > C E F E T M G - Aplica & ccedil ;& otilde ; es WEB </ title > < meta c h a r s e t=" utf -8 " > <! - - I m p o r t a n d o a folha de estilo CSS para o HTML --> < link rel = " s t y l e s h e e t" type = " text / css " href = " css / layout . css " > </ head > < body > < div class = " c o n t a i n e r" > <! - - MENU --> < div class = " menu " > < ul class = " menu - top" > <li > < a href = " # " > IN & iacute ; CIO </ a > </ li > <li > < a href = " sobre . html " > SOBRE </ a > </ li > <li > < a href = " c o n t a t o. html " > CONTATO </ a > </ li > </ ul > </ div > <! - - P R I N C I P A L --> < div class = " main " > <! - - Box para as i m a g e n s --> < div class = " box - left " > < img src = " img / logo1 . jpg " / > </ div > < div class = " box - right " > < img src = " img / logo2 . jpg " / > </ div > < div class = " box - text1 " > <p > Lorem ipsum dolor sit amet , c o n s e c t e t u e r a d i p i s c i n g elit , sed diam n o n u m m y nibh e u i s m o d t i n c i d u n t ut l a o r e e t dolore magna a l i q u a m erat v o l ut p a t. Ut wisi enim ad minim veniam , quis n o s t r u d exerci tation u l l a m c o r p e r s u s c ip i t l o b o r t i s nisl ut a l i q u i p ex ea c o m m o d o c o n s e q u a t. Duis autem vel eum iriure dolor in h e n d r e r i t in v u l p u t a t e velit esse m o l e s t i e consequat , vel illum dolore eu f e u g i a t nulla f a c i l i s i s at vero eros et a c c u m s a n et iusto ... Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 </p > <! - - Botão de leia mais --> <a href = " # " id = " leia " > Leia mais ... </ a > </ div > < div class = " box - text2 " > <p > Lorem ipsum dolor sit amet , c o n s e c t e t u e r a d i p i s c i n g elit , sed diam n o n u m m y nibh e u i s m o d t i n c i d u n t ut l a o r e e t dolore magna a l i q u a m erat v o l ut p a t. Ut wisi enim ad minim veniam , quis n o s t r u d exerci tation u l l a m c o r p e r s u s c ip i t l o b o r t i s nisl ut a l i q u i p ex ea c o m m o d o c o n s e q u a t. Duis autem vel eum iriure dolor in h e n d r e r i t in v u l p u t a t e velit esse m o l e s t i e consequat , vel illum dolore eu f e u g i a t nulla f a c i l i s i s at vero eros et a c c u m s a n et iusto ... </p > <! - - Botão de leia mais --> <a href = " # " id = " leia " > Leia mais ... </ a > </ div > </ div > <! - - RODAPÉ --> < div class = " footer " > < div class = " footer - box " > <ul > <li > < h4 > MENU </ h4 > </ li > <li > < a href = " # " > In & iacute ; cio </ a > </ li > <li > < a href = " # " > Sobre </a > </ li > <li > < a href = " # " > Contato </ a > </ li > </ ul > </ div > < div class = " footer - box " > <ul > <li > < h4 > QUEM SOMOS </ h4 > </ li > <li > < a href = " # " > Onde estamos </a > </ li > <li > < a href = " # " > Parceiros </ a > </ li > <li > < a href = " # " > T r a b a l h e conosco </ a > </ li > </ ul > </ div > < div class = " footer - box " > <ul > <li > < h4 > REDES SOCIAIS </ h4 > </ li > <li > < a href = " # " > Twitter </ a > </ li > <li > < a href = " # " > Facebook </a > </ li > <li > < a href = " # " > Youtube </ a > </ li > </ ul > </ div > < div class = " c o p y r i g h t" > <h5 > C E F E T M G - Aplica & ccedil ;& otilde ; es WEB & copy ; C o p y r i g h t 2016 Todos os d i r e i t o s reservados </ h5 > </ div > </ div > </ div > 84 85 86 </ body > </ html > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 3.2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Arquivo: sobre.html <! D O C T Y P E html > < html > < head > < title > C E F E T M G - Aplica & ccedil ;& otilde ; es WEB </ title > < meta c h a r s e t=" utf -8 " > <! - - I m p o r t a n d o a folha de estilo CSS para o HTML --> < link rel = " s t y l e s h e e t" type = " text / css " href = " css / layout . css " > </ head > < body > < div class = " c o n t a i n e r" > <! - - MENU --> < div class = " menu " > < ul class = " menu - top" > <li > < a href = " index . html " > IN & iacute ; CIO </a > </ li > <li > < a href = " # " > SOBRE </a > </ li > <li > < a href = " c o n t a t o. html " > CONTATO </ a > </ li > </ ul > </ div > <! - - P R I N C I P A L --> < div class = " main " > < div class = " sobre " > <h2 > SOBRE N & Oacute ;S </ h2 > 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 <p > Lorem ipsum dolor sit amet , c o n s e c t e t u e r a d i p i s c i n g elit , sed diam n o n u m m y nibh e u i s m o d t i n c i d u n t ut l a o r e e t dolore magna a l i q u a m erat v o l ut p a t. Ut wisi enim ad minim veniam , quis n o s t r u d exerci tation u l l a m c o r p e r s u s c ip i t l o b o r t i s nisl ut a l i q u i p ex ea c o m m o d o c o n s e q u a t. Duis autem vel eum iriure dolor in h e n d r e r i t in v u l p u t a t e velit esse m o l e s t i e consequat , vel illum dolore eu f e u g i a t nulla f a c i l i s i s at vero eros et a c c u m s a n et iusto . </p > <p > Lorem ipsum dolor sit amet , c o n s e c t e t u e r a d i p i s c i n g elit , sed diam n o n u m m y nibh e u i s m o d t i n c i d u n t ut l a o r e e t dolore magna a l i q u a m erat v o l ut p a t. Ut wisi enim ad minim veniam , quis n o s t r u d exerci tation u l l a m c o r p e r s u s c ip i t l o b o r t i s nisl ut a l i q u i p ex ea c o m m o d o c o n s e q u a t. Duis autem vel eum iriure dolor in h e n d r e r i t in v u l p u t a t e velit esse m o l e s t i e consequat , vel illum dolore eu f e u g i a t nulla f a c i l i s i s at vero eros et a c c u m s a n et iusto . </p > <p > Lorem ipsum dolor sit amet , c o n s e c t e t u e r a d i p i s c i n g elit , sed diam n o n u m m y nibh e u i s m o d t i n c i d u n t ut l a o r e e t dolore magna a l i q u a m erat v o l ut p a t. Ut wisi enim ad minim veniam , quis n o s t r u d exerci tation u l l a m c o r p e r s u s c ip i t l o b o r t i s nisl ut a l i q u i p ex ea c o m m o d o c o n s e q u a t. Duis autem vel eum iriure dolor in h e n d r e r i t in v u l p u t a t e velit esse m o l e s t i e consequat , vel illum dolore eu f e u g i a t nulla f a c i l i s i s at vero eros et a c c u m s a n et iusto . </p > </ div > <! - - RODAPÉ --> < div class = " footer " > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 < div class = " footer - box " > <ul > <li > < h4 > MENU </ h4 > </ li > <li > < a href = " # " > In & iacute ; cio </ a > </ li > <li > < a href = " # " > Sobre </a > </ li > <li > < a href = " # " > Contato </ a > </ li > </ ul > </ div > < div class = " footer - box " > <ul > <li > < h4 > QUEM SOMOS </ h4 > </ li > <li > < a href = " # " > Onde estamos </a > </ li > <li > < a href = " # " > Parceiros </ a > </ li > <li > < a href = " # " > T r a b a l h e conosco </ a > </ li > </ ul > </ div > < div class = " footer - box " > <ul > <li > < h4 > REDES SOCIAIS </ h4 > </ li > <li > < a href = " # " > Twitter </ a > </ li > <li > < a href = " # " > Facebook </a > </ li > <li > < a href = " # " > Youtube </ a > </ li > </ ul > </ div > < div class = " c o p y r i g h t" > <h5 > C E F E T M G - Aplica & ccedil ;& otilde ; es WEB & copy ; C o p y r i g h t 2016 Todos os d i r e i t o s reservados </ h5 > </ div > </ div > </ div > 74 75 76 </ body > </ html > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 3.3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Arquivo: contato.html <! D O C T Y P E html > < html > < head > < title > C E F E T M G - Aplica & ccedil ;& otilde ; es WEB </ title > < meta c h a r s e t=" utf -8 " > <! - - I m p o r t a n d o a folha de estilo CSS para o HTML --> < link rel = " s t y l e s h e e t" type = " text / css " href = " css / layout . css " > </ head > < body > < div class = " c o n t a i n e r" > <! - - MENU --> < div class = " menu " > < ul class = " menu - top" > <li > < a href = " index . html " > IN & iacute ; CIO </a > </ li > <li > < a href = " sobre . html " > SOBRE </ a > </ li > <li > < a href = " # " > CONTATO </ a > </ li > </ ul > </ div > <! - - P R I N C I P A L --> < div class = " main " > < div class = " c o n t a t o" > <h2 > CONTATO </ h2 > <hr > 24 25 26 27 < form > < label for = " nome " >* Nome : </ label > < br > < input type = " text " name = " nome " / > <br > 28 29 30 < label for = " email " >* Email : </ label > <br > < input type = " text " name = " email " / > <br > 31 32 33 < label for = " a s s u n t o" > A s s u n t o: </ label > <br > < input type = " text " name = " a s s u n t o" / > <br > 34 35 36 < label for = " msg " > M e n s a g e m : </ label > <br > < t e x t a r e a name =" msg " cols = " 35 " rows = " 4 " id = " msg" > </ textarea > < br > 37 38 39 < input type = " submit " name = " enviar " value = " Enviar M e n s a g e m" id = " enviar " ><br > </ form > 40 41 42 43 < div class = " c o n t a c t" > <h2 > T e l e f o n e : </ h2 > <h4 >(099) 9999 -9999 </h4 > 44 45 46 <h2 > Onde E s t a m o s : </ h2 > <h4 > Avn . das Ac & aacute ; cias , 22 </ h4 > 47 48 49 50 <h2 > Cidade / Estado </ h2 > <h4 > Algum lugar , Estado , Brasil </ h4 > </ div > 51 52 53 54 55 56 57 58 < div class = " campo " > <hr > <i > Os campos com * s & atilde ; o o b r i g a t& oacute ; rios </ i > </ div > </ div > </ div > <! - - RODAPÉ --> Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 < div class = " footer " > < div class = " footer - box " > <ul > <li > < h4 > MENU </ h4 > </ li > <li > < a href = " # " > In & iacute ; cio </ a > </ li > <li > < a href = " # " > Sobre </a > </ li > <li > < a href = " # " > Contato </ a > </ li > </ ul > </ div > < div class = " footer - box " > <ul > <li > < h4 > QUEM SOMOS </ h4 > </ li > <li > < a href = " # " > Onde estamos </a > </ li > <li > < a href = " # " > Parceiros </ a > </ li > <li > < a href = " # " > T r a b a l h e conosco </ a > </ li > </ ul > </ div > < div class = " footer - box " > <ul > <li > < h4 > REDES SOCIAIS </ h4 > </ li > <li > < a href = " # " > Twitter </ a > </ li > <li > < a href = " # " > Facebook </a > </ li > <li > < a href = " # " > Youtube </ a > </ li > </ ul > </ div > < div class = " c o p y r i g h t" > <h5 > C E F E T M G - Aplica & ccedil ;& otilde ; es WEB & copy ; C o p y r i g h t 2016 Todos os d i r e i t o s reservados </ h5 > </ div > </ div > </ div > 89 90 91 </ body > </ html > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 3.4 1 2 3 4 5 6 7 8 Arquivo: layout.css body { b a c k g r o u n d : # E5E5E5 ; margin : 0; p a d d i n g: 0; font - family : Tahoma , arial , v e r d a n a; font - size : 13 px ; color : # 000; } 9 10 a{ text - d e c o r a t i o n: none ; color : # 000; 11 12 13 } 14 15 ul { list - style : none ; margin : 0; p a d d i n g: 0; 16 17 18 19 } 20 21 22 23 24 25 . c o n t a i n e r{ margin : 0 auto ; width : 750 px ; height : auto ; } 26 27 28 29 30 31 32 33 /* Menu */ . menu { b a c k g r o u n d : # ccc ; width : 751 px ; height : 35 px ; margin : 70 px 0 0 0; p a d d i n g: 0; 34 box - shadow : 1 px 1 px 3 px # 8 8 8 8 8 8 ; - moz - box - shadow : 1 px 1 px 3 px # 8 8 8 8 8 8 ; - webkit - box - shadow : 1 px 1 px 3 px # 8 8 8 8 8 8 ; border - radius : 2 px ; text - shadow : 0 px 2 px 3 px # 666; 35 36 37 38 39 40 } 41 42 . menu li { d i s p l a y: inline ; } 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 . menu - top li a { width : 50 px ; height : 15 px ; p a d d i n g: 8 px 40 px ; float : left ; /* text - shadow : 0 px 2 px 3 px #666; */ } . menu - top li a : hover { background: # 393939; color : # fff ; border - bottom : solid 4 px # FF8C00 ; border - radius : 2 px ; text - shadow : 1 px 0 px 1 px # fff ; } 58 59 /* Main */ Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 60 61 62 63 64 65 . main { width : 750 px ; height : auto ; float : left ; margin : 15 px 0 15 px 0; } 66 67 68 69 70 71 72 . main . box - left { width : 350 px ; height : 190 px ; float : left ; b a c k g r o u n d : # FFFFF0 ; } 73 74 75 76 77 78 79 80 . main . box - right { width : 350 px ; height : 190 px ; float : right ; margin - right : 15 px ; b a c k g r o u n d : # FFFFF0 ; } 81 82 83 84 85 86 87 88 89 90 . main . box - text1 { width : 335 px ; height : 170 px ; margin - top : 18 px ; float : left ; b a c k g r o u n d : # FFFFF0 ; p a d d i n g: 15 px ; text - align : j u s t i f y; } 91 92 93 94 95 96 97 98 99 100 . main . box - text2 { width : 335 px ; height : 170 px ; margin - top : 18 px ; float : right ; b a c k g r o u n d : # FFFFF0 ; p a d d i n g: 15 px ; text - align : j u s t i f y; } 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 # leia { width : 70 px ; height : auto ; p a d d i n g: 3 px 20 px ; background: # 222222; color : # FFF ; border - bottom : solid 3 px # FF8C00 ; border - top : 0 px ; border - left : 0 px ; border - right : 0 px ; font - weight : normal ; float : left ; cursor : p o i n t e r; } 116 117 # leia : hover { text - shadow : 0 px 2 px 3 px #666; } 118 119 120 /* FOOTER */ Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 121 122 123 124 125 126 127 128 . footer { width : 750 px ; height : 160 px ; float : left ; b a c k g r o u n d: # 3 9 3 9 3 9 ; color : # FFFFE0 ; margin - bottom : 15 px ; } 129 130 131 132 133 134 . footer - box { width : 245 px ; height : 130 px ; float : left ; } 135 136 . footer - box ul { margin - left : 50 px ; } 137 138 . footer - box li a { color : # fff ; } 139 140 141 142 143 144 145 . footer - box li a : hover { color : # fff ; b a c k g r o u n d : # 1 C1C1C ; border - bottom : solid 2 px # FF8C00 ; p a d d i n g: 0 px 5 px ; } 146 147 148 149 150 . footer - box h4 { text - shadow : 1 px 0 px 1 px # 1 C1C1C ; font - style : i n h e r i t; } 151 152 153 154 155 156 157 158 159 . footer . c o p y r i g h t{ width : 100%; height : 30 px ; float : left ; b a c k g r o u n d : # 1 C1C1C ; text - align : center ; border - top : solid 2 px # FF8C00 ; } 160 161 . footer . c o p y r i g h t h5 { margin - top : 8 px ; } 162 163 /* PAGINA SOBRE */ 164 165 166 167 168 169 170 171 172 173 . sobre { width : 720 px ; height : auto : float : left ; p a d d i n g: 15 px ; b a c k g r o u n d : # FFFFFF ; text - align : j u s t i f y; margin - bottom : 15 px ; } 174 175 /* C o n t a t o */ 176 177 178 179 180 181 . c o n t a t o{ width : 720 px ; height : auto ; float : left ; p a d d i n g: 15 px ; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 182 183 184 185 186 187 188 189 190 b a c k g r o u n d : # FFFFFF ; } input { width : 302 px ; height : 20 px ; color : # 3 9 3 9 3 9 ; font - size : 14 px ; font - weight : bold ; } 191 192 193 194 195 196 197 198 label { width : 250 px ; height : 20 px : color : # 2 2 2 2 2 2 ; font - size : 14 px ; font - weight : bold ; } 199 200 t e x t a r e a{ width : 302 px ; } 201 202 203 204 205 206 form { width : 350 px ; height : auto ; float : left ; } 207 208 209 210 211 212 213 . c o n t a c t{ width : 350 px ; height : 255 px ; float : right ; color : # 2 2 2 2 2 2 ; } 214 215 216 217 218 219 220 . campo { width : 100%; float : left ; margin - top : 10 px ; color : # 2 2 2 2 2 2 ; } 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 # enviar { width : 150 px ; height : auto ; p a d d i n g: 3 px 20 px ; background: # 222222; color : # FFF ; border - bottom : solid 3 px # FF8C00 ; border - top : 0 px ; border - left : 0 px ; border - right : 0 px ; font - weight : normal ; float : left ; margin : 10 px 0 0 157 px ; cursor : p o i n t e r; } Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 4 Javascript Para rodar JavaScript em uma página Web, precisamos ter em mente que a execução do código é instantânea. Para inserirmos um código JavaScript em uma página, é necessário utilizar a tag <script> : 1 2 3 < script > alert ( " Hello World ! ") ; </ script > O exemplo acima é um hello world em JavaScript utilizando uma função do navegador, a função alert. É possível adicionar essa tag em qualquer local do documento que a sua renderização ficará suspensa até o término dessa execução. Experimente criando essa tag em um HTML e reposicionando-a, verifique os elementos que já foram renderizados na página antes do aparecimento da caixa de diálogo e o que acontece após clicar em ”OK”. Também é possível executar código que está em um arquivo externo, por exemplo: No arquivo HTML 1 < script src = " s c r i p t s/ hello . js " > </ script > Arquivo externo script/hello.js 1 alert ( " Hello World ! ") ; Com a separação do script em arquivo externo é possível reaproveitar alguma funcionalidade em mais de uma página. 4.1 Variáveis Para armazenarmos um valor para uso posterior, podemos criar uma variável: 1 var curso = " WD -43 " ; 2 3 alert ( curso ) ; No exemplo acima, guardamos o valor WD-43 na variável curso . A partir desse ponto, é possível utilizar a variável para obter o valor que guardamos nela. No JavaScript, também é possível alterar o valor da variável a qualquer momento, inclusive por valores de tipos diferentes (por exemplo, um número) sem problemas, coisa que não é possível de se fazer em algumas outras linguagens de programação. 4.2 Tipos O JavaScript dá suporte aos tipos String (letras e palavras), Number (números inteiros, decimais), Boolean (verdadeiro ou falso) entre outros. 1 2 3 var texto = " Uma String deve ser e n v o l v i d a em aspas s i m p l e s ou duplas . "; var numero = 2012; var v e r d a d e = true ; Outro tipo de informação que é considerado um tipo no JavaScript é o Array, onde podemos armazenar uma série de informações de tipos diferentes: 1 var p e s s o a s = [" I z a b e l i t a" , " S a b r i n a" , " Willl " , " Lucas " ]; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 4.3 Iteração Quando utilizamos o JavaScript para interagir com os elementos da página é muito comum obtermos cole- ções. Para fazer alguma coisa com cada elemento de uma coleção é necessário efetuar uma iteração. A mais comum é utilizando o for: 1 var p e s s o a s = [" I z a b e l i t a" , " S a b r i n a" , " Willl " , " Lucas " ]; 2 3 4 5 for ( var i = 0; i < p e s s o a s. length ; i ++) { alert ( p e s s o a s[ i ]) ; } 4.4 Interatividade na Web Observe o exemplo a seguir: 1 var titulo = d o c u m e n t. q u e r y S e l e c t o r (" # titulo " ) ; 2 3 titulo . t e x t C o n t e n t = " Agora o texto do e l e m e n t o mudou ! "; No exemplo anterior, nós selecionamos um elemento do documento e alteramos sua propriedade textContent. Existem diversas maneiras de selecionarmos elementos de um documento e de alterarmos suas propriedades. Inclusive é possível selecionar elementos de maneira similar ao CSS, através de seletores CSS: 1 var p a i n e l N o v i d a d e s = d o c u m e n t. q u e r y S e l e c t o r (" . painel # n o v i d a d e s") ; 2 3 p a i n e l N o v i d a d e s . style . color = " red " ; querySelector vs querySelectorAll A função querySelector sempre retorna um elemento, mesmo que o seletor potencialmente traga mais de um elemento, neste caso, apenas o primeiro elemento será retornado. A função querySelectorAll retorna uma lista de elementos compatíveis com o seletor CSS passado como argumento. Sendo assim, para acessarmos cada elemento retornado, precisaremos passar o seu índice conforme o exemplo abaixo: 1 2 3 var p a r a g r a f o s = d o c u m e n t. q u e r y S e l e c t o r A l l (" div p " ) ; p a r a g r a f o s [0]. t e x t C o n t e n t = " P r i m e i r o p a r a g r a f o da s e l e c a o" ; p a r a g r a f o s [1]. t e x t C o n t e n t = " S e g u n d o p a r a g r a f o da s e l e c a o"; Apesar de ser interessante a possibilidade de alterar o documento todo por meio do JavaScript, existe um problema com a característica de execução imediata do código. O mais comum é que as alterações sejam feitas quando o usuário executa alguma ação, como por exemplo, clicar em um elemento. Para suprir essa necessidade, é necessário utilizar de dois recursos do JavaScript no navegador. O primeiro é a criação de funções: 1 2 3 f u n c t i o n m o s t r a A l e r t a () { alert ( " F u n c i o n a! ") ; } Ao criarmos uma função, a execução do código simplesmente guarda o que estiver dentro da função, e esse código guardado só será executado quando chamarmos a função. Para exemplificar a necessidade citada acima, vamos utilizar o segundo recurso, os eventos: 1 2 3 4 <! D O C T Y P E HTML > < html lang = " pt - br " > < head > < title > T e s t a n d o JavaScript </ title > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 5 6 7 8 9 10 11 12 13 14 15 16 17 18 < meta c h a r s e t=" utf -8 " > < script l a n g u a g e=" J a v a s c r i p t" > f u n c t i o n m o s t r a A l e r t a () { alert ( " F u n c i o n a! " ) ; } </ script > </ head > < body > < div class = " Topo " > <P > Clique aqui para testar o javascript </p > < input type =" button " name = " enviar " value = " Testar " o n c l i c k= " m o s t r a A l e r t a () " > </ div > </ body > </ html > Também podemos executar uma função, através de uma chamada executada em outra função. Observe o exemplo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <! D O C T Y P E HTML > < html lang = " pt - br " > < head > < title > T e s t a n d o JavaScript </ title > < meta c h a r s e t=" utf -8 " > < script l a n g u a g e=" J a v a s c r i p t" > f u n c t i o n m o s t r a A l e r t a () { alert ( " F u n c i o n a! " ) ; } f u n c t i o n e x e c u t a r () { var botao = d o c u m e n t. q u e r y S e l e c t o r (" # enviar " ) ; botao . o n c l i c k = m o s t r a A l e r t a; } </ script > </ head > < body > < div class = " Topo " > < span hidden =" hidden " > e x e c u t a r () </ span > <P > Clique aqui para testar o javascript </p > < input type =" button " name = " enviar " value = " Testar " o n c l i c k= " m o s t r a A l e r t a () " > </ div > </ body > </ html > Também é possível determinar, por meio de seus argumentos, que a função vai ter algum valor variável que vamos definir quando quisermos executá-la: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <! D O C T Y P E HTML > < html lang = " pt - br " > < head > < title > T e s t a n d o JavaScript </ title > < meta c h a r s e t=" utf -8 " > < script l a n g u a g e=" J a v a s c r i p t" > f u n c t i o n m o s t r a A l e r t a ( texto ) { alert ( texto ) ; } </ script > </ head > < body > < div class = " Topo " > <P > Clique aqui para testar o javascript </p > < input type =" button " name = " enviar " value = " Testar " o n c l i c k= " m o s t r a A l e r t a ( ’ F u n c i o n a com a r g u m e n t o !! ’)" > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 16 17 18 19 <! - - OBS : USO DAS ASPAS S I M P L E S NA P A S S A G E M DO A R G U M E N T O --> </ div > </ body > </ html > Existem diversos eventos que podem ser utilizados para que a interação do usuário com a página seja o ponto de disparo de funções que alteram os elementos da própria página: • onclick: clica com o mouse • ondblclick: clica duas vezes com o mouse • onmousemove: mexe o mouse • onmousedown: aperta o botão do mouse • onmouseup: solta o botão do mouse (útil com os dois acima para gerenciar drag?n?drop) • onkeypress: ao pressionar e soltar uma tecla • onkeydown: ao pressionar uma tecla. • onkeyup: ao soltar uma tecla. Mesmo acima. • onblur: quando um elemento perde foco • onfocus: quando um elemento ganha foco • onchange: quando um input, select ou textarea tem seu valor alterado • onload: quando a página é carregada • onunload: quando a página é fechada • onsubmit: disparado antes de submeter o formulário. Útil para realizar validações Existem também uma série de outros eventos mais avançados que permitem a criação de interações para drag-and-drop, e até mesmo a criação de eventos customizados. 4.5 Validação na busca com JavaScript Vamos criar um formulário e utilizar o Google como mecanismo de busca, apenas como ilustração. Para isso, crie o arquivo html conforme abaixo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <! D O C T Y P E HTML > < html lang = " pt - br " > < head > < title > T e s t a n d o JavaScript </ title > < meta c h a r s e t=" utf -8 " > </ head > < body > < div class = " c o n t a i n e r" > <P > I n f o r m e o texto para r e a l i z a r a busca : </ p > < form action =" http :// www . google . com . br / search " id = " form - busca " > < input type =" search " name = " q " id = " q " > < input type =" submit " name = " enviar " value = " P e s q u i s a r" > </ div > </ body > </ html > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Repare que colocamos também um id . Ele será útil para depois manipularmos esse elemento via JavaScript. Além disso, o <input> com o texto a ser buscado deve ter o nome de q para ser compatível com o Google. Teste a página e submeta uma busca simples para o Google com o nosso formulário. Vamos agora fazer uma validação, para verificar se o valor foi preenchido, quando o usuário clicar em submeter. Caso contrário nosso site irá mostrar uma mensagem de erro em um alert . A validação será escrita em JavaScript. Assim, crie um arquivo pesquisa.js na pasta do projeto. Referencie esse arquivo no seu html usando a tag <script> no final da página, logo antes de fechar o </body>: 1 < script src = " p e s q u i s a. js " > </ script > A validação em si será feita por uma função JavaScript a ser acionada no momento que o usuário tentar submeter o formulário. A função deve ser definida dentro do arquivo pesquisa.js criado antes. Seu papel é verificar se o elemento com id=q (o campo de busca) está vazio. Se estiver, mostramos um alert e abortamos a submissão do formulário com return false: 1 2 3 4 5 6 7 8 f u n c t i o n v a l i d a B u s c a () { if ( d o c u m e n t. q u e r y S e l e c t o r ( ’# q ’) . value == ’ ’) { alert ( ’ Nao podia ter d e i x a d o em branco !!! ’) ; return false ; } } // f a z e n d o a a s s o c i a c a o da funcao com o evento d o c u m e n t. q u e r y S e l e c t o r ( ’# form - busca ’) . o n s u b m i t = v a l i d a B u s c a; Desta forma verificamos se o <input type=’text’> está vazio, deixando que o navegador chame a função quando acontecer o evento onsubmit. Se ao invés de enviar um alerta de erro você desejar, por exemplo, chamar a atenção modificando a cor do formulário, o código da função deverá ser ajustado assim: 1 2 3 4 5 6 7 8 f u n c t i o n v a l i d a B u s c a () { if ( d o c u m e n t. q u e r y S e l e c t o r ( ’# q ’) . value == ’ ’) { d o c u m e n t. q u e r y S e l e c t o r ( ’# form - busca ’) . style . b a c k g r o u n d = ’ red ’; return false ; } } // f a z e n d o a a s s o c i a ç ã o da função com o evento d o c u m e n t. q u e r y S e l e c t o r ( ’# form - busca ’) . o n s u b m i t = v a l i d a B u s c a; No exemplo anterior criamos uma função JavaScript com nome validaBusca e a referenciamos no onsubmit do formulário. Mas repare que o único uso dessa função é nessa situação. Nesses casos, podemos usar um recurso do JavaScript chamado de funções anônimas que nos permite definir a função diretamente na definição do onsubmit. Veja como fica nosso exemplo: 1 2 3 4 5 6 d o c u m e n t. q u e r y S e l e c t o r ( ’# form - busca ’) . o n s u b m i t = f u n c t i o n () { if ( d o c u m e n t. q u e r y S e l e c t o r ( ’# q ’) . value == ’ ’) { d o c u m e n t. q u e r y S e l e c t o r ( ’# form - busca ’) . style . b a c k g r o u n d = ’ red ’; return false ; } }; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 4.6 Funções temporais Em JavaScript, podemos criar um timer para executar um trecho de código após um certo tempo, ou ainda executar algo de tempos em tempos. A função setTimeout permite que agendemos alguma função para execução no futuro e recebe o nome da função a ser executada e o número de milissegundos a esperar: 1 2 // e x e c u t a a m i n h a F u n c a o daqui um s e g u n d o s e t T i m e o u t ( minhaFuncao , 1000) ; Se for um código recorrente, podemos usar o setInterval que recebe os mesmos argumentos mas executa a função indefinidamente de tempos em tempos: 1 2 // e x e c u t a a m i n h a F u n c a o de um em um s e g u n d o s e t I n t e r v a l ( minhaFuncao , 1000) ; uma função útil para, por exemplo, implementar um banner rotativo. clearInterval As funções temporais devolvem um objeto que representa o agendamento que foi feito. É possível usá-lo para cancelar a execução no futuro. É especialmente interessante para o caso do interval que pode ser cancelado de sua execução infinita: 1 2 3 4 // agenda uma e x e c u c a o q u a l q u e r var timer = s e t I n t e r v a l ( minhaFuncao , 1000) ; // c a n c e l a e x e c u c a o c l e a r I n t e r v a l ( timer ) ; 4.6.1 Exemplo: Banner rotativo Temos duas imagens, a imagem1.jpg e a imagem2.jpg que queremos trocar a cada 3 segundos. Há várias formas de implementar essa troca de imagens. Uma sugestão é manter um array com os valores possíveis para a imagem e um inteiro que guarda qual é o banner atual. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <! D O C T Y P E HTML > < html lang = " pt - br " > < head > < title > T e s t a n d o JavaScript </ title > < meta c h a r s e t=" utf -8 " > < style rel = " s t y l e s h e e t" type = " text / css " media = " all " > . Topo img { max - width : 700 px ; max - height : 230 px ; width : auto ; height : auto ; } </ style > </ head > < body > < div class = " Topo " > < img src = " i m a g e m 1. jpg" > </ div > < script l a n g u a g e=" J a v a s c r i p t" > var b a n n e r s = [" i m a g e m 1. jpg " , " i m a g e m 2. jpg " ]; var b a n n e r A t u a l = 0; f u n c t i o n t r o c a B a n n e r () { b a n n e r A t u a l = ( b a n n e r A t u a l + 1) % 2; d o c u m e n t. q u e r y S e l e c t o r ( ’. Topo img ’) . src = b a n n e r s[ b a n n e r A t u a l ]; } Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 26 27 28 29 s e t I n t e r v a l( trocaBanner , 3000) ; </ script > </ body > </ html > 4.6.2 Desafio 1 1. Faça um botão de pause que pare a troca do banner. Dica: use o clearInterval para interromper a execução. 2. Faça um botão de play para reativar a troca dos banners. 4.6.3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 Proposta de solução para o desafio 1 <! D O C T Y P E HTML > < html lang = " pt - br " > < head > < title > T e s t a n d o JavaScript </ title > < meta c h a r s e t=" utf -8 " > < style rel = " s t y l e s h e e t" type = " text / css " media = " all " > . Topo img { float : left ; max - width : 700 px ; max - height : 230 px ; width : auto ; height : auto ; } . pause , . play { d i s p l a y: block ; float : left ; } . pause { border - left : 10 px solid # 900; border - right : 10 px solid # 900; height : 30 px ; width : 5 px ; } . play { border - left : 25 px solid # 900; border - bottom : 15 px solid t r a n s p a r e n t; border - top : 15 px solid t r a n s p a r e n t; } </ style > </ head > < body > < div class = " Topo " > < img src = " i m a g e m 1. jpg" > <a href = " # " class = " pause " > </a > </ div > < script l a n g u a g e=" J a v a s c r i p t" > var b a n n e r s = [" i m a g e m 1. jpg " , " i m a g e m 2. jpg " ]; var b a n n e r A t u a l = 0; f u n c t i o n t r o c a B a n n e r () { b a n n e r A t u a l = ( b a n n e r A t u a l + 1) % 2; d o c u m e n t. q u e r y S e l e c t o r ( ’. Topo img ’) . src = b a n n e r s[ b a n n e r A t u a l ]; } 43 44 45 46 var timer = s e t I n t e r v a l ( trocaBanner , 3000) ; var c o n t r o l e = d o c u m e n t. q u e r y S e l e c t o r ( ’. pause ’) ; c o n t r o l e. o n c l i c k = f u n c t i o n () { Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel if ( c o n t r o l e. c l a s s N a m e == ’ pause ’) { c l e a r I n t e r v a l ( timer ) ; c o n t r o l e. c l a s s N a m e = ’ play ’; } else { timer = s e t I n t e r v a l ( trocaBanner , 3000) ; c o n t r o l e. c l a s s N a m e = ’ pause ’; } return false ; 47 48 49 50 51 52 53 54 55 56 57 58 }; </ script > </ body > </ html > 4.6.4 Desafio 2 Faça um script que receba uma data no formato ”dd/mm/aaaa” e escreva a data por extenso. Exemplo: Para a entrada ”04/03/2016” deve ser escrito ”04 de março de 2016”. 4.6.5 1 2 3 4 5 6 7 8 9 Proposta de solução para o desafio 1 <! D O C T Y P E HTML > < html lang = " pt - br " > < head > < title > Desafio </ title > < meta c h a r s e t=" utf -8 " > < script > f u n c t i o n v e r i f i c a r () { data = d o c u m e n t. q u e r y S e l e c t o r ( ’. d a t a I n f o ’) . value ; // data = window . d o c u m e n t. formul . d a t a I n f o r m a d a . value ; 10 11 12 13 14 15 16 17 dt = data . split ( ’/ ’) ; dia = dt [0]; mes = dt [1]; ano = dt [2]; mes = p a r s e I n t( mes ) ; m e s E x t e n s o = [" j a n e i r o" , " f e v e r e i r o" , " março " , " abril " , " maio " , " junho " , " julho " , " agosto " , " s e t e m b r o" , " o u t u b r o" , " n o v e m b r o" , " d e z e m b r o" ]; mesExt = m e s E x t e n s o[ mes -1]; 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 d o c u m e n t. q u e r y S e l e c t o r ( ’# r e s u l t a d o ’) . i n n e r H T M L = dia + " de " + mesExt + " de " + ano ; // d o c u m e n t. g e t E l e m e n t B y I d (" r e s u l t a d o ") . i n n e r H T M L = dia + " de "+ m e s E x t e n s o +" de "+ ano ; } </ script > </ head > < body > <h1 > Data por extenso </ h1 > </ br > <hr > < form name = formul > < table border =0 > <tr > <td > < label for = " Data " > Data : </ label > </ td > </ tr > <tr > <td > < input type =" text " name = " d a t a I n f o r m a d a " class = " d a t a I n f o" / > </ td > <td > < input type = button value = V e r i f i c a r o n c l i c k=" v e r i f i c a r () " > </ td > </ tr > </ table > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 37 38 39 40 41 </ form > <hr > <h3 > < span id =" r e s u l t a d o" > </ span > </ h3 > </ body > </ html > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 4.7 jQuery O jQuery é uma grande biblioteca que contém diversas funções que facilitam a vida do programador. A mais importante delas, que inicia a maioria dos códigos, é a função $. Com ela é possível selecionar elementos com maior facilidade, maior compatibilidade, e com menos código. Por exemplo: 1 2 // J a v a S c r i p t " puro " var c a b e c a l h o = d o c u m e n t. g e t E l e m e n t B y I d (" c a b e c a l h o" ) ; 3 4 5 6 7 8 9 10 11 12 if ( c a b e c a l h o . a t t a c h E v e n t) { c a b e c a l h o. a t t a c h E v e n t (" o n c l i c k" , f u n c t i o n ( event ) { alert ( " Você clicou no cabeçalho , u s u á r i o do IE ! " ) ; }) ; } else if ( c a b e c a l h o . a d d E v e n t L i s t e n e r ) { c a b e c a l h o. a d d E v e n t L i s t e n e r (" click " , f u n c t i o n ( event ) { alert ( " Você clicou no c a b e ç a l h o! ") } , false ) ; } 13 14 15 16 17 // jQuery $ ( " # c a b e c a l h o" ) . click ( f u n c t i o n ( event ) { alert ( " Você clicou no c a b e ç a l h o! " ) ; }) ; Note como a sintaxe do jQuery é bem menor, e a biblioteca se encarrega de encontrar o modo mais compatível possível para adicionar o evento ao elemento cujo id é cabecalho. Existem diversas funções que o jQuery permite que utilizemos para alterar os elementos que selecionamos pela função $, e essas funções podem ser encadeadas, por exemplo: 1 2 $ ( " # c a b e c a l h o" ) . css ({ " margin - top " : " 20 px " , " color " : " # 3 3 3 3 3 3" }) . a d d C l a s s( " s e l e c i o n a d o ") ; No código acima, primeiramente chamamos a função $ e passamos como argumento uma String idêntica ao seletor CSS que utilizaríamos para selecionar o elemento de id cabecalho. Na sequência chamamos a função css e passamos um objeto como argumento, essa função adicionará ou alterará as informações desse objeto como propriedades de estilo do elemento que selecionamos com a função $. Em seguida chamamos mais uma função, a addClass, que vai adicionar o valor ”selecionado” ao atributo class do elemento com o id ”cabecalho”. Dessa maneira, é possível fazer muito mais com muito menos código, e ainda por cima de uma maneira que funciona em diversos navegadores. 4.7.1 Características de execução Para utilizarmos o jQuery em nossos projetos com maior segurança, devemos tomar alguns cuidados. Importação Antes de mais nada é necessário incluir o jQuery em nossa página. Só assim o navegador executará seu código para que possamos utilizar suas funcionalidades em nosso código. Por isso é necessário que a tag <script> do jQuery seja a primeira de todas na ordem de nosso documento: Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1 2 3 4 < script <! - - só < script < script src = " s c r i p t s/ jquery . js " > </ script > p o d e m o s u t i l i z a r o jQuery após sua i m p o r t a ç ã o --> src = " s c r i p t s/ m e u s c r i p t. js " > </ script > src = " s c r i p t s/ m e u o u t r o s c r i p t . js " </ script > Para utilizar a biblioteca jQuery, pode-se fazer o download: • através do site: http://jquery.com/download/ • via Git: git clone git://github.com/jquery/jquery.git • utilizar o link para a versão online: 1 4.7.2 < script src = " // code . jquery . com / jquery - 1 . 1 2 . 0 . min . js " > </ script > jQuery Selectors Um dos maiores poderes do jQuery está na sua capacidade de selecionar elementos a partir de seletores CSS. Como já aprendemos, exitem diversas formas de selecionarmos quais elementos ganharão determinado estilo. Infelizmente muitos desses seletores não funcionam em todos os navegadores. Contudo, no jQuery, os temos todos à nossa disposição. Por exemplo, se quisermos esconder todas as tags <td> filhas de um <tbody>, basta: 1 $ ( ’ tbody td ’) . hide () ; Seletores mais comuns: 1 2 // pinta o fundo do f o r m u l a r i o com id " form " de preto $ ( ’# form ’) . css ( ’ b a c k g r o u n d ’, ’ black ’) ; 3 4 5 // e s c o n d e todos os e l e m e n t o s com o a t r i b u t o " class " igual a " h e a d l i n e" $ ( ’. h e a d l i n e ’) . hide () ; 6 7 8 // muda o texto de todos os p a r á g r a f o s $ ( ’p ’) . text ( ’ alo : D ’) ; Mais exemplos: 1 $ ( ’ div > p : first ’) ; // o p r i m e i r o e l e m e n t o <p > i m e d i a t a m e n t e filho de um < div > 2 3 $ ( ’ input : hidden ’) ; // todos os inputs i n v i s i v e i s 4 5 $ ( ’ input : s e l e c t e d ’) ; // todas as c h e c k b o x e s s e l e c i o n a d a s 6 7 $ ( ’ input [ type = button ] ’) ; // todos os inputs com type =" button " 8 9 $ ( ’td , th ’) ; // todas as tds e ths Lembre-se de que a função que chamamos após o seletor é aplicada para todos os elementos retornados. Veja: 1 2 // forma i n e f i c i e n t e alert ( $ ( ’ div ’) . text () + $ ( ’p ’) . text () + $ ( ’ ul li ’) . text () ) ; 3 4 5 // forma e f i c i e n t e : D alert ( $ ( ’div , p , ul li ’) . text () ) ; A função text() é chamada para todos os <div>s, <p>s, e <li>s filhos de <ul>s. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel Tabela 1: Seleção Básica Descrição Seleciona o elemento com determinado id Exemplo: $(”#primDiv”).css(”background-color”,”black”); elemento Seleção pelo elemento html Exemplo: $(”div”).css(”border”,”9px double red”); .classe Elementos de detrminada classe Exemplo: $(”.destaque”).css(”fontWeight”,”bolder”); .classe.classe Elementos que pertençam a ambas classes. Exemplo: $(”.destaque.especial”).css(”color”,”red”); *. Todos elementos Exemplo: $(”*”).css(”color”,”black”); Combinação dos anteriores com vírgula Exemplo: $(”div,span,p.olho”).css(”margin”,”3px 0 0 0”); Seleção #id Seleção Ascendente Descente Pai > Filho Anterior + Seguinte Anterior Irmãos Tabela 2: Seleção Hierárquica Descrição Seleção de descendentes de determinado elemento. Exemplo: $(”form label”).css(”color”,”gray”); Seleção de elementos-filho de um determinado elemento. Exemplo: $(”#conteudo > *”).css(”border”,”2px solid green”); Seleção de elemento que segue-se a um determinado elemento. Exemplo: $(”label + input”).css(”border”,”1px dotted blue”); Seleção de elementos-irmãos após determinado elemento. Exemplo: $(”#inicio div”).css(”color”,”aquamarine”); Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 4.7.3 Filtrando elementos com jQuery Quando trabalhamos com a biblioteca jQuery, por vezes temos a necessidade de filtrar certos elementos da página com características específicas. Apesar de ser possível utilizar seletores CSS para realizar boa parte desses filtros, existem funções nativas de sintaxe mais simples que podem tornar esta tarefa ainda mais fácil. A seguir, cada função será apresentada individualmente, juntamente com um exemplo de uso e discussão dos resultados obtidos. Para facilitar a compreensão, apenas uma estrutura HTML será usada para todas as funções. Salve o conteúdo da Listagem abaixo como um arquivo de extensão html e, no local indicado, inserir o código das listagens de cada exemplo para teste. Estrutura HTML utilizada 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 <! D O C T Y P E html > < html lang = " pt - br " > < head > < title > T e s t a n d o jQuery </ title > < meta c h a r s e t=" utf -8 " / > < script type =" text / j a v a s c r i p t" src = " js / jquery - 2 . 1 . 1 . min . js " > </ script > < style type = " text / css " > # div1 { border : solid 1 px ; width :100 px ; height :20 px ; } # p1 { border : solid 2 px green ; width :150 px ; height :20 px ; } # div2 { border : solid 1 px red ; width :200 px ; height :20 px ; } . d e s t a q u e{ background - color : yellow ; } </ style > </ head > < body > < div id = " c o n t a i n e r" > < div id = " div1 " > < span > div1 </ span > </ div > <p id = " p1 " > p1 </p > < div id = " div2 " > div2 </ div > </ div > </ body > </ html > Observe que foram aplicados estilos simples aos elementos no interior da div container apenas para diferenciá-los uns dos outros visualmente. Vamos então às funções. eq A função eq() seleciona um único elemento em uma lista de acordo com seu índice. Existem duas Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel possibilidades de chamada: passando um índice positivo ou negativo. Com a passagem de um valor positivo como parâmetro, o elemento é selecionado pelo seu índice real na lista, já com parâmetro negativo, a contagem para seleção é feita de trás para frente. Por exemplo, passando o valor -1, o elemento selecionado seria o último. Observação 2: apesar de a contagem começar em zero, o último elemento em contagem negativa é o -1, pois não faz sentido usar o zero com valor negativo. Na listagem a seguir, selecionamos o elemento filho da div container que tenha o índice 1, ou seja, o segundo elemento, e adicionamos a ele a classe CSS destaque. 1 $ ( " # c o n t a i n e r" ) . c h i l d r e n () . eq (1) . a d d C l a s s(" d e s t a q u e" ) ; Abrindo o arquivo no browser, o parágrafo p1 deve ter a cor do plano de fundo alterada para amarelo. first De nome sugestivo, a função first() não requer nenhum parâmetro e seleciona o primeiro elemento de uma lista. Por exemplo, no caso dos elementos filhos da div container , o elemento selecionado com o uso dessa função seria a div div1. Na listagem a seguir vemos esse exemplo na prática, onde o plano de fundo da div1 será alterado para amarelo. 1 $ ( " # c o n t a i n e r" ) . c h i l d r e n () . first () . a d d C l a s s(" d e s t a q u e" ) ; last Semelhante à função anterior, mas retorna o último elemento da lista filtrada. No caso, aplicando esta função aos elementos filhos da div container , o resultado seria a div div2, a última da lista. 1 $ ( " # c o n t a i n e r" ) . c h i l d r e n () . last () . a d d C l a s s(" d e s t a q u e" ) ; Com isso a div2 deve ter seu background alterado para amarelo. is Esta função, diferente das apresentadas até agora, não seleciona um elemento, ela retorna true ou false caso uma condição seja atendida. Esta condição indica se o elemento filtrado possui ou não certa característica. Como parâmetro é passado um filtro que identifique o elemento, por exemplo, pelo tipo de tag. Na próxima Listagem, filtramos o primeiro elemento filho da div container e verificamos se é uma div e, dependendo do resultado, adicionamos a ela classe destaque. É de se esperar que o resultado seja verdadeiro. 1 2 3 var e l e m e n t o = $ (" # c o n t a i n e r") . c h i l d r e n () . first () ; if ( $ ( " # c o n t a i n e r") . c h i l d r e n () . is (" div " ) ) e l e m e n t o. a d d C l a s s(" d e s t a q u e" ) ; not A função not() é utilizada para excluir certo grupo de elementos de uma lista, de acordo com um filtro definido. Por exemplo, a lista de elementos filhos da div container é composta por duas divs e um parágrafo. Se aplicarmos o filtro div, na função not, obteremos a lista com os elementos do tipo div removidos, ou seja, apenas o parágrafo. Vejamos então esse exemplo na prática, facilitando a compreensão. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 1 2 3 $ ( f u n c t i o n () { $ ( " # c o n t a i n e r") . c h i l d r e n () . not (" div " ) . a d d C l a s s( " d e s t a q u e" ) ; }) ; Como se vê no código acima, a partir da lista de elementos filhos da div container filtramos aqueles que não atendem ao filtro div, ou seja, que não são desse tipo, e adicionamos a eles a classe CSS destaque. Abrindo o arquivo no browser, verificaremos que o parágrafo (elemento central) teve a cor do plano de fundo definida como amarelo. has A nomenclatura dessa função é bastante sugestiva. Do termo em inglês has ou tem em português, indica que a função retorna os elementos de uma lista que TÊM/POSSUEM um determinado elemento filho. Para exemplificar, poderíamos filtrar os elementos filhos da div container que contém um filho do tipo span. Facilmente percebemos que o único elemento selecionado seria a primeira div, a div1. O código a seguir mostra esse exemplo na prática. 1 2 3 $ ( f u n c t i o n () { $ ( " # c o n t a i n e r") . c h i l d r e n () . has (" span " ) . a d d C l a s s( " d e s t a q u e" ) ; }) ; Nesse caso, somente a primeira div terá a cor do background alterada. 4.7.4 Efeitos de exibir e esconder conteúdo O exemplo abaixo mostra as funções fadeIn e fadeOut da biblioteca jQuery. arquivo html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <! D O C T Y P E html > < html lang = " pt - br " > < head > < title > T e s t a n d o jQuery </ title > < meta c h a r s e t=" utf -8 " / > < script type =" text / j a v a s c r i p t" src = " js / jquery - 2 . 1 . 1 . min . js " > </ script > < script type =" text / j a v a s c r i p t" src = " js / meujs . js " > </ script > </ head > < body > <h1 > E x e r c í c i o com jQuery </ h1 > < button type =" button " id = " btn1 " name = " button " > Show div </ button > < button type =" button " id = " btn2 " name = " button " > E s c o n d e r div </ button > < div class = " texto " > <p > Caixa de texto que a p a r e c e r á e d e s a p a r e c e r á com as f u n ç õ es do jQuery ! </p > </ div > </ body > </ html > meujs.js 1 2 3 4 5 6 7 8 $ ( d o c u m e n t) . ready ( f u n c t i o n () { $ ( " # btn1 " ) . click ( f u n c t i o n () { $ ( " . texto " ) . fadeIn () ; }) ; $ ( " # btn2 " ) . click ( f u n c t i o n () { $ ( " . texto " ) . f a d e O u t () ; }) ; }) ; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 4.7.5 Utilitário de iteração do jQuery O jQuery traz também entre suas diversas funcionalidades, uma função que facilita a iteração em elementos de um Array com uma sintaxe mais agradável: 1 2 3 $ ( " # menu - d e p a r t a m e n t o s li ") . each ( f u n c t i o n ( index , item ) { alert ( item . text () ) ; }) ; A função each chamada logo após um seletor executa a função que passamos como argumento para cada um dos itens encontrados. Essa função precisa de dois argumentos. O primeiro será o ”índice” do elemento atual na coleção (0 para o primeiro, 1 para o segundo e assim por diante), e o segundo será o próprio elemento. Também é possível utilizar a função each do jQuery com qualquer Array: 1 var p e s s o a s = [" João " , " José " , " Maria " , " A n t ô n i o" ]; 2 3 4 5 $ . each ( pessoas , f u n c t i o n( index , item ) { alert ( item ) ; }) Nesse caso, chamamos a função each diretamente após o $, pois essa implementação é um método do próprio objeto $. Passamos dois argumentos, o primeiro é o Array que queremos percorrer e o segundo a função que desejamos executar para cada um dos itens do Array. 4.7.6 Executar somente após carregar Como estamos constantemente selecionando elementos do documento e alterando suas características, é importante garantir que os elementos que pretendemos utilizar já tenham sido carregados pelo navegador. A melhor maneira de garantir isso é somente executar nosso script após o término do carregamento total da página com a função $ dessa maneira: 1 2 3 $ ( f u n c t i o n () { $ ( " # c a b e c a l h o") . css ({ " background - color ": " # 0 0 0 0 0 0" }) ; }) Essa função $ que recebe uma função anônima como argumento garante que o código dentro dela só será executado ao fim do carregamento de todos os elementos da página. Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 4.8 4.8.1 Exemplos de utilização jQuery Exemplo 1 - carregamento de páginas dinâmico index.html 1 2 <! D O C T Y P E html > < html lang = " pt - br " > 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 < head > < title > Avalia & ccedil ;& atilde ; o Aplica & ccedil ;& otilde ; es Web </ title > < meta c h a r s e t= utf -8 " / > < link rel = " s t y l e s h e e t" type = " text / css " href = " css / layout . css " > < script type = " text / j a v a s c r i p t" src = " jquery - 2 . 1 . 1 . min . js " > </ script > < script type = " text / j a v a s c r i p t" > $ ( d o c u m e n t) . ready ( f u n c t i o n( e ) { $ ( " # menu - top a ") . click ( f u n c t i o n( e ) { e . p r e v e n t D e f a u l t () ; var href = $ ( this ) . attr ( ’ href ’) ; $ ( " # p r i n c i p a l") . load ( href + " # p r i n c i p a l" ) ; }) ; }) ; </ script > </ head > 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 < body > < div class = " c o n t a i n e r" > < div id = " menu " > < ul id = " menu - top " > <li > < a href = " inicio . html " > IN & iacute ; CIO </ a > </ li > <li > < a href = " h i s t o r i a. html " > HIST & Oacute ; RIA </ a > </ li > <li > < a href = " dicas . html " > DICAS </ a > </ li > </ ul > </ div > < div id = " topo - p r i n c i p a l" > <h3 > Principal </ h3 > </ div > < div id = " p r i n c i p a l" > <p > Essa & eacute ; a home do site </p > <p > D i s c i p l i n a: L a b o r a t& oacute ; rio de Aplica & ccedil ;& otilde ; es WEB </p > <p > C E F E T M G - U n i d a d e Varginha </ p > <br > < img id = " img1 " src =" logo1 . jpg" > </ div > < div id = " rodape " > <h3 > C E F E T M G - Aplica & ccedil ;& otilde ; es WEB & copy ; C o p y r i g h t 2016 Todos os d i r e i t o s reservados </ h3 > </ div > </ div > </ body > 44 45 </ html > inicio.html 1 2 <! D O C T Y P E html > < html lang = " pt - br " > 3 4 5 6 7 < head > < title > Avalia & ccedil ;& atilde ; o Aplica & ccedil ;& otilde ; es Web </ title > < meta c h a r s e t= utf -8 " / > < link rel = " s t y l e s h e e t" type = " text / css " href = " css / layout . css " > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 8 9 </ head > 10 11 12 13 14 15 16 17 18 19 < body > < div id = " p r i n c i p a l" > <p > Essa & eacute ; a home do site </p > <p > D i s c i p l i n a: L a b o r a t& oacute ; rio de Aplica & ccedil ;& otilde ; es WEB </p > <p > C E F E T M G - U n i d a d e Varginha </ p > <br > < img id = " img1 " src = " logo1 . jpg " > </ div > </ body > 20 21 </ html > historia.html 1 2 <! D O C T Y P E html > < html lang = " pt - br " > 3 4 5 6 7 < head > < title > Avalia & ccedil ;& atilde ; o Aplica & ccedil ;& otilde ; es Web </ title > < meta http - equiv =" content - type " c o n t e n t= " text / html ; c h a r s e t= utf -8 " / > < link rel = " s t y l e s h e e t" type = " text / css" href =" css / layout . css " > 8 9 </ head > 10 11 12 13 14 15 16 17 18 19 20 21 22 < body > < div id = " p r i n c i p a l" > <p > Essa & eacute ; a p & aacute ; gina hist & oacute ; ria </p > <p > Aqui bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; </p > <p > Aqui bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; </p > <p > Aqui bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; </p > <p > C E F E T M G - U n i d a d e Varginha </ p > <p > S e g u n d o bimestre </ p > <br > < img id = " img2 " src =" ajax . jpg " > </ div > </ body > 23 24 </ html > dicas.html 1 2 <! D O C T Y P E html > < html lang = " pt - br " > 3 4 5 6 7 < head > < title > Avalia & ccedil ;& atilde ; o Aplica & ccedil ;& otilde ; es Web </ title > < meta http - equiv =" content - type " c o n t e n t= " text / html ; c h a r s e t= utf -8 " / > < link rel = " s t y l e s h e e t" type = " text / css" href =" css / layout . css " > 8 9 </ head > 10 11 12 13 14 < body > < div id = " p r i n c i p a l" > <p > Essa & eacute ; a p & aacute ; gina de dicas </p > <p > Aqui bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; </p > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel <p > Aqui bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; </p > <p > Aqui bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; bl & aacute ; </p > <p > C E F E T M G - U n i d a d e Varginha </ p > <p > S e g u n d o bimestre </ p > 15 16 17 18 19 20 21 </ div > </ body > 22 23 </ html > css/layout.css body { b a c k g r o u n d : # E5E5E5 ; margin : 0; p a d d i n g: 0; font - family : Tahoma , arial , v e r d a n a; font - size : 13 px ; color : # 000; 1 2 3 4 5 6 7 8 } 9 10 11 12 13 14 . c o n t a i n e r{ margin : 0 auto ; width : 750 px ; height : auto ; } 15 16 17 18 19 20 21 22 # menu { b a c k g r o u n d : # ccc ; width : 750 px ; height : 35 px ; margin : 70 px 0 0 0; p a d d i n g: 0; float : left ; 23 box - shadow : 1 px 1 px 3 px # 8 8 8 8 8 8 ; - moz - box - shadow : 1 px 1 px 3 px # 8 8 8 8 8 8 ; - webkit - box - shadow : 1 px 1 px 3 px # 8 8 8 8 8 8 ; border - radius : 2 px ; text - shadow : 0 px 2 px 3 px # 666; 24 25 26 27 28 29 } 30 31 # menu li { d i s p l a y: inline ; } 32 33 34 35 36 37 38 # menu - top li a { width : 50 px ; height : 15 px ; p a d d i n g: 8 px 80 px ; float : left ; } 39 40 41 42 43 44 45 # p r i n c i p a l{ width : 750 px ; height : auto ; margin : 15 px 0 15 px 0; float : left ; } 46 47 48 # topo - p r i n c i p a l h3 { width : 750 px ; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel height : auto ; margin : 15 px 0 15 px 0; float : left ; background: # 585858; text - align : center ; 49 50 51 52 53 54 } 55 56 57 58 # principal p{ text - align : center ; } 59 60 61 62 63 64 65 66 # img1 { width : 120 px ; height : 90 px ; p o s i t i o n: r e l a t i v e; left : 320 px ; bottom : 10 px ; } 67 68 69 70 71 72 73 74 # img2 { width : 120 px ; height : 90 px ; p o s i t i o n: r e l a t i v e; left : 320 px ; bottom : 10 px ; } 75 76 77 78 # rodape { text - align : center ; } 4.8.2 Exemplo 2 - janela modal simples index.html 1 2 <! D O C T Y P E html > < html lang = " pt - br " > 3 4 5 6 7 8 9 10 11 12 < head > < title > E x e m p l o Janela Modal </ title > < meta c h a r s e t=" utf -8 " / > < script type =" text / j a v a s c r i p t" src = " js / jquery - 2 . 1 . 1 . min . js " > </ script > < link rel = " s t y l e s h e e t" type = " text / css" href =" layout . css " > < script > $ ( d o c u m e n t) . ready ( f u n c t i o n () { $ ( " a [ rel = modal ] ") . click ( f u n c t i o n( ev ) { ev . p r e v e n t D e f a u l t () ; 13 14 var id = $ ( this ) . attr (" href " ) ; 15 16 17 var a l t u r a T e l a = $ ( d o c u m e n t) . height () ; var l a r g u r a T e l a = $ ( window ) . width () ; 18 19 20 21 22 // c o l o c a n d o o fundo preto $ ( ’# m a s c a r a ’) . css ({ ’ width ’: larguraTela , ’ height ’: a l t u r a T e l a }) ; $ ( ’# m a s c a r a ’) . fadeIn (1000) ; $ ( ’# m a s c a r a ’) . fadeTo ( " slow " ,0.8) ; 23 24 25 26 var left = ( $ ( window ) . width () /2) - ( $ ( id ) . width () / 2 ) ; var top = ( $ ( window ) . height () / 2) - ( $ ( id ) . height () / 2 ) ; Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel $ ( id ) . css ({ ’ top ’: top , ’ left ’: left }) ; $ ( id ) . show () ; 27 28 29 }) ; 30 31 32 33 34 $ ( " # m a s c a r a" ) . click ( f u n c t i o n () { $ ( this ) . hide () ; $ ( " . window " ) . hide () ; }) ; 35 36 37 38 39 40 41 42 43 $ ( ’. fechar ’) . click ( f u n c t i o n( ev ) { ev . p r e v e n t D e f a u l t () ; $ ( " # m a s c a r a" ) . hide () ; $ ( " . window " ) . hide () ; }) ; }) ; </ script > </ head > 44 45 46 < body > <a href = " # j a n e l a 1" rel = " modal " > Janela modal </a > 47 48 49 50 51 52 53 < div class = " window " id = " j a n e l a 1" > <a href = " # " class = " fechar " >X Fechar </a > <h4 > P r i m e i r a janela moda </ h4 > <p > Lorem ipsum dolor sit amet , c o n s e c t e t u r a d i p i s c i n g elit . Etiam v e n e n a t i s auctor tempus . Lorem ipsum dolor sit amet , </p > <p > Morbi dui lacus , p l a c e r a t eget p r e t i u m vehicula , mollis id ligula . Nulla f a c i l i s i. </p > </ div > 54 55 56 57 58 <! - - m a s c a r a para cobrir o site --> < div id = " m a s c a r a" > </ div > </ body > 59 60 </ html > layout.css 1 2 3 4 5 6 7 8 9 10 11 12 . window { d i s p l a y: none ; width :300 px ; height :300 px ; p o s i t i o n: a b s o l u t e; left :0; top :0; b a c k g r o u n d: # FFF ; z - index :9900; p a d d i n g :10 px ; border - radius :10 px ; } 13 14 15 16 17 18 19 20 21 # m a s c a r a{ d i s p l a y: none ; p o s i t i o n: a b s o l u t e; left :0; top :0; z - index :9000; background - color :# 000; } 22 23 . fechar { d i s p l a y: block ; text - align : right ;} Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 4.8.3 Exemplo 3 - método load() index.html 1 2 3 4 5 6 7 8 9 10 11 <! D O C T Y P E html > < html lang = " pt - br " > < head > < meta c h a r s e t=" utf -8 " / > < title > M & eacute ; todo load () da jQuery para r e q u i s i& ccedil ;& otilde ; es AJAX </ title > < link rel = " s t y l e s h e e t" type = " text / css " href = " layout . css" > < script type =" text / j a v a s c r i p t" src = " js / jquery - 2 . 1 . 1 . min. js " > </ script > < script type =" text / j a v a s c r i p t" > $ ( d o c u m e n t) . ready ( f u n c t i o n () { var c a r r e g a n d o = $ ( ’# c a r r e g a n d o ’) var c o n t e u d o A j a x = $ ( ’# conteudo - ajax ’) 12 13 14 15 f u n c t i o n m o s t r a r C a r r e g a n d o () { c a r r e g a n d o. css ( ’ d i s p l a y ’ , ’ block ’) . fadeIn (1000) ; }; 16 17 18 19 20 21 22 23 f u n c t i o n a p o s C a r r e g a m e n t o () { c a r r e g a n d o. f a d e O u t (1000) ; c o n t e u d o A j a x. s l i d e D o w n () ; $ ( ’. fechar ’) . click ( f u n c t i o n () { c o n t e u d o A j a x . s l i d e U p( ’ slow ’) ; }) ; }; 24 25 $ ( c o n t e u d o A j a x) . css ( ’ o p a c i t y ’ , .94) ; 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 $ ( ’# ajax a ’) . click ( f u n c t i o n( event ) { event . p r e v e n t D e f a u l t () ; m o s t r a r C a r r e g a n d o () ; switch ( this . id ) { case ’ m1 ’: c o n t e u d o A j a x . s l i d e U p () ; c o n t e u d o A j a x . load ( ’ arquivo - html . html # t x 2 0 0 0 b r ’, a p o s C a r r e g a m e n t o ) ; break ; case ’ m2 ’: c o n t e u d o A j a x . s l i d e U p () ; c o n t e u d o A j a x . load ( ’ arquivo - html . html # d v 3 0 0 0 b r ’, a p o s C a r r e g a m e n t o ) ; break ; case ’ m3 ’: c o n t e u d o A j a x . s l i d e U p () ; c o n t e u d o A j a x . load ( ’ arquivo - html . html # dv4 ’ , a p o s C a r r e g a m e n t o ) ; break ; d e f a u l t: a p o s C a r r e g a m e n t o () ; break ; } }) ; }) </ script > </ head > < body > < div id = " tudo " > <h1 > < img src =" i m a g e n s/ hp . gif " alt = " Logo HP " / > N o t e b o o k s para casa </ h1 > < div id = " c a r r e g a n d o" > < img src = " i m a g e n s/ c a r r e g a n d o. gif" alt = " C a r r e g a n d o ... " / > </ div > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 57 58 59 60 61 62 63 64 < div id = " ajax " > < div id = " n1 " > < img src = " i m a g e n s/ n1 . jpg " alt = " N o t e b o o k P a v i l i o n série t x 2 0 0 0 B R" width = " 218 " height = " 160 " / > <h2 > Fam & iacute ; lia P a v i l i o n Notebook </ h2 > <h3 >& raquo ; HP P a v i l i o n s & eacute ; rie tx2000BR </ h3 > <p > D e s c u b r a um mundo onde voc & ecirc ; pode e x p l o r a r sua c r i at i v i d a d e e viver um novo u n i v e r s o de experi & ecirc ; ncias d i g i t a i s para deixar seus dias mais divertidos , produtivos , pr & aacute ; ticos e in e s q u e c& iacute ; veis . < br / > <a href = " # " id = " m1 " > Mais & raquo ; </a > </ p > </ div > 65 66 67 68 69 70 71 72 < div id = " n2 " > < img src = " i m a g e n s/ n2 . jpg " alt = " N o t e b o o k P a v i l i o n série dv3500 " width = " 218 " height = " 160 " / > <h2 > Fam & iacute ; lia P a v i l i o n Notebook </ h2 > <h3 >& raquo ; HP P a v i l i o n s & eacute ; rie dv3500 </ h3 > <p > Para quem p r o c u r a por r e c u r s o s de e n t r e t e n i m e n t o d i g i t al e as & uacute ; ltimas t e c n o l o g i a s m & oacute ; veis em um design inovador , a s & eacute ; rie de n o t e b o o k s HP P a v i l i o n dv3500 & eacute ; a solu & ccedil ;& atilde ; o p e r f e i t a! < br / > <a href = " # " id = " m2 " > Mais & raquo ; </a > </ p > </ div > 73 74 75 76 77 78 79 80 81 82 < div id = " n3 " > < img src = " i m a g e n s/ n3 . jpg " alt = " N o t e b o o k P a v i l i o n série dv4 " width = " 218 " height = " 160" / > <h2 > Fam & iacute ; lia P a v i l i o n Notebook </ h2 > <h3 >& raquo ; HP P a v i l i o n s & eacute ; rie dv4 </ h3 > <p > E x p a n d i n d o a eleg & acirc ; ncia s o f i s t i c a d a da linha atual , a nova s & eacute ; rie dv & eacute ; d e f i n i d a por linhas m o d e r n a s e f l u i da s e a c a b a m e n t o s met & aacute ; licos com inova & ccedil ;& otilde ; es s u r p r e e n d e n t e s dentro e fora . < br / > <a href = " # " id = " m3 " > Mais & raquo ; </a > </ p > </ div > </ div > <! - - fim div# ajax --> <p id = " nota " > Os textos e i m a g e n s c o n s t a n t e s desta d e m o n s t r a& ccedil ;& atilde ; o foram r e t i r a d o s e s & atilde ; o p r o p r i e d a d e do <a href = " http :// www . hp . com / latam / br / lar / p r o d u t o s/ n o t e b o o k s. html " > site da HP do Brasil </a >. </p > 83 84 < div id = " conteudo - ajax " > </ div > 85 86 87 88 </ div > <! - - fim div# tudo --> </ body > </ html > arquivo-html.html 1 2 3 4 5 6 7 8 9 10 11 < div id = " t x 2 0 0 0 b r" > < span class = " fechar " >[ X ] FECHAR </ span > <h2 > hp P a v i l i o n s & eacute ; rie tx2000BR </ h2 > <h3 >& raquo ; HP P a v i l i o n t x 2 5 4 0 B R N o t e b o o k PC </ h3 > < small >( LABR - F Q 7 2 4 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; B u s i n e s s <a href =" http :// www . hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r AMD Turion &# 8482; X2 Dual - Core RM -70 , 2.00 GHz </ li > <li >2048 MB (2 x 1 0 2 4 M B) 800 MHz DDR2 , expans & iacute ; vel at & eacute ; 4 GB </ li > <li > Disco R & iacute ; gido 160 GB 5400 rpm SATA </ li > </ ul > Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 12 13 14 15 16 17 18 19 20 21 22 <h3 >& raquo ; HP P a v i l i o n t x 2 5 7 0 B R N o t e b o o k PC </ h3 > < small >( LABR - F Q 7 2 5 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; B u s i n e s s <a href =" http :// www. hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r AMD Turion # 8482; X2 Dual - Core RM -70 , 2.00 GHz </ li > <li >3072 MB (1024 MB +2048 MB ) 800 MHz DDR2 , expans & iacute ; vel at & eacute ; 4 GB </ li > <li > Disco R & iacute ; gido 250 GB 5400 rpm SATA </ li > </ ul > <p > < strong > Nota : </ strong > < br / > A HP do Brasil r e s e r v a o d i r e i t o de a l t e r a r q u a i s q u e r i n f o r m a& ccedil ;& atilde ; o ou e s p e c i f i c a & ccedil ;& atilde ; o sem pr & eacute ; vio aviso . </ p > </ div > 23 24 25 26 27 28 29 30 31 32 33 34 35 36 < div id = " d v 3 0 0 0 b r" > < span class = " fechar " >[ X ] FECHAR </ span > <h2 > HP P a v i l i o n s & eacute ; rie dv3000BR </ h2 > <h3 > HP P a v i l i o n d v 3 5 0 8 B R E n t e r t a i n m e n t N o t e b o o k PC </ h3 > < small >& nbsp ;( LABR - J A 7 1 1 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; U l t i m a t e 64 bits <a href =" http :// www . hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r Intel & reg ; Core & trade ;2 Duo P7350 , 2.0 GHz </ li > <li >4096 MB (2 x 2 0 4 8 M B) 800 MHz DDR2 , s u p o r t e p / Canal Duplo ( Dual C h a n n e l) , expans & iacute ; vel at & eacute ; 8 GB (3.2 GB p / S . O 32 bits ) </ li > <li >250 GB 5400 rpm SATA ; T e c n o l o g i a HP P r o t e c t S m a r t ( d e t e ct a q u a l q u e r m o v i m e n t o brusco e a u t o m a t i c a m e n t e trava seu disco r & iacute ; gido p / evitar perda de dados ) </ li > </ ul > <p > < strong > Nota : </ strong > < br / > A HP do Brasil r e s e r v a o d i r e i t o de a l t e r a r q u a i s q u e r i n f o r m a& ccedil ;& atilde ; o ou e s p e c i f i c a & ccedil ;& atilde ; o sem pr & eacute ; vio aviso . </ p > </ div > 37 38 39 40 41 42 43 44 45 46 47 48 < div id = " dv4 " > < span class = " fechar " >[ X ] FECHAR </ span > <h2 > HP P a v i l i o n s & eacute ; rie dv4 </ h2 > <h3 > HP P a v i l i o n dv4 -1190 BR N o t e b o o k PC </ h3 > < small >( LABR - F Z 8 1 5 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; Home P r e m i u m (64 bits ) <a href =" http :// www . hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r Intel & reg ; Core & trade ;2 Duo T5900 , 2.2 GHz </ li > <li >4096 MB (2 x 2 0 4 8 M B) 800 MHz DDR2 , s u p o r t e p / Canal Duplo ( Dual C h a n n e l) , expans & iacute ; vel at & eacute ; 8 GB (3.2 GB p / S . O 32 bits ) </ li > <li >250 GB 5400 rpm SATA ; T e c n o l o g i a HP P r o t e c t S m a r t ( d e t e ct a q u a l q u e r m o v i m e n t o brusco e a u t o m a t i c a m e n t e trava seu disco r & iacute ; gido p / evitar perda de dados ) </ li > </ ul > 49 50 51 52 53 54 55 56 <h3 > HP P a v i l i o n dv4 -1180 BR N o t e b o o k PC </ h3 > < small >( LABR - F W 8 6 9 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; U l t i m a t e <a href =" http :// www. hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r Intel & reg ; Core & trade ;2 Duo P7350 , 2.0 GHz </ li > <li >4096 MB (2 x 2 0 4 8 M B) 800 MHz DDR2 , s u p o r t e p / Canal Duplo ( Dual C h a n n e l) , expans & iacute ; vel at & eacute ; 8 GB (3.2 GB p / S . O 32 bits ) </ li > <li >320 GB 5400 rpm SATA ; T e c n o l o g i a HP P r o t e c t S m a r t ( d e t e ct a q u a l q u e r Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel m o v i m e n t o brusco e a u t o m a t i c a m e n t e trava seu disco r & iacute ; gido p / evitar perda de dados ) </ li > 57 </ ul > 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 <h3 > HP P a v i l i o n dv4 -1150 BR N o t e b o o k PC </ h3 > < small >( LABR - F W 8 6 8 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; B u s i n e s s <a href =" http :// www. hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r Intel & reg ; Core & trade ;2 Duo T5800 , 2.0 GHz </ li > <li >3072 MB (1024 MB +2048 MB ) 800 MHz DDR2 , s u p o r t e p / Canal Duplo ( Dual C h a n n e l) , expans & iacute ; vel at & eacute ; 8 GB (3.2 GB p / S . O 32 bits ) </ li > <li >250 GB 5400 rpm SATA ; T e c n o l o g i a HP P r o t e c t S m a r t ( d e t e ct a q u a l q u e r m o v i m e n t o brusco e a u t o m a t i c a m e n t e trava seu disco r & iacute ; gido p / evitar perda de dados ) </ li > </ ul > <h3 > HP P a v i l i o n dv4 -1145 BR N o t e b o o k PC </ h3 > < small >( LABR - F W 8 6 7 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; B u s i n e s s <a href =" http :// www. hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r Intel & reg ; Core & trade ;2 Duo T5800 , 2.0 GHz </ li > <li >3072 MB (1024 MB +2048 MB ) 800 MHz DDR2 , s u p o r t e p / Canal Duplo ( Dual C h a n n e l) , expans & iacute ; vel at & eacute ; 8 GB (3.2 GB p / S . O 32 bits ) </ li > <li >250 GB 5400 rpm SATA ; T e c n o l o g i a HP P r o t e c t S m a r t ( d e t e ct a q u a l q u e r m o v i m e n t o brusco e a u t o m a t i c a m e n t e trava seu disco r & iacute ; gido p / evitar perda de dados ) </ li > </ ul > 75 76 77 78 79 80 81 82 83 <h3 > HP P a v i l i o n dv4 -1135 BR N o t e b o o k PC </ h3 > < small >( LABR - N C 9 7 6 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; Home P r e m i u m <a href =" http :// www . hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r Intel & reg ; Core & trade ;2 Duo T5800 , 2.0 GHz </ li > <li >2048 MB (1 x 2 0 4 8 M B) 800 MHz DDR2 , s u p o r t e p / Canal Duplo ( Dual C h a n n e l) , expans & iacute ; vel at & eacute ; 8 GB (3.2 GB p / S . O 32 bits ) </ li > <li >160 GB 5400 rpm SATA ; T e c n o l o g i a HP P r o t e c t S m a r t ( d e t e ct a q u a l q u e r m o v i m e n t o brusco e a u t o m a t i c a m e n t e trava seu disco r & iacute ; gido p / evitar perda de dados ) </ li > </ ul > 84 85 86 87 88 89 90 91 92 <h3 > HP P a v i l i o n dv4 -1130 BR N o t e b o o k PC </ h3 > < small >( LABR - F W 8 6 6 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; Home P r e m i u m <a href =" http :// www . hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r Intel & reg ; Core & trade ;2 Duo T5800 , 2.0 GHz </ li > <li >2048 MB (1 x 2 0 4 8 M B) 800 MHz DDR2 , s u p o r t e p / Canal Duplo ( Dual C h a n n e l) , expans & iacute ; vel at & eacute ; 8 GB (3.2 GB p / S . O 32 bits ) </ li > <li >160 GB 5400 rpm SATA ; T e c n o l o g i a HP P r o t e c t S m a r t ( d e t e ct a q u a l q u e r m o v i m e n t o brusco e a u t o m a t i c a m e n t e trava seu disco r & iacute ; gido p / evitar perda de dados ) </ li > </ ul > 93 94 95 96 97 <h3 > HP P a v i l i o n dv4 -1125 BR N o t e b o o k PC </ h3 > < small > LABR - N G 8 5 1 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; Home P r e m i u m <a href =" http :// www . hp . com . br / Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 98 99 100 101 a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r Intel & reg ; Core & trade ;2 Duo T5800 , 2.0 GHz </ li > <li >3072 MB (1024 MB +2048 MB ) 800 MHz DDR2 , s u p o r t e p / Canal Duplo ( Dual C h a n n e l) , expans & iacute ; vel at & eacute ; 8 GB (3.2 GB p / S . O 32 bits ) </ li > <li >160 GB 5400 rpm SATA ; T e c n o l o g i a HP P r o t e c t S m a r t ( d e t e ct a q u a l q u e r m o v i m e n t o brusco e a u t o m a t i c a m e n t e trava seu disco r & iacute ; gido p / evitar perda de dados ) </ li > </ ul > 102 103 104 105 106 107 108 109 110 111 112 <h3 > HP P a v i l i o n dv4 -1120 BR N o t e b o o k PC </ h3 > < small > LABR - F W 8 6 5 L A) </ small > <ul > <li > W i n d o w s Vista & reg ; Home Basic <a href =" http :// www . hp . com . br / a u t e n t i c o" title = " Aut & ecirc ; ntico " > Aut & ecirc ; ntico </ a > </ li > <li > P r o c e s s a d o r Intel & reg ; P e n t i u m& reg ; Dual - Core T3200 , 2.0 GHz </ li > <li >2048 MB (2 x 1 0 2 4 M B) 800 MHz DDR2 , s u p o r t e p / Canal Duplo ( Dual C h a n n e l) , expans & iacute ; vel at & eacute ; 8 GB (3.2 GB p / S . O 32 bits ) </ li > <li >160 GB 5400 rpm SATA ; T e c n o l o g i a HP P r o t e c t S m a r t ( d e t e ct a q u a l q u e r m o v i m e n t o brusco e a u t o m a t i c a m e n t e trava seu disco r & iacute ; gido p / evitar perda de dados ) </ li > </ ul > <p > < strong > Nota : </ strong > < br / > A HP do Brasil r e s e r v a o d i r e i t o de a l t e r a r q u a i s q u e r i n f o r m a& ccedil ;& atilde ; o ou e s p e c i f i c a & ccedil ;& atilde ; o sem pr & eacute ; vio aviso . </ p > </ div > layout.css 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 body { margin :0; p a d d i n g :0; font : 7 5 % / 1 . 4 Arial , Helvetica , sans - serif ; text - align : center ; b a c k g r o u n d: # f6f6f6 ; color : # 333; } # tudo { width :750 px ; p o s i t i o n: r e l a t i v e; b a c k g r o u n d: # fff ; margin :0 auto ; text - align : left ; border - color :# ccc ; border - width :1 px ; border - style : solid dotted ; } # ajax { width :720 px ; o v e r f l o w: hidden ; margin :0 0 20 px 15 px ; } # n2 { margin :0 30 px ;} h1 , h2 , h3 { margin :0;} h1 img { vertical - align : middle ;} h1 { font - size :1.6 em ; p a d d i n g :10 px ; b a c k g r o u n d: # eee ; border - bottom :1 px solid # ccc ; } h2 { Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel font - size :1.4 em ; } 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 h3 { font - size :1.2 em ; border - bottom :1 px dotted # 333; } # ajax div { width :220 px ; text - align : j u s t i f y; float : left ; d i s p l a y: inline ; } # ajax p a { color : # 036; font - weight : bold ; text - d e c o r a t i o n: none ; } # carregando { text - align : center ; v i s i b i l i t y: hidden ; } # conteudo - ajax { d i s p l a y: none ; width :400 px ; max - height :400 px ; o v e r f l o w: auto ; border :1 px dotted # ccc ; p a d d i n g :10 px 20 px ; b a c k g r o u n d: # eee ; p o s i t i o n: a b s o l u t e; top :100 px ; left :154 px ; } # conteudo - ajax h2 { b a c k g r o u n d: # 393; font - size :1 em ; } # conteudo - ajax h3 { font - size :1 em ; } # conteudo - ajax . fechar { d i s p l a y: block ; text - align : right ; font - size :0.9 em ; font - weight : bold ; color : # 080; cursor : p o i n t e r; } # nota { font - size :.9 em ; text - align : center ; margin :0; p a d d i n g :5 px 0; b a c k g r o u n d: # eee ; border - top :1 px solid # ccc ; } Apostila de Desenvolvimento de Aplicações Web Prof. Marcelo C. Mussel 5 Bibliografia Silva, Maurício Samy. Fundamentos de HTML5 e CSS3. Novatec, São Paulo, 2015 Silva, Maurício Samy. Criando Sites com HTML. Novatec, São Paulo, 2008 Castro, Elizabeth. HTML, XHTML e CSS. Alta Books, Rio de Janeiro, 2010 Dall’Oglio, Pablo. PHP Programando com Orientação a Objetos. Novatec, São Paulo, 2007 Dall’Oglio, Pablo. Criando Relatórios com PHP. Novatec, São Paulo, 2013 Gabardo, Ademir C. Criando um E-Commerce com CodeIgniter, Novatec, São Paulo, 2015