As Três Camadas da Web 1 Era uma vez... “Um rei!” meus pequenos leitores diriam imediatamente. Não, crianças, vocês estão errados. Era uma vez um pedaço de madeira... As Aventuras de Pinóquio Você pode fazer muita coisa sem JavaScript. Usando HTML (Hypertext Markup 1 Language) , é possível produzir documentos complexos que descrevem de maneira complicada o conteúdo de uma página – e o significado desse conteúdo – nos mínimos detalhes. Usando CSS (Cascading Style Sheets), você pode apresentar esse conteúdo de muitas maneiras, com variações tão sutis quanto uma única cor ou tão notáveis quanto substituir texto por uma imagem. Contudo, independentemente de quanto você melhore o aspecto, HTML e CSS só podem chegar à beleza estática de um manequim de loja de departamentos – ou, na melhor das hipóteses, a uma monstruosidade animada eletronicamente que cambaleia quando algo se move nas proximidades. Com JavaScript, você pode dar vida a esse boneco desajeitado, elevando-se, como seu criador, de um humilde vendedor a mestre em Web design! 1 Neste livro, vamos nos referir a HTML e a XHTML apenas como HTML. O que você escolhe fica por sua conta e não tem muito a ver com JavaScript. O código HTML que apresentaremos neste livro será XHTML 1.0 Strict válido. 26 Só JavaScript Mas o fato de sua nova criação ter o caminhar gracioso de uma modelo ou o andar arrastado do monstro do Dr. Frankenstein depende tanto da qualidade de suas origens HTML e CSS quanto do código JavaScript que deu vida a ela. Portanto, antes de aprendermos a operar milagres, vamos examinar como construímos sites de boa aparência por dentro e por fora e ver como JavaScript se encaixa nesse quadro. Separe-os Não faz muito tempo, Web designers profissionais empilhavam alegremente código HTML, CSS e JavaScript em um único arquivo, davam a ele o nome de 2 index.html e chamavam isso de página Web. Ainda é possível fazer isso, mas esteja preparado para ouvir xingamentos dos seus colegas. Em algum momento, os Web designers perceberam que o código que escrevem ao fazer uma página Web faz três coisas fundamentais: 2 Ou default.htm, de acordo com o padrão Microsoft. As Três Camadas da Web 27 ■ Descreve o conteúdo da página. ■ Especifica a apresentação desse conteúdo. ■ Controla o comportamento do conteúdo. Eles também perceberam que manter esses três tipos de código separados, como representado na Figura 1.1, facilitava o trabalho e ajudava a criar páginas Web que funcionavam melhor sob condições adversas, como quando os usuários estão com JavaScript desativado em seus navegadores. Os viciados em computador sabem disso há anos e até deram um nome para esse princípio: a separação de preocupações. Apresentação Conteúdo Comportamento Figura 1.1 Separação de preocupações. Mas perceber isso é uma coisa, fazer é outra – especialmente se você não é viciado em computador. Eu sou viciado em computador e fico tentado a fazer a coisa errada o tempo todo. Estou editando alegremente o código HTML que descreve o conteúdo de uma página Web, quando subitamente começo a pensar em como aquele texto ficaria bem se tivesse um sombreado cinza diferente, se fosse deslocado um pouco para a esquerda e se tivesse no fundo aquela fotocópia hilária de meu rosto que fiz na última festa do escritório da SitePoint. Distraído que sou, quero fazer essas alterações imediatamente. 28 Só JavaScript Agora, o que é mais fácil: abrir um arquivo CSS separado para modificar a folha de estilos da página ou apenas digitar essas propriedades de estilo no código HTML que já estou editando? Assim como se comportar nas funções do trabalho, manter os tipos de código que você escreve separados exige disciplina. Uma vez que você entenda as vantagens disso, poderá aplicar a força de vontade necessária para se manter no modo correto e apropriado de fazer as coisas. Três camadas Manter diferentes tipos de código o mais separado possível é recomendável em qualquer tipo de programação. Isso torna mais fácil reutilizar partes desse código em projetos futuros, reduz a quantidade de código duplicado que você acaba escrevendo e facilitar encontrar e corrigir problemas meses e anos mais tarde. No que diz respeito à Web, há mais um motivo para manter o código separado: isso permite satisfazer as muitas maneiras diferentes pelas quais as pessoas acessam as páginas Web. Dependendo do seu público, a maioria de seus visitantes pode utilizar navegadores desktop bem equipados, com suporte de ponta para CSS e JavaScript, mas muitos podem estar sujeitos a políticas de TI corporativas que os obrigue a utilizar navegadores mais antigos ou a navegar com certos recursos (como JavaScript) desativados. Os usuários deficientes visuais frequentemente navegam usando software leitor ou ampliador de tela e, para eles, seu projeto visual refinado pode mais atrapalhar do que ajudar. Alguns usuários nem mesmo visitarão seu site, preferindo ler feeds de conteúdo em RSS ou formatos semelhantes, se você os oferecer. Na hora de construir esses feeds, você desejará enviar o conteúdo HTML para esses usuários sem qualquer lixo JavaScript ou CSS. O segredo para favorecer a maior gama possível de visitantes de seu site é pensar na Web em termos de três camadas, que convenientemente correspondem aos três tipos de código mencionados anteriormente. Essas camadas estão ilustradas na Figura 1.2. As Três Camadas da Web 29 nto) e m a t por Script Com ( Java taçã) o n e s e Apr (CSS Riqueza da experiência do usuário údMoL) e t n o C (HT Figura 1.2 As três camadas da Web. Ao construir um site, trabalhamos nessas camadas de baixo para cima: 1. Começamos produzindo o conteúdo no formato HTML. Essa é a camada de base, que qualquer visitante, usando qualquer tipo de navegador, deve ser capaz de ver. 2. Feito isso, podemos nos concentrar em melhorar a aparência do site, adicionando uma camada de informações de apresentação utilizando CSS. Agora o site terá boa aparência para os usuários exibirem estilos CSS. 3. Finalmente, podemos usar JavaScript para introduzir uma camada a mais de interatividade e comportamento dinâmico, que tornará o site mais fácil de usar em navegadores equipados com JavaScript. Se mantivermos o código HTML, CSS e JavaScript separados, será mais fácil garantir que a camada de conteúdo permaneça legível em ambientes de navegação onde as camadas de apresentação e/ou comportamento não conseguem operar. Essa estratégia de “começar embaixo” para o Web design é conhecida como aperfeiçoamento progressivo. Veremos cada uma dessas camadas isoladamente para saber como manter essa separação de código da melhor maneira possível. 30 Só JavaScript HTML para conteúdo Tudo que é necessário para ler e entender o conteúdo de uma página Web pertence ao código HTML dessa página – nada mais, nada menos. Simples assim. Os Web designers ficam em apuros quando se esquecem do princípio SE3 e comprimem informações de conteúdo no código HTML ou, alternativamente, movem parte do conteúdo da página para o código CSS ou JavaScript dessa página. Um exemplo comum de informação que não é conteúdo colocado em páginas é HTML de apresentação – código HTML que descreve como o conteúdo deve parecer quando exibido no navegador. Isso pode incluir tags HTML antigas, como <b>, <i>, <u>, <tt> e <font>: <p>Faça o que for, <a href="666.html"><font color="red">mas não clique neste link</font></a>!</p> Isso pode assumir a forma de código CSS em linha aplicado com o atributo style: <p>Faça o que for, <a href="666.html" style="color: red;">mas não clique neste link</a>!</p> Isso também pode incluir a vergonha secreta de muitos Web designers bem-intencionados – estilos CSS aplicados com nomes de classe de apresentação: <p>Faça o que for, <a href="666.html" class="red">mas não clique neste link</a>!</p> Nomes de classe de apresentação? Se esse último exemplo lhe pareceu correto, você não está sozinho, mas é definitivamente mau agouro. Se você decidir posteriormente que deseja que o link seja amarelo, estará condenado a atualizar o nome da classe e os estilos CSS aplicados a ele ou a conviver com o constrangimento de ter uma classe chamada “red” (vermelho) que na verdade tem o estilo amarelo (“yellow”). Isso vai tornar seu rosto amarelo – ou melhor, vermelho! 3 Simplifique, Estúpido. As Três Camadas da Web 31 Em vez de incorporar informações de apresentação no código HTML, você deve se concentrar no motivo da ação – por exemplo, você quer que um link seja exibido em uma cor diferente. O link é importante? Considere colocá-lo dentro de uma tag que descreva a ênfase que você deseja dar a ele: <p>Faça o que for, <em><a href="evil.html">mas não clique neste link</a></em>!</p> O link é um aviso? HTML não tem uma tag para descrever um aviso (warning), mas você poderia escolher um nome de classe CSS que transmitisse essa informação: <p>Faça o que for, <a href="evil.html" class="warning">mas não clique neste link</a>!</p> Evidentemente, você pode levar essa estratégia longe demais. Alguns designers confundem tags com <h1> como se fosse de apresentação e tentam remover esse código de apresentação do código HTML: <p class="heading"> Um cabeçalho com crise de identidade</p> Na verdade, a informação de apresentação que você deve manter fora do documento é a fonte, o tamanho e a cor com que um cabeçalho (heading) deve ser exibido. O fato de um texto ser um cabeçalho faz parte do conteúdo e, como tal, deve ser refletido no código HTML. Assim, o código a seguir está perfeitamente correto: <h1>Um cabeçalho em paz consigo mesmo</h1> Em resumo, o código HTML deve fazer o máximo para transmitir o significado (ou semântica) do conteúdo da página, enquanto evita descrever como ele deve parecer. Os nerds de padrões Web chamam o código HTML que faz isso de marcação semântica. A escrita de marcação semântica permite que seus arquivos HTML sejam significativos como documentos. As pessoas que por qualquer motivo não possam ler esses documentos examinando-os em um navegador Web desktop normal, poderão entendê-los melhor desse modo. Os usuários deficientes visuais, por exemplo, poderão usar software auxiliar, como leitores de tela, para ouvir o que está escrito na página. Assim, quanto mais claramente seu código HTML descrever o significado do conteúdo, mais fácil será entendê-lo. 32 Só JavaScript O melhor de tudo, entretanto, é que a marcação semântica permite aplicar novos estilos (apresentação) e recursos interativos (comportamento) sem que seja necessário fazer muitas (ou, em alguns casos, todas!) alterações no código HTML. CSS para apresentação Obviamente, se o conteúdo de uma página deve estar inteiramente contido dentro do código HTML, seu estilo – ou apresentação – deve ser totalmente descrito no código CSS aplicado na página. Com todo o trabalho que você teve para manter seu código HTML livre de código de apresentação e rico em semântica, seria um vexame bagunçar esse arquivo, enchendo-o de trechos de código CSS. Como você deve saber, os estilos CSS podem ser aplicados em suas páginas de três maneiras: Estilos em linha <a href="evil.html" style="color: red;"> Os estilos em linha são tentadores pelos motivos que explicamos anteriormente: você pode aplicá-los no conteúdo à medida que o cria, sem precisar trocar de mecanismo e editar uma folha de estilos separada. Porém, como vimos na seção anterior, você desejará evitar os estilos em linha se quiser manter seu código HTML significativo para aqueles que não podem vê-los. Estilos incorporados <style type="text/css"> .warning { color: red; } </style> ⯗ <a href="evil.html" class="warning"> Os estilos incorporados mantêm sua marcação limpa, mas vinculam seus estilos a um único documento. Na maioria dos casos, você desejará compartilhar seus estilos por várias páginas de seu site; portanto, é melhor evitar essa estratégia também. As Três Camadas da Web 33 Estilos externos <link rel="stylesheet" href="styles.css" /> ⯗ <a href="evil.html" class="warning"> styles.css .warning { color: red; } Os estilos externos são os melhores, pois permitem que você compartilhe estilos entre vários documentos, reduzem o volume de código que os navegadores precisam baixar e também permitem modificar a aparência de seu site sem o trabalho de editar HTML. Mas você sabia de tudo isso, certo? Afinal, este é um livro sobre JavaScript; portanto, vamos falar sobre o código JavaScript que está em suas páginas. JavaScript para comportamento Assim como acontece com CSS, você pode adicionar JavaScript em suas páginas Web de várias maneiras: ■ Você pode incorporar código JavaScript diretamente no conteúdo HTML: <a href="evil.html" onclick="código JavaScript aqui"> ■ Você pode incluir código JavaScript no inicio do documento HTML, em uma tag <script>: <script type="text/javascript"><!--//--><![CDATA[//><!-código JavaScript aqui //--><!]]></script> ⯗ <a href="evil.html" class="warning"> 34 Só JavaScript CDATA? Se você estiver se perguntando que geringonça é essa depois da tag <script> e que precede a tag </script>, isso é o que é necessário para incorporar legitimamente código JavaScript em um documento XHTML sem confundir os navegadores Web que não entendem XHTML (como o Internet Explorer). Se você escrever sua página com HTML em vez de XHTML, poderá se dar bem com esta sintaxe muito mais simples: <script type="text/javascript"> Código JavaScript aqui </script> ■ Você pode colocar seu código JavaScript em um arquivo separado e, então, vincular esse arquivo a quantos documentos HTML desejar: <script type="text/javascript" src="script.js"></script> ⯗ <a href="evil.html" class="warning"> script.js (excerto) código JavaScript aqui Adivinhe que método você deve usar. Escrever código JavaScript que melhora a utilização sem congestionar o documento (ou documentos) HTML em que é aplicado, sem deixar de fora os usuários que estão com JavaScript desativado em seus navegadores e sem interferir em outro código JavaScript que possa estar aplicado na mesma página, é chamado de script não invasivo. Infelizmente, embora muitos desenvolvedores Web profissionais tenham percebido as vantagens de manter o código CSS em arquivos separados, ainda existe muito código JavaScript misturado em HTML por aí. Mostrando, neste livro, a maneira correta de usar JavaScript, esperamos ajudar a mudar isso. As Três Camadas da Web 35 A maneira certa Então, qual é a verdadeira importância de tudo isso? Afinal, as pessoas têm construído sites com HTML, CSS e JavaScript misturadas há anos, e, para a maioria das pessoas que navegam na Web, esses sites têm funcionado. Quando você aprende JavaScript, mais do que nunca é importante saber fazer da maneira correta, com certeza. De longe, JavaScript é a mais poderosa das três linguagens que você usará para projetar sites e, como tal, ela oferece uma liberdade sem precedentes, de modo que é possível fazer uma bagunça completa. Como exemplo, se você gostar muito, muito de JavaScript, poderá chegar a ponto de colocar tudo – conteúdo, apresentação e comportamento – no código JavaScript. Já vimos isso e não é nada bonito – especialmente quando aparece um navegador com JavaScript desativado. Ainda mais importante é o fato de que JavaScript é a única dessas três linguagens que tem a capacidade de travar o navegador, tornando-o sem resposta para 4 o usuário. Portanto, no restante deste livro, faremos o máximo para mostrar a você a maneira certa de usar JavaScript, não apenas porque isso mantém seu código organizado, mas porque ajuda a manter a Web funcionando da maneira que foi pensada – tornando o conteúdo acessível para o máximo de pessoas possível, independentemente do navegador que utilizem. Bibliotecas JavaScript Conforme mencionamos, uma das vantagens de manter os diferentes tipos de código separados é que isso torna mais fácil pegar código escrito para um site e reutilizá-lo em outro. Certos maníacos por JavaScript (que serão chamados daqui em diante de “pessoas”) montaram vastas bibliotecas de código JavaScript útil e não invasivo que você pode baixar gratuitamente e usar em seus sites. Ao longo deste livro, construiremos cada um dos exemplos a partir do zero – todo o código JavaScript necessário pode ser encontrado aqui, nestas páginas. Entretanto, como nem sempre há tempo de fazer isso no mundo real e como as bibliotecas estão se tornando rapidamente uma parte importante no cenário Ja- 4 Vamos mostrar um exemplo disso no Capítulo 7. 36 Só JavaScript vaScript, veremos também como as bibliotecas JavaScript populares são eficientes em determinados casos. Eis as bibliotecas que usaremos neste livro: Prototype http://www.prototypejs.org/ script.aculo.us http://script.aculo.us/ Yahoo! User Interface Library (YUI) http://developer.yahoo.com/yui/ Dojo http://dojotoolkit.org/ jQuery http://jquery.com/ Mootools http://mootools.net/ Nem todas as bibliotecas são criadas da mesma maneira Cuidado com sites que oferecem trechos de código JavaScript para copiar e colar em suas páginas Web a fim de obter um efeito específico. Existe muito código gratuito por aí, mas nem tudo é bom. Em geral, as boas bibliotecas vêm na forma de arquivos JavaScript (.js) que você pode vincular em suas páginas de forma não invasiva, em vez de colar JavaScript diretamente no código HTML. Se você não tiver certeza que uma biblioteca JavaScript em particular é boa ou ruim, peça ajuda nos fóruns da SitePoint5 ou fique apenas com as bibliotecas mencionadas neste livro – todas elas são muito boas. Vamos começar! Chega de conversa – você comprou este livro para aprender JavaScript, certo? (Se não foi por isso, ficará um pouco desapontado.) HTML e CSS puras são legais, mas é hora de mergulhar na terceira camada da Web: o comportamento. Vire a página e se prepare para começar a usar código JavaScript interessante (e não invasivo). 5 http://www.sitepoint.com/forums/