<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>desenvolvimento para web &#187; JavaScript</title> <atom:link href="http://desenvolvimentoparaweb.com/categoria/javascript/feed/" rel="self" type="application/rss+xml" /><link>http://desenvolvimentoparaweb.com</link> <description>desenvolvimento para web trata de jQuery, CSS, usabilidade, performancem, blogs, WordPress, web design e dicas, em geral, para desenvolvimento web</description> <lastBuildDate>Tue, 15 May 2012 13:00:08 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /> <item><title>Microdata API e Schema.org: dando significado ao HTML</title><link>http://desenvolvimentoparaweb.com/html/microdata-api-schema-org-significado-html/</link> <comments>http://desenvolvimentoparaweb.com/html/microdata-api-schema-org-significado-html/#comments</comments> <pubDate>Mon, 23 Apr 2012 19:05:43 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[HTML]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[SEO]]></category> <category><![CDATA[Conteúdo]]></category> <category><![CDATA[Exemplos]]></category> <category><![CDATA[Otimização]]></category> <guid
isPermaLink="false">http://desenvolvimentoparaweb.com/?p=815</guid> <description><![CDATA[Microdata API e Schema.org s&atilde;o a combina&ccedil;&atilde;o ideal para adicionar mais significado &agrave;s informa&ccedil;&otilde;es de seu site. Saiba como utilizar essas novas tecnologias!]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/html5-microdata-metafora-ilustracao.png" alt="HTML5 Microdata API: ilustra&ccedil;&atilde;o-met&aacute;fora" title="" width="300" height="450" class="aligncenter size-full wp-image-817" /></p><p>A HTML fornece diversos elementos para que possamos dar algum significado ao conte&uacute;do. Como sabemos, cada tag serve a um prop&oacute;sito e, us&aacute;-las de maneira adequada, pensando na <strong>sem&acirc;ntica web</strong>, faz parte do trabalho do desenvolvedor web.</p><p>Ent&atilde;o, se &eacute; preciso exibir uma lista de produtos num site, por exemplo, &eacute; poss&iacute;vel usar o elemento de listas n&atilde;o ordenadas, <code>ul</code>, para marcar esse conte&uacute;do e dar algum significado &agrave; informa&ccedil;&atilde;o. Dizemos ao &#8220;interpretadores&#8221; do c&oacute;digo (sejam browsers, leitores de tela, bots de sistemas de busca, etc): &#8220;Isto &eacute; uma lista com alguns itens&#8221;. Mas, somente com essa marca&ccedil;&atilde;o, n&atilde;o &eacute; poss&iacute;vel informar que esta &eacute; uma lista <em>de produtos</em>.</p><p>Para dar esse passo al&eacute;m na sem&acirc;ntica de documentos web &eacute; que est&aacute; sendo criada a <strong>Microdata API</strong>.</p><h2>O problema do significado</h2><p>Quando uma pessoa faz uma busca por &#8220;melhores bancos do brasil&#8221;, ela est&aacute; procurando as melhores institui&ccedil;&otilde;es financeiras do pa&iacute;s ou os melhores m&oacute;veis para se sentar? Certamente, a pessoa que est&aacute; fazendo a busca, sabe, mas, ser&aacute; que o buscador a que a busca foi submetida interpretar&aacute; isso de maneira adequada?</p><p>A pessoa que fez essa busca, ao entrar em um dos links da SERP, ver&aacute; se a p&aacute;gina que entrou &eacute; sobre institui&ccedil;&otilde;es financeiras ou m&oacute;veis. Se ela estiver procurando pelas primeiras e acessar uma p&aacute;gina sobre os segundos, entrou em um link que n&atilde;o era de seu interesse devido ao fato de o buscador ter mostrado uma informa&ccedil;&atilde;o err&ocirc;nea no momento de exibir os resultados. Afinal, mesmo com os relativamente inteligentes algoritmos que os melhores buscadores possuem, este tipo de situa&ccedil;&atilde;o ocorre com frequ&ecirc;ncia.</p><p>Usando a API de microdata (ou <strong>microdados</strong>), &eacute; poss&iacute;vel auxiliar as m&aacute;quinas (n&atilde;o somente buscadores) a descobrir o significado dos conte&uacute;dos nos web sites; &eacute; poss&iacute;vel informar que uma lista no site &eacute; uma lista de produtos; &eacute; poss&iacute;vel informar que seu site &eacute; sobre institui&ccedil;&otilde;es financeiras, ao inv&eacute;s de m&oacute;veis. Em suma, atrav&eacute;s da Microdata API, &eacute; poss&iacute;vel dar <strong>mais  significado ao conte&uacute;do</strong>.</p><h2>Conhecendo a Microdata API</h2><p>A <a
href="http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html">Microdata API</a> tem como objetivo dar mais significado aos documentos web que fazemos. Usando Microdata, &eacute; poss&iacute;vel informar aos rob&ocirc;s significados al&eacute;m do que uma marca&ccedil;&atilde;o &#8220;tradicional&#8221; poderia/conseguiria, agregando maior <strong>valor sem&acirc;ntico</strong> ao conte&uacute;do dos sites, o que, por consequ&ecirc;ncia, traz in&uacute;meros benef&iacute;cios. E isso &eacute; feito atrav&eacute;s de marca&ccedil;&otilde;es espec&iacute;ficas nos c&oacute;digos.</p><h3>Sintaxe da microdata</h3><p>Basicamente, o modelo de microdata consiste em grupos de pares nome-valor, conhecidos como <em>itens</em> e cada item pode ter 1 ou mais <em>tipos de item;</em> cada item, pode ter 1 ou mais <em>propriedades</em>, que podem ter 1 ou mais <em>valores</em>. Para criar um item, o atributo <code>itemscope</code> &eacute; usado e, para adicionar uma propriedade a um item, o atributo <code>itemprop</code> &eacute; usado.</p><p>&Eacute; poss&iacute;vel usar microdata sem a inten&ccedil;&atilde;o de reutiliza&ccedil;&atilde;o, mas, concordemos, isso n&atilde;o faz sentido. O interessante &eacute; termos &#8220;especifica&ccedil;&otilde;es&#8221; de microdados que podem ser usadas amplamente, por quem quer que seja. Por isso, geralmente se identifica o <em>tipo de item</em> atrav&eacute;s da indica&ccedil;&atilde;o de um URI que contenha essa especifica&ccedil;&atilde;o. Usar microdata &eacute; usar <strong>vocabul&aacute;rios</strong>.</p><p>Por exemplo, vamos ver a &#8220;marca&ccedil;&atilde;o padr&atilde;o&#8221; de uma ra&ccedil;&atilde;o de gatos num site qualquer:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;section&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>Siamês<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>Gato-siamês é uma raça de gato oriental, caracterizada por um corpo elegante e longilíneo e uma cabeça marcadamente triangular.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">img</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;siames.jpg&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Gato siamês&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span></pre></div></div><p>Agora, este mesmo c&oacute;digo sendo marcado com microdata:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;section itemscope itemtype<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.org/animals#cat&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span>&gt;</span>Siamês<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;desc&quot;</span>&gt;</span>Gato-siamês é uma raça de gato oriental, caracterizada por um corpo elegante e longilíneo e uma cabeça marcadamente triangular.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">img</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;img&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;siames.jpg&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Gato siamês filhote&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span></pre></div></div><p>No exemplo, o item &#8220;http://example.org/animals#cat&#8221; possui 3 propriedades, um &#8220;name&#8221; (&#8220;Siam&ecirc;s&#8221;), uma &#8220;desc&#8221; (&#8220;Gato-siam&ecirc;s &eacute; uma ra&ccedil;a&#8230;&#8221;) e &#8220;img&#8221; (&#8220;siames.jpg&#8221;) e, como vimos, &eacute; poss&iacute;vel haver mais de um valor por propriedade (inclusive, que seja a indica&ccedil;&atilde;o de outro &#8220;vocabul&aacute;rio&#8221;):</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;section itemscope itemtype<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.org/animals#cat&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name http://example.com/fn&quot;</span>&gt;</span>Siamês<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;desc&quot;</span>&gt;</span>Gato-siamês é uma raça de gato oriental, caracterizada por um corpo elegante e longilíneo e uma cabeça marcadamente triangular. Suas cores, normalmente, são <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span></span>
<span style="color: #009900;"> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.com/color&quot;</span>&gt;</span>branco<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span> (enquanto crias), <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span></span>
<span style="color: #009900;"> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.com/color&quot;</span>&gt;</span>branco sujo<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span> ou <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span></span>
<span style="color: #009900;"> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.com/color&quot;</span>&gt;</span>creme<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>, com extremidades <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span></span>
<span style="color: #009900;"> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.com/color&quot;</span>&gt;</span>castanho<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span> muito escuro (quase <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span></span>
<span style="color: #009900;"> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.com/color&quot;</span>&gt;</span>preto<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>), <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span></span>
<span style="color: #009900;"> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.com/color&quot;</span>&gt;</span>cor de chocolate<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>, e, raramente, <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span></span>
<span style="color: #009900;"> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.com/color&quot;</span>&gt;</span>azul acinzentado<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span> ou <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span></span>
<span style="color: #009900;"> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://example.com/color&quot;</span>&gt;</span>lilás acinzentado<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">img</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;img&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;siames.jpg&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Gato siamês filhote&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span></pre></div></div><p>Sem sombra de d&uacute;vidas, esta marca&ccedil;&atilde;o &eacute; mais trabalhosa de se fazer e, n&atilde;o raramente, pode haver erros de sintaxe na marca&ccedil;&atilde;o, devido a relativa complexidade e volume. Existe uma maneira de testar se tudo est&aacute; nos conformes, a ferramenta <a
href="http://www.google.com/webmasters/tools/richsnippets">Rich Snippets Testing Tool</a>.</p><p>Ao inserir uma URL (ou trecho de c&oacute;digo HTML, diretamente), &eacute; poss&iacute;vel ter um preview de rich snippet no Google e, caso o c&oacute;digo tenha microdados, ele exibe, de forma organizada, esta estrutura. Como consta na pr&oacute;pria <a
href="http://support.google.com/webmasters/bin/answer.py?hl=pt-BR&#038;answer=99170">p&aacute;gina de explica&ccedil;&atilde;o de Rich Snippets</a>,</p><blockquote><p> Se o Google compreender o conte&uacute;do de suas p&aacute;ginas, podemos criar rich snippets — e informa&ccedil;&otilde;es detalhadas para ajudar os usu&aacute;rios com consultas espec&iacute;ficas. Por exemplo, o snippet para uma p&aacute;gina de receitas pode mostrar o tempo total de preparo, uma foto e a avalia&ccedil;&atilde;o dos coment&aacute;rios da receita. O snippet para um restaurante pode exibir a avalia&ccedil;&atilde;o m&eacute;dia e a faixa de pre&ccedil;os. J&aacute; o snippet para um &aacute;lbum de m&uacute;sicas pode listar as m&uacute;sicas junto com um link para reproduzir cada uma delas. Esses rich snippets ajudam os usu&aacute;rios a identificar se o site &eacute; relevante para a pesquisa e podem resultar em mais cliques em sua p&aacute;gina.</p><p>Voc&ecirc; pode ajudar o Google a revelar essas informa&ccedil;&otilde;es relevantes adicionando uma marca&ccedil;&atilde;o HTML extra em suas p&aacute;ginas. Essa marca&ccedil;&atilde;o ajuda o Google a reconhecer certos tipos de dados e a exibi-los de maneira &uacute;til nos rich snippets.</p></blockquote><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/rich-snippet-exemplo.png" alt="Exemplo de rich snippet" title="" width="556" height="93" class="alignright size-full wp-image-818" /></p><p>Est&atilde;o entendendo, agora, a diferen&ccedil;a que o uso de microdata pode fazer? &#8220;O snippet para um restaurante pode exibir a avalia&ccedil;&atilde;o m&eacute;dia e a faixa de pre&ccedil;os&#8221;?! Isso &eacute; muito incr&iacute;vel! Com toda a certeza, a exibi&ccedil;&atilde;o de um snippet dessa qualidade &eacute; a diferen&ccedil;a entre receber, ou n&atilde;o, mais uma visita em seu site!</p><p>Concorda que um snippet de receita como este &eacute; muito mais <strong>atrativo</strong> e <strong>informativo</strong> que o snippet padr&atilde;o da SERP do Google? Ele &eacute; <strong>muito mais &uacute;til</strong> &agrave; pessoa que est&aacute; buscando, por exemplo, um &#8220;P&atilde;o de Banana&#8221;, apresenta informa&ccedil;&otilde;es que s&atilde;o muito mais relevantes e, no momento, caso voc&ecirc; consiga que seu site seja um dos poucos a conseguir um <em>rich snippet</em> desta qualidade, ele &eacute; <strong>totalmente diferenciado dos demais</strong>!</p><h3>Microdata DOM API</h3><p>A Microdata API tamb&eacute;m conta com uma s&eacute;rie de m&eacute;todos JavaScript: <strong>Microdata DOM API</strong>. Por exemplo, temos o m&eacute;todo <code>getItems()</code>, que prov&ecirc; acesso ao itens marcados com microdata. Ele retorna uma <em>NodeList</em> contendo os itens dos tipos especificados (ou todos os itens, se nenhum argumento for passado).</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> cat          <span style="color: #339933;">=</span> document.<span style="color: #660066;">getItems</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'http://example.org/animals#cat'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> colors       <span style="color: #339933;">=</span> cat.<span style="color: #660066;">properties</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'http://example.com/color'</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">getValues</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> colors_total <span style="color: #339933;">=</span> colors.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> result<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>colors_total <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    result <span style="color: #339933;">=</span> <span style="color: #3366CC;">'Cor desconhecida.'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>colors_total <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    result <span style="color: #339933;">=</span> <span style="color: #3366CC;">'Cor: '</span> <span style="color: #339933;">+</span> colors<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span>
<span style="color: #009900;">&#123;</span>
    result <span style="color: #339933;">=</span> <span style="color: #3366CC;">'Cores:'</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> colors_total<span style="color: #339933;">;</span> i <span style="color: #339933;">+=</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        result <span style="color: #339933;">+=</span> <span style="color: #3366CC;">' '</span> <span style="color: #339933;">+</span> colors<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><p>Na verdade, estes s&atilde;o somente alguns exemplos de uso e apresenta&ccedil;&atilde;o da Microdata API. Caso se queira aprofundar no assunto, o que &eacute; altamente recomendado, &eacute; preciso estudar a <a
href="http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html">documenta&ccedil;&atilde;o oficial da Microdata API</a>.</p><h2>Schema.org</h2><p>Como vimos, &eacute; mais interessante haver conjuntos de vocabul&aacute;rios comuns, acess&iacute;veis e centralizados e prontos para serem usados por qualquer pessoa. Felizmente, isso j&aacute; existe! Trata-se do <a
href="http://schema.org/">Schema.org</a>. O Schema.org &eacute; um vocabul&aacute;rio de marca&ccedil;&atilde;o de microdata compartilhado, que torna mais f&aacute;cil para n&oacute;s, pessoal do desenvolvimento web, decidir sobre um esquema de marca&ccedil;&atilde;o.</p><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/microdata-search-engines-logos.gif" alt="Logos de empresas que ratificam o schema.org: Google, Yahoo, Bing, Yandex." title="microdata-search-engines-logos" width="335" height="150" class="alignright size-full wp-image-816" /></p><p>Mas, realmente, adianta usar o vocabul&aacute;rio de microdata do Schema.org? Sim, adianta, e muito, j&aacute; que os melhores buscadores do mundo, tais como Google, Bing, Yahoo! e Yandex, ratificaram o projeto e seus respectivos spiders e SERPs j&aacute; fazem uso dessa tecnologia! J&aacute; foi mostrado que, por exemplo, o Google j&aacute; faz uso deste tipo de marca&ccedil;&atilde;o para aprimorar seus <em>snippets</em> e, por <a
href="https://twitter.com/desenvolvweb/status/186914692495708160">experi&ecirc;ncia pessoal</a>, afirmo que, tamb&eacute;m, contribui para a melhora do posicionamento nos resultados de busca.</p><h3>Exemplo de uso do Schema.org</h3><p>No pr&oacute;prio <a
href="http://schema.org/">site do Schema</a>, eles apresentam um exemplo bastante did&aacute;tica para mostrar o conceito por tr&aacute;s dos microdados. Imagine que algu&eacute;m marca como t&iacute;tulo principal (<code>h1</code>) &#8220;Avatar&#8221;. Mas essa p&aacute;gina diz respeito &agrave;quela imagem que as pessoas utilizam em seus perfis de redes sociais ou ao filme Avatar, de James Cameron? Usando o schema correto, &eacute; poss&iacute;vel auxiliar aos buscadores a entender melhor do que trata aquele documento.</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> itemscope itemtype <span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://schema.org/Movie&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span>&gt;</span>Avatar<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span>&gt;</span>Director: <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;director&quot;</span>&gt;</span>James Cameron<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span> (born August 16, 1954)<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;genre&quot;</span>&gt;</span>Science fiction<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;../movies/avatar-theatrical-trailer.html&quot;</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;trailer&quot;</span>&gt;</span>Trailer<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div><p>E, como j&aacute; vimos anteriormente, &eacute; poss&iacute;vel, inclusive, fazer &#8220;embedded&#8221; de outros itens:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> itemscope itemtype <span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://schema.org/Movie&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span>&gt;</span>Avatar<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;director&quot;</span> itemscope itemtype<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://schema.org/Person&quot;</span>&gt;</span>
        Director: <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span>&gt;</span>James Cameron<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span> (born <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;birthDate&quot;</span>&gt;</span>August 16, 1954<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>)
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;genre&quot;</span>&gt;</span>Science fiction<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;../movies/avatar-theatrical-trailer.html&quot;</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;trailer&quot;</span>&gt;</span>Trailer<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div><h3>Usando o vocabul&aacute;rio do Schema.org</h3><p>O Schema.org possui uma s&eacute;rie de &#8220;tipos&#8221; (itens), cada um com suas respectivas propriedades. Cada um desses tipos &eacute; chamado de <em>schema</em> (faz sentido&#8230;). Ent&atilde;o, para darmos mais significado e complementarmos a sem&acirc;ntica de nossos documentos HTML, &eacute; preciso percorrer a <a
href="http://schema.org/docs/full.html">lista dos diferentes schemas dispon&iacute;veis</a> e saber o que se pode usar no momento.</p><p>Perceba que cada tipo pode ter, tamb&eacute;m, subtipos, que herdam as caracter&iacute;sticas de seus ancestrais e possuem suas pr&oacute;prias. Por exemplo, o schema <a
href="http://schema.org/Movie">Movie</a> possui suas propriedades distintas e, tamb&eacute;m, as propriedades de seus ancestrais <a
href="http://schema.org/CreativeWork">CreativeWork</a> e <a
href="http://schema.org/Thing">Thing</a>.</p><p>Lembrando que, n&atilde;o necessariamente, todas as propriedades, pr&oacute;prias ou herdadas, precisam ser usadas ao mesmo tempo.</p> <hgroup><h3>Dicas para trabalhar com schemas</h3><h4>Mais &eacute; melhor, com exce&ccedil;&atilde;o de conte&uacute;do oculto</h4> </hgroup><p>Em geral, quanto mais conte&uacute;do voc&ecirc; marcar, melhor. No entanto, como regra geral, voc&ecirc; deve marcar apenas o conte&uacute;do que &eacute; vis&iacute;vel para as pessoas que visitam a p&aacute;gina, n&atilde;o o conte&uacute;do oculto.</p><h4>Tipos esperados <em>versus</em> texto.</h4><p>Ao navegar entre os v&aacute;rios schemas, voc&ecirc; vai notar que muitas propriedades t&ecirc;m &#8220;tipos esperados&#8221;. Isto significa que o valor da propriedade, por si s&oacute;, pode ser um item incorporado (embedded). Mas este n&atilde;o &eacute; um requisito &#8211; n&atilde;o h&aacute; problema em incluir somente texto ou uma URL. Al&eacute;m disso, sempre que um tipo esperado &eacute; especificado, tamb&eacute;m n&atilde;o h&aacute; problemas em incorporar um item descendente. Por exemplo, se o tipo esperado &eacute; <a
href="http://schema.org/Place">Place</a>, tamb&eacute;m &eacute; permitido incorporar um <a
href="http://schema.org/LocalBusiness">LocalBusiness</a>.</p><h4>Usando a propriedade &#8220;url&#8221;</h4><p>Algumas p&aacute;ginas da web s&atilde;o sobre um item espec&iacute;fico. Por exemplo, voc&ecirc; pode ter uma p&aacute;gina web sobre uma &uacute;nica pessoa, que voc&ecirc; pode marcar com <a
href="http://schema.org/Person">Person</a>.</p><p>J&aacute; outras p&aacute;ginas podem ter uma cole&ccedil;&atilde;o de itens descritos nelas. Por exemplo, o site de uma empresa pode ter uma p&aacute;gina com a lista de funcion&aacute;rios com um link para uma p&aacute;gina de perfil de cada um. Para p&aacute;ginas como esta, com uma cole&ccedil;&atilde;o de itens, voc&ecirc; deve marcar cada item separadamente (neste caso como uma s&eacute;rie de <a
href="http://schema.org/Person">Person</a>) e adicionar a propriedade <code>url</code> no link correspondente a cada item, assim:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span> itemscope itemtype<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://schema.org/Person&quot;</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;jose-das-coves.html&quot;</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;url&quot;</span>&gt;</span>Jos<span style="color: #ddbb00;">&amp;eacute;</span> das Coves<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
&nbsp;
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span> itemscope itemtype<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://schema.org/Person&quot;</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;joao-da-silva.html&quot;</span> itemprop<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;url&quot;</span>&gt;</span>Jo<span style="color: #ddbb00;">&amp;atilde;</span>o da Silva<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span></pre></div></div><h4>Teste a marca&ccedil;&atilde;o</h4><p>Como j&aacute; comentamos, &eacute; interessante passar seu c&oacute;digo pela <a
href="http://www.google.com/webmasters/tools/richsnippets">Rich Snippets Testing Tool</a> para testar se tudo est&aacute; como deveria. Caso algum &#8220;esquecimento&#8221; tenha ocorrido no momento de marcar os schemas, a ferramenta vai ser de muita valia ao apontar quais equ&iacute;vocos foram esses.</p><h2>Conclus&atilde;o sobre Microdata API e schemas</h2><p>Como os desenvolvedores web devem (ou deveriam) saber, muita coisa neste ramo est&aacute; mudando (para melhor) com o advento do HTML5. Certamente, uma dessas melhorias &eacute; a Microdata API, que permite, a partir de ent&atilde;o, darmos mais significado ao conte&uacute;do do site, provendo uma maneira simples e eficiente de melhorar a significa&ccedil;&atilde;o de nossos conte&uacute;dos.</p><p>Para auxiliar neste prop&oacute;sito, os schemas est&atilde;o, a&iacute;, para centralizar, organizar e prover um vocabul&aacute;rio unificado e acess&iacute;vel de microdata para ser usada e abusado. N&atilde;o deixe de conferir a <a
href="http://schema.org/docs/documents.html">documenta&ccedil;&atilde;o completa do Schema.org</a>. E, para clarear ainda mais as explica&ccedil;&otilde;es, veja o excelente post do pessoal do <a
href="http://loopinfinito.com.br/">Loop Infinito</a> sobre <a
href="http://loopinfinito.com.br/2012/05/02/microdata/">microdata e os vocabul&aacute;rios do Schema.org</a>, com direito a gr&aacute;ficos em SVG e tudo o mais! :-D</p><p>Tanto por indica&ccedil;&otilde;es &#8220;vindas de cima&#8221; &#8211; como no caso de os grandes buscadores j&aacute; darem suporte e incentivar o uso de microdados -, quanto por experi&ecirc;ncias pr&oacute;prias comprovadas, usar microdata em projetos web, a partir de agora, &eacute; praticamente uma obriga&ccedil;&atilde;o!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/" title="JSON &#8211; JavaScript Object Notation">JSON &#8211; JavaScript Object Notation</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/" title="Melhorando a interação em formulários de busca">Melhorando a interação em formulários de busca</a></li><li><a
href="http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/" title="URLs amigáveis (slug) à WordPress">URLs amigáveis (slug) à WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/15-comandos-sql-wordpress/" title="15 fantásticos comandos SQL para WordPress">15 fantásticos comandos SQL para WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/seo/6-mitos-seo-voce-deve-evitar/" title="6 mitos de SEO que você deve evitar">6 mitos de SEO que você deve evitar</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-criar-sumarios-dinamicamente-com-o-toc-table-of-contents-jquery-plugin-jquerytoc/" title="Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin">Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin</a></li><li><a
href="http://desenvolvimentoparaweb.com/php/como-pegar-parte-do-conteudo-dados-de-outro-site-com-php/" title="Como pegar parte do conteúdo (dados) de outro site com PHP">Como pegar parte do conteúdo (dados) de outro site com PHP</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/problemas-comuns-de-wordpress-e-como-resolve-los/" title="Problemas comuns de WordPress e como resolvê-los">Problemas comuns de WordPress e como resolvê-los</a></li><li><a
href="http://desenvolvimentoparaweb.com/html/evitando-erros-html5/" title="Evitando erros comuns de HTML5">Evitando erros comuns de HTML5</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/modernizr-detectar-features-html5-css3/" title="Usando Modernizr para detectar features de HTML5 e CSS3">Usando Modernizr para detectar features de HTML5 e CSS3</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/html/microdata-api-schema-org-significado-html/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Usando Modernizr para detectar features de HTML5 e CSS3</title><link>http://desenvolvimentoparaweb.com/css/modernizr-detectar-features-html5-css3/</link> <comments>http://desenvolvimentoparaweb.com/css/modernizr-detectar-features-html5-css3/#comments</comments> <pubDate>Wed, 11 Apr 2012 12:30:09 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Exemplos]]></category> <category><![CDATA[Ferramentas]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[Planejamento]]></category> <guid
isPermaLink="false">http://desenvolvimentoparaweb.com/?p=801</guid> <description><![CDATA[Conhe&ccedil;a e aprenda a usar Modernizr, biblioteca JavaScript que permite detectar features de HTML5 e CSS3 do navegador e prover solu&ccedil;&otilde;es, caso necess&aacute;rio.]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/modernizr-logo-symbol.png" alt="Modernizr logo s&iacute;mbolo" title="" width="400" height="192" class="aligncenter size-full wp-image-807" /></p><p>Os recursos e t&eacute;cnicas que est&atilde;o surgindo com HTML5 e CSS3 s&atilde;o fenomenais e est&atilde;o levando a web para um pr&oacute;ximo n&iacute;vel. Mas o que fazer se j&aacute; for preciso usar alguns destes recursos <strong>j&aacute;</strong>? Como lidar com browsers que ainda n&atilde;o suportam todas as features de HTML5 + CSS3? A solu&ccedil;&atilde;o tem nome: <strong>Modernizr</strong>.</p><div
class="artigo-traduzido"> Este artigo &eacute; baseado no <span
lang="en">post <a
href="http://html5doctor.com/using-modernizr-to-detect-html5-features-and-provide-fallbacks/">Using Modernizr to detect HTML5 features and provide fallbacks</a></span> do <a
href="http://html5doctor.com"><span
lang="en">HTML5 Doctor</span></a>.</div><p><a
href="http://modernizr.com/">Modernizr</a> &eacute; uma biblioteca JavaScript que detecta quais features de HTML5 e CSS3 o navegador de quem visita o site suporta. Isso permite aos desenvolvedores testar algumas das novas tecnologias e, em seguida, fornecer <em>fallbacks</em> para navegadores que ainda n&atilde;o as suportam. Isto &eacute; chamado de <em>feature detection</em> (detec&ccedil;&atilde;o de caracter&iacute;stica) e &eacute; muito mais eficiente do que <a
href="http://en.wikipedia.org/wiki/Browser_sniffing">browser sniffing</a>.</p><div
class="atencao">O Modernizr &eacute; muito &uacute;til para detectar suporte a CSS3, mas este artigo focar&aacute; em HTML5. Mas n&atilde;o &eacute; preciso se preocupar, j&aacute; que os princ&iacute;pios s&atilde;o, essencialmente, os mesmos.</div><p>Tamb&eacute;m &eacute; importante ter em mente que o Modernizr n&atilde;o &#8220;preencher as lacunas&#8221; (<a
href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills">polyfill</a>). Ele s&oacute; detecta quais caracter&iacute;sticas s&atilde;o suportadas. Mas &eacute; poss&iacute;vel usar usar o Modernizr como parte do processo de <em>polyfilling</em>.</p><h2>Come&ccedil;ando a usar o Modernizr</h2><p>Primeiramente, vamos precisar de um pouco de HTML (<strong>HTML5</strong>, claro!):</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #00bbdd;">&lt;!DOCTYPE html&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;no-js&quot;</span> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;en&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">charset</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;utf-8&quot;</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Hello Modernizr<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;modernizr.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
&nbsp;
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></div></div><p>&Eacute; poss&iacute;vel notar no c&oacute;digo acima que o arquivo <strong>modernizr.js</strong> &eacute; necess&aacute;rio. &Eacute; preciso <a
href="http://www.modernizr.com/download/">gerar e baixar o arquivo no site do Modernizr</a>, escolhendo as caracter&iacute;sticas que ser&atilde;o precisas serem detectadas. Isso ajuda a ter um arquivo modernizr.js com tamanho adequado &agrave;s necessidades do projeto, j&aacute; que n&atilde;o &eacute; preciso detectar tudo o que o Modernizr &eacute; capaz. H&aacute;, tamb&eacute;m, uma <a
href="http://modernizr.com/">vers&atilde;o &#8220;development&#8221; no site</a> para come&ccedil;ar o desenvolvimento rapidamente. Mas, quando for colocar o site em produ&ccedil;&atilde;o, lembre-se de gerar um arquivo personalizado!</p><div
id="attachment_802" class="wp-caption aligncenter" style="width: 499px"><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/modernizr-download-screen.jpg" alt="Modernizr: tela de download" title="" width="489" height="506" class="size-full wp-image-802" /><p
class="wp-caption-text">Tela de download do Modernizr</p></div><p>Ainda observando o trecho de c&oacute;digo acima, veja que na segunda linha h&aacute; uma classe &#8220;no-js&#8221; no <code>html</code>. O Modernizr funciona substituindo essa classe pela classe &#8220;js&#8221;; ent&atilde;o, ele adiciona classes para todas as <em>features</em> que o navegador suporta e, tamb&eacute;m, para os recursos que ele n&atilde;o suporta, pr&eacute;-fixando estas com &#8220;no-&#8221;. Por exemplo:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;js no-flexbox canvas canvastext no-webgl no-touch geolocation postmessage no-websqldatabase no-indexeddb hashchange no-history draganddrop no-websockets rgba hsla multiplebgs backgroundsize no-borderimage borderradius boxshadow no-textshadow opacity no-cssanimations no-csscolumns no-cssgradients no-cssreflections csstransforms no-csstransforms3d no-csstransitions fontface generatedcontent video audio localstorage sessionstorage no-webworkers no-applicationcache svg inlinesvg smil svgclippaths&quot;</span>&gt;</span></pre></div></div><h2>Detec&ccedil;&otilde;es expl&iacute;citas com Modernizr</h2><p>O Modernizr cria um objeto JavaScript global <code>Modernizr</code> que permite consultar <a
href="http://www.modernizr.com/docs/#features-html5">diferentes propriedades</a> desse objeto para realizar a detec&ccedil;&atilde;o de recursos, chamando <code>Modernizr.&lt;feature&gt;</code>. Por exemplo, para testar o suporte a <strong>canvas</strong>, o c&oacute;digo seria:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>Modernizr.<span style="color: #660066;">canvas</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Seu browser suporta HTML5 canvas!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div><p>Como <strong>bons desenvolvedores web</strong> que somos, nosso objetivo &eacute; escrever JavaScript n&atilde;o obstrusivo e progressivo para que todos possam usar o site, portanto, &eacute; preciso tomar alguma a&ccedil;&atilde;o para o caso da <em>feature</em> n&atilde;o ser suportada:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>Modernizr.<span style="color: #660066;">canvas</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Seu browser suporta HTML5 canvas!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Seu browser NÃO suporta canvas...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div><p>Ou, caso se queira testar somente a &#8220;nega&ccedil;&atilde;o&#8221;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> Modernizr.<span style="color: #660066;">canvas</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Sem canvas aqui...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div><h2>Detec&ccedil;&atilde;o de recursos e Polyfilling com YepNope</h2><p>Antes de continuar, caso ainda n&atilde;o saiba o que &eacute; &#8220;Polyfill&#8221;, veja este defini&ccedil;&atilde;o do <a
href="http://paulirish.com/">Paul Irish</a>:</p><blockquote><p> Um shim que imita uma API futura, fornecendo funcionalidades de fallback para navegadores mais antigos.</p></blockquote><p>Para maiores informa&ccedil;&otilde;es, leia (em ingl&ecirc;s) o artigo &#8220;<a
href="http://remysharp.com/2010/10/08/what-is-a-polyfill/">What is a Polyfill?</a>&#8221; de <a
href="http://remysharp.com/">Remy Sharp</a>. Voltando ao artigo&#8230;</p><p>Nos exemplos JavaScript acima, foi mostrada a maneira mais simples de detectar um recurso de browsers usando o Modernizr. Mas e se voc&ecirc; quiser detectar um recurso e usar um polyfill para tornar a performance do navegador melhor? &Eacute; poss&iacute;vel, usando <strong>YepNope</strong>.</p><p><a
href="http://yepnopejs.com/">YepNope</a> &eacute; um <strong>carregador condicional</strong>, que significa que ele s&oacute; ir&aacute; carregar os scripts que s&atilde;o necess&aacute;rios para o browser. E ele j&aacute; est&aacute; incluso no Modernizr! Dessa forma, n&atilde;o &eacute; preciso se preocupar com downloads e links para outros arquivos JavaScript. Mas como usar o YepNope junto com o Modernizr?</p><p>Utilizando <b>canvas</b> como exemplo novamente, geralmente &eacute; preciso uma alternativa (fallback) para os navegadores que n&atilde;o o suportam (por exemplo, IE8). A maneira usual de se fazer isso &eacute; um link para um polyfill, tal como o <a
href="http://flashcanvas.net/">FlashCanvas</a>:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://flashcanvas.net/bin/flashcanvas.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div><p>O problema dessa abordagem &eacute; que todos os navegadores ir&atilde;o baixar este script. Isso &eacute; desnecess&aacute;rio, pois impacta a performance do site, e deve ser evitado sempre que poss&iacute;vel. &Eacute; poss&iacute;vel envolver o elemento <code>script</code> em coment&aacute;rios condicionais, mas, caso seja poss&iacute;vel manter os arquivos condicionais fora da marca&ccedil;&atilde;o, ent&atilde;o isso &eacute; prefer&iacute;vel. Isso &eacute; poss&iacute;vel de ser feito usando <code>Modernizr.load()</code>. J&aacute; que o Modernizr tem o YepNope embutido, &eacute; facilmente poss&iacute;vel testar um recurso e, em seguida, fornecer um polyfill:</p><div
class="atencao"> A fun&ccedil;&atilde;o <strong>.load()</strong>, por padr&atilde;o, n&atilde;o est&aacute; inclusa no arquivo de desenvolvimento do Modernizr. &Eacute; preciso inclu&iacute;-la ao gerar o arquivo de download apropriado, conforme mostrado no in&iacute;cio do artigo.</div><p>O uso b&aacute;sico da fun&ccedil;&atilde;o <code>.load()</code> permite que testar a presen&ccedil;a de uma <em>feature</em>. Veja este exemplo em que o Modernizr testa o suporte para <b>canvas</b> e, caso o browser n&atilde;o a suporte, ele carrega o FlashCanvas:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">Modernizr.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    test<span style="color: #339933;">:</span> Modernizr.<span style="color: #660066;">canvas</span><span style="color: #339933;">,</span>
    nope<span style="color: #339933;">:</span> <span style="color: #3366CC;">'http://flashcanvas.net/bin/flashcanvas.js'</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Usando as <em>developer tools</em> do IE8, na aba &#8220;Network&#8221; &eacute; poss&iacute;vel ver o download e inicializa&ccedil;&atilde;o do <strong>flashcanvas.js</strong>. Legal, h&atilde;? ;-)</p><div
id="attachment_803" class="wp-caption aligncenter" style="width: 743px"><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/modernizr-yepnope-ie8-network-check.gif" alt="Modernizr + YepNope: checando downloads condicionais no IE8" title="" width="733" height="194" class="size-full wp-image-803" /><p
class="wp-caption-text">Modernizr + YepNope: checando downloads condicionais no IE8</p></div><p>Vamos a um exemplo mais pr&aacute;tico que detecta o suporte a <code>&lt;input type="date"&gt;</code>. Se n&atilde;o for suportado, haver&aacute; o carregamento de 2 arquivos jQuery e um arquivo CSS para gerar um seletor de datas:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;modernizr.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>Modernizr.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    test<span style="color: #339933;">:</span> Modernizr.<span style="color: #660066;">inputtypes</span>.<span style="color: #660066;">date</span><span style="color: #339933;">,</span>
    nope<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        <span style="color: #3366CC;">'http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js'</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">'jquery-ui.css'</span>
    <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    complete<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'input[type=date]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">datepicker</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
            dateFormat<span style="color: #339933;">:</span> <span style="color: #3366CC;">'yy-mm-dd'</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div><p>Na maioria dos navegadores, o jQuery ser&aacute; carregado, mas, no Opera, n&atilde;o haver&aacute; essa necessidade, j&aacute; que ele j&aacute; possui um seletor de datas nativo por j&aacute; suportar <code>&lt;input type="date"&gt;</code>.</p><div
id="attachment_804" class="wp-caption aligncenter" style="width: 440px"><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/calendar-firefox.png" alt="" title="" width="430" height="276" class="size-full wp-image-804" /><p
class="wp-caption-text">Seletor de datas no Firefox</p></div><div
id="attachment_805" class="wp-caption aligncenter" style="width: 371px"><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/calendar-opera.png" alt="" title="" width="361" height="276" class="size-full wp-image-805" /><p
class="wp-caption-text">Seletor de datas no Opera</p></div><p>E, como voc&ecirc; j&aacute; deve ter imaginado, carregar ou n&atilde;o 2 arquivos JavaScript e uma folha de estilos gera uma grande diferen&ccedil;a na <strong>performance </strong>do site.</p><div
id="attachment_806" class="wp-caption aligncenter" style="width: 548px"><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/comparacao-recursos-datepicker-firefox-opera.png" alt="Compara&ccedil;&atilde;o de recursos ao carregar datapicker: Firefox x Opera" title="comparacao-recursos-datepicker-firefox-opera" width="538" height="233" class="size-full wp-image-806" /><p
class="wp-caption-text">Compara&ccedil;&atilde;o de recursos ao carregar datapicker: Firefox x Opera</p></div><p>Observe como os 2 arquivos jQuery s&atilde;o carregados duas vezes. <a
href="http://yepnopejs.com/#twice">Isso acontece, mesmo, no YepNope</a>: primeiro ele carrega o recurso e, em seguida, executa-o. Ent&atilde;o, n&atilde;o se preocupe, pois isso &eacute; normal. E veja, tamb&eacute;m, <a
href="http://yepnopejs.com/#testObject">todas as propriedades do objeto de teste do YepNope</a>, conhec&ecirc;-las pode ser bastante &uacute;til!</p><h2>Conclus&atilde;o</h2><p>Como p&ocirc;de ser visto, <strong>Modernizr</strong> &eacute; uma poderosa biblioteca de detec&ccedil;&atilde;o de <em>features</em>. Ela permite verificar se o navegador suporta v&aacute;rios recursos e, dependendo do resultado, permite que sejam usados polyfills. Este artigo analisou como gerar um arquivo Modernizr e suas 2 maneiras de uso: usando diretamente o objeto Modernizr (<code>Modernizr.&lt;feature&gt;</code>) e, em seguida, usando <strong>YepNope</strong>.</p><p>Com isso, damos mais um passo rumo ao <strong>desenvolvimento de uma web melhor</strong>, mais profissional e com desenvolvedores mais conscientes das limita&ccedil;&otilde;es intr&iacute;nsecas aos diversos dispositivos que podem ser usados para se acessar um site. Sab&iacute;amos do &#8220;mal&#8221;, agora conhecemos a cura.</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/css/nao-use-ids-como-seletores-css/" title="Não use IDs como seletores em CSS">Não use IDs como seletores em CSS</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-usar-ready-antes-de-incluir-jquery/" title="Como usar .ready() antes de incluir a jQuery">Como usar .ready() antes de incluir a jQuery</a></li><li><a
href="http://desenvolvimentoparaweb.com/indicacoes/ferramentas-e-recursos-para-desenvolvimento-web/" title="Ferramentas e recursos para desenvolvimento web">Ferramentas e recursos para desenvolvimento web</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/8-caracteristicas-de-user-interfaces-ui-de-sucesso/" title="8 características de User Interfaces (UI) de sucesso">8 características de User Interfaces (UI) de sucesso</a></li><li><a
href="http://desenvolvimentoparaweb.com/indicacoes/10-fontes-de-inspiracao-para-fazer-logotipos-de-qualidade/" title="10 fontes de inspiração para fazer logotipos de qualidade">10 fontes de inspiração para fazer logotipos de qualidade</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/gestalt-aplicado-ao-design-web-parte-5-exemplos-web-do-principio-do-alinhamento/" title="Gestalt aplicado ao design web (parte 5): exemplos web do princípio do alinhamento">Gestalt aplicado ao design web (parte 5): exemplos web do princípio do alinhamento</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/gestalt-aplicado-ao-design-web-parte-3-exemplos-web-do-principio-da-proximidade/" title="Gestalt aplicado ao design web (parte 3): exemplos web do princípio da proximidade">Gestalt aplicado ao design web (parte 3): exemplos web do princípio da proximidade</a></li><li><a
href="http://desenvolvimentoparaweb.com/html/evitando-erros-html5/" title="Evitando erros comuns de HTML5">Evitando erros comuns de HTML5</a></li><li><a
href="http://desenvolvimentoparaweb.com/html/microdata-api-schema-org-significado-html/" title="Microdata API e Schema.org: dando significado ao HTML">Microdata API e Schema.org: dando significado ao HTML</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/desenvolvedores-frontend-mercado/" title="Desenvolvedores front end e o mercado">Desenvolvedores front end e o mercado</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/css/modernizr-detectar-features-html5-css3/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Como usar .ready() antes de incluir a jQuery</title><link>http://desenvolvimentoparaweb.com/jquery/como-usar-ready-antes-de-incluir-jquery/</link> <comments>http://desenvolvimentoparaweb.com/jquery/como-usar-ready-antes-de-incluir-jquery/#comments</comments> <pubDate>Fri, 30 Mar 2012 13:00:36 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Exemplos]]></category> <category><![CDATA[Performance]]></category> <guid
isPermaLink="false">http://desenvolvimentoparaweb.com/?p=788</guid> <description><![CDATA[Aprenda como usar o .ready() da jQuery at&eacute; mesmo antes de incluir a pr&oacute;pria jQuery, que permite executar c&oacute;digos inline que dependem da bilbioteca mesmo antes de ela ser inclu&iacute;da! Saiba mais!]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/03/jquery-ready-qualquer-ordem.jpg" alt="Ilustrando como usar ready() antes de incluir o pr&oacute;prio jQuery no documento" title="" width="389" height="250" class="aligncenter size-full wp-image-789" /></p><p>Uma das mais &#8220;tradicionais&#8221; regras de <strong>performance de sites</strong> &eacute; colocar as chamadas para javascripts externos no final do documento HTML, antes do fechamento da tag <code>body</code>. Mas n&atilde;o s&atilde;o raras as ocasi&otilde;es em que n&oacute;s, desenvolvedores web, precisamos inserir c&oacute;digos que dependem da jQuery no meio do documento (posi&ccedil;&atilde;o que fica <strong>antes</strong> do indicado para se chamar a pr&oacute;pria jQuery). Como proceder?</p><div
class="artigo-traduzido"> Este artigo &eacute; baseado no <span
lang="en">post <a
href="http://blog.colin-gourlay.com/blog/2012/02/safely-using-ready-before-including-jquery/">Safely Using .ready() Before Including jQuery</a></span> do <a
href="http://blog.colin-gourlay.com/"><span
lang="en">Colin Gourlay Blog</span></a>.</div><p>Antes de continuarmos, &eacute; importante saber que existem diferentes sintaxes poss&iacute;veis para &#8220;ativar&#8221; o jQuery:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>handler<span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">// &quot;handler&quot; é a função a ser vinculada</span>
&nbsp;
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span>handler<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span>handler<span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">// maneira não recomendada</span>
&nbsp;
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ready'</span><span style="color: #339933;">,</span> handler<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><h2>E existe solu&ccedil;&atilde;o para usar .ready() antes de incluir o jQuery?</h2><p>Sim, existe solu&ccedil;&atilde;o para usar <code>.ready()</code> antes de incluir o jQuery e, felizmente, a solu&ccedil;&atilde;o &eacute; eficaz em todas essas possibilidades apresentadas &#8211; e, talvez, at&eacute; em algumas outras, quem sabe&#8230;</p><p>Em termos pr&aacute;ticos, a solu&ccedil;&atilde;o &eacute;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">&lt;!-- No &lt;head&gt; --&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>w<span style="color: #339933;">,</span>d<span style="color: #339933;">,</span>u<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>w.<span style="color: #660066;">readyQ</span><span style="color: #339933;">=</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>w.<span style="color: #660066;">bindReadyQ</span><span style="color: #339933;">=</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>function p<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span>y<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">==</span><span style="color: #3366CC;">&quot;ready&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>w.<span style="color: #660066;">bindReadyQ</span>.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>w.<span style="color: #660066;">readyQ</span>.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>var a<span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span>ready<span style="color: #339933;">:</span>p<span style="color: #339933;">,</span>bind<span style="color: #339933;">:</span>p<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>w.$<span style="color: #339933;">=</span>w.<span style="color: #660066;">jQuery</span><span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>f<span style="color: #339933;">===</span>d<span style="color: #339933;">||</span>f<span style="color: #339933;">===</span>u<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> a<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>p<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>window<span style="color: #339933;">,</span>document<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
&nbsp;
&lt;!-- No &lt;body&gt; (imediatamente após a jQuery) --&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #339933;">,</span>d<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>$.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>readyQ<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>$<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>$.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>bindReadyQ<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>$<span style="color: #009900;">&#40;</span>d<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ready&quot;</span><span style="color: #339933;">,</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #339933;">,</span>document<span style="color: #009900;">&#41;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div><p>Claro que n&atilde;o d&aacute; pra entender a l&oacute;gica olhando script comprimidos. Vejamos o de <code>head</code>:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>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
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>w<span style="color: #339933;">,</span> d<span style="color: #339933;">,</span> u<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Define duas queues para os handlers</span>
    w.<span style="color: #660066;">readyQ</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    w.<span style="color: #660066;">bindReadyQ</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Insere um handler na queues correta</span>
    <span style="color: #003366; font-weight: bold;">function</span> pushToQ<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span> y<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>x <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;ready&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            w.<span style="color: #660066;">bindReadyQ</span>.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            w.<span style="color: #660066;">readyQ</span>.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Define um objeto alias (para uso posterior)</span>
    <span style="color: #003366; font-weight: bold;">var</span> alias <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        ready<span style="color: #339933;">:</span> pushToQ<span style="color: #339933;">,</span>
        bind<span style="color: #339933;">:</span> pushToQ
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// Definir a função jQuery &quot;fake&quot; para capturar os handlers</span>
    w.$ <span style="color: #339933;">=</span> w.<span style="color: #660066;">jQuery</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>handler<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>handler <span style="color: #339933;">===</span> d <span style="color: #339933;">||</span> handler <span style="color: #339933;">===</span> u<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">// Coloca na queue $(document).ready(handler), $().ready(handler)</span>
            <span style="color: #006600; font-style: italic;">// e $(document).bind(&quot;ready&quot;, handler), retornando um objeto com</span>
            <span style="color: #006600; font-style: italic;">// os métodos de &quot;alias&quot; para pushToQ</span>
            <span style="color: #000066; font-weight: bold;">return</span> alias<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">// Queue $(handler)</span>
            pushToQ<span style="color: #009900;">&#40;</span>handler<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>window<span style="color: #339933;">,</span> document<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>O script de <code>body</code> (imediatamente depois da jQuery):</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>$<span style="color: #339933;">,</span> doc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    $.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>readyQ<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>index<span style="color: #339933;">,</span> handler<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span>handler<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    $.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>bindReadyQ<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>index<span style="color: #339933;">,</span> handler<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span>doc<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ready&quot;</span><span style="color: #339933;">,</span> handler<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #339933;">,</span> document<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>Usa-se o <a
href="http://api.jquery.com/jQuery.each/"><code>$.each()</code></a> para associar corretamente todos os handlers na fila para o DOM pronto, mas, porque $(document).bind(&#8220;ready&#8221;, handler) pode ter sido chamado antes, &eacute; preciso dar um <code>bind</code>, tamb&eacute;m, da maneira correta.</p><h2>Exemplo de uso</h2><p>OK, realmente &eacute; um pouco confuso de se entender de primeira, por isso, vejamos este exemplo de como usar o <code>$.ready()</code> antes da jQuery, seguido de suas respectivas sa&iacute;das num console.</p><p>Exemplo:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>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
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;!</span>DOCTYPE html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>title<span style="color: #339933;">&gt;</span>Example<span style="color: #339933;">&lt;/</span>title<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>w<span style="color: #339933;">,</span>d<span style="color: #339933;">,</span>u<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>w.<span style="color: #660066;">readyQ</span><span style="color: #339933;">=</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>w.<span style="color: #660066;">bindReadyQ</span><span style="color: #339933;">=</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>function p<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span>y<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">==</span><span style="color: #3366CC;">&quot;ready&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>w.<span style="color: #660066;">bindReadyQ</span>.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>w.<span style="color: #660066;">readyQ</span>.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>var a<span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span>ready<span style="color: #339933;">:</span>p<span style="color: #339933;">,</span>bind<span style="color: #339933;">:</span>p<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>w.$<span style="color: #339933;">=</span>w.<span style="color: #660066;">jQuery</span><span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>f<span style="color: #339933;">===</span>d<span style="color: #339933;">||</span>f<span style="color: #339933;">===</span>u<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> a<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>p<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>window<span style="color: #339933;">,</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
            $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ready&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Examplo D: $(document).bind(<span style="color: #000099; font-weight: bold;">\&quot;</span>ready<span style="color: #000099; font-weight: bold;">\&quot;</span>, handler)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Examplo A: $(document).ready(handler)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            $<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Examplo B: $().ready(handler)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            $<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Examplo C: $(handler)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #339933;">,</span>d<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>$.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>readyQ<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>$<span style="color: #009900;">&#40;</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>$.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>bindReadyQ<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>$<span style="color: #009900;">&#40;</span>d<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ready&quot;</span><span style="color: #339933;">,</span>f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>jQuery<span style="color: #339933;">,</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></td></tr></table></div><p>Console:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
</pre></td><td
class="code"><pre class="javascript" style="font-family:monospace;">Example A<span style="color: #339933;">:</span> $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span>handler<span style="color: #009900;">&#41;</span>
Example B<span style="color: #339933;">:</span> $<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span>handler<span style="color: #009900;">&#41;</span>
Example C<span style="color: #339933;">:</span> $<span style="color: #009900;">&#40;</span>handler<span style="color: #009900;">&#41;</span>
Example D<span style="color: #339933;">:</span> $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ready&quot;</span><span style="color: #339933;">,</span> handler<span style="color: #009900;">&#41;</span></pre></td></tr></table></div><p>Haha! Viu, s&oacute;? Apesar de, no c&oacute;digo, o scripts do &#8220;Exemplo D&#8221; ter sido o primeiro, na sa&iacute;da do console os exemplos executaram perfeitamente na ordem &#8220;A, B, C, D&#8221;! &nbsp;  \o/</p><h2>Conclus&atilde;o</h2><p>E, com isso, vimos que &eacute; perfeitamente poss&iacute;vel &#8211; e relativamente simples &#8211; usarmos chamadas ao <code>.ready()</code> da jQuery de forma &#8220;n&atilde;o ordenada&#8221;. Isso faz abrir um leque de possibilidades interessante, pense bem!</p><p>Se gostou e/ou tem alguma ideia de como usar isso para melhorar seus scripts, comente e compartilhe! Ajude a <strong>desenvolver a web</strong>!  ;-)</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/css/modernizr-detectar-features-html5-css3/" title="Usando Modernizr para detectar features de HTML5 e CSS3">Usando Modernizr para detectar features de HTML5 e CSS3</a></li><li><a
href="http://desenvolvimentoparaweb.com/html/evitando-erros-html5/" title="Evitando erros comuns de HTML5">Evitando erros comuns de HTML5</a></li><li><a
href="http://desenvolvimentoparaweb.com/html/microdata-api-schema-org-significado-html/" title="Microdata API e Schema.org: dando significado ao HTML">Microdata API e Schema.org: dando significado ao HTML</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/nao-use-ids-como-seletores-css/" title="Não use IDs como seletores em CSS">Não use IDs como seletores em CSS</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/" title="Como otimizar códigos jQuery e aumentar a performance do front-end">Como otimizar códigos jQuery e aumentar a performance do front-end</a></li><li><a
href="http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/" title="JSON &#8211; JavaScript Object Notation">JSON &#8211; JavaScript Object Notation</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/" title="5 dicas para temas WordPress melhores">5 dicas para temas WordPress melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/" title="Melhorando a interação em formulários de busca">Melhorando a interação em formulários de busca</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/8-maneiras-de-melhorar-a-performance-de-um-site/" title="8 maneiras de melhorar a performance de um site">8 maneiras de melhorar a performance de um site</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/como-usar-ready-antes-de-incluir-jquery/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>JSON &#8211; JavaScript Object Notation</title><link>http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/</link> <comments>http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/#comments</comments> <pubDate>Wed, 22 Jun 2011 13:16:57 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Conteúdo]]></category> <category><![CDATA[Exemplos]]></category> <guid
isPermaLink="false">http://desenvolvimentoparaweb.com/?p=662</guid> <description><![CDATA[JSON - JavaScript Object Notation - &eacute; uma das principais nota&ccedil;&otilde;es para interc&acirc;mbio de dados entre aplicativos. Saiba mais e veja exemplos e ferramentas.]]></description> <content:encoded><![CDATA[<p
style="text-align: center;"><img
class="aligncenter size-full wp-image-663" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/08/json-javascript-object-notation.jpg" alt="JSON - JavaScript Object Notation" width="160" height="243" /></p><p>J&aacute; n&atilde;o &eacute; nenhuma novidade no mundo de <a
title="desenvolvimento para web" href="http://desenvolvimentoparaweb.com/">desenvolvimento web</a> o uso e abuso da tecnologia <strong>JSON</strong>. Entretanto, nem todos conhecem este padr&atilde;o de interc&acirc;mbio facilitado de dados entre aplica&ccedil;&otilde;es. N&atilde;o &eacute; obrigat&oacute;rio, mas saber JSON pode ser bastante &uacute;til em projetos um pouco mais sofisticados e/ou que necessitam de uma demanda/pol&iacute;tica de transfer&ecirc;ncia de dados mais simples, leve e eficiente.</p><p>Usar JSON proporciona in&uacute;meras vantagens ao desenvolvedor web. Desde a simplicidade em tratar os dados &agrave; maneira f&aacute;cil como &eacute; poss&iacute;vel integrar tecnologias <em>client-side</em> com <em>server-side</em>, o JSON certamente &eacute; bastante recomendado.</p><h2>O que &eacute; e para que serve JSON</h2><p>JSON &eacute; o acr&ocirc;nimo para &#8220;<strong>JavaScript  Object  Notation</strong>&#8220;. Como &eacute; poss&iacute;vel notar pelo nome, originalmente o JSON foi concebido para se trabalhar com javascript, mas, j&aacute; adiantando, n&atilde;o &eacute; necessariamente obrigat&oacute;rio o uso de javascript para seu uso, dado que, atualmente, &eacute; poss&iacute;vel utilizar JSON com mais de 20 linguagens de programa&ccedil;&atilde;o diferentes.</p><p>Uma defini&ccedil;&atilde;o interessante &eacute; a do Wiki&eacute;dia:</p><blockquote><p>JSON (com a pronuncia djeis&oacute;n), um acr&ocirc;nimo para &#8220;JavaScript  Object  Notation&#8221;, &eacute; um formato leve para interc&acirc;mbio de dados computacionais. JSON &eacute; um subconjunto da nota&ccedil;&atilde;o de objeto de JavaScript, mas seu uso n&atilde;o requer javascript, exclusivamente.</p><p>O formato JSON foi originalmente criado por Douglas Crockford e &eacute; descrito no <a
href="http://tools.ietf.org/html/rfc4627">RFC 4627</a>. O media-type oficial do JSON &eacute;<em> application/json</em> e a extens&atilde;o &eacute; <em>.json</em>.</p></blockquote><p>Mas uma defini&ccedil;&atilde;o que explica, de forma bem mais simples e objetiva, &eacute; a de <a
href="http://blog.thiagobelem.net/">Tiago Belem</a>, em seu artigo &#8220;<a
href="http://blog.thiagobelem.net/php/introducao-a-json-e-php-webservices/">Introdu&ccedil;&atilde;o a JSON e PHP</a>&#8220;, no qual consta que</p><blockquote><p>JSON &eacute; um padr&atilde;o de formata&ccedil;&atilde;o de dados que ser&atilde;o transmitidos entre duas aplica&ccedil;&otilde;es de linguagens diferentes.</p></blockquote><p>Quer dizer, JSON &eacute; usado, principalmente, para <strong>permitir a troca de dados entre linguagens</strong>. Mas n&atilde;o s&oacute; isso, ele tamb&eacute;m &eacute; &oacute;timo para lidar com <em>webservices</em> e tem muitos outros usos.</p><h2>Vantagens em se usar JSON</h2><p>A descri&ccedil;&atilde;o de dados em JSON &eacute; bem f&aacute;cil, n&atilde;o passando de um documento de texto puro disposto em um padr&atilde;o simples. Conforme foi explicado, JSON &eacute; excelente para interc&acirc;mbio de informa&ccedil;&otilde;es entre aplicativos.</p><p>Mas tamb&eacute;m existem outras maneiras de se fazer isso, por exemplo, com <strong>XML</strong>. Entretanto, o JSON apresenta vantagens bastante interessantes, o que, ap&oacute;s uma an&aacute;lise do caso de seu aplicativo ou sistema web, pode lev&aacute;-lo a optar por ele. Algumas das vantagens s&atilde;o:</p><ul><li>Sintaxe simples, de f&aacute;cil aprendizado e implementa&ccedil;&atilde;o;</li><li>Tamanho do arquivo bem menor em rela&ccedil;&atilde;o a outras &#8220;linguagens intermedi&aacute;rias&#8221;, tais como XML;</li><li>Facilidade de desenvolvimento e alto desempenho nas aplica&ccedil;&otilde;es que o utilizam.</li></ul><h2>Estruturas JSON</h2><p>&Eacute; poss&iacute;vel ver alguns diagramas das estruturas no pr&oacute;prio <a
href="http://www.json.org/">site oficial do JSON</a>; basicamente, &eacute; o seguinte:</p><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/06/json-estruturas-objeto-array-valor.gif" alt="JSON: estruturas" title="" width="500" height="440" class="aligncenter size-full wp-image-708" /></p><p>Vamos ver, ent&atilde;o, como podemos descrever dados simples usando o que a sintaxe que ele nos oferece.</p><h3>Arrays</h3><p>Por exemplo, vamos ver como seria um array dos dias da semana:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;Domingo&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Segunda&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Terça&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Quarta&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Quinta&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Sexta&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;Sábado&quot;</span><span style="color: #009900;">&#93;</span></pre></div></div><p>Perceba que strings devem ser indicadas com aspas duplas.</p><p>Elementos separados por v&iacute;rgulas entre colchetes &eacute; a nota&ccedil;&atilde;o JSON para um array (naturalmente, a v&iacute;rgula delimita cada item). A maioria dos desenvolvedores prefere identar um pouco o c&oacute;digo para facilitar a leitura:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#91;</span>
	<span style="color: #3366CC;">&quot;Domingo&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Segunda&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Terça&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Quarta&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Quinta&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Sexta&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Sábado&quot;</span>
<span style="color: #009900;">&#93;</span></pre></div></div><p>&Eacute; poss&iacute;vel, tamb&eacute;m, misturar diversos tipos de dados em um s&oacute; array:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#91;</span>
	<span style="color: #CC0000;">33</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Segunda&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #003366; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span>
	<span style="color: #CC0000;">3.14159265</span><span style="color: #339933;">,</span>
        <span style="color: #003366; font-weight: bold;">NULL</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;ma&amp;ccedil;&amp;atilde;&quot;</span>
<span style="color: #009900;">&#93;</span></pre></div></div><h3>Objetos</h3><p>Como vimos, arrays s&atilde;o representados por colcechetes. No caso de objetos, estes s&atilde;o representados por chaves; cada chave &eacute; identificada por uma string e, depois de um dois-pontos, os valores de cada item especificados. Fica mais claro com um exemplo:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
	<span style="color: #3366CC;">&quot;Domingo&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Folga&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Segunda&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Viagem&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Terça&quot;</span>   <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Pagamentos&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Quarta&quot;</span>  <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Piscina&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Quinta&quot;</span>  <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Churrasco&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Sexta&quot;</span>   <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Carteado&quot;</span><span style="color: #339933;">,</span>
	<span style="color: #3366CC;">&quot;Sábado&quot;</span>  <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Festa&quot;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><p>Perceba que n&atilde;o tem import&acirc;ncia haver espa&ccedil;os a mais ou a menos entre a descri&ccedil;&atilde;o da chave, o separador &#8220;:&#8221; e o valor desta. Tudo ser&aacute; interpretado corretamente.</p><h3>Alguns exemplos</h3><p>&Eacute; bastante simples descrever JSON, voc&ecirc; viu. Como os objetos de qualquer outra linguagem de programa&ccedil;&atilde;o, &eacute; poss&iacute;vel armazenar quaisquer tipos de dados e quantos dados se desejar. Veja este exemplo:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
    <span style="color: #3366CC;">&quot;Marconildo&quot;</span><span style="color: #339933;">:</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.marconildo.com.br/&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">34</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #3366CC;">&quot;Joanorta&quot;</span><span style="color: #339933;">:</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.joanorta.com.br/&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">22</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #3366CC;">&quot;Estripafurgia&quot;</span><span style="color: #339933;">:</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.estripafurgia.com.br/&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">47</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><p>Perceba que, neste caso, cada objeto possui, &#8220;url&#8221; e &#8220;idade&#8221; (provavelmente este n&atilde;o seria um exemplo &#8220;da vida real&#8221;, mas d&aacute; para ilustrar bem o conceito), mas, n&atilde;o necessariamente, todos devem possuir o mesmo n&uacute;mero de propriedades. Poderia haver um ou mais elementos com &#8220;url&#8221;, &#8220;idade&#8221;, &#8220;altura&#8221;, &#8220;endereco&#8221;, etc. &Eacute; poss&iacute;vel, inclusive, a utiliza&ccedil;&atilde;o de arrays:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
    <span style="color: #3366CC;">&quot;Marconildo&quot;</span><span style="color: #339933;">:</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.marconildo.com.br/&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">34</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #3366CC;">&quot;Joanorta&quot;</span><span style="color: #339933;">:</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.joanorta.com.br/&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">22</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #3366CC;">&quot;Estripafurgia&quot;</span><span style="color: #339933;">:</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.estripafurgia.com.br/&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">47</span><span style="color: #339933;">,</span>
    	<span style="color: #3366CC;">&quot;diasDeTrabalho&quot;</span><span style="color: #339933;">:</span>
	 <span style="color: #009900;">&#91;</span>
	     <span style="color: #3366CC;">&quot;Segunda&quot;</span><span style="color: #339933;">,</span>
	     <span style="color: #3366CC;">&quot;Quarta&quot;</span><span style="color: #339933;">,</span>
	     <span style="color: #3366CC;">&quot;Sexta&quot;</span>
	 <span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><p>E, at&eacute;, um array de objetos!</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
    <span style="color: #3366CC;">&quot;Marconildo&quot;</span><span style="color: #339933;">:</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.marconildo.com.br/&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">34</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #3366CC;">&quot;Joanorta&quot;</span><span style="color: #339933;">:</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.joanorta.com.br/&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">22</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #3366CC;">&quot;Estripafurgia&quot;</span><span style="color: #339933;">:</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.estripafurgia.com.br/&quot;</span><span style="color: #339933;">,</span>
        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">47</span><span style="color: #339933;">,</span>
    	<span style="color: #3366CC;">&quot;dependentes&quot;</span><span style="color: #339933;">:</span>
    	<span style="color: #009900;">&#91;</span>
    	    <span style="color: #3366CC;">&quot;Astolfinho&quot;</span><span style="color: #339933;">:</span>
	    <span style="color: #009900;">&#123;</span>
	        <span style="color: #3366CC;">&quot;sexo&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;m&quot;</span><span style="color: #339933;">,</span>
	        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">16</span>
	    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    	    <span style="color: #3366CC;">&quot;Mariazinha&quot;</span><span style="color: #339933;">:</span>
	    <span style="color: #009900;">&#123;</span>
	        <span style="color: #3366CC;">&quot;sexo&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;f&quot;</span><span style="color: #339933;">,</span>
	        <span style="color: #3366CC;">&quot;idade&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">10</span>
	    <span style="color: #009900;">&#125;</span>
    	<span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><h2>JSON e javascript</h2><p>Agora voc&ecirc; j&aacute; aprendeu as nota&ccedil;&otilde;es b&aacute;sicas do JSON, mas o que fazer com isso, como usar, efetivamente, o poder do JSON nas aplica&ccedil;&otilde;es do dia-a-dia usando javascript? Veja um exemplo simples:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> funcionarios <span style="color: #339933;">=</span> <span style="color: #3366CC;">'
	{
	    &quot;Marconildo&quot;:
	    {
	        &quot;url&quot;: &quot;http://www.marconildo.com.br/&quot;,
	        &quot;idade&quot;: 34
	    },
	    &quot;Joanorta&quot;:
	    {
	        &quot;url&quot;: &quot;http://www.joanorta.com.br/&quot;,
	        &quot;idade&quot;: 22
	    },
	    &quot;Estripafurgia&quot;:
	    {
	        &quot;url&quot;: &quot;http://www.estripafurgia.com.br/&quot;,
	        &quot;idade&quot;: 47
	    }
	}
'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> funcionario <span style="color: #339933;">=</span> JSON.<span style="color: #660066;">parse</span><span style="color: #009900;">&#40;</span>funcionarios<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>funcionario.<span style="color: #660066;">Marconildo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>funcionario.<span style="color: #660066;">Marconildo</span>.<span style="color: #660066;">idade</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Foi criada a vari&aacute;vel &#8220;funcionarios&#8221; e colocado uma string JSON nela. Usando a fun&ccedil;&atilde;o <a
rel="nofollow" href="http://msdn.microsoft.com/en-us/library/cc836466(v=vs.94).aspx">JSON.parse</a>, convertemos a string para, efetivamente, JSON na vari&aacute;vel &#8220;funcionario&#8221;e, a partir da&iacute;, foi poss&iacute;vel acessar todas suas propriedades com a nota&ccedil;&atilde;o padr&atilde;o de OO.</p><p>Esse foi um exemplo ilustrativo. Em aplica&ccedil;&otilde;es &#8220;de verdade&#8221;, seria bastante eficiente, por exemplo, realizar requisi&ccedil;&otilde;es em AJAX para procurar retornos em JSON e, a partir da&iacute;, realizar quaisquer tipos de opera&ccedil;&atilde;o com o <em>data</em> retornado. Trataremos disso em artigos futuros. <a
href="http://desenvolvimentoparaweb.com/feed">Assine o feed</a> para conferir.</p><h3>$.getJSON</h3><p>O jQuery possui uma poderosa ferramenta para trabalharmos com JSON, &eacute; a fun&ccedil;&atilde;o <a
href="http://api.jquery.com/jQuery.getJSON/">$.getJSON</a>, que serve para carregar dados no formato JSON usando requisi&ccedil;&atilde;o HTTP <strong>GET</strong>. Na verdade, esta fun&ccedil;&atilde;o &eacute; somente uma esp&eacute;cie de atalho para <a
href="http://api.jquery.com/jQuery.ajax/">$.ajax()</a> usando &#8220;json&#8221; no dataType, mas us&aacute;-la num contexto JSON fica bastante coerente.</p><p>N&atilde;o h&aacute; mist&eacute;rio algum para usar, ele segue a mesma &#8220;linha&#8221; do $.ajax(), como podemos encontrar neste exemplo disponibilizado no pr&oacute;prio site do jQuery:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">getJSON</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ajax/test.json'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #003366; font-weight: bold;">var</span> items <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
  $.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>data<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>key<span style="color: #339933;">,</span> val<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    items.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;li id=&quot;'</span> <span style="color: #339933;">+</span> key <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;&gt;'</span> <span style="color: #339933;">+</span> val <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/li&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;ul/&gt;'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #3366CC;">'class'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'my-new-list'</span><span style="color: #339933;">,</span>
    html<span style="color: #339933;">:</span> items.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">appendTo</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>E, <a
href="http://onwebdev.blogspot.com/2011/08/jquery-testing-remote-json-data-with.html">como nos mostra Gabriele Romanato</a>, &eacute; poss&iacute;vel verificar se o resultado da requisi&ccedil;&atilde;o &eacute; realmente um objeto JSON de maneira simples:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">getJSON</span><span style="color: #009900;">&#40;</span>url<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> data <span style="color: #339933;">!==</span> <span style="color: #3366CC;">'object'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// Erro!</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Dessa maneira, &eacute; poss&iacute;vel economizar bastante tempo ao procurar erros e a estrutura de c&oacute;digo fica mais profissional e mais facilmente manuten&iacute;vel.</p><h2>JSON e PHP</h2><p>O PHP tamb&eacute;m possui algumas <a
href="http://www.php.net/manual/en/ref.json.php">fun&ccedil;&otilde;es para se trabalhar com JSON</a>. Vamos a um exemplo simples de como gerar PHP a partir de JSON:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$funcionarios</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'
	{
	    &quot;Marconildo&quot;:
	    {
	        &quot;url&quot;: &quot;http://www.marconildo.com.br/&quot;,
	        &quot;idade&quot;: 34
	    },
	    &quot;Joanorta&quot;:
	    {
	        &quot;url&quot;: &quot;http://www.joanorta.com.br/&quot;,
	        &quot;idade&quot;: 22
	    },
	    &quot;Estripafurgia&quot;:
	    {
	        &quot;url&quot;: &quot;http://www.estripafurgia.com.br/&quot;,
	        &quot;idade&quot;: 47
	    }
	}
'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$funcionario</span> <span style="color: #339933;">=</span> <span style="color: #990000;">json_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$funcionarios</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$funcionario</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Marconildo</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$funcionario</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Marconildo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">idade</span><span style="color: #339933;">;</span></pre></div></div><p>Bem simples, bem direto, dispensa explica&ccedil;&otilde;es. Agora, se voc&ecirc; preferir tratar o JSON como se fosse array, basta inserir um segundo par&acirc;metro &agrave; fun&ccedil;&atilde;o, dessa maneira:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$funcionario</span> <span style="color: #339933;">=</span> <span style="color: #990000;">json_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$funcionarios</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><h2>Ferramentas JSON</h2><p>JSON &eacute; bastante simples e intuitivo para qualquer programador, mas, para quem est&aacute; come&ccedil;ando a mexer agora e/ou para os que precisam de algumas <strong>ferramentas para JSON</strong>, segue o link de alguns parser, validadores e ferramentas, em geral, para se trabalhar com JSON:</p><ul><li><a
href="http://json.parser.online.fr/">Json Parser Online</a></li><li><a
href="http://jsonlint.com/">JSONLint &#8211; The JSON Validator</a></li><li><a
href="http://jsonviewer.stack.hu/">Online JSON Viewer</a></li><li><a
href="http://www.jollydroll.com/tools/json">Convert JSON Strings to a Friendly Readable Format</a></li></ul><h2>Conclus&atilde;o sobre JSON</h2><p>Uma das principais funcionalidades do JSON &eacute; o <strong>interc&acirc;mbio de dados entre aplicativos e linguagens diferentes</strong>. Sua sintaxe simples, sua leveza e objetividade, aliados ao suporte por dezenas de linguagens de progrma&ccedil;&atilde;o o tornam uma excelente alternativa quando a necessidade &eacute; esta. O fato de milhares de <em>webservices</em> de qualidade usarem JSON deve ser um bom indicativo de que us&aacute;-lo &eacute; uma boa escolha.</p><p>Usando as ferramentas apresentas, &eacute; poss&iacute;vel validar seu JSON, test&aacute;-lo, verificar se est&aacute; produzindo uma hierarquia correta, enfim, aperfei&ccedil;oar e refinar o c&oacute;digo para que atinja o m&aacute;ximo poss&iacute;vel de desempenho. Ao se trabalhar com JSON, logo se percebe seu poder e simplicidade, o que agiliza bastante o processo de programa&ccedil;&atilde;o, ao mesmo tempo em que o formato n&atilde;o se torna um empecilho &agrave; produtividade; pelo contr&aacute;rio, a aprimora!</p><p>Por essas e outras a nota&ccedil;&atilde;o <strong>JavaScript Object Notation</strong>, mais conhecida como <strong>JSON</strong>, &eacute; altamente recomendada para desenvolvimento web!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/html/evitando-erros-html5/" title="Evitando erros comuns de HTML5">Evitando erros comuns de HTML5</a></li><li><a
href="http://desenvolvimentoparaweb.com/html/microdata-api-schema-org-significado-html/" title="Microdata API e Schema.org: dando significado ao HTML">Microdata API e Schema.org: dando significado ao HTML</a></li><li><a
href="http://desenvolvimentoparaweb.com/seo/erros-comuns-desenvolvimento-web-campanhas-seo/" title="Erros comuns em desenvolvimento web para campanhas de SEO">Erros comuns em desenvolvimento web para campanhas de SEO</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/breadcrumbs-guia-completo-exemplos-melhores-praticas/" title="Breadcrumbs: guia completo com exemplos e melhores práticas">Breadcrumbs: guia completo com exemplos e melhores práticas</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/perguntas-cliente-antes-depois-projeto/" title="Perguntas ao cliente para antes e depois de um projeto">Perguntas ao cliente para antes e depois de um projeto</a></li><li><a
href="http://desenvolvimentoparaweb.com/seo/6-mitos-seo-voce-deve-evitar/" title="6 mitos de SEO que você deve evitar">6 mitos de SEO que você deve evitar</a></li><li><a
href="http://desenvolvimentoparaweb.com/midia-social/mastering-twitter-o-manual-completo-sobre-twitter-para-desenvolvedores-e-marketeiros/" title="Mastering Twitter, o manual completo sobre twitter para desenvolvedores e marketeiros">Mastering Twitter, o manual completo sobre twitter para desenvolvedores e marketeiros</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/8-caracteristicas-de-user-interfaces-ui-de-sucesso/" title="8 características de User Interfaces (UI) de sucesso">8 características de User Interfaces (UI) de sucesso</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-criar-sumarios-dinamicamente-com-o-toc-table-of-contents-jquery-plugin-jquerytoc/" title="Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin">Como criar sumários dinamicamente com o TOC (Table of Contents) jQuery plugin</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/web-sites-e-comunicacao-21-maneiras-de-os-sites-se-comunicarem-com-seus-visitantes/" title="Web sites e comunicação: 21 maneiras de os sites se comunicarem com seus visitantes">Web sites e comunicação: 21 maneiras de os sites se comunicarem com seus visitantes</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/feed/</wfw:commentRss> <slash:comments>15</slash:comments> </item> <item><title>Melhores editores WYSIWYG para seu projeto</title><link>http://desenvolvimentoparaweb.com/javascript/melhores-editores-wysiwyg-para-seu-projeto/</link> <comments>http://desenvolvimentoparaweb.com/javascript/melhores-editores-wysiwyg-para-seu-projeto/#comments</comments> <pubDate>Tue, 01 Jun 2010 13:00:31 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Ferramentas]]></category> <category><![CDATA[UX]]></category> <guid
isPermaLink="false">http://desenvolvimentoparaweb.com/?p=629</guid> <description><![CDATA[Os melhores editores WYSIWYG para seu projeto ir para o pr&oacute;ximo n&iacute;vel!]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-640" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/wysiwyg-melhores-editores-melhor-editor-wysiwyg.jpg" alt="WYSIWYG: melhores editores" width="200" height="200" /></p><p>Para quem est&aacute; acostumado a utilizar CMSs em desenvolvimento web, deparar-se com um <strong>editor WYSIWYG</strong> para p&aacute;ginas e artigos &eacute; algo banal. Para desenvolvimento de softwares desde o in&iacute;cio, &eacute; preciso implementar um desses editores e, com tantas op&ccedil;&otilde;es dispon&iacute;veis no mercado, a escolha pode se tornar complicada&#8230; Para isso, confira os 10 melhores editores WYSIWYG para seu pr&oacute;ximo projeto!</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original &#8220;<a
href="http://www.1stwebdesigner.com/resources/10-best-wysiwyg-text-and-html-editors-for-your-next-project/">10 best WYSIWYG Text and HTML Editors for Your Next Project</a>&#8220;, do <em>blog</em> <a
href="http://www.1stwebdesigner.com/resources/10-best-wysiwyg-text-and-html-editors-for-your-next-project/">Graphic and Web Design Blog</a>, e sofreu algumas adapta&ccedil;&otilde;es.</div><h2>NicEdit</h2><p><a
href="http://nicedit.com/download.php"><img
class="size-full wp-image-635 aligncenter" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-nicedit.jpg" alt="Melhores editores WYSIWYG: NicEdit" width="503" height="93" /></a></p><p>NicEdit &eacute; uma alternativa para algumas maiores e mais complexos editores WYSIWYG existentes, com seu pequeno tamanho de download. Ele possui muitos dos recursos esperados por esse tipo de editor e se integra facilmente em seu site ou software.</p><h2>TinyMCE</h2><p
style="text-align: center;"><a
href="http://tinymce.moxiecode.com/download.php"><img
class="size-full wp-image-638 aligncenter" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-tinymce.jpg" alt="Melhores editores WYSIWYG: TinyMCE" width="561" height="186" /></a></p><p>TinyMCE &eacute; um editor WYSIWYG  javascript HTML open source. &Eacute; f&aacute;cil de integrar e &eacute; altamente personaliz&aacute;vel com temas e plugins. TinyMCE &eacute; um dos mais completo editores, oferecendo uma experi&ecirc;ncia semelhante a editores instal&aacute;veis, como BrOffice e MS Word.</p><h2>CKEditor</h2><p
style="text-align: center;"><a
href="http://ckeditor.com/download"><img
class="size-full wp-image-630 aligncenter" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-ckeditor.jpg" alt="Melhores editores WYSIWYG: " width="536" height="288" /></a></p><p>CKeditor &eacute; o novo FCKEditor, consagrado editor para os desenvolvedores mais veteranos e l&iacute;der de mercado anteriormente. Baseando-se nisso, o CKEditor promete ser um editor ainda melhor, j&aacute; que fez melhor o que era considerado falho em seu antecessor.</p><h2>YUI Rich Text Editor</h2><p
style="text-align: center;"><a
href="http://developer.yahoo.com/yui/download/"><img
class="aligncenter size-full wp-image-639" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-yui-rich-texteditor.jpg" alt="Melhores editores WYSIWYG: YUI Rich Text Editor" width="485" height="351" /></a></p><p>O YUI Rich Text Editor &eacute; um controle UI do Yahoo que transforma textareas em <strong>editores WYSIWYG completos</strong>. Ele vem em v&aacute;rias vers&otilde;es diferentes, com diferentes caracter&iacute;sticas e complexidade, mas ainda consegue atingir uma grande experi&ecirc;ncia do usu&aacute;rio sem uma infinidade de bot&otilde;es se aglomerando na interface.</p><h2>MarkItUp!</h2><p
style="text-align: center;"><a
href="http://markitup.jaysalvat.com/downloads/"><img
class="aligncenter size-full wp-image-633" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-markitup.jpg" alt="Melhores editores WYSIWYG: MarkItUp!" width="563" height="297" /></a></p><p>Markitup &eacute; um plugin para jQuery que permite que voc&ecirc; transforme textareas em editores de marca&ccedil;&atilde;o com qualquer marcadores que voc&ecirc; quiser: HTML, Sintaxe Wiki e BBcode s&atilde;o apenas algumas que s&atilde;o suportadas. MarkItUp! n&atilde;o &eacute; um editor WYSIWYG, propriamente dito, mas oferece todas as caracter&iacute;sticas b&aacute;sicas esperadas de um.</p><h2>FreeTextBox</h2><p
style="text-align: center;"><a
href="http://freetextbox.com/download/"><img
class="aligncenter size-full wp-image-631" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-free-text-box.jpg" alt="Melhores editores WYSIWYG: FreeTextBox" width="549" height="217" /></a></p><p>FreeTextBox &eacute; um editor HTML especificamente para ASP.NET. A apar&ecirc;ncia do editor &eacute; bastante parecida com a do MS Word. Apesar de a vers&atilde;o gratuita n&atilde;o ter uma s&eacute;rie de features, ela possui mais do que o suficiente para permitir uma edi&ccedil;&atilde;o WYSIWYG de qualidade.</p><h2>MooEditable</h2><p><a
href="http://cheeaun.github.com/mooeditable/"><img
class="aligncenter size-full wp-image-634" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-mooeditable.jpg" alt="Melhores editores WYSIWYG: MooEditable" width="474" height="164" /></a></p><p>Editores WYSIWYG tornaram-se populares devido aos v&aacute;rios plugins para  jQuery existentes, mas esses editores n&atilde;o s&atilde;o t&atilde;o comuns para Mootools. MooEditable, no entanto, preenche essa lacuna, fornecendo uma simples, mas eficaz, experi&ecirc;ncia do usu&aacute;rio, baseada em uma biblioteca de javascript bem escrita. Se voc&ecirc; usa Mootools, ficar&aacute; feliz em usar o MooEditable.</p><h2>OpenWysiwyg﻿</h2><p><a
href="http://www.openwebware.com/download.shtml"><img
class="aligncenter size-full wp-image-636" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-openwysiwyg.gif" alt="Melhores editores WYSIWYG: OpenWysiwig" width="450" height="220" /></a></p><p>OpenWysiwyg &eacute; um editor WYSIWYG cross browser com quase todos os recursos de edi&ccedil;&atilde;o que voc&ecirc; pode precisar. Ele apresenta uma interface elegante, incluindo dropdowns e bot&otilde;es. Um de seus pontos fortes &eacute; sua capacidade de lidar bem com tabelas, com bordas e cores diferentes. No entanto, o Google Chrome ainda n&atilde;o &eacute; suportado&#8230;</p><h2>Spaw Editor</h2><p><a
href="http://www.solmetra.com/en/disp.php/en_products/en_spaw/en_spaw_download"><img
class="aligncenter size-full wp-image-637" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-spaweditor.jpg" alt="Melhores editores WYSIWYG: Spaw Editor" width="537" height="232" /></a></p><p>Spaw Editor &eacute; um editor, assim como os outros editores WYSIWYG, que permite desenvolvedores de web substituir uma &aacute;rea de texto padr&atilde;o (textarea) por um editor completo, totalmente personaliz&aacute;vel, multilingue e com suporte a temas.</p><h2>jHtmlArea</h2><p><a
href="http://jhtmlarea.codeplex.com/releases/view/30759"><img
class="aligncenter size-full wp-image-632" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/05/melhores-editores-wysiwyg-jhtmlarea.jpg" alt="Melhores editores WYSIWYG: jHtmlArea" width="423" height="159" /></a></p><p>jHtmlArea &eacute; outro editor de texto WYSIWYG constru&iacute;do como um plugin para a biblioteca jQuery. Seu objetivo &eacute; ser simples e leve, apenas com as op&ccedil;&otilde;es mais necess&aacute;rias. Permite-se a ser facilmente customiz&aacute;vel atrav&eacute;s de temas, as fun&ccedil;&otilde;es e idiomas.</p><h2>Sugest&otilde;es WYSIWYG?</h2><p>E voc&ecirc;, conhece um <strong>bom editor WYSIWYG</strong> e gostaria de compartilhar? Fa&ccedil;a um coment&aacute;rio com o nome e link do editor WYSIWYG e o artigo ser&aacute; complementado com sua sugest&atilde;o! Participe!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/wireframe-web-guia-completo/" title="Wireframes para web: guia completo de desenvolvimento">Wireframes para web: guia completo de desenvolvimento</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/breadcrumbs-guia-completo-exemplos-melhores-praticas/" title="Breadcrumbs: guia completo com exemplos e melhores práticas">Breadcrumbs: guia completo com exemplos e melhores práticas</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/recursos-usabilidade/" title="Recursos de usabilidade grátis">Recursos de usabilidade grátis</a></li><li><a
href="http://desenvolvimentoparaweb.com/midia-social/twitter-ferramentas/" title="Ferramentas para o twitter">Ferramentas para o twitter</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/4-elementos-design-call-to-action/" title="4 elementos de design para um bom call to action">4 elementos de design para um bom call to action</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/user-interface-dicas-rapidas/" title="User Interface em dicas rápidas">User Interface em dicas rápidas</a></li><li><a
href="http://desenvolvimentoparaweb.com/html/evitando-erros-html5/" title="Evitando erros comuns de HTML5">Evitando erros comuns de HTML5</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/modernizr-detectar-features-html5-css3/" title="Usando Modernizr para detectar features de HTML5 e CSS3">Usando Modernizr para detectar features de HTML5 e CSS3</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/nao-use-ids-como-seletores-css/" title="Não use IDs como seletores em CSS">Não use IDs como seletores em CSS</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/10-dicas-desenvolvedores-web-iniciantes-devem-saber/" title="10 dicas que desenvolvedores web iniciantes devem saber">10 dicas que desenvolvedores web iniciantes devem saber</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/javascript/melhores-editores-wysiwyg-para-seu-projeto/feed/</wfw:commentRss> <slash:comments>32</slash:comments> </item> <item><title>NextGEN Gallery com SexyLightBox: sua galeria de imagens mais sexy</title><link>http://desenvolvimentoparaweb.com/jquery/nextgen-gallery-com-sexylightbox-sua-galeria-de-imagens-mais-sexy/</link> <comments>http://desenvolvimentoparaweb.com/jquery/nextgen-gallery-com-sexylightbox-sua-galeria-de-imagens-mais-sexy/#comments</comments> <pubDate>Fri, 20 Nov 2009 17:38:10 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Indicações]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Plugins]]></category> <category><![CDATA[Web Design]]></category> <guid
isPermaLink="false">http://www.desenvolvimentoparaweb.com/?p=491</guid> <description><![CDATA[Aumente a experi&ecirc;ncia dos visitantes de seu site de forma surpreendente atrav&eacute;s de uma galeria de imagens fant&aacute;stica!]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-494" title="NextGen Gallery com SexLightbox no WordPress" src="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2009/11/nextgen-gallery-sexlightbox-wordpress.jpg" alt="NextGen Gallery com SexLightbox no WordPress" width="400" height="232" /></p><p>&Eacute; fato que o <em>plugin</em> <a
title="NextGEN Gallery." href="http://wordpress.org/extend/plugins/nextgen-gallery/">NextGEN Gallery</a> do WordPress &eacute; o melhor quando o assunto &eacute; <strong>gerenciamento de galerias de imagens</strong>. Com NextGEN Gallery &eacute; poss&iacute;vel criar galerias facilmente, acrescentar/retirar imagens em modo <em>batch</em> (&eacute; poss&iacute;vel enviar um arquivo .zip e ele &#8220;abre&#8221; as imagens numa galeria), d&aacute; pra criar &aacute;lbuns, copiar/transferir imagens entre galerias, inserir marca d&#8217;&aacute;gua automaticamente, enfim, o NextGEN Gallery &eacute; bem conhecido na comunidade WordPress e certamente est&aacute; no &#8220;Top 5&#8243; de plugins!</p><p>Existe, tamb&eacute;m, apesar n&atilde;o ser t&atilde;o conhecido, um script &agrave; &#8220;lightbox&#8221; muito bonito e interessante: <a
title="Site do SexyLightbox" href="http://www.coders.me/web-html-js-css/javascript/sexy-lightbox-2">SexyLightBox</a>. Como &eacute; poss&iacute;vel ver em sua p&aacute;gina, o efeito que ele oferece &eacute; bem interessante e, de certa maneira, diferenciado dos outros <em>lightboxes</em> que encontramos por a&iacute; (&ecirc;nfase ao fato de as imagens serem apresentadas em tamanho completo respeitando a resolu&ccedil;&atilde;o do navegador do visitante).</p><p>Aproveitando que o <strong>NextGEN Gallery</strong> oferece a possibilidade de se utilizar <em>script </em>de terceiros para a exibi&ccedil;&atilde;o de suas galerias e somado ao fato de que o <strong>SexyLightBox</strong> &eacute; realmente interessante&#8230; <strong>NextGEN Gallery + SexyLightBox = Galerias de Imagens Sexy!</strong></p><h2>Baixando, instalando e configurando NextGEN Gallery</h2><p>O primeiro passo &eacute; baixar e instalar NextGEN Gallery no seu WordPress. Devido ao fato de eles serem de &#8220;naturezas&#8221; diferentes (o primeiro &eacute; um plugin do WordPress; o segundo &eacute; um script que pode ser usado em qualquer tipo de site), a maneira de instalar e usar cada um deles &eacute; diferente.</p><p>Para o <strong>NextGEN Gallery</strong>, devido ao fato de ser um <strong>plugin do WordPress</strong>, a instala&ccedil;&atilde;o &eacute; aquela, mesma, que j&aacute; estamos acostumados:</p><ul><li><a
href="http://wordpress.org/extend/plugins/nextgen-gallery/">Baixar o NextGEN Gallery</a>;</li><li>Descompactar em sua pasta <strong>wp-content/plugins</strong>;</li><li>Habilitar o plugin.</li></ul><p>Depois, perceba que aparece em seus menus um novo m&oacute;dulo, &#8220;Gallery&#8221;, com subop&ccedil;&otilde;es para controle do NextGen.</p><p>&Eacute; poss&iacute;vel traduzir as op&ccedil;&otilde;es para v&aacute;rios idiomas, inclusive L&iacute;ngua Portuguesa. <a
href="http://alexrabe.de/wordpress-plugins/nextgen-gallery/languages/">Baixe o pacote Portuguese / Brazilian Portugu&ecirc;s [pt_BR]</a> nas tradu&ccedil;&otilde;es oficiais e fa&ccedil;a upload do arquivo <strong>.mo</strong> para <strong>wp-content/plugins/nextgen-gallery/lang</strong> e, automaticamente, os menus ser&atilde;o traduzidos.</p><div
id="attachment_492" class="wp-caption aligncenter" style="width: 155px"><img
class="size-full wp-image-492" title="Painel NextGen Gallery no WordPress" src="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2009/11/painel-nextgen-gallery-wordpress.gif" alt="Painel NextGen Gallery no WordPress" width="145" height="287" /><p
class="wp-caption-text">Painel NextGen Gallery em L&iacute;ngua Portuguesa</p></div><p>Para j&aacute; preparar o NextGen para trabalhar com o SexyLightBox, acesse em seu painel WordPress <strong>Galeria &gt; Op&ccedil;&otilde;es &gt; Efeitos</strong> e altere as op&ccedil;&otilde;es para:</p><ul><li><strong>Efeito Javascript para miniaturas:</strong> Personalizado;</li><li><strong>Linha de c&oacute;digo do link:</strong> rel=&#8221;sexylightbox&#8221;.</li></ul><div
id="attachment_493" class="wp-caption aligncenter" style="width: 455px"><img
class="size-full wp-image-493" title="Configura&ccedil;&atilde;o NextGen Gallery para SexyLightbox" src="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2009/11/painel-nextgen-gallery-wordpress-sexy-lightbox.gif" alt="Configura&ccedil;&atilde;o NextGen Gallery para SexyLightbox" width="445" height="250" /><p
class="wp-caption-text"></p></div><h2>Baixando, instalando e configurando SexyLighbox</h2><p>V&aacute; at&eacute; o site oficial do SexyLighbox para <a
href="http://www.coders.me/web-html-js-css/javascript/sexy-lightbox-2#download">fazer download do SexyLightbox</a>. Depois, &eacute; preciso subir a pasta descompactada para o servidor.</p><p>N&atilde;o sei voc&ecirc;, mas eu costumo criar uma pasta &#8220;js&#8221; dentro do meu tema para tudo ficar organizado e eu poder usar as fun&ccedil;&otilde;es de caminho relativo do WordPress tranquilamente. Ent&atilde;o, uma estrutura que eu usaria para o caso seria <strong>wp-content/themes/MEU-TEMA/js/sexy-lightbox-2.3</strong> (essa &eacute; a vers&atilde;o mais atual no dia de publica&ccedil;&atilde;o deste artigo).</p><p>Agora &eacute; o momento de chamar o SexyLightbox para que funcione em seu tema. H&aacute; <strong>muitas</strong> maneiras diferentes de mexer com chamadas a scripts no WordPress; no caso, vou mostrar uma delas e, em artigos futuros, vou comentando sobre as outras (essa &eacute; a deixa para voc&ecirc; <a
href="http://www.desenvolvimentoparaweb.com/feed">assinar o feed do desenvolvimento para web</a>).</p><p>Uma coisa importante &eacute; que o SexyLighbox n&atilde;o &eacute; feito para ser usado em <em>standalone</em>, ele deve estar associado a jQuery ou Mootools. Obviamente vamos usar jQuery para o servi&ccedil;o!  ;-)</p><p>Ent&atilde;o, o c&oacute;digo com as respectivas chamadas a scripts e folhas de estilo fica assim:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php print get_bloginfo('template_url') ?&gt;/js/sexy-lightbox-2.3/jQuery/jquery.easing.1.3.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php print get_bloginfo('template_url') ?&gt;/js/sexy-lightbox-2.3/jQuery/sexylightbox.v2.3.jquery.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?php print get_bloginfo('template_url') ?&gt;/js/sexy-lightbox-2.3/jQuery/sexylightbox.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    SexyLightbox.<span style="color: #660066;">initialize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>color<span style="color: #339933;">:</span><span style="color: #3366CC;">'white'</span><span style="color: #339933;">,</span> imagesdir<span style="color: #339933;">:</span> <span style="color: #3366CC;">'&lt;?php print get_bloginfo('</span>template_url<span style="color: #3366CC;">') ?&gt;/js/sexy-lightbox-2.3/jQuery/sexyimages'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div><p>Perceba que alguns par&acirc;metros foram passados na inicializa&ccedil;&atilde;o do script do SexyLightbox. O grande &#8220;trunfo&#8221; &eacute; usar o par&acirc;metro <strong>imagesdir</strong>, porque na documenta&ccedil;&atilde;o est&aacute; errado!</p><h3>Personalizando seu SexyLighbox</h3><p>Uma coisa muito boa &eacute; que h&aacute; uma pasta &#8220;PSDs&#8221; no SexyLighbox para que cada um posso personalizar a apar&ecirc;ncia como quiser. Ent&atilde;o, voc&ecirc; pode alterar a cor de fundo, texto, alterar os elementos (setinhas, etc) e usar da forma que voc&ecirc; quiser. Ent&atilde;o quando voc&ecirc; alterar a cor de fundo para o SexyLighbox ficar com a identidade visual de seu site, voc&ecirc; vai perceber que a parte do meio da moldura ainda permanece intacta. No caso, voc&ecirc; deve fazer um pequeno acr&eacute;scimo de CSS em seu arquivo padr&atilde;o (pode ser ao final):</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#SLB-Contenido</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">border-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#HEXADECIMAL</span> !important<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><h2>Agora voc&ecirc; tem galerias Sexy!</h2><p>Com isso, agora voc&ecirc; galerias de imagens <strong>automatizadas</strong> e <strong>sexy</strong>! Para tirar melhor proveito disso, estude a documenta&ccedil;&atilde;o do NextGen Gallery (al&eacute;m dos <a
href="http://alexrabe.de/forums/">f&oacute;runs</a>, os <a
href="http://dpotter.net/Technical/2008/03/nextgen-gallery-review-introduction/">tutoriais sobre NextGen de David Potter</a> devem ajudar) e do SexyLightbox para incrementar/customizar ainda mais as galerias de imagens de seu site para que fiquem pr&aacute;ticas, bonitas e com excelente performance.</p><p>E capriche nas imagens!  ;-)</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/wordpress/problemas-comuns-de-wordpress-e-como-resolve-los/" title="Problemas comuns de WordPress e como resolvê-los">Problemas comuns de WordPress e como resolvê-los</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/10-erros-basicos-de-web-design/" title="10 erros básicos de web design">10 erros básicos de web design</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/cores-na-web-guia-completo/" title="Cores na web: guia completo">Cores na web: guia completo</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/" title="5 dicas para temas WordPress melhores">5 dicas para temas WordPress melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/gradiente-css-cross-browser-degrades-css-sem-usar-imagens/" title="Gradiente CSS cross browser: degradês em CSS sem usar imagens">Gradiente CSS cross browser: degradês em CSS sem usar imagens</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/ferramentas-criacao-wireframes/" title="Ferramentas para criação de wireframes">Ferramentas para criação de wireframes</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/rolagem-fundo-transparente-css/" title="Rolagem com fundo transparente com CSS">Rolagem com fundo transparente com CSS</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/7-ferramentas-para-web-designs-melhores/" title="7 ferramentas para web designs melhores">7 ferramentas para web designs melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/otimizacao-wordpress-performance-desempenho-blog-site/" title="Otimização WordPress: aumente a performance e desempenho de seu blog / site">Otimização WordPress: aumente a performance e desempenho de seu blog / site</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/nextgen-gallery-com-sexylightbox-sua-galeria-de-imagens-mais-sexy/feed/</wfw:commentRss> <slash:comments>10</slash:comments> </item> <item><title>Como usar qualquer tipo (fonte tipogr&#225;fica) em seu blog WordPress</title><link>http://desenvolvimentoparaweb.com/javascript/como-usar-qualquer-tipo-fonte-tipografica-em-seu-blog-wordpress/</link> <comments>http://desenvolvimentoparaweb.com/javascript/como-usar-qualquer-tipo-fonte-tipografica-em-seu-blog-wordpress/#comments</comments> <pubDate>Fri, 05 Sep 2008 15:28:38 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Blogs]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Plugins]]></category> <category><![CDATA[Tipografia]]></category> <guid
isPermaLink="false">http://www.desenvolvimentoparaweb.com/?p=380</guid> <description><![CDATA[Aprenda como usar qualquer tipo (fonte tipogr&aacute;fica) para aumentar a qualidade e n&iacute;vel profissional de seu site]]></description> <content:encoded><![CDATA[<p
style="text-align: center; border:1px solid #999"><img
class="size-full wp-image-387" title="Imagem com diversos tipos (fontes tipogr&aacute;ficas)." src="http://www.desenvolvimentoparaweb.com/wp-content/uploads/2008/09/diversos-tipos-fontes-tipograficas.gif" alt="Imagem com diversos tipos (fontes tipogr&aacute;ficas)." width="500" height="150" /></p><p>Uma das (ainda) grandes limita&ccedil;&otilde;es da <em>web</em> refere-se &agrave; <strong>usar qualquer fonte tipogr&aacute;fica em <em>web sites</em></strong>. Por padr&atilde;o, caso a pessoa n&atilde;o tenha determinado tipo que tenha sido especificado para ser exibido, o navegador renderiza por um que seja o mais pr&oacute;ximo ou secund&aacute;rio &#8211; determinado pelo pr&oacute;prio desenvolvedor. Isso, realmente, &eacute; uma limita&ccedil;&atilde;o, j&aacute; que n&atilde;o &eacute; poss&iacute;vel &#8220;controlar&#8221; inteiramente como ser&aacute; a <strong>exibi&ccedil;&atilde;o de tipos</strong> nos <em>sites</em>.</p><p>Enquanto algo melhor n&atilde;o &eacute; implementado por padr&atilde;o, existe a possibilidade de fazer uma &#8220;gambiarra&#8221; para se <strong>exibir os textos em qualquer fonte tipogr&aacute;fica</strong>. S&atilde;o t&eacute;cnicas que variam desde a implementa&ccedil;&atilde;o &#8220;na unha&#8221; de imagens com textos, passando por <em>javascript</em>, &agrave; mudan&ccedil;a de tipos usando Flash. S&atilde;o tantas as op&ccedil;&otilde;es e <em>scripts</em> prontos que &eacute; como ir a uma loja onde tudo &eacute; gratuito: basta escolher e pegar.</p><p>Se voc&ecirc; ficou &#8220;espantado&#8221; com o t&iacute;tulo deste artigo, &#8220;<strong>Como usar qualquer tipo (fonte tipogr&aacute;fica) em seu blog WordPress</strong>&#8220;, leia <a
title="Saiba a diferen&ccedil;a entre fonte, tipo, tipologia e tipografia." href="http://www.desenvolvimentoparaweb.com/design/tipografia-com-foco-ao-web-design-parte-1-consideracoes-sobre-fonte-tipo-tipologia-e-tipografia/">algumas considera&ccedil;&otilde;es sobre fonte, tipo, tipologia e tipografia</a>.</p><h2>Trocando os tipos dos t&iacute;tulos do blog com Facelift</h2><p>Dentre as diversas op&ccedil;&otilde;es de <em>scripts</em> e maneiras para usar qualquer tipo (fonte tipogr&aacute;fica) em <em>web sites</em>, indico o <a
title="Visitar o site oficial do Facelift." href="http://facelift.mawhorter.net/">Facelift Image Replacement</a> que, segundo diversos testes que fiz, mostra-se muito simples de instalar e produz resultados eficientes, <strong>trocando os textos de qualquer parte do <em>site</em></strong> para qualquer tipo que se queira.</p><p>O <strong>Facelift</strong> faz sua &#8220;m&aacute;gica&#8221; <strong>criando imagens em tempo real</strong> de textos de qualquer lugar de uma p&aacute;gina <em>web</em> que voc&ecirc; queira (e respeita o CSS especificado para o elemento, inclusive); e faz esta &#8220;reposi&ccedil;&atilde;o de tipos&#8221; utilizando o arquivo no formato de fontes, como .<strong>ttf</strong> ou <strong>.otf</strong>. Quer dizer, ele atua &#8211; com a licen&ccedil;a do trocadilho &#8211; &#8220;<strong>direto na fonte</strong>&#8220;!  ;-)</p><p>Isso sem falar em sua compatibilidade com os <em>frameworks</em> <a
title="P&aacute;gina oficial do jQuery." href="http://jquery.com/">jQuery</a>, <a
title="P&aacute;gina oficial do Prototype." href="http://www.prototypejs.org/">Prototye</a>, <a
title="P&aacute;gina oficial do Scriptaculous." href="http://script.aculo.us/">Scriptaculous</a> e <a
title="P&aacute;gina oficial do MooTools." href="http://mootools.net/">MooTools</a> e com a grande vantagem de ser ideal para garantir a acessibilidade do <em>blog</em>, j&aacute; que, se a exibi&ccedil;&atilde;o de imagens estiver desabilitada, o &#8220;texto puro&#8221; aparece normalmente.</p><h2>Instalando o Facelift em seu blog WordPress</h2><p>O primeiro passo &eacute; acessar a <a
title="Fazer download do Facelift." href="http://facelift.mawhorter.net/download/">p&aacute;gina de downloads do Facelift</a> para baixar sua &uacute;ltima vers&atilde;o. Para o caso do WordPress, voc&ecirc; tem duas op&ccedil;&otilde;es:</p><ol><li><strong>Instalar em uma pasta no tema que voc&ecirc; usa.</strong> Dessa forma, o script fica vinculado a seu atual tema e, praticamente, far&aacute; parte deste (se voc&ecirc; mudar o tema, n&atilde;o mais ter&aacute; o Facelift funcionando).</li><li><strong>Instalar em uma pasta independente de temas.</strong> Instalando o Facelift em uma pasta independente, ele continua funcionando independentemente de voc&ecirc; alterar temas ou n&atilde;o (o &uacute;nico &#8220;por&eacute;m&#8221; &eacute; para algumas linhas de c&oacute;digo que devem ser inseridas, caso haja a troca).</li></ol><p>Ent&atilde;o, segundo a abordagem de instalar o <strong>Facelift</strong> na pasta do pr&oacute;prio tema, sugiro que seja uma pasta &#8220;js&#8221; ou &#8220;javasript&#8221;. Ent&atilde;o, v&aacute; l&aacute; e crie uma pasta &#8220;js&#8221; na pasta de seu tema para dar prosseguimento &agrave; instala&ccedil;&atilde;o do Facelift.</p><p>Depois disso, descompacte o Facelift nesta pasta remota &#8220;js&#8221; que acabou de criar. Uma observa&ccedil;&atilde;o: a pasta raiz do Facelift vem com a estrutura &#8220;<strong>facelift-[vers&atilde;o]</strong>&#8220;; pessoalmente, gosto de retirar o n&uacute;mero da vers&atilde;o para manter a coisa enxuta (somente &#8220;facelift&#8221;); se voc&ecirc; n&atilde;o quiser fazer isso, tudo bem, mas fique atento aos c&oacute;digos de chamada ao Facelift que ser&atilde;o mostrados posteriormente.</p><h2>Configurando o Facelift para usar qualquer tipo em seu blog WordPress</h2><p>Coloque na pasta &#8220;<strong>fonts</strong>&#8221; o arquivo do tipo que voc&ecirc; vai usar. Ent&atilde;o, configure o arquivo <span
class="code"><strong>config-flir.php</strong>. V&aacute;, l&aacute;, e altere o que for necess&aacute;rio &#8211; o arquivo &eacute; bem comentado, n&atilde;o se preocupe.</span></p><p>Depois de devidamente instalado e configurado, &eacute; hora de chamar os arquivos necess&aacute;rios ao funcionamento do Facelift e <strong>usar qualquer fonte tipogr&aacute;fica no blog</strong>! O primeiro passo &eacute; &#8220;chamar&#8221; o corretamente para que se possa usufruir de seus benef&iacute;cios.</p><p>&Eacute; poss&iacute;vel inserir chamadas a <em>javascript</em> no <em>head</em> ou <em>body</em> de documentos <em>web</em>. O indicado &eacute; antes de se fechar a <em>tag</em> <strong>&lt;/body&gt;</strong>, pois evita &#8220;travar&#8221; o carregamento da p&aacute;gina e o <em>script</em> s&oacute; &eacute; requisitado quando todos os outros elementos da p&aacute;gina j&aacute; foram carregados. Ent&atilde;o, vamos chamar o <em>javascript</em> do face lift antes de fechar o corpo do documento (<strong>&lt;/body&gt;</strong>), o que, provavelmente, deve estar no arquivo <strong>footer.php</strong> de seu tema WordPress.</p><p>O &#8220;macete&#8221; &eacute; chamar o javascript atrav&eacute;s de PHP (especificando o local em que se encontra a pasta raiz do <em>script</em>, segundo indicado na <a
title="Ler, em ingl&ecirc;s, a documenta&ccedil;&atilde;o oficial do Facelift." href="http://facelift.mawhorter.net/doc/">documenta&ccedil;&atilde;o oficial do Facelift</a>), j&aacute; que ser&aacute; preciso identificar o diret&oacute;rio onde ele se encontra utilizando <a
title="Mais informa&ccedil;&otilde;es sobre a fun&ccedil;&atilde;o get_bloginfo." href="http://codex.wordpress.org/Template_Tags/get_bloginfo">get_bloginfo()</a>.</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;script type=&quot;text/javascript&quot; src=&quot;'</span> <span style="color: #339933;">.</span> get_bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_directory'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/js/facelift/flir.js&quot;&gt;;&lt;/script&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div><p>Depois, &eacute; preciso iniciar o Facelifit e especificar para quais elementos haver&aacute; substitui&ccedil;&atilde;o de tipos. Uma grande vantagem &eacute; que &eacute; poss&iacute;vel utilizar a sintaxe do jQuery, devido &agrave; compatibilidade nativa que tanto Facelift quanto WordPress t&ecirc;m do <em>framework</em>! Ent&atilde;o, <a
title="Conhe&ccedil;a ferramentas que auxiliam na tarefa de saber a localiza&ccedil;&atilde;o de determinado elemento numa web page." href="http://www.cssnolanche.com.br/css-debug-tools/">sabendo e identificando os elementos da p&aacute;gina</a> que ter&atilde;o tipos personalizados, basta especificar isso no c&oacute;digo (como come&ccedil;amos gerando com PHP, vamos continuar).</p><p>O c&oacute;digo final fica assim (no exemplo, altero os t&iacute;tulos secund&aacute;rios da barra lateral):</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'
    &lt;script type=&quot;text/javascript&quot; src=&quot;'</span> <span style="color: #339933;">.</span> get_bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_directory'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/js/facelift/flir.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
    FLIR.init({path:&quot;'</span> <span style="color: #339933;">.</span> get_bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_directory'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/js/facelift/&quot;});
    $(&quot;#sidebar h2&quot;).each( function() { FLIR.replace(this); } );
    &lt;/script&gt;
'</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div><p>E pronto! Agora seu <em>blog</em> WordPress pode usar qualquer fonte tipogr&aacute;fica, em qualquer local que voc&ecirc; queira!</p><h2>Importantes observa&ccedil;&otilde;es sobre a troca de tipos com o Facelift</h2><p>Na verdade, o Facelift pode ser usado em qualquer tipo de <em>site</em> ou <em>blog</em>, seja WordPress ou n&atilde;o. Entretanto, em fun&ccedil;&atilde;o do peso de imagens &#8211; ainda mais geradas em tempo real &#8211; e performance do <em>blog</em>/<em>site</em>, em geral, &eacute; conveniente que se altere os tipos somente dos t&iacute;tulos e/ou &aacute;reas de destaque.</p><p>Importante notar que, como se trata de inser&ccedil;&atilde;o de imagens, caso uma imagem estrapole a largura destinada ao elemento que foi &#8220;substitu&iacute;do&#8221; por ela, <strong>seu <em>layout</em> pode quebrar e/ou a imagem ficar semi-oculta</strong>, impedindo os leitores de a visualizarem por completo.</p><p>Portanto, se voc&ecirc; utiliza artigos com t&iacute;tulo curto e/ou tem um espa&ccedil;o &uacute;til para os t&iacute;tulos consider&aacute;vel, use e abuse de tipos personalizados em seu <em>blog</em>/<em>site</em>; do contr&aacute;rio, limite-se a usar os tipos personalizados somente em &aacute;res de destaque ou textos que contenham poucas e pequenas palavras.</p><p><strong>&lt;update&gt;</strong><br
/> Confiram, tamb&eacute;m, o <em>plugin</em> para WordPress <a
href="http://2amlife.com/projects/anyfont">AnyFont</a>.<br
/> <strong>&lt;/update&gt;</strong></p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/wordpress/problemas-comuns-de-wordpress-e-como-resolve-los/" title="Problemas comuns de WordPress e como resolvê-los">Problemas comuns de WordPress e como resolvê-los</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/" title="5 dicas para temas WordPress melhores">5 dicas para temas WordPress melhores</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/otimizacao-wordpress-performance-desempenho-blog-site/" title="Otimização WordPress: aumente a performance e desempenho de seu blog / site">Otimização WordPress: aumente a performance e desempenho de seu blog / site</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/newsletter-no-wordpress-com-o-plugin-ajax-newsletter-wp-ajax-newsletter/" title="Newsletter no WordPress com o plugin Ajax Newsletter (wp-ajax-newsletter)">Newsletter no WordPress com o plugin Ajax Newsletter (wp-ajax-newsletter)</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/preciosas-dicas-de-seguranca-e-otimizacao-para-wordpress/" title="Preciosas dicas de segurança e otimização para WordPress">Preciosas dicas de segurança e otimização para WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/wp-syntax-destacar-codigos-fonte-em-artigos-de-blogs-wordpress/" title="WP-Syntax: destacar códigos fonte em artigos de blogs WordPress">WP-Syntax: destacar códigos fonte em artigos de blogs WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/wassup-plugin-wordpress-estatisticas-acesso-em-tempo-real/" title="WassUp: plugin WordPress para ver estatísticas de acesso (em tempo real)">WassUp: plugin WordPress para ver estatísticas de acesso (em tempo real)</a></li><li><a
href="http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/" title="Como fazer loading em conteúdos do site">Como fazer loading em conteúdos do site</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/15-comandos-sql-wordpress/" title="15 fantásticos comandos SQL para WordPress">15 fantásticos comandos SQL para WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/ferramentas-criacao-wireframes/" title="Ferramentas para criação de wireframes">Ferramentas para criação de wireframes</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/javascript/como-usar-qualquer-tipo-fonte-tipografica-em-seu-blog-wordpress/feed/</wfw:commentRss> <slash:comments>11</slash:comments> </item> <item><title>Diferen&#231;as entre IDs e Classes</title><link>http://desenvolvimentoparaweb.com/css/diferencas-entre-ids-e-classes/</link> <comments>http://desenvolvimentoparaweb.com/css/diferencas-entre-ids-e-classes/#comments</comments> <pubDate>Fri, 18 Jul 2008 14:00:50 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Layout]]></category> <guid
isPermaLink="false">http://www.desenvolvimentoparaweb.com/?p=202</guid> <description><![CDATA[Aprenda a diferen&ccedil;a entre IDs e classes, usados em XHTML, CSS e javascript. Saber a diferen&ccedil;a entre classes e IDs evita erros b&aacute;sicos e permite desenvolver sites melhores]]></description> <content:encoded><![CDATA[<p>Principalmente quando no in&iacute;cio dos estudos sobre desenvolvimento para <em>web</em>, &eacute; comum haver confus&otilde;es entre IDs e Classes, t&atilde;o utilizados e necess&aacute;rios em XHTML, CSS e Javascript. V&aacute;rios tutoriais na <em>internet</em> explicam alguns pontos b&aacute;sicos e d&atilde;o certas orienta&ccedil;&otilde;es, mas nada muito aprofundado e esclarecedor. O resultado: as d&uacute;vidas persistem e a diferen&ccedil;a entre ID e Classe ainda n&atilde;o &eacute; &#8220;desvendada&#8221;. Com este artigo este &#8220;mist&eacute;rio&#8221; chega ao fim! ;-)</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original &#8220;<a
title="Ler o artigo original The Difference Between ID and Class." href="http://css-tricks.com/the-difference-between-id-and-class/">The Difference Between ID and Class</a>&#8220;, do blog <a
title="Visitar o CSS-Tricks." href="http://css-tricks.com/">CSS-Tricks</a>, e a tradu&ccedil;&atilde;o foi feita com autoriza&ccedil;&atilde;o do <a
title="Visitar o web site de Chris Coyier." href="http://chriscoyier.net/">autor</a>.</div><h2>IDs e classes s&atilde;o &#8220;anz&oacute;is&#8221;</h2><p>Precisamos de formas de descrever conte&uacute;dos em documentos HTML / XHTML. Os elementos b&aacute;sicos como &lt;h1&gt;, &lt;p&gt; e &lt;ul&gt; frequentemente fazer o trabalho, mas o conjunto b&aacute;sico de <em>tags</em> n&atilde;o abragen todas as possibilidades de elementos de p&aacute;gina ou escolhas de <em>layout</em>. Para isso, precisamos de <strong>IDs</strong> e <strong>Classes</strong>.</p><p>Por exemplo &lt;ul id=&#8221;nav&#8221;&gt;, isso d&aacute; a oportunidade de visar especificamente esta lista, ent&atilde;o h&aacute; uma maneira de manipular esta lista exclusivamente em rela&ccedil;&atilde;o a outras listas n&atilde;o-ordenadas da p&aacute;gina. Ou talvez tiv&eacute;ssemos uma se&ccedil;&atilde;o na p&aacute;gina que n&atilde;o possui uma <em>tag</em> relevante para signifcar, por exemplo, um rodap&eacute;, onde poder&iacute;amos fazer algo como &lt;div id=&#8221;footer&#8221;&gt;. Ou talvez tenhamos <em>boxes</em> na barra lateral para manter o conte&uacute;do separado de alguma forma: &lt;div class=&#8221;sidebar-box&#8221;&gt;.</p><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2008/07/diferenca-id-classe-css-metafora-anzol.jpg" alt="Met&aacute;fora de classe XHTML em div: anzol" title="" width="570" height="150" class="aligncenter size-full wp-image-684" /></p><p>Esses IDs e classes s&atilde;o os &#8220;anz&oacute;is&#8221; que precisamos fazer na marca&ccedil;&atilde;o para colocarmos as m&atilde;os neles. CSS obviamente precisa disso para que possa fazer seletores e montar folhas de estilos, mas outras linguagens <em>web</em>, como <em>javascript</em>, tamb&eacute;m dependem deles. Mas quais as diferen&ccedil;as entre IDs e classes?</p><h2>IDs s&atilde;o &uacute;nicos</h2><ul><li>Cada elemento pode ter <strong>apenas um</strong> ID;</li><li>Cada p&aacute;gina pode ter apenas <strong>um elemento</strong> com aquele ID.</li></ul><p>Quando se est&aacute; aprendendo sobre isso, &eacute; comum ouvir que s&oacute; se deve usar IDs uma vez, mas &eacute; poss&iacute;vel usar uma classe v&aacute;rias vezes. Basicamente, isso entra num ouvido e sai no outro, porque soa mais como uma &#8220;regrinha&#8221; que algo realmente importante. Se voc&ecirc; trata somente com HTML / CSS, isso pode acontecer com voc&ecirc;, tamb&eacute;m, porque eles realmente n&atilde;o parecem fazer nada de diferente.</p><p>Aqui vai uma: <em>seu c&oacute;digo n&atilde;o vai passar pelo validador se voc&ecirc; usar o mesmo ID em mais de um elemento</em>. Valida&ccedil;&atilde;o deve ser importante para todos n&oacute;s, de modo que, por si s&oacute;, &eacute; algo muito importante. Adiante, mais raz&otilde;es pelas quais um ID deve ser &uacute;nico.</p><h2>Classes n&atilde;o s&atilde;o &uacute;nicas</h2><ul><li>Voc&ecirc; pode usar a <strong>mesma classe</strong> para v&aacute;rios elementos;</li><li>Voc&ecirc; pode usar <strong>v&aacute;rias classes para um mesmo elemento</strong>.</li></ul><p>Qualquer informa&ccedil;&atilde;o de estilo que precise ser aplicada a m&uacute;ltiplos elementos em uma p&aacute;gina deve ser feita com uma <strong>classe</strong>. Tomemos como uma exemplo uma p&aacute;gina com v&aacute;rios &#8220;<em>widgets</em>&#8220;:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;widget&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;widget&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;widget&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div><p>Agora, &eacute; poss&iacute;vel usar a mesma classe &#8220;widget&#8221; como gancho para aplicar o mesmo conjunto de estilos para cada um deles. Mas, e se for preciso ter um deles maior que os outros, mas continuar com um estilo que compartilhe dos outros atributos? &Eacute; poss&iacute;vel aplicar mais de uma classe a um elemento:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;widget&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;widget big&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;widget&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div><p>N&atilde;o h&aacute; necessidade de fazer e nomear uma nova classe aqui, apenas colocar o nome da nova classe no atributo <em>class</em>, juntamente com o nome da classe que j&aacute; est&aacute; l&aacute;. As diferentes classes s&atilde;o delimitadas por espa&ccedil;os e a maioria dos navegadores permite quaisquer n&uacute;meros delas (na verdade, &eacute; mais como <em>milhares</em>, o que &eacute; muito mais do que realmente &eacute; preciso).</p><h2>N&atilde;o existem padr&otilde;es de IDs e Classes em nenhum navegador</h2><p>Colocar um nome de classe ou ID em um elemento, por padr&atilde;o n&atilde;o faz nada a esse elemento.</p><p>Isso &eacute; algo que intriga quem &eacute; iniciante. Voc&ecirc; est&aacute; trabalhando em um <em>site</em> e descobre que a aplica&ccedil;&atilde;o de uma classe com um nome em particular resolve um problema que voc&ecirc; tem. Ent&atilde;o voc&ecirc; mexe em outro <em>site</em>, com o mesmo problema, e tenta corrig&iacute;-lo da mesma maneira, usando aquele mesmo nome de classe, pensando que o nome da classe, por si s&oacute;, tem alguma propriedade m&aacute;gica, apenas para descobrir que n&atilde;o funciona assim&#8230;</p><p>Classes e IDs n&atilde;o t&ecirc;m qualquer estilo por si mesmos. &Eacute; preciso CSS para orientar e aplicar estilos.</p><h2>C&oacute;digos de Barra e N&uacute;meros de S&eacute;rie</h2><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2008/07/diferenca-id-classe-css-codigobarra-serial.jpg" alt="Exemplos de c&oacute;digo de barra e n&uacute;mero de s&eacute;rie." title="" width="570" height="150" class="aligncenter size-full wp-image-683" /></p><p>Talvez c&oacute;digos de barra e n&uacute;meros de s&eacute;rie sejam uma boa analogia. Tome um iPod, numa loja. Na embalagem h&aacute; um c&oacute;digo de barras. Ele indica &agrave; loja que produto &eacute; esse; ent&atilde;o, quando &eacute; escaneado, o c&oacute;digo de barras informa exatamente que produto &eacute; aquele e quanto custa. &Eacute; poss&iacute;vel saber at&eacute; sua cor e em qual lugar do armaz&eacute;m ele era mantido. Todos esses iPods t&ecirc;m exatamente o mesmo tipo de c&oacute;digo de barras.</p><p>O iPod tem tamb&eacute;m um n&uacute;mero de s&eacute;rie que &eacute; absolutamente &uacute;nico em rela&ccedil;&atilde;o a qualquer outro iPod (ou outro dispositivo) em todo o mundo. O n&uacute;mero de s&eacute;rie n&atilde;o informa o pre&ccedil;o. Poderia, mas para a loja que o vende esta n&atilde;o seria uma maneira eficaz de armazenar e utilizar essa informa&ccedil;&atilde;o. &Eacute; muito mais f&aacute;cil usar um c&oacute;digo de barras porque se, por exemplo, o pre&ccedil;o muda, &eacute; preciso apenas alterar o pre&ccedil;o para aquele c&oacute;digo de barras, e n&atilde;o para cada n&uacute;mero serial do sistema.</p><p>Isso &eacute; muito parecido com IDs e Classes. <strong>Informa&ccedil;&otilde;es que s&atilde;o reusadas devem ser mantidas em uma classe e informa&ccedil;&otilde;es que s&atilde;o totalmente &uacute;nicas devem ser mantidas em um ID.</strong></p><h2>IDs t&ecirc;m uma funcionalidade especial nos navegadores</h2><p>Classes n&atilde;o tem funcionalidades especiais no <em>browser</em>, mas IDs t&ecirc;m um truque muito especial na manga: um &#8220;valor de <em>hash</em>&#8221; para URLs. Se voc&ecirc; tiver um URL como http://seudominio.com#comments, o navegador vai tentar localizar o elemento com o id &#8220;comments&#8221; e vai automaticamente rolar a p&aacute;gina at&eacute; chegar nesse elemento.</p><p>&Eacute; importante observar que o <em>browser</em> vai rolar a p&aacute;gina at&eacute; onde quer que o elemento esteja; ent&atilde;o, se houver algo de especial, como uma DIV com barra de rolagem (propriedade CSS <em>overflow</em> com valor &#8220;auto&#8221; ou &#8220;scroll&#8221;), esta barra de rolagem vai ser deslocada &#8211; rolar para baixo -, tamb&eacute;m.</p><p>Esta &eacute; uma raz&atilde;o importante sobre o porqu&ecirc; &eacute; importante ter um ID absolutamente &uacute;nico. Com isso, o navegador sabe at&eacute; quando rolar.</p><h2>Elementos podem ter ambos, ID e Classes</h2><p>Nada para voc&ecirc; quando voc&ecirc; usa ambos, ID e classes em um &uacute;nico elemento. Na verdade, fazer isso na maioria das vezes &eacute; uma boa id&eacute;ia. Tomemos como exemplo o padr&atilde;o de marca&ccedil;&atilde;o para item de lista de um coment&aacute;rio no WordPress:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;comment-27299&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;item&quot;</span>&gt;</span></pre></div></div><p>Tem uma classe que foi aplicada que talvez se queira usar para estilizar todos os coment&aacute;rios na p&aacute;gina, mas tamb&eacute;m h&aacute; um &uacute;nico valor de ID (dinamicamente gerado pelo WordPress). Com isso, &eacute; facilmente poss&iacute;vel fazer um <em>link</em> diretamente a um coment&aacute;rio, em uma p&aacute;gina, em especial.</p><h2>CSS n&atilde;o se importa</h2><p>Quanto ao CSS, <strong>n&atilde;o h&aacute; nada que voc&ecirc; possa fazer com um ID que n&atilde;o possa fazer com uma Classe e vice-versa</strong>. &Agrave;s vezes, quando se est&aacute; iniciando no estudo de CSS e se tem um problema, tenta-se alternar entre usar ID ou usar Classe. O CSS n&atilde;o se importa.</p><h2>Javascript se importa</h2><p>Aqueles que mexem com <em>javascript</em> provavelmente j&aacute; est&atilde;o mais em sintonia entre as diferen&ccedil;as entre as Classes e IDs. <em>Javascript</em> depende da exist&ecirc;ncia de um elemento de p&aacute;gina com ID &uacute;nico, ou ent&atilde;o a comumente utilizada fun&ccedil;&atilde;o <a
title="Mais sobre getElementById, no W3Schools." href="http://www.w3schools.com/HTMLDOM/met_doc_getelementbyid.asp">getElementById</a> n&atilde;o seria confi&aacute;vel. Aqueles acostumados com <a
title="Todos artigos sobre jQuery do desenvolvimento para web." href="http://www.desenvolvimentoparaweb.com/category/jquery/">jQuery</a> sabem o qu&atilde;o f&aacute;cil &eacute; adicionar e remover classes de elementos de p&aacute;gina. &Eacute; uma fun&ccedil;&atilde;o nativa no jQuery. Veja que tal fun&ccedil;&atilde;o n&atilde;o existe para IDs. N&atilde;o &eacute; responsabilidade do <em>javascript</em> manipular estes valores, porque ele causaria mais problemas que seria &uacute;til&#8230;</p><h2>Se voc&ecirc; n&atilde;o precisa deles, n&atilde;o os use</h2><p>Como voc&ecirc; pode ver, classes e IDs s&atilde;o muito importantes e n&oacute;s os utilizamos todos os dias para estilizar p&aacute;ginas e manipular aquilo que &eacute; preciso. Entretanto, voc&ecirc; deve us&aacute;-los com crit&eacute;rio e semanticamente.</p><p>Isto significa evitar coisas do tipo:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://css-tricks.com&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;link&quot;</span>&gt;</span>CSS-Tricks.com<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span></pre></div></div><p>J&aacute; sabemos: este elemento &eacute; um <em>link</em>, &eacute; um elemento &acirc;ncora. N&atilde;o h&aacute; nada de especial aqui a ponto de ser preciso especificar uma classe, j&aacute; que &eacute; poss&iacute;vel aplicar o estilo na pr&oacute;pria tag (&#8220;a&#8221;).</p><p>Evite este tipo de coisa, tamb&eacute;m:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;coluna-direita&quot;</span>&gt;</span></pre></div></div><p>O ID &eacute; corretamente utilizado aqui, j&aacute; que, provavelmente, a p&aacute;gina ter&aacute; somente uma &uacute;nica coluna da direita, mas o nome &eacute; inadequado. Descreva o contexto do elemento, n&atilde;o onde est&aacute; ou como se parece. Um ID &#8220;barra-lateral&#8221; seria melhor.</p><h2>Microformatos s&atilde;o apenas nomes espec&iacute;ficos de classes</h2><p>Pensa que <a
title="P&aacute;gina oficial dos microformatos." href="http://microformats.org/">microformatos</a> &eacute; dif&iacute;cil para voc&ecirc;? Microformato &eacute; apenas marca&ccedil;&atilde;o regular que faz uso de nomes de classes padronizados para a informa&ccedil;&atilde;o que cont&ecirc;m. Veja este vCard:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;vcard&quot;</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;fn org url&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.commerce.net/&quot;</span>&gt;</span>CommerceNet<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;adr&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;type&quot;</span>&gt;</span>Work<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>:
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;street-address&quot;</span>&gt;</span>169 University Avenue<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;locality&quot;</span>&gt;</span>Palo Alto<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>,
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">abbr</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;region&quot;</span> <span style="color: #000066;">title</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;California&quot;</span>&gt;</span>CA<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">abbr</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;postal-code&quot;</span>&gt;</span>94301<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;country-name&quot;</span>&gt;</span>USA<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tel&quot;</span>&gt;</span>
   <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;type&quot;</span>&gt;</span>Work<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span> +1-650-289-4040
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tel&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;type&quot;</span>&gt;</span>Fax<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span> +1-650-289-4041
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>Email:
   <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span>&gt;</span>info@commerce.net<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/design/elementos-design-aplicados-web/" title="Elementos de design aplicados à web">Elementos de design aplicados à web</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/wireframe-web-guia-completo/" title="Wireframes para web: guia completo de desenvolvimento">Wireframes para web: guia completo de desenvolvimento</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/10-erros-basicos-de-web-design/" title="10 erros básicos de web design">10 erros básicos de web design</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/4-elementos-design-call-to-action/" title="4 elementos de design para um bom call to action">4 elementos de design para um bom call to action</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/user-interface-dicas-rapidas/" title="User Interface em dicas rápidas">User Interface em dicas rápidas</a></li><li><a
href="http://desenvolvimentoparaweb.com/html/evitando-erros-html5/" title="Evitando erros comuns de HTML5">Evitando erros comuns de HTML5</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/nao-use-ids-como-seletores-css/" title="Não use IDs como seletores em CSS">Não use IDs como seletores em CSS</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/10-dicas-desenvolvedores-web-iniciantes-devem-saber/" title="10 dicas que desenvolvedores web iniciantes devem saber">10 dicas que desenvolvedores web iniciantes devem saber</a></li><li><a
href="http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/" title="JSON &#8211; JavaScript Object Notation">JSON &#8211; JavaScript Object Notation</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/urls-longas-apresentadas-corretamente-com-css/" title="URLs longas apresentadas corretamente com CSS">URLs longas apresentadas corretamente com CSS</a></li></ul>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/css/diferencas-entre-ids-e-classes/feed/</wfw:commentRss> <slash:comments>29</slash:comments> </item> </channel> </rss>
