<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2portuguesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"> <channel><title>desenvolvimento para web</title> <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" /> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/desenvolvimentoparaweb" /><feedburner:info uri="desenvolvimentoparaweb" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>desenvolvimentoparaweb</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdesenvolvimentoparaweb" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdesenvolvimentoparaweb" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdesenvolvimentoparaweb" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/desenvolvimentoparaweb" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdesenvolvimentoparaweb" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdesenvolvimentoparaweb" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdesenvolvimentoparaweb" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item><title>Problemas comuns de WordPress e como resolvê-los</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/Li25N8G1Yz0/</link> <comments>http://desenvolvimentoparaweb.com/wordpress/problemas-comuns-de-wordpress-e-como-resolve-los/#comments</comments> <pubDate>Tue, 15 May 2012 13:00:08 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[WordPress]]></category> <category><![CDATA[Blogs]]></category> <category><![CDATA[Conteúdo]]></category> <category><![CDATA[Plugins]]></category> <category><![CDATA[Segurança]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=825</guid> <description><![CDATA[Conhe&ccedil;a problemas comuns de WordPress e saiba como facilmente resolv&ecirc;-los atrav&eacute;s de solu&ccedil;&otilde;es simples e eficientes.]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/05/wordpress-erros-comuns-como-resolver.jpg" alt="WordPress: problemas comuns e como resolver" title="wordpress-erros-comuns-como-resolver" width="500" height="310" class="aligncenter size-full wp-image-829" /></p><p>Todos os dias h&aacute; perguntas postadas nos f&oacute;runs de  WordPress sobre alguns dos problemas mais comuns que novos usu&aacute;rios enfrentam. &Eacute; f&aacute;cil de instalar e divertido de trabalhar com WordPress e os novos usu&aacute;rios se animam, rapidmente, com os poderosos recursos oferecidos por muitos de seus plugins e temas.</p><p>Eventualmente, os ne&oacute;fitos se deparam com perguntas, quest&otilde;es e problemas que muitos antes deles tamb&eacute;m j&aacute; se depararam. WordPress tem uma enorme comunidade global de usu&aacute;rios por tr&aacute;s, ent&atilde;o, n&atilde;o importa o problema que um usu&aacute;rio esteja enfrentando, h&aacute; uma boa chance de que alguns outros usu&aacute;rios j&aacute; o tenham enfrentado e que j&aacute; exista uma solu&ccedil;&atilde;o dispon&iacute;vel para corrigir esse problema ou responder a essa pergunta.</p><p>Neste artigo, vamos discutir alguns desses <strong>problemas comuns de WordPress</strong> e aprender, atrav&eacute;s de suas solu&ccedil;&otilde;es, como resolv&ecirc;-los.</p><div
class="artigo-traduzido"> Este artigo &eacute; baseado no <span
lang="en">post <a
href="http://wplift.com/common-wordpress-issues-and-how-to-solve-them">Common WordPress Issues and How to Solve Them</a></span> do <a
href="http://wplift.com/"><span
lang="en">wplift</span></a>.</div><h2>Consumo de mem&oacute;ria do WordPress</h2><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/05/wordpress-memoria-servidor.jpg" alt="WordPress excesso de uso de mem&oacute;ria" title="" width="300" height="171" class="alignright size-full wp-image-827" /></p><p>Quando um site rodando em WordPress cresce em popularidade e pageviews, o consumo de mem&oacute;ria &eacute; um dos primeiros (se n&atilde;o, o primeiro) problema que os mantenedores do site enfrentam. Se eles est&atilde;o em uma hospedagem compartilhada ou um VPS, seus webhosts enviar&atilde;o e-mails sobre o uso de mem&oacute;ria e limite alocado. Pelo menos, os bons hosts far&atilde;o isso; se for um de baixa qualidade, seu site pode apenas cair e voc&ecirc; sequer vai ficar sabendo disso a tempo&#8230;</p><p>Felizmente, existem diversas solu&ccedil;&otilde;es para esse problema.</p><p>O motivo pode ser um plugin ou tema mal feito rodando. Para descobrir, instale o plugin <a
href="http://wordpress.org/extend/plugins/wp-memory-usage/">WP-Memory-Usage</a>. Desative todos seus plugins, exceto o WP-Memory-Usage e, em seguida, v&aacute; ativando um por um. Observar como vai ficar o uso de mem&oacute;ria depois de ativar cada plugin pode ajudar a descobrir qual(is) &eacute;(s&atilde;o) o(s) vil&atilde;o(&otilde;es) da hist&oacute;ria.</p><p>Depois dessa verifica&ccedil;&atilde;o inicial, se os temas e plugins estiverem funcionando dentro do esperado, ent&atilde;o pode ser uma &oacute;tima ideia instalar um plugin de cache, como <a
href="http://www.w3-edge.com/wordpress-plugins/w3-total-cache/">W3 Total Cache</a> ou <a
href="http://ocaoimh.ie/wp-super-cache/">WP Super Cache</a>. Se um plugin de cache n&atilde;o reduzir significativamente a mem&oacute;ria com as configura&ccedil;&otilde;es padr&atilde;o, ser&aacute; preciso uma configura&ccedil;&atilde;o mais espec&iacute;fica, alterando par&acirc;metros tais como compress&atilde;o, minify de scripts, aumentar o intervalo dos caches, etc.</p><p>Leia estes excelentes artigos (em ingl&ecirc;s) sobre como otimizar instala&ccedil;&otilde;es de WordPress:</p><ul><li><a
href="http://codex.wordpress.org/WordPress_Optimization">WordPress Optimization</a></li><li><a
href="http://www.prelovac.com/vladimir/wordpress-optimization-guide">WordPress Optimization Bible</a></li><li><a
href="http://blog.openinworld.com/2011/03/wordpress-shared-hosting-performance/">WordPress Shared Hosting Performance</a></li></ul><h2>Sites em WordPress hackados</h2><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/05/wordpress-hacked.jpg" alt="WordPress hacked" title="" width="236" height="171" class="alignleft size-full wp-image-828" /></p><p>Outro problema comum de WordPress &eacute; descobrir que seu site foi invadido! As chances de tal coisa acontecer em seu site podem ser significativamente reduzidas seguindo algumas dicas pr&aacute;ticas de seguran&ccedil;a para WordPress.</p><p>Existem diferentes tipos de hacks que os usu&aacute;rios do WordPress enfrentam. O mais comum deles &eacute; quando um site redireciona para algum outro site com conte&uacute;dos ilegais e/ou obscenos, links injetados para outros sites, c&oacute;digos estranhos em arquivos de temas, etc. Lembre-se de que, na maioria das vezes, &eacute; f&aacute;cil corrigir esses problemas.</p><ul><li>Mantenha sempre a instala&ccedil;&atilde;o do WordPress atualizada com a &uacute;ltima vers&atilde;o</li><li>Fa&ccedil;a backups regulares de sua instala&ccedil;&atilde;o e banco de dados WordPress</li><li>Execute o <a
href="http://wordpress.org/extend/plugins/wp-security-scan/">WP-Security-Scan</a>, um excelente plugin para detectar c&oacute;digos suspeitos em seus temas, plugins e arquivos principais do wordPress. Se voc&ecirc; encontrar algo suspeito em plugins ou temas, apague! Se voc&ecirc; encontrar algo suspeito no core do WordPress, substitua por novos!</li><li>Verifique regularmente seu arquivo .htaccess por mudan&ccedil;as e c&oacute;digos suspeitos</li><li>Leia o artigo &#8220;<a
href="http://codex.wordpress.org/FAQ_My_site_was_hacked">My site was hacked</a>&#8221; no Codex do WordPress, pe&ccedil;a ajuda em f&oacute;runs, pe&ccedil;a a ajuda do seu provedor de hospedagem para ter certeza que n&atilde;o aconteceu um ataque em todo o servidor.</li></ul><h2>Perda da senha de admin e/ou e-mail</h2><p>&Eacute; realmente surpreendente quantas pessoas instalam o WordPress e esquecem seus nomes de usu&aacute;rio, senha e e-mail utilizados durante a instala&ccedil;&atilde;o. Existem v&aacute;rias maneiras de recuperar senha e nome de usu&aacute;rio e &eacute; importante conhecer algumas delas.</p><h3>Recuperar senha do WordPress via PHPMyAdmin</h3><p>Se voc&ecirc; tiver acesso ao banco de dados atrav&eacute;s do <strong>phpMyAdmin</strong>, v&aacute; at&eacute; l&aacute; e encontre a tabela <strong>wp_users</strong>. Clique na aba &#8220;Procurar&#8221; e, em seguida, encontre seu <strong>user_login</strong>. Clique no &iacute;cone &#8220;Editar&#8221;, &agrave; esquerda da linha. Agora voc&ecirc; vai ver sua senha encriptada; exclua e substitua por qualquer senha que quiser. Haver&aacute; um drop-down &#8220;Fun&ccedil;&otilde;es&#8221; ao lado. Clique sobre ele e selecione &#8220;MD5&#8243;. Clique em &#8220;Executar&#8221; e pronto, voc&ecirc; atualizou sua senha!</p><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/05/wordpress-phpmyadmin.png" alt="Alterando a senha do WordPress atrav&eacute;s do PHPMyAdmin" title="" width="746" height="143" class="aligncenter size-full wp-image-826" /></p><h3>Recuperar senha do WordPress por FTP</h3><p>Conecte em seu site via FTP, v&aacute; em wp-content/themes/SEU_TEMA. Substitua &#8220;SEU_TEMA&#8221; com o nome do tema ativo em seu site. Edite o arquivo <strong>functions.php</strong> (se voc&ecirc; n&atilde;o tiver um no seu tema, crie). Adicione esta linha:</p><pre lang="php" line="n">wp_set_password('NovaSenha', 1);</pre><p>Substitua &#8220;NovaSenha&#8221; com qualquer senha que voc&ecirc; quiser. O &#8220;1&#8243; &eacute; o para o user_ID &#8211; supondo que voc&ecirc; &eacute; o admin do site e n&atilde;o excluiu o primeiro usu&aacute;rio que criou durante a instala&ccedil;&atilde;o.</p><p>Fa&ccedil;a upload do arquivo editado de volta para o servidor. Agora, fa&ccedil;a o login usando a senha que voc&ecirc; adicionou no functions.php. Uma vez que voc&ecirc; tenha conseguido logado, lembre-se de apagar esta linha de seu arquivo de fun&ccedil;&otilde;es.</p><h2>Escrevendo c&oacute;digo em posts e widgets</h2><p>Para fazer o WordPress mais seguro e proporcionar um ambiente confi&aacute;vel e consistente, por padr&atilde;o a plataforma n&atilde;o permite que os usu&aacute;rios insiram c&oacute;digos nos posts, coment&aacute;rios e widgets. No entanto, depois de algum tempo a maioria dos novos usu&aacute;rios se sente confort&aacute;vel o suficiente com o WordPress para querer adicionar funcionalidades diferentes nessas &aacute;reas.</p><p>Por exemplo, para mostrar os c&oacute;digos deste artigo, n&atilde;o &eacute; poss&iacute;vel simplesmente colar o c&oacute;digo. Ele seria retirado pelo WordPress e n&atilde;o seria mais leg&iacute;vel.</p><h3>Adicionando c&oacute;digo nos posts do WordPress</h3><p>O <a
href="http://codex.wordpress.org/">Codex do WordPress</a> <a
href="http://codex.wordpress.org/Writing_Code_in_Your_Posts">sugere o uso de entidades HTML para escrever c&oacute;digo</a>, mas esta &eacute; uma forma muito custosa de se fazer isso. Ent&atilde;o, se voc&ecirc; pretende compartilhar regularmente trechos de c&oacute;digo com os visitantes de seu website, ent&atilde;o voc&ecirc; precisa de algum plugin espec&iacute;fico, tal como o <a
href="http://wordpress.org/extend/plugins/syntaxhighlighter/">Syntax Highlighter Evolved</a>.</p><p>O plugin permite escrever c&oacute;digo em seus posts e estilizar c&oacute;digos com shortcodes. &Eacute; muito f&aacute;cil de usar, personaliz&aacute;vel e suporta v&aacute;rias linguagens incluindo PHP, JavaScript, HTML e CSS.</p><h3>Adicionando c&oacute;digo nos widgets da barra lateral</h3><p>Tamb&eacute;m pode haver a necessidade de exibir trechos de c&oacute;digos em Widgets ou adicionar uma fun&ccedil;&atilde;o ou tag em um widget. Para isso, &eacute; poss&iacute;vel instalar algum plugin, como <a
href="http://wordpress.org/extend/plugins/php-code-widget/">PHP Code Widget</a> ou <a
href="http://wordpress.org/extend/plugins/widget-logic/">Widget Logic</a>.</p><h2>Conclus&atilde;o</h2><p>Certamente, deve haver outras perguntas comuns, quest&otilde;es e problemas que os novos usu&aacute;rios de WordPress muitas vezes se deparam. A primeira coisa a se fazer quando se deparar com qualquer problema com seu site WordPress &eacute; pesquisar.</p><p>Fa&ccedil;a buscas usando diversos termos e voc&ecirc; vai ver que muitas pessoas j&aacute; forneceram solu&ccedil;&otilde;es para esses problemas de WordPress. Se n&atilde;o, voc&ecirc; pode sempre fazer perguntas no F&oacute;rum WordPress, IRC e outros f&oacute;runs WordPress relacionados.</p><p>E voc&ecirc;, conhece algum <strong>problema comum de WordPress</strong> e a <strong>solu&ccedil;&atilde;o </strong>adequada?</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><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/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/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/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/truques-de-configuracao-do-wordpress/" title="Truques de configuração do WordPress">Truques de configuração do WordPress</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/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/javascript/como-usar-qualquer-tipo-fonte-tipografica-em-seu-blog-wordpress/" title="Como usar qualquer tipo (fonte tipográfica) em seu blog WordPress">Como usar qualquer tipo (fonte tipográfica) em seu blog WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/maneira-simples-de-saber-quem-faz-referencias-a-seu-blog-wordpress/" title="Maneira simples de saber quem faz referências a seu blog WordPress">Maneira simples de saber quem faz referências a seu blog WordPress</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/P7yGMkI-J3QNcsPU3aVtBerdVyw/0/da"><img src="http://feedads.g.doubleclick.net/~a/P7yGMkI-J3QNcsPU3aVtBerdVyw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/P7yGMkI-J3QNcsPU3aVtBerdVyw/1/da"><img src="http://feedads.g.doubleclick.net/~a/P7yGMkI-J3QNcsPU3aVtBerdVyw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=Li25N8G1Yz0:rJLu-eZWc-A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=Li25N8G1Yz0:rJLu-eZWc-A:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=Li25N8G1Yz0:rJLu-eZWc-A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=Li25N8G1Yz0:rJLu-eZWc-A:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=Li25N8G1Yz0:rJLu-eZWc-A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=Li25N8G1Yz0:rJLu-eZWc-A:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/Li25N8G1Yz0" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/wordpress/problemas-comuns-de-wordpress-e-como-resolve-los/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/wordpress/problemas-comuns-de-wordpress-e-como-resolve-los/</feedburner:origLink></item> <item><title>Evitando erros comuns de HTML5</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/_7-fl-yLdfw/</link> <comments>http://desenvolvimentoparaweb.com/html/evitando-erros-html5/#comments</comments> <pubDate>Mon, 30 Apr 2012 13:00:47 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[HTML]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Exemplos]]></category> <category><![CDATA[W3C]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=819</guid> <description><![CDATA[Com o advento da HTML5, muitos erros comuns est&atilde;o ocorrendo devido a equ&iacute;vocos dos desenvolvedores. Leia este artigo e saiba como evitar erros comuns de HTML5.]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/erros-html5.png" alt="Erros HTML5" title="" width="353" height="346" class="aligncenter size-full wp-image-820" /></p><p>A HTML5, apesar de ainda demorar para ser uma recomenda&ccedil;&atilde;o oficial do W3C, j&aacute; est&aacute; sendo muito usada no desenvolvimento web no mundo inteiro &#8211; <a
href="/miscelanea/dpw2012-novo-tema-do-desenvolvimento-para-web/">incluindo este humilde blog</a>. Mas, devido ao &#8220;boom do HTML5&#8243; causado pela &acirc;nsia dos desenvolvedores come&ccedil;arem a usar a linguagem imediatamente, alguns menos atentos est&atilde;o sujeitos a cometer alguns erros que a nova especifica&ccedil;&atilde;o do HTML pode dar ensejo.</p><p>Para o caso, &eacute; preciso prestar aten&ccedil;&atilde;o em alguns detalhes importantes para <strong>evitar erros comuns de HTML5</strong>.</p><div
class="artigo-traduzido"> Este artigo &eacute; baseado no <span
lang="en">post <a
href="http://html5doctor.com/avoiding-common-html5-mistakes/">Avoiding common HTML5 mistakes</a></span> do <a
href="http://html5doctor.com"><span
lang="en">HTML5 Doctor</span></a>.</div><h2>N&atilde;o use section como cont&ecirc;iner para estiliza&ccedil;&atilde;o</h2><p>Um dos problemas mais comuns que est&aacute; acontecendo em rela&ccedil;&atilde;o &agrave; implementa&ccedil;&atilde;o da HTML5 &eacute; os desenvolvedores, arbitrariamente, estarem substituindo <code>&lt;div&gt;</code> por <code>&lt;section&gt;</code> para usar na estiliza&ccedil;&atilde;o. No HTML4 ou XHTML, &eacute; normal um c&oacute;digo como:</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;wrapper&quot;</span>&gt;</span>
    <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;header&quot;</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo prim<span style="color: #ddbb00;">&amp;aacute;</span>rio<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: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
    <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;main&quot;</span>&gt;</span>
        <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
    <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;secondary&quot;</span>&gt;</span>
        <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
    <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;footer&quot;</span>&gt;</span>
        <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&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><p>Ent&atilde;o, sem nenhum motivo plaus&iacute;vel, alguns est&atilde;o alterando seu c&oacute;digo para:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;section <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;wrapper&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;header&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo prim<span style="color: #ddbb00;">&amp;aacute;</span>rio<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: #66cc66;">/</span>header&gt;</span>
&nbsp;
    <span style="color: #009900;">&lt;section <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;main&quot;</span>&gt;</span>
        <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span>
&nbsp;
    <span style="color: #009900;">&lt;section <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;secondary&quot;</span>&gt;</span>
        <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span>
&nbsp;
    <span style="color: #009900;">&lt;footer&gt;</span>
        <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>footer&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span></pre></div></div><p>E isso, apesar de poder estar certo, na grande maioria dos casos, est&aacute; errado&#8230; Se &eacute; preciso um elemento somente para estiliza&ccedil;&atilde;o, n&atilde;o faz nenhum sentido deixar de usar <code>&lt;div&gt;</code>; o elemento <code>&lt;section&gt;</code> n&atilde;o foi criado para isso! <a
href="http://www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-section-element">Segundo sua documenta&ccedil;&atilde;o</a>,</p><blockquote><p> O elemento <code>&lt;section&gt;</code> representa um documento gen&eacute;rico ou se&ccedil;&atilde;o de aplica&ccedil;&atilde;o[...]. O elemento <code>&lt;section&gt;</code> n&atilde;o &eacute; um elemento cont&ecirc;iner gen&eacute;rico. Quando um elemento &eacute; necess&aacute;rio para fins de estilo ou como uma conveni&ecirc;ncia para execu&ccedil;&atilde;o de scripts, os autores s&atilde;o incentivados a utilizar o elemento <code>&lt;div&gt;</code>.</p></blockquote><p>Ou seja, as indica&ccedil;&otilde;es de uso do <code>&lt;section&gt;</code> para 99% dos casos s&atilde;o:</p><ul><li>N&atilde;o us&aacute;-lo apenas como &#8220;gancho&#8221; para estilos ou scripts (para isso, j&aacute; existe <code>&lt;div&gt;</code>)</li><li>N&atilde;o us&aacute;-lo se o <code>&lt;article&gt;</code>, <code>&lt;aside&gt;</code> ou <code>&lt;nav&gt;</code> forem mais apropriados</li><li>N&atilde;o us&aacute;-lo a menos que exista, naturalmente, um t&iacute;tulo no in&iacute;cio da se&ccedil;&atilde;o</li></ul><h2>S&oacute; use header e hgroup quando forem necess&aacute;rios</h2><p>N&atilde;o faz sentindo escrever HTML de forma a <strong>ferir a sem&acirc;ntica</strong>, certo? Infelizmente, n&atilde;o &eacute; dif&iacute;cil encontrar elementos <code>&lt;header&gt;</code> e <code>&lt;hgroup&gt;</code> sendo usados de forma inapropriada. Procure se informar mais a respeito da fun&ccedil;&atilde;o deles, mas, resumindo:</p><ul><li><code>&lt;header&gt;</code> representa um grupo introdut&oacute;rio e/ou navegacional e, usualmente, cont&eacute;m o(s) t&iacute;tulo(s) de <code>&lt;section&gt;</code></li><li><code>&lt;hgroup&gt;</code> agrupa um conjunto de elentos <code>&lt;h1&gt;</code>-<code>&lt;h6&gt;</code> quando o t&iacute;tulo de uma se&ccedil;&atilde;o tem v&aacute;rios n&iacute;veis, tais como subt&iacute;tulos, t&iacute;tulos alternativos, etc</li></ul><h3>Uso excessivo de header</h3><p>O elemento <code>&lt;header&gt;</code> pode ser usado quantas vezes forem necess&aacute;rios num documento, o que est&aacute; causando confus&otilde;es do tipo:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;article&gt;</span>
    <span style="color: #009900;">&lt;header&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo prim<span style="color: #ddbb00;">&amp;aacute;</span>rio<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: #66cc66;">/</span>header&gt;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>article&gt;</span></pre></div></div><p>Se o <code>&lt;header&gt;</code> cont&eacute;m somente um elemento de t&iacute;tulo, na verdade, ele n&atilde;o precisa ser usado. O elemento <code>&lt;artcile&gt;</code> j&aacute; garante que o t&iacute;tulo vai constar no <em>outline</em> do documento, e, porque <code>&lt;header&gt;</code> n&atilde;o cont&eacute;m m&uacute;ltiplos elementos (<a
href="http://www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-header-element">como consta em sua defini&ccedil;&atilde;o</a>), por que escrever c&oacute;digo desnecess&aacute;rio? A solu&ccedil;&atilde;o &eacute; simples:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;article&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo prim<span style="color: #ddbb00;">&amp;aacute;</span>rio<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>article&gt;</span></pre></div></div><h3>Uso incorreto de hgroup</h3><p>Basicamente, n&atilde;o se deve usar <code>&lt;hgroup&gt;</code> com <code>&lt;header&gt;</code> quando:</p><ul><li>H&aacute; somente 1 elemento-descendente de t&iacute;tulo</li><li>O <code>&lt;hgroup&gt;</code> funcionaria bem por conta pr&oacute;pria (ou seja, sem <code>&lt;header&gt;</code>)</li></ul><p>O primeiro problema pode ser visto no c&oacute;digo:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;header&gt;</span>
    <span style="color: #009900;">&lt;hgroup&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo prim<span style="color: #ddbb00;">&amp;aacute;</span>rio<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: #66cc66;">/</span>hgroup&gt;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>header&gt;</span></pre></div></div><p>No caso, deve-se, simplesmente, remover o elemento <code>&lt;hgroup&gt;</code>:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;header&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo prim<span style="color: #ddbb00;">&amp;aacute;</span>rio<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #808080; font-style: italic;">&lt;!-- conteúdo --&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>header&gt;</span></pre></div></div><p>O segundo problema &eacute; outro caso de incluir o elemento quando ele n&atilde;o se faz necess&aacute;rio:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;header&gt;</span>
    <span style="color: #009900;">&lt;hgroup&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo prim<span style="color: #ddbb00;">&amp;aacute;</span>rio<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;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo secund<span style="color: #ddbb00;">&amp;aacute;</span>rio<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: #66cc66;">/</span>hgroup&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>header&gt;</span></pre></div></div><p>Se n&atilde;o h&aacute; elementos adicionais dentro de <code>&lt;header&gt;</code> (isto &eacute;, irm&atilde;os de <code>&lt;hgroup&gt;</code>), basta remover o <code>&lt;header&gt;</code>:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;hgroup&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo prim<span style="color: #ddbb00;">&amp;aacute;</span>rio<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;">h1</span>&gt;</span>T<span style="color: #ddbb00;">&amp;iacute;</span>tulo secund<span style="color: #ddbb00;">&amp;aacute;</span>rio<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: #66cc66;">/</span>hgroup&gt;</span></pre></div></div><h2>N&atilde;o englobe todas listas de links com nav</h2><p>Com <a
href="http://dev.w3.org/html5/html4-differences/#new-elements">mais de 40 novos elementos</a> (no dia da publica&ccedil;&atilde;o deste artigo), n&atilde;o &eacute; incomum haver d&uacute;vidas e erros de HTML5 na hora da utiliza&ccedil;&atilde;o de alguns destes. Infelizmente, ainda &eacute; o caso com o elemento <code>&lt;nav&gt;</code>. <a
href="http://www.whatwg.org/specs/web-apps/current-work/multipage/sections.html#the-nav-element">Como consta em sua especifica&ccedil;&atilde;o</a>,</p><blockquote><p> Nem todos os grupos de links em uma p&aacute;gina precisam estar contidos em um elemento <code>&lt;nav&gt;</code> &#8211; o elemento se destina, principalmente, a se&ccedil;&otilde;es que consistem em <strong>blocos de navega&ccedil;&atilde;o principal</strong>. (Grifo nosso)</p></blockquote><p>Aten&ccedil;&atilde;o ao grifo &#8220;blocos de navega&ccedil;&atilde;o principal&#8221; que, apesar de ser aberto a algumas interpreta&ccedil;&otilde;es, identifica-se mais com:</p><ul><li>Navega&ccedil;&atilde;o prim&aacute;ria</li><li>Navega&ccedil;&atilde;o secund&aacute;ria</li><li>Navega&ccedil;&atilde;o <em>in page</em> (dentro de um artigo longo, por exemplo)</li></ul><p>Como <em>diretivas gerais</em> (e seguindo a l&oacute;gica contida na especifica&ccedil;&atilde;o), n&atilde;o se aplica o elemento <code>&lt;nav&gt;</code> a:</p><ul><li>Controles de pagina&ccedil;&atilde;o</li><li>Social links</li><li>Categorias e Tags (de um artigo de blog, por exemplo)</li><li>Navega&ccedil;&atilde;o terci&aacute;ria</li><li>Rodap&eacute;s muito elaborados</li></ul><p>Nos momentos de d&uacute;vida ao usar <code>&lt;nav&gt;</code>, pergunte-se a si mesmo: &#8220;Essa &eacute; uma navega&ccedil;&atilde;o principal?&#8221;. Para ajudar a responder, considere as seguintes &#8220;regrinhas&#8221;:</p><ul><li>N&atilde;o use <code>&lt;nav&gt;</code> a menos que voc&ecirc; pense que <code>&lt;section&gt;</code> tamb&eacute;m seria apropriado com <code>&lt;hx&gt;</code></li><li>Voc&ecirc; adicionaria um link &#8220;Pular para o conte&uacute;do&#8221; por quest&otilde;es de acessibilidade?</li></ul><p>Se a resposta para essas perguntas for &#8220;n&atilde;o&#8221;, ent&atilde;o, provavelmente, n&atilde;o se trata de um <code>&lt;nav&gt;</code>.</p> <hgroup><h2>Erros comuns com o elemento figure</h2><h3>Nem toda imagem &eacute; figure</h3> </hgroup><p>Os novos elementos n&atilde;o foram criados para que os desenvolvedores tivesse trabalho de escrever c&oacute;digo a mais. Pensar isso &eacute; um erro comum de HTML5. Algumas pessoas, ao &#8220;atualizarem&#8221; seus sites para HTML5, colocam o elemento <code>&lt;figure&gt;</code> em todas as imagens! Fazer isso n&atilde;o serve pra nada e a pessoa s&oacute; est&aacute; aumentando o pr&oacute;prio trabalho&#8230;</p><p><a
href="http://www.whatwg.org/specs/web-apps/current-work/multipage/grouping-content.html#the-figure-element">A especifica&ccedil;&atilde;o</a> define <code>&lt;figure&gt;</code> como</p><blockquote><p> algum conte&uacute;do de fluxo, opcionalmente com um <code>&lt;figcaption&gt;</code>, que &eacute; auto-contido e, tipicamente, referido como uma unidade &uacute;nica a partir do fluxo principal do documento.</p></blockquote><p>E &eacute; a&iacute; que reside a beleza do elemento <code>&lt;figure&gt;</code>: ele pode ser afastado do conte&uacute;do principal (para uma barra lateral, por exemplo) sem afetar o fluxo do documento.</p><p>Se se tratar de uma imagem <strong>puramente de apresenta&ccedil;&atilde;o</strong>, que n&atilde;o &eacute; referenciada em outras partes do documento, definitivamente n&atilde;o se trata de um <code>&lt;figure&gt;</code>. Outros casos de uso variam, mas, pra come&ccedil;ar, pergunte-se a si mesmo: &#8220;Esta imagem &eacute; necess&aacute;ria para compreender o contexto atual?&#8221;. Se n&atilde;o, provavelmente n&atilde;o &eacute; um <code>&lt;figure&gt;</code> (pode ser um <code>&lt;aside&gt;</code>, talvez). Se sim, pergunte-se novamente: &#8220;Eu poderia mov&ecirc;-lo para um ap&ecirc;ndice?&#8221;. Se a resposta para ambas as perguntas for &#8220;sim&#8221;, ent&atilde;o, provavelmente, trata-se de um <code>&lt;figure&gt;</code>.</p><h3>O logo n&atilde;o &eacute; um figure</h3><p>Os mesmos princ&iacute;pios mostrados acima tamb&eacute;m se aplicam ao logo do site. N&atilde;o &eacute; t&atilde;o incomum se ver por esses dias c&oacute;digos parecidos com:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;header&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
        <span style="color: #009900;">&lt;figure&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;/img/logo.png&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Nome do site&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hide&quot;</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>figure&gt;</span>
&nbsp;
        Nome do site
    <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: #66cc66;">/</span>header&gt;</span></pre></div></div><p>Isso, simplesmente, n&atilde;o est&aacute; certo&#8230; E n&atilde;o estou dizendo sobre o fato de o logo estar dentro de um <code>&lt;h1&gt;</code> &#8211; isso, por si s&oacute;, renderia um artigo inteiro. A real quest&atilde;o &eacute; o abuso do elemento <code>&lt;figure&gt;</code>! No caso, a marca&ccedil;&atilde;o poderia, simplesmente, ser feita assim:</p><div
class="wp_syntax"><div
class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;header&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>Nome do site<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: #66cc66;">/</span>header&gt;</span></pre></div></div><h3>figure pode ser mais que uma imagem</h3><p>Ao contr&aacute;rio do que muitos pensam, <code>&lt;figure&gt;</code> pode ser &aacute;udio, v&iacute;deo, um gr&aacute;fico (em SVG, por exemplo), uma cita&ccedil;&atilde;o, uma tabela, um bloco de c&oacute;digo ou qualquer combina&ccedil;&atilde;o destes e muito mais!</p><p>N&atilde;o se limite a usar <code>&lt;figure&gt;</code> somente em imagens. Nosso trabalho como aficionados por padr&otilde;es web tamb&eacute;m &eacute; de descrever com precis&atilde;o nosso conte&uacute;do atrav&eacute;s de uma correta marca&ccedil;&atilde;o.</p><h2>N&atilde;o inclua atributos de tipo desnecessariamente</h2><p>Este &eacute;, provavelmente, um dos erros mais comuns de HTML5. Embora n&atilde;o seja, tecnicamente, um erro, &eacute; uma boa pr&aacute;tica evitar a inclus&atilde;o de atributos de tipo.</p><p>Em HTML5, n&atilde;o h&aacute; necessidade de incluir o atributo <code>type</code> em <code>&lt;script&gt;</code> e elementos <code>&lt;style&gt;</code>. Embora possa ser um pouco custoso remover o atributo se ele est&aacute; sendo colocado automaticamente pelo CMS em uso, n&atilde;o h&aacute;, realmente, nenhuma raz&atilde;o para inclu&iacute;-lo se voc&ecirc; est&aacute; codificando na m&atilde;o ou se tiver absoluto controle sobre o c&oacute;digo que est&aacute; sendo usado.</p><p>Uma vez que todos os navegadores esperam que scripts sejam JavaScript e estilos sejam CSS, isso se faz desnecess&aacute;rio:</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;">link</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;styles.css&quot;</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;scripts.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div><p>Use somente:</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;">link</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;css/styles.css&quot;</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</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;js/scripts.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div><h2>Uso incorreto de atributos de formul&aacute;rios</h2><p>Provavelmente, voc&ecirc; deve estar ciente de que o HTML5 introduziu uma s&eacute;rie de novos atributos para formul&aacute;rios (bem, voc&ecirc; deveria). Com isso, alguns erros, por parte dos desenvolvedores, tamb&eacute;m come&ccedil;aram a aparecer.</p><h3>Atributos booleanos</h3><p>V&aacute;rios dos novos atributos de formul&aacute;rio s&atilde;o booleanos, ou seja, sua simples presen&ccedil;a na marca&ccedil;&atilde;o assegura o comportamento esperado. Esses atributos incluem:</p><ul><li><code>autofocus</code></li><li><code>autocomplete</code></li><li><code>required</code></li></ul><p>Ent&atilde;o, alguns desenvolvedores come&ccedil;aram a escrever 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;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span> required<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;true&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> required<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;1&quot;</span>&gt;</span></pre></div></div><p>O <em>parser</em> do navegador ainda vai considerar o campo como obrigat&oacute;rio pelo simples fato de &#8220;required&#8221; estar l&aacute;, mas, e se o valor pretendido fosse outro?</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;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> required<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;false&quot;</span>&gt;</span></pre></div></div><p>O <em>parser</em> ainda ver&aacute; o atributo <code>required</code> e implementar&aacute; o comportamento, mesmo que essa n&atilde;o tenha sido a inten&ccedil;&atilde;o!</p><p>H&aacute; 3 maneiras v&aacute;lidas para um atributo booleano ser aplicado (a segunda e a terceira op&ccedil;&otilde;es s&oacute; se aplicam para XHTML):</p><ul><li><code>required</code></li><li><code>required=""</code></li><li><code>required="required"</code></li></ul><p>Portanto, em HTML5 &eacute; somente:</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;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span> required&gt;</span></pre></div></div><h2>Conclus&atilde;o</h2><p>Certamente, &eacute; imposs&iacute;vel listar todos os erros de HTML5 que os desenvolvedores cometem, mas estes s&atilde;o alguns dos mais vistos nos c&oacute;digos &#8211; que podem ser encontrados em qualquer site de &#8220;galeria HTML5&#8243;.</p><p>Que outros <strong>erros comuns de HTML5</strong> voc&ecirc; est&aacute; vendo por a&iacute;? Na sua opini&atilde;o, quais &aacute;reas exigem mais aten&ccedil;&atilde;o? Comente!</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/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/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/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/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/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/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/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>
<p><a href="http://feedads.g.doubleclick.net/~a/--FV3GGIbBkvztLQV6xYsqIwGGU/0/da"><img src="http://feedads.g.doubleclick.net/~a/--FV3GGIbBkvztLQV6xYsqIwGGU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/--FV3GGIbBkvztLQV6xYsqIwGGU/1/da"><img src="http://feedads.g.doubleclick.net/~a/--FV3GGIbBkvztLQV6xYsqIwGGU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=_7-fl-yLdfw:uIwfXlIYrB8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=_7-fl-yLdfw:uIwfXlIYrB8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=_7-fl-yLdfw:uIwfXlIYrB8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=_7-fl-yLdfw:uIwfXlIYrB8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=_7-fl-yLdfw:uIwfXlIYrB8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=_7-fl-yLdfw:uIwfXlIYrB8:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/_7-fl-yLdfw" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/html/evitando-erros-html5/feed/</wfw:commentRss> <slash:comments>12</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/html/evitando-erros-html5/</feedburner:origLink></item> <item><title>Microdata API e Schema.org: dando significado ao HTML</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/uUIdp0Py-Cs/</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>
<p><a href="http://feedads.g.doubleclick.net/~a/49fjQERgI8RXDyteJRK8nKnPF04/0/da"><img src="http://feedads.g.doubleclick.net/~a/49fjQERgI8RXDyteJRK8nKnPF04/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/49fjQERgI8RXDyteJRK8nKnPF04/1/da"><img src="http://feedads.g.doubleclick.net/~a/49fjQERgI8RXDyteJRK8nKnPF04/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=uUIdp0Py-Cs:xWdS2ra66qU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=uUIdp0Py-Cs:xWdS2ra66qU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=uUIdp0Py-Cs:xWdS2ra66qU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=uUIdp0Py-Cs:xWdS2ra66qU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=uUIdp0Py-Cs:xWdS2ra66qU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=uUIdp0Py-Cs:xWdS2ra66qU:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/uUIdp0Py-Cs" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/html/microdata-api-schema-org-significado-html/feed/</wfw:commentRss> <slash:comments>7</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/html/microdata-api-schema-org-significado-html/</feedburner:origLink></item> <item><title>Desenvolvedores front end e o mercado</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/5KVoGO9g7DM/</link> <comments>http://desenvolvimentoparaweb.com/miscelanea/desenvolvedores-frontend-mercado/#comments</comments> <pubDate>Wed, 18 Apr 2012 12:30:43 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Miscelânea]]></category> <category><![CDATA[Carreira]]></category> <category><![CDATA[Clientes]]></category> <category><![CDATA[Planejamento]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=811</guid> <description><![CDATA[Assista &agrave; confer&ecirc;ncia "Desenvolvedores de Front-end e Mercado" e saiba como anda o mercado de frontend e quais as expectativas futuras e como contribuir para a mudan&ccedil;a para melhor!]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-812" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/desenvolvedores-frontend-mercado-code-snippet.jpg" alt="" width="400" height="366" /></p><p>Recentemente, tive a oportunidade de conhecer o <a
href="http://devcastbrasil.com/">DevCast</a> e assistir a algumas das confer&ecirc;ncias j&aacute; realizadas. Hoje, gostaria de chamar a aten&ccedil;&atilde;o para uma, em especial, que trata sobre os <strong>desenvolvedores front-end</strong> e seu papel e atua&ccedil;&atilde;o (e limita&ccedil;&otilde;es) no <strong>mercado de trabalho</strong>.</p><p>A confer&ecirc;ncia contou com a participa&ccedil;&atilde;o do <a
href="http://twitter.com/diegoeis">Diego Eis</a>, do <a
href="http://tableless.com.br/">Tableless</a>, que, para quem j&aacute; &eacute; atuante na &aacute;rea, meio que dispensa apresenta&ccedil;&otilde;es e, para o pessoal novo, provavelmente voc&ecirc;s ainda ler&atilde;o e ver&atilde;o material web do Diego rodando por a&iacute;. Ele &eacute; um dos pioneiros brasucas de desenvolvimento web e, al&eacute;m da parte t&eacute;cnica, tem tamb&eacute;m um embasamento te&oacute;rico bastante interessante, como ele, pr&oacute;prio, comenta na apresenta&ccedil;&atilde;o.</p><p>Sem mais delongas, assistam &agrave; confer&ecirc;ncia &#8220;<strong>Desenvolvedores de Front-end e Mercado</strong>&#8220;. Vale a pena. Mesmo!</p><div
class="embed-container"><iframe
width="640" height="360" src="http://www.youtube.com/embed/8G1Cr3ZaqEc" frameborder="0" allowfullscreen=""></iframe></div><h2>Opini&otilde;es divergentes</h2><p>O Diego, devido a suas credenciais, &eacute; uma pessoa que considero bastante. Entretanto, isso n&atilde;o impede de eu discordar de algumas coisas que ele comentou, como, por exemplo, sobre <em>responsive web design</em>, que, definitivamente, n&atilde;o considero como uma &#8220;moda&#8221;, e sim como um novo padr&atilde;o/necessidade de desenvolvimento que est&aacute; surgindo e ser&aacute; t&atilde;o comum/necess&aacute;rio dentro de pouco tempo quanto hoje o &eacute; o pr&oacute;prio HTML!</p><p>De jeito nenhum somente sites que tem a &#8220;clientela&#8221; usando 2 ou 3 dispositivos espec&iacute;ficos se beneficia disso. Aqui no <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento para web</a>, mesmo, que possui acesso bem inferior aos 90k/m&ecirc;s do Tableless, que ele citou, tem acesso em mais de <strong>50 resolu&ccedil;&otilde;es diferentes</strong> (sendo quase 40 com largura inferior a 640px)! E olha que &eacute; um site mais espec&iacute;fico, imagina um que possui centenas de milhares ou milh&otilde;es, voltado ao &#8220;p&uacute;blico, em geral&#8221;&#8230;</p><p>Discordei, tamb&eacute;m, sobre as considera&ccedil;&otilde;es feitas sobre o <a
href="http://lesscss.org/">LESS</a> (que, por sinal, receber&aacute; um artigo aqui, no blog, brevemente). &Eacute; evidente que projetos menores n&atilde;o se beneficiam tanto quanto os maiores ao usar LESS, mas, certamente, ele ajuda, e muito, na hora de organizar, manusear e lidar, de maneira em geral, com o CSS.</p><p>Sim, &eacute; poss&iacute;vel fazer tudo sem us&aacute;-lo, assim como &eacute; poss&iacute;vel programar um site inteiro num editor de texto puro&#8230; Poss&iacute;vel, &eacute;, mas existem solu&ccedil;&otilde;es mais desej&aacute;veis, que melhoram a produtividade? Neste caso, acredito que sim, e o LESS faz justamente isso! O fato de ser preciso compilar o CSS &eacute; um passo necess&aacute;rio para desfrutas de todas suas boas caracter&iacute;sticas, mas, pessoalmente, n&atilde;o vejo como algo ruim ou t&atilde;o prejudicial, assim, que deva ser crit&eacute;rio de decis&atilde;o para a ferramenta n&atilde;o ser usada.</p><h2>Considera&ccedil;&otilde;es finais</h2><p>No mais, certamente esta foi uma confer&ecirc;ncia muito boa, que vai ao encontro do objetivo proposto pelo Diego de conscientizar mais os <strong>desenvolvedores web frontend</strong> quanto a sua &aacute;rea de atua&ccedil;&atilde;o, o que esperar da profiss&atilde;o e como contribuir para sua mudan&ccedil;a para melhor! O cara &eacute; um dos grandes do ramo, j&aacute; trabalho para empresas realmente grandes e, devido a sua experi&ecirc;ncia, &eacute; preciso, no m&iacute;nimo, prestar aten&ccedil;&atilde;o e refletir sobre o que ele disse.</p><p>Tamb&eacute;m espero que a profiss&atilde;o melhore o quanto antes, que o n&iacute;vel de maturidade dos profissionais tamb&eacute;m evolua e que a valoriza&ccedil;&atilde;o &#8211; em todos os sentidos da palavra &#8211; aconte&ccedil;a antes mesmo do que se espera, e que tenhamos a consci&ecirc;ncia de que, realmente, &#8220;a revolu&ccedil;&atilde;o come&ccedil;a na trincheira&#8221;, que s&atilde;o os pr&oacute;prios desenvolvedores os respons&aacute;veis pelo atual estado e status em que nos encontramos e que, para que isso mude, primeiramente temos, cada um de n&oacute;s, que mudar!</p><p>Bom trabalho, pessoal do <a
href="http://devcastbrasil.com/">DevCast</a>, e nos vemos por a&iacute;!  ;-)</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/sobre-parcerias-de-trabalhos-de-desenvolvimento-web/" title="Sobre parcerias de trabalhos em desenvolvimento web">Sobre parcerias de trabalhos em desenvolvimento web</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/como-montar-um-portfolio-sem-ter-clientes/" title="Como montar um portfolio sem ter clientes">Como montar um portfolio sem ter clientes</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/fechamento-de-contratos-e-designs-para-web-teoria-e-pratica/" title="Fechamento de contratos e designs para web: teoria e prática">Fechamento de contratos e designs para web: teoria e prática</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><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/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/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/estrategia-web-da-piramide-guia-estrategia-web-equilibrada/" title="Estratégia Web de Pirâmide: guia para uma estratégia de web equilibrada">Estratégia Web de Pirâmide: guia para uma estratégia de web equilibrada</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/7ALKLv51R05VvsPeSV6MVvhaPtM/0/da"><img src="http://feedads.g.doubleclick.net/~a/7ALKLv51R05VvsPeSV6MVvhaPtM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7ALKLv51R05VvsPeSV6MVvhaPtM/1/da"><img src="http://feedads.g.doubleclick.net/~a/7ALKLv51R05VvsPeSV6MVvhaPtM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=5KVoGO9g7DM:3rYupDE4E94:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=5KVoGO9g7DM:3rYupDE4E94:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=5KVoGO9g7DM:3rYupDE4E94:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=5KVoGO9g7DM:3rYupDE4E94:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=5KVoGO9g7DM:3rYupDE4E94:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=5KVoGO9g7DM:3rYupDE4E94:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/5KVoGO9g7DM" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/miscelanea/desenvolvedores-frontend-mercado/feed/</wfw:commentRss> <slash:comments>7</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/miscelanea/desenvolvedores-frontend-mercado/</feedburner:origLink></item> <item><title>Usando Modernizr para detectar features de HTML5 e CSS3</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/v7mpzYO3VKQ/</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>
<p><a href="http://feedads.g.doubleclick.net/~a/EpYL5iKX9WJ8SMPLz-BvQ-EzpB8/0/da"><img src="http://feedads.g.doubleclick.net/~a/EpYL5iKX9WJ8SMPLz-BvQ-EzpB8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/EpYL5iKX9WJ8SMPLz-BvQ-EzpB8/1/da"><img src="http://feedads.g.doubleclick.net/~a/EpYL5iKX9WJ8SMPLz-BvQ-EzpB8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=v7mpzYO3VKQ:8C42fXC5CJw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=v7mpzYO3VKQ:8C42fXC5CJw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=v7mpzYO3VKQ:8C42fXC5CJw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=v7mpzYO3VKQ:8C42fXC5CJw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=v7mpzYO3VKQ:8C42fXC5CJw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=v7mpzYO3VKQ:8C42fXC5CJw:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/v7mpzYO3VKQ" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/css/modernizr-detectar-features-html5-css3/feed/</wfw:commentRss> <slash:comments>2</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/css/modernizr-detectar-features-html5-css3/</feedburner:origLink></item> <item><title>Não use IDs como seletores em CSS</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/6LQhUcXLpTw/</link> <comments>http://desenvolvimentoparaweb.com/css/nao-use-ids-como-seletores-css/#comments</comments> <pubDate>Tue, 03 Apr 2012 13:00:55 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[Planejamento]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=796</guid> <description><![CDATA[&Agrave; primeira vista, pode parecer estranho n&atilde;o usar IDs como seletores em CSS, mas, atrav&eacute;s argumentos bem embasados, entenda porque isso &eacute; verdade.]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-799" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/nao-use-ids-como-seletores-css.jpg" alt="N&atilde;o use IDs como seletores em CSS: imagem ilustrativa" width="350" height="350" /></p><p>Quando estamos aprendendo a trabalhar com <a
href="/categoria/html">HTML</a> e <a
href="/categoria/css" rel="nofollow">CSS</a>, &eacute; comum aprendermos logo de cara as <a
href="http://desenvolvimentoparaweb.com/css/diferencas-entre-ids-e-classes/">diferen&ccedil;as entre IDs e classes</a> e quais vantagens tirar disso, como e quando usar um ou outro e assim por diante. Mas, ap&oacute;s a realiza&ccedil;&atilde;o de alguns testes de performance, pode ser que esse nosso aprendizado &#8220;de raiz&#8221; precise de uma pequena revis&atilde;o.</p><div
class="artigo-traduzido"> Este artigo &eacute; baseado no <span
lang="en">post <a
href="http://oli.jp/2011/ids/">Don’t use IDs in CSS selectors?</a></span> do <a
href="http://oli.jp/"><span
lang="en">Oli.jp</span></a>.</div><p>Quando se &eacute; desenvolvedor web, fazer com que nossos c&oacute;digos e/ou marca&ccedil;&otilde;es, seja l&aacute; em que linguagem form, sejam cada vez melhores, &eacute; praticamente inerente ao of&iacute;cio. E, com isso em mente, ap&oacute;s fazer alguns testes com performance em folhas de estilo, algumas considera&ccedil;&otilde;es interessantes podem ser encontradas, principalmente em rela&ccedil;&atilde;o a <strong>usar seletores de ID em CSS</strong>.</p><p>Mas existem alguns pontos que merecem ser levados em considera&ccedil;&atilde;o:</p><ol><li><strong>Perfomance</strong></li><li><strong>Fragmenta&ccedil;&atilde;o</strong></li><li><strong>Tradi&ccedil;&atilde;o</strong></li></ol><h2>Performance</h2><p>Pode perguntar para qualquer codificador CSS e ele vai responder que os seletores de ID s&atilde;o os mais r&aacute;pidos. Mas isso vem com uma grande limita&ccedil;&atilde;o: IDs s&atilde;o os seletores mais r&aacute;pidos somente se eles forem os seletores-chave. O que &eacute; isso? Bem, n&oacute;s lemos os seletores da esquerda para a direita, mas, caso n&atilde;o saiba, <a
href="http://shauninman.com/archive/2008/05/05/css_qualified_selectors#comment_3942">os navegadores leem da direita para a esquerda</a>! D&ecirc; uma olhadinha nas explica&ccedil;&otilde;es do <a
href="http://gallery.theopalgroup.com/selectoracle/">SelectORacle</a> que voc&ecirc; vai ver.</p><p>Para um seletor <code>#home a</code> chega ser at&eacute; normal supor que o browser vai localizar o elemento de ID &#8220;home&#8221; e aplicar os valores das propriedades em todos seus links. Super r&aacute;pido, n&atilde;o &eacute;? Agora, veja o que realmente acontece: o browser pega todos os elementos <code>a</code>, ent&atilde;o, verifica se s&atilde;o descendentes imediatos de <code>#home</code> e, caso n&atilde;o seja, vai checando os ascendentes at&eacute; chegar em <code>&lt;html&gt;</code>.</p><p>Ent&atilde;o, ser&aacute;, mesmo, que a diferen&ccedil;a de performance &eacute; t&atilde;o grande? Para ter certeza, foram feitos 3 testes usando o<a
href="http://stevesouders.com/efws/css-selectors/csscreate.php"> Criador de Testes CSS de Steve Souders</a>, cada um deles utilizando 1000 elementos <code>a</code> que foram selecionados a partir de IDs individuais, classes ou IDs com os seletores <code>a</code>. Ent&atilde;o, as p&aacute;ginas foram recarregadas diversas vezes para pegar a m&eacute;dia dos resultados (n&uacute;meros em <em>ms</em>).</p><p
style="text-align: center;"><img
class="aligncenter size-full wp-image-797" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/resultado-teste-css.png" alt="Resultado do teste CSS (n&uacute;meros em ms)" width="185" height="316" /></p><p>Ent&atilde;o, para as 1000 regras testadas, os IDs se mostraram cerca de <em>1 mil&eacute;simo de segundo</em> mais r&aacute;pido do que as classes como um seletor-chave, ou seja, <strong>a diferen&ccedil;a de desempenho entre IDs e classes &eacute; irrelevante!</strong></p><p>O cen&aacute;rio mais comum de se usar um ID como  &#8220;namespace&#8221; de um elemento (onde o elemento &eacute; o seletor-chave) &eacute; realmente mais lento do que usando uma classe, mas, novamente, somente com  <em>13 milissegundos</em> de diferen&ccedil;a. Isso tamb&eacute;m &eacute; v&aacute;lido para os poucos bytes extras para adicionar uma classe num elemento que j&aacute; tenha um ID, por exemplo, mudando <code>&lt;div id="search"&gt;</code> para <code>&lt;div id="search" class="search"&gt;</code>.</p><p>Mas isso n&atilde;o quer dizer que todos os seletores s&atilde;o iguais. O seletor universal <code>*</code> e alguns seletores CSS3 t&ecirc;m desempenho relativamente fraco quando usado como seletor-chave.</p><p><img
class="aligncenter size-full wp-image-798" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/04/tabela-performance-seletores-css.png" alt="Tabela com a performance dos seletores CSS" width="682" height="209" /></p><p>No entanto, n&atilde;o se torna um problema caso o uso seja para 1 a 2 seletores (elementos e/ou classes), usando seletores CSS3. O impacto na performance de seletores &eacute; pequeno se comparado a outras coisas como otimiza&ccedil;&atilde;o de imagens ou redu&ccedil;&atilde;o de requisi&ccedil;&otilde;es HTTP. Esse tipo de coisa &eacute; o que realmente importa quando se tem a <strong>performance do site</strong> como fator preponderante.</p><h2>Fragmenta&ccedil;&atilde;o</h2><p>Al&eacute;m de serem &#8220;anz&oacute;is de estilo&#8221;, IDs s&atilde;o utilizados como identificadores de fragmentos espec&iacute;ficos da p&aacute;gina (um <code>href</code> que termina em <code>#ancora</code> leva ao elemento de ID &#8220;ancora&#8221;) e para uso de <a
href="/categoria/javascript">JavaScript</a>. Se j&aacute; existem IDs na p&aacute;gina por outras raz&otilde;es, por que n&atilde;o reutiliz&aacute;-los para estilizar? O problema &eacute; que isso torna o c&oacute;digo <strong>fragmentado</strong>: h&aacute; depend&ecirc;ncias entre CSS e JavaScript e/ou um identificador de fragmento. Usando classes, &eacute; poss&iacute;vel decidir mudar para um (novo) esquema de nomea&ccedil;&atilde;o a qualquer momento e tudo o que &eacute; preciso se preocupar &eacute; alterar alguns nomes no CSS e HTML.</p><p>Existem muito poucos casos em que estilos baseados em ID nunca ser&atilde;o reutilizados. Um exemplo &eacute; usar <code>#search</code> para a caixa de busca do site. Pode-se decidir mais tarde que uma nova caixa de busca ser&aacute; adicionada em outro local (abaixo dos resultados de busca, por exemplo). Mesmo <code>#search</code> sendo &uacute;nico nesse projeto, talvez voc&ecirc; queira um pouco de CSS r&aacute;pido para copiar e colar em um projeto futuro &#8211; que tamb&eacute;m pode ter uma caixa de pesquisa no rodap&eacute; da p&aacute;gina. Mesmo para um grupo complexo de folhas de estilo, &eacute; poss&iacute;vel dividir esses padr&otilde;es em v&aacute;rios trechos reutiliz&aacute;veis ​​de CSS. Usar classes ao inv&eacute;s de IDs impede que esses potenciais problemas venham &agrave; tona.</p><p>E, ao contr&aacute;rio de IDs, <strong>n&atilde;o h&aacute; nenhuma restri&ccedil;&atilde;o em usar v&aacute;rias classes</strong>, tanto em mais de uma vez na p&aacute;gina, quanto v&aacute;rias classes em um mesmo elemento. Navegadores ainda estilizar&atilde;o IDs, mesmo se, por engano, houver duplica&ccedil;&atilde;o em um p&aacute;gina. Mas se aventurar fora do HTML v&aacute;lido o torna propenso a problemas&#8230;</p><h2>Tradi&ccedil;&atilde;o</h2><p>Estilizar com IDs e classes s&atilde;o uma das primeiras coisas que aprendemos sobre CSS, por isso, pode ser um desafio ouvir &#8220;n&atilde;o use IDs em seletores CSS&#8221;. No entanto, o ramo do <strong>desenvolvimento web</strong> est&aacute; sempre mudando. Ocasionalmente, precisamos reavaliar o que funciona e o que n&atilde;o funciona ao inv&eacute;s de apenas ficar com o que est&aacute; nos servido bem, sem questionamentos.</p><p>No momento, estamos passando por um renascimento maci&ccedil;o com HTML5, CSS3, desempenho de JavaScript incr&iacute;vel e lan&ccedil;amentos de navegadores r&aacute;pidos, por isso &eacute; um grande momento para esse <strong>repensar</strong>. No entanto, &eacute; importante examinar as raz&otilde;es de forma racional e decidir se as quest&otilde;es apresentadas s&atilde;o, realmente, v&aacute;lidas, ao inv&eacute;s de rejeit&aacute;-las de antem&atilde;o.</p><h2>Conclus&atilde;o</h2><p>Como p&ocirc;de ser constatado no artigo, parece que n&atilde;o h&aacute; raz&otilde;es convincentes para usar IDs em seletores CSS &#8211; a n&atilde;o ser para &#8220;namespaces&#8221;, uso de widgets e plugins espec&iacute;ficos em CMSs e casos similares. Em CSS, <strong>classes podem fazer tudo o que IDs podem!</strong> Pense nisso na pr&oacute;xima vez em que iniciar um projeto e, ao inv&eacute;s de um IDs, tente trabalhar com classes, deixando os IDs para identificadores de fragmentos ou <em>hooks</em> para JavaScript.</p><p>Pol&ecirc;mica ou assustadora demais essa hist&oacute;ria de n&atilde;o usar IDs como seletores em CSS? O que, realmente, voc&ecirc; pensa sobre isso? Comente!</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/design/elementos-design-aplicados-web/" title="Elementos de design aplicados à web">Elementos de design aplicados à web</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/estrategia-web-da-piramide-guia-estrategia-web-equilibrada/" title="Estratégia Web de Pirâmide: guia para uma estratégia de web equilibrada">Estratégia Web de Pirâmide: guia para uma estratégia de web equilibrada</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><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/como-otimizar-imagens-web-internet/" title="Como otimizar imagens para web: guia de otimização de imagens">Como otimizar imagens para web: guia de otimização de imagens</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/usabilidade/pergunte-se-a-si-mesmo-questoes-para-desenvolver-um-bom-site/" title="Pergunte-se a si mesmo: questões para desenvolver um bom site">Pergunte-se a si mesmo: questões para desenvolver um bom site</a></li><li><a
href="http://desenvolvimentoparaweb.com/html/meta-tags/" title="Meta tags">Meta tags</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/compatibilidade-css-e-o-internet-explorer-tabela-comparativa-de-compatibilidade-cssie/" title="Compatibilidade CSS e o Internet Explorer: tabela comparativa de compatibilidade CSS/IE">Compatibilidade CSS e o Internet Explorer: tabela comparativa de compatibilidade CSS/IE</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/sWAbRin3uYzYnNxMSKlLEsEqyjQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/sWAbRin3uYzYnNxMSKlLEsEqyjQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sWAbRin3uYzYnNxMSKlLEsEqyjQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/sWAbRin3uYzYnNxMSKlLEsEqyjQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=6LQhUcXLpTw:u9QkdrNcy0I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=6LQhUcXLpTw:u9QkdrNcy0I:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=6LQhUcXLpTw:u9QkdrNcy0I:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=6LQhUcXLpTw:u9QkdrNcy0I:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=6LQhUcXLpTw:u9QkdrNcy0I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=6LQhUcXLpTw:u9QkdrNcy0I:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/6LQhUcXLpTw" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/css/nao-use-ids-como-seletores-css/feed/</wfw:commentRss> <slash:comments>13</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/css/nao-use-ids-como-seletores-css/</feedburner:origLink></item> <item><title>Como usar .ready() antes de incluir a jQuery</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/vrHZ3cAa9Sk/</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>
<p><a href="http://feedads.g.doubleclick.net/~a/AjRGQKE6ZezPNa5tSTsikpEgon8/0/da"><img src="http://feedads.g.doubleclick.net/~a/AjRGQKE6ZezPNa5tSTsikpEgon8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/AjRGQKE6ZezPNa5tSTsikpEgon8/1/da"><img src="http://feedads.g.doubleclick.net/~a/AjRGQKE6ZezPNa5tSTsikpEgon8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=vrHZ3cAa9Sk:lDMgGkIrur8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=vrHZ3cAa9Sk:lDMgGkIrur8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=vrHZ3cAa9Sk:lDMgGkIrur8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=vrHZ3cAa9Sk:lDMgGkIrur8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=vrHZ3cAa9Sk:lDMgGkIrur8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=vrHZ3cAa9Sk:lDMgGkIrur8:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/vrHZ3cAa9Sk" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/como-usar-ready-antes-de-incluir-jquery/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/jquery/como-usar-ready-antes-de-incluir-jquery/</feedburner:origLink></item> <item><title>dpw2012: novo tema do desenvolvimento para web</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/dalu6F-DWUk/</link> <comments>http://desenvolvimentoparaweb.com/miscelanea/dpw2012-novo-tema-do-desenvolvimento-para-web/#comments</comments> <pubDate>Tue, 27 Mar 2012 00:10:04 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Miscelânea]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=784</guid> <description><![CDATA[Este &eacute; um "meta artigo" para os leitores e visitantes saberem sobre o novo tema do desenvolvimento para web, o dpw2012! Saiba mais detalhes sobre as tecnologias usadas e como tudo aconteceu! Continue lendo...  ;-)]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-785" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/03/dpw-2012-logo.png" alt="novo logo desenvolvimento para web" width="300" height="300" /></p><p>Este &eacute; um &#8220;meta artigo&#8221; para os leitores e visitantes saberem sobre o novo tema do desenvolvimento para web, o dpw2012! Vou comentar um pouco sobre este novo tema e as novidades que v&ecirc;m por a&iacute;! Continue lendo&#8230;  ;-)</p><h2>Motiva&ccedil;&otilde;es para um novo tema, o dpw2012</h2><p>Bem, pessoal, as motiva&ccedil;&otilde;es que me levaram a criar este novo tema acho que s&atilde;o as mesmas de qualquer um que trabalho no desenvolvimento web &#8211; e goste do que faz, obviamente: aprendizado, inova&ccedil;&otilde;es, testes de novas t&eacute;cnicas, etc. Com isso em mente, h&aacute; alguns meses atr&aacute;s cheguei &agrave; conclus&atilde;o de que o tema anterior estava &#8220;meio antiguinho&#8221; (leia-se: defasado), tanto em rela&ccedil;&atilde;o &agrave; apar&ecirc;ncia, quanto nas tecnologias usadas&#8230; Por isso, c&aacute; estamos n&oacute;s, com este nov&iacute;ssimo tema, com muitas novidades!</p><h2>dpw2012: tecnologias</h2><p>Vamos a alguns pormenores das tecnologias envolvidas e como eu consegui desenvolver este tema usando algumas das tecnologias de desenvolvimento web mais recentes que podemos encontrar, hoje em dia.</p><h3>HTML5 e HTML5 Boilerplate</h3><p>J&aacute; algum tempo, mesmo antes de ter a ideia de desenvolver este tema, j&aacute; havia come&ccedil;ado a estudar sobre HTML5. Li bastantes artigos e alguns livros a respeito e, como n&atilde;o estamos falando de uma tecnologia pronta, continuo os estudos e fico de olho nas novidades &#8211; inclusive, podem esperar artigos sobre HTML5, claro!</p><p>No meio da hist&oacute;ria, tive a felicidade de conhecer o <a
href="http://html5boilerplate.com/">HTML5 Boilerplate</a>! O <strong>HTML5BP</strong> &eacute; simples uma das melhores coisas que surgiu para desenvolvimento web nos &uacute;ltimos tempos: trata-se de um &#8220;modelo HTML5&#8243; para se come&ccedil;ar a desenvolver rapidamente; mas n&atilde;o &eacute; somente isso.</p><p>Ele conta com muito mais coisas al&eacute;m de um excelente modelo de HTML5: javascripts, folhas de estilo, um .htaccess robusto demais e muitas, muitas coisas. Para terem uma ideia, aprendi mais sobre desenvolvimento web em 1 semana estudando o HTML5BP que em muitos meses passados&#8230; <strong>Vale a pena!</strong></p><h3>Twitter Bootstrap</h3><p>O <a
href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a> j&aacute; est&aacute; bem conhecido entre os desenvolvedores estadunidenses e europeus, mas, confesso, ainda n&atilde;o vi tantos sites em territ&oacute;rio nacional que se valham desse <strong>fabuloso</strong> e <strong>estupendo</strong> <em>toolkit</em> para desenvolvimento web. O Twitter Boostrap conta com um CSS incr&iacute;vel (com <a
href="http://lesscss.org/">LESS</a>), que garante um sistema de grid bem facinho de se mexer, al&eacute;m de elemento de UI muito eficientes e javascripts para fazer tudo isso ficar ainda melhor!</p><p>Imagine, voc&ecirc;, encontrar prontos, funcionais e testados por desenvolvedores web de primeira linha elementos de navega&ccedil;&atilde;o, bot&otilde;es, tabs e pills, menus drop down e muitos outros componentes de UI, que s&atilde;o cross-browser e ainda contam com javascript pr&oacute;prio! Bem, isso &eacute; Twitter Bootstrap&#8230;!</p><p>H&aacute; alguns dias atr&aacute;s, tamb&eacute;m conheci um &#8220;complemento&#8221; ao Bootstrap que me foi bastante &uacute;til. A grande maioria dos &iacute;cones que voc&ecirc;s est&atilde;o vendo no site, na verdade n&atilde;o s&atilde;o &iacute;cones: &eacute; uma <strong>fonte</strong>! O projeto <a
href="http://fortawesome.github.com/Font-Awesome/">Font Awesome</a> foi criado visando aprimorar o Twitter Bootstrap, tornando poss&iacute;vel substituir o uso de imagens por uma fonte. Ele usa todos os &iacute;cones padr&atilde;o do Bootstrap e ainda estendeu com mais alguns! Realmente, &#8220;awesome&#8221;!</p><h3>Design Responsivo</h3><p>Oh, yeah! Somos responsivos, baby!  ;-)</p><p>Tamb&eacute;m antes de come&ccedil;ar a desenvolver este tema, j&aacute; estava estaudando sobre <strong>design responsivo</strong>. Quando comecei a colocar a m&atilde;o na massa, j&aacute; tinha certeza de que queria que assim o fosse &#8211; afinal, este &eacute; um novo padr&atilde;o de desenvolvimento web, n&atilde;o uma &#8220;tend&ecirc;ncia&#8221;, como querem for&ccedil;ar alguns! Havia algumas possibilidades para isso: escrever tudo do zero; usar algo que ajudaria, com estilo parcialmente pronto; pegar um tema pronto para WordPress.</p><p>Como podem ver, fiquei com o meio termo. Desenvolver tudo do zero, acredito n&atilde;o haver necessidade e, pegar tudo pronto, acaba com toda a gra&ccedil;a, n&atilde;o &eacute; verdade? Portanto, fiquei com <strong>Twitter Bootstrap responsivo + HTML5 Boilerplate fant&aacute;stico</strong>! Uma boa combina&ccedil;&atilde;o, eu diria.</p><h3>Microdata API + schema.org</h3><p>Tamb&eacute;m &eacute; algo que <a
href="http://tableless.com.br/" rel="nofollow">s&oacute; vi em 1 site brasuca conceituado</a>, at&eacute; ent&atilde;o, e o <strong>dpw2012</strong> tamb&eacute;m faz uso: <a
href="http://www.w3.org/TR/html5/microdata.html">Microdata API</a> + <a
href="http://schema.org/">Schemas</a>. Grosso modo, s&atilde;o nomes padronizados de classes e atributos HTML que d&atilde;o maior significado ao conte&uacute;do apresentado em web sites. Os principais buscadores reconhecem este padr&atilde;o, embora (teoricamente) ainda n&atilde;o estejam usando como fatores de classifica&ccedil;&atilde;o. De qualquer maneira, est&aacute;, a&iacute;, o site preparado para quando isso acontecer &#8211; se &eacute; que j&aacute; n&atilde;o est&aacute; acontecendo &#8220;na surdina&#8221;.</p><p><strong>&lt;update&gt;</strong><br
/> Para os que n&atilde;o acompanham o<a
href="http://twitter.com/desenvolvweb"> twitter do desenvolvimento para web</a>, a poss&iacute;vel efici&ecirc;ncia da Microdata API juntamente com os padr&otilde;es do schema.org est&aacute; ainda mais perto de ser confirmada.</p><p><style type='text/css'>#bbpBox_186914692495708160 a { text-decoration:none; color:#0084B4; }#bbpBox_186914692495708160 a:hover { text-decoration:underline; }</style><div
id='bbpBox_186914692495708160' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div
style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span
style='width:100%; font-size:18px; line-height:22px;'>Para sanar a d&#250;vida do combo HTML5 + Schema: semana passada estava em 10&#186; para "desenvolvimento web"; hoje, em 2&#186;!  o/</span><div
class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img
align='middle' src='http://desenvolvimentoparaweb.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a
title='tweeted on 2 de April de 2012 5:35 pm' href='http://twitter.com/#!/desenvolvweb/status/186914692495708160' target='_blank'>2 de April de 2012 5:35 pm</a> via <a
href="http://www.hootsuite.com" rel="nofollow" target="blank">HootSuite</a><a
href='https://twitter.com/intent/tweet?in_reply_to=186914692495708160' class='bbp-action bbp-reply-action' title='Reply'><span><em
style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a
href='https://twitter.com/intent/retweet?tweet_id=186914692495708160' class='bbp-action bbp-retweet-action' title='Retweet'><span><em
style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a
href='https://twitter.com/intent/favorite?tweet_id=186914692495708160' class='bbp-action bbp-favorite-action' title='Favorite'><span><em
style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div
style='float:left; padding:0; margin:0'><a
href='http://twitter.com/intent/user?screen_name=desenvolvweb'><img
style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1851372606/dpw-twitter-logo_normal.png' /></a></div><div
style='float:left; padding:0; margin:0'><a
style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=desenvolvweb'>@desenvolvweb</a><div
style='margin:0; padding-top:2px'>desenvolvweb</div></div><div
style='clear:both'></div></div></div><br
/> <strong>&lt;/update&gt;</strong></p><p>Estou usando, basicamente, os schemas de <a
href="http://schema.org/Blog">Blog</a>, <a
href="http://schema.org/BlogPosting">BlogPosting</a>, mas ainda vou explorar mais schemas para incluir. Apesar de eu n&atilde;o garantir a efici&ecirc;ncia disso, #FicaADica para o estudo e implementa&ccedil;&atilde;o, j&aacute; que &eacute; bem divertido!</p><h2>Novo logo</h2><p>Pra quem segue <a
href="https://twitter.com/desenvolvweb">@desenvolvweb</a>, deve ter notado (ou n&atilde;o) o seguinte tweet, cerca de 1 m&ecirc;s atr&aacute;s:</p> <style type='text/css'>#bbpBox_173179693833527297 a { text-decoration:none; color:#0084B4; }#bbpBox_173179693833527297 a:hover { text-decoration:underline; }</style><div
id='bbpBox_173179693833527297' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'><div
style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span
style='width:100%; font-size:18px; line-height:22px;'>E esse &#233; o novo logo do blog! <a
href="http://t.co/PfIIuJV8" rel="nofollow">http://t.co/PfIIuJV8</a> // Fora a qualidade do upload, o que acharam?  ;-D</span><div
class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img
align='middle' src='http://desenvolvimentoparaweb.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a
title='tweeted on 24 de February de 2012 7:57 pm' href='http://twitter.com/#!/desenvolvweb/status/173179693833527297' target='_blank'>24 de February de 2012 7:57 pm</a> via <a
href="http://www.hootsuite.com" rel="nofollow" target="blank">HootSuite</a><a
href='https://twitter.com/intent/tweet?in_reply_to=173179693833527297' class='bbp-action bbp-reply-action' title='Reply'><span><em
style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a
href='https://twitter.com/intent/retweet?tweet_id=173179693833527297' class='bbp-action bbp-retweet-action' title='Retweet'><span><em
style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a
href='https://twitter.com/intent/favorite?tweet_id=173179693833527297' class='bbp-action bbp-favorite-action' title='Favorite'><span><em
style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div><div
style='float:left; padding:0; margin:0'><a
href='http://twitter.com/intent/user?screen_name=desenvolvweb'><img
style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1851372606/dpw-twitter-logo_normal.png' /></a></div><div
style='float:left; padding:0; margin:0'><a
style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=desenvolvweb'>@desenvolvweb</a><div
style='margin:0; padding-top:2px'>desenvolvweb</div></div><div
style='clear:both'></div></div></div><p>Quer dizer, o logo j&aacute; estava pronto e sendo &#8220;maturado&#8221; no twitter e, agora que o lan&ccedil;amento do tema aconteceu, me pareceu apropriado us&aacute;-lo oficialmente. Mais uma vez, obrigado a <a
href="https://twitter.com/#!/alannacouto">Alanna Couto</a>!  ;-)</p><h2>Considera&ccedil;&otilde;es finais</h2><p>Pra mim, o blog teve um ganho incr&iacute;vel com a implementa&ccedil;&atilde;o desse novo tema: com um toque mais <em>clean</em>, agora os conte&uacute;dos est&atilde;o melhor apresentados, o leitor vai direto ao ponto e, com o design responsivo, tudo ficou muito mais acess&iacute;vel e agrad&aacute;vel!</p><p>O fato de estar usando menos imagens e ter limado bastante de javascript desde a &uacute;ltima vers&atilde;o, tamb&eacute;m contribui para a leveza do carregamento e, apesar de eu j&aacute; estar usando cache nas p&aacute;ginas, <strong>performance do site</strong> &eacute; sempre uma boa coisa!</p><p>Meu &#8220;Obrigado!&#8221; a todos os que deram seus pitacos construtivos para que o tema ficasse melhor do que eu esperava, contando o pessoal do <a
href="https://groups.google.com/forum/?fromgroups#!forum/html5-css3-brasil">grupo html5-css3-brasil</a>, tanto os que apareceram publicamente, quanto os que entraram em contato em particular.</p><p>E, se poss&iacute;vel, gostaria de contar a <strong>sua</strong> ajuda, tamb&eacute;m! Caso encontre algum bug e/ou tenha sugest&otilde;es a fazer, por favor, comente neste artigo ou <a
href="http://desenvolvimentoparaweb.com/sobre#formContato">envie uma mensagem</a>. O desenvolvimento para web &eacute; um espa&ccedil;o de testes e, por aqui, nada est&aacute; acabado ou &eacute; feito de maneira que n&atilde;o possa se alterar.</p><p>Muito obrigado, leitores ass&iacute;duos, leitores do feed e at&eacute; mesmo os visitantes casuais! Espero continuar contando com voc&ecirc;s!  ;-)</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li>Nenhum artigo relacionado...</li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/2tOFJDtB582vAqA52V-D2pbxmuc/0/da"><img src="http://feedads.g.doubleclick.net/~a/2tOFJDtB582vAqA52V-D2pbxmuc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2tOFJDtB582vAqA52V-D2pbxmuc/1/da"><img src="http://feedads.g.doubleclick.net/~a/2tOFJDtB582vAqA52V-D2pbxmuc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=dalu6F-DWUk:6lTlFi5-jMU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=dalu6F-DWUk:6lTlFi5-jMU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=dalu6F-DWUk:6lTlFi5-jMU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=dalu6F-DWUk:6lTlFi5-jMU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=dalu6F-DWUk:6lTlFi5-jMU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=dalu6F-DWUk:6lTlFi5-jMU:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/dalu6F-DWUk" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/miscelanea/dpw2012-novo-tema-do-desenvolvimento-para-web/feed/</wfw:commentRss> <slash:comments>6</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/miscelanea/dpw2012-novo-tema-do-desenvolvimento-para-web/</feedburner:origLink></item> <item><title>Guerreiro SEO: resenha</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/SVrGCv9Jf9s/</link> <comments>http://desenvolvimentoparaweb.com/seo/guerreiro-seo-resenha/#comments</comments> <pubDate>Mon, 27 Feb 2012 13:00:38 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[SEO]]></category> <category><![CDATA[Resenhas]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=778</guid> <description><![CDATA[Guerreiro SEO: resenha do livro com informa&ccedil;&otilde;es t&eacute;cnicas, an&aacute;lise de cap&iacute;tulos e considera&ccedil;&otilde;es.]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-779" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/02/guerreiro-seo-resenha-livro.jpg" alt="Capa do livro Guerreiro SEO" width="212" height="294" /></p><p><a
href="http://twitter.com/#!/desenvolvweb/status/160331684477272064">Como havia anunciado num tweet de alguns dias atr&aacute;s</a>, a <a
href="http://novatec.com.br/" rel="nofollow">Novatec Editora</a> fechou uma parceria com o blog. A partir de agora, ser&atilde;o publicadas resenhas dos livros relativos a <strong>desenvolvimento web</strong> da editora.</p><p>E, para come&ccedil;ar esta parceria com o p&eacute; direito, vamos &agrave; resenha do excelente livro <strong>Guerreiro SEO</strong>!</p><div
class="artigo-patrocinado">Este &eacute; um artigo patrocinado, mas a opini&atilde;o do autor n&atilde;o est&aacute; &agrave; venda!</div><h2>Informa&ccedil;&otilde;es sobre o livro Guerreiro SEO</h2><p>Guerreiro SEO &eacute; a tradu&ccedil;&atilde;o do livro <strong>SEO Warrior</strong>, escrito por <strong>John I. Jerkovic</strong> e publicado pela <strong>O&#8217;REILLY;</strong> tradu&ccedil;&atilde;o esta feita por <strong>Rafael Zanolli</strong> e que, com exce&ccedil;&atilde;o de um ou outro lapso, ficou bastante interessante.</p><p>A tradu&ccedil;&atilde;o do livro, contanto com informa&ccedil;&otilde;es editoriais, sum&aacute;rio, ap&ecirc;ndices e &iacute;ndices, ficou com mais de 500 p&aacute;ginas &#8211; incluindo as imagens, que s&atilde;o em P&amp;B. &Agrave; primeira vista pode at&eacute; parecer que o livro &eacute; grande e intimida um pouco, mas a leitura &eacute; bastante suave e, tirando uma ou outra parte mais densa, &eacute; poss&iacute;vel ler dezenas de p&aacute;ginas, de uma s&oacute; vez, sem se cansar.</p><p>&Eacute; um livro bem feito, bem acabado, que pode ser manuseado sem maiores desconfortos, mesmo quando se est&aacute; mais para o in&iacute;cio ou mais para o fim e a rela&ccedil;&atilde;o de p&aacute;ginas para &#8220;cada lado&#8221; &eacute; totalmente desproporcional; em outras palavras, d&aacute; pra ler confortavelmente sentado ou deitado.</p><h2>Guerreiro SEO: cap&iacute;tulos e conte&uacute;do</h2><p>A evolu&ccedil;&atilde;o de leitura e da tem&aacute;tica do livro ficou boa. Come&ccedil;a-se com temas bastante b&aacute;sicos e mais abstratos e, a medida em que a leitura vai tendo continuidade, mais aten&ccedil;&atilde;o e foco s&atilde;o requeridos para se acompanhar as dicas, t&eacute;cnicas e indica&ccedil;&otilde;es a respeito de SEO que v&atilde;o sendo dadas.  Nesta primeira edi&ccedil;&atilde;o do livro, a divis&atilde;o dos <strong>18 cap&iacute;tulos</strong> ficou assim:</p><ol><li><strong>Uma vis&atilde;o geral.</strong> Cap&iacute;tulo que, n&atilde;o surpreendentemente, apresenta uma vis&atilde;o geral sobre o que &eacute; SEO e como se d&aacute; o processo de SEO.</li><li><strong>Introdu&ccedil;&atilde;o aos mecanismos de busca.</strong> Explica como funcionam os mecanismos de busca e de que tipo e categoria podem ser.</li><li><strong>O essencial sobre websites.</strong> Explica&ccedil;&otilde;es b&aacute;sicas sobre como funciona o processo de registro de dom&iacute;nios, op&ccedil;&otilde;es de hospedagem, considera&ccedil;&otilde;es sobre design e usabilidade e at&eacute; algumas dicas sobre performance!</li><li><strong>Fatores de classifica&ccedil;&atilde;o internos.</strong> Aqui a coisa j&aacute; come&ccedil;a a ficar um pouco mais s&eacute;ria e a parte t&eacute;cnica de SEO come&ccedil;a a ser apresentada em dicas de otimiza&ccedil;&atilde;o <em>on-site</em>, como tag title, <a
title="Meta tags" href="http://desenvolvimentoparaweb.com/xhtml/meta-tags/">meta tags</a>, textos-&acirc;ncora, proximidade, proemin&ecirc;ncia, etc.</li><li><strong>Fatores de classifica&ccedil;&atilde;o externos.</strong> Fatores de SEO <em>off-site</em>, incluindo <em>link building</em>, idade do site e como lidar com alguns problemas (muitas vezes n&atilde;o vistos como tal) que podem acontecer.</li><li><strong>Monitoramento de estat&iacute;sticas web.</strong> Cap&iacute;tulo que fala sobre monitoramento em sites, apresentando alguns conceitos b&aacute;sicos a respeito (visitantes &uacute;nicos, total de visitantes, etc) e mostrando algumas ferramentas interessantes de monitoramento, inclusive para se instalar diretamente no servidor.</li><li><strong>Google Webmaster Tools e Google Analytics.</strong> Justificadamente, um cap&iacute;tulo dedico a essas 2 ferramentas praticamente indispens&aacute;veis para uma boa an&aacute;lise de SEO. O cap&iacute;tulo apresenta as ferramentas, de modo geral, e ensina o b&aacute;sico sobre como localizar algumas estat&iacute;sticas.</li><li><strong>Armadilhas para mecanismos de busca.</strong> Cap&iacute;tulo muito interessante, que mostra que no mundo do SEO existe uma parte dedicada &agrave;s &#8220;armadilhas&#8221; que existem quando o assunto &eacute; otimiza&ccedil;&atilde;o para mecanismos de busca: conte&uacute;do JavaScript, AJAX, iframes e muito mais.</li><li><strong>Protocolo de exclus&atilde;o de rob&ocirc;s.</strong> Informa&ccedil;&otilde;es e hist&oacute;rico do Robots Exclusion Protocol (REP), bastantes informa&ccedil;&otilde;es sobre como trabalhar com o robots.txt e outras formas de controlar acessos de bots usando meta tags e at&eacute; configura&ccedil;&otilde;es no lado do servidor. Cap&iacute;tulo essencial!</li><li><strong>Sitemaps.</strong> Outra parte do livro que n&atilde;o poderia faltar, o cap&iacute;tulo dedicado aos sitemaps explica o que eles s&atilde;o, como &eacute; seu formato padr&atilde;o, import&acirc;ncia de uso e algumas dicas especiais a respeito.</li><li><strong>Pesquisa de palavra-chave.</strong> Dicas e macetes muito, muito importantes, sobre como definir uma estrat&eacute;gia de palavras-chave, sua rela&ccedil;&atilde;o com a linguagem (alternadores, radicia&ccedil;&atilde;o, etc), e como se d&aacute; o processo de pesquisa de <em>keywords</em>, com detalhes e pormenores de ferramentas indispens&aacute;veis para tal.</li><li>Constru&ccedil;&atilde;o de links. Ou <em>link building</em>, para os mais &iacute;ntimos, que &eacute; abordado neste cap&iacute;tulo com estrat&eacute;gias realmente diferentes do que se encontra em sites de SEO, dicas realmente preciosas e, at&eacute; ent&atilde;o, n&atilde;o pensadas pela maioria, de como fazer um <em>link building</em> de qualidade. &Eacute; s&eacute;rio!</li><li>Pesquisa e an&aacute;lise da concorr&ecirc;ncia. Pelo menos pra mim, foi um &#8220;cap&iacute;tulo-surpresa&#8221;. Afinal, pesquisar a concorr&ecirc;ncia &eacute; um tema n&atilde;o espec&iacute;fico de SEO, que poderia n&atilde;o ter sido incluso. Mas, felizmente, o foi, e nele &eacute; poss&iacute;vel encontrar dicas precios&iacute;ssimas de como conhecer, avaliar e monitorar a concorr&ecirc;ncia.</li><li><strong>Considera&ccedil;&otilde;es de conte&uacute;do.</strong> Outra parte bastante interessante e importante, que trata sobre SEO preditiva, conte&uacute;do de curto e longo prazo, cria&ccedil;&atilde;o de conte&uacute;do e considera&ccedil;&otilde;es sobre duplica&ccedil;&atilde;o de conte&uacute;do.</li><li><strong>O fen&ocirc;meno das redes sociais.</strong> Como aumentar a visibilidade de um site/projeto web usando blogs, twitter e digg-likes. Tamb&eacute;m como montar uma boa estrat&eacute;gia de Social Media Optimization (SMO) e um apanhado geral sobre o futuro dos buscadores: buscas em tempo real.</li><li><strong>Marketing nos mecanismos de busca.</strong> Trata de Search Engine Marketing, mostrando como se d&aacute; o processo de SEM e funcionamento e estrat&eacute;gias de palavras-chave no Google AdWords.</li><li><strong>Spam e mecanismos de busca.</strong> Como acontece o SPAM em mecanismos de busca, o que evitar fazer para n&atilde;o ser considerado um spammer e medidas para o caso seu site seja penalizado pelos buscadores.</li><li><strong>A agita&ccedil;&atilde;o do mercado.</strong> Considera&ccedil;&otilde;es sobre o Google SearchWiki, ferramentas para analisar resultados de busca em diversos buscadores, nofollow e como se manter atualizado no mundo de SEO.</li></ol><h2>&#8220;Apanhado geral&#8221; sobre o livro Guerreiro SEO</h2><p>Quando estava lendo <strong>Guerreiro SEO</strong>, at&eacute;, mais ou menos, o cap&iacute;tulo 7, pensei se tratar de mais um livro introdut&oacute;rio sobre algum tema relativo a desenvolvimento web (no caso, SEO). Mas qual n&atilde;o foi minha surpresa quando continuei a leitura e, apesar de ainda encontrar sobre muita coisa que j&aacute; sabia, me deparei com dicas e &#8220;pulos do gato&#8221; que, apesar de ainda n&atilde;o ter feito testes pr&aacute;ticos, realmente fazem todo o sentido e podem fazer uma diferen&ccedil;a significativa numa classifica&ccedil;&atilde;o de uma p&aacute;gina em SERPs.</p><p>Al&eacute;m disso, achei muito interessante o fato de o livro abordar dicas n&atilde;o somente voltadas ao Google, mas, tamb&eacute;m, ao Yahoo! e ao Bing. Apesar da j&aacute; sabia supremacia do Google na &aacute;rea, existe uma porcentagem importante de visitantes que, dependendo do caso/estrat&eacute;gia do neg&oacute;cio, se encontra nos outros buscadores.</p><p>Outro diferencial &eacute; que o autor, durante todo o livro, apresenta sugest&otilde;es de uso de scripts para apresenta&ccedil;&atilde;o de dados importantes e automatiza&ccedil;&atilde;o de tarefas de SEO e, para a felicidade dos leitores, disponibiliza-os, na &iacute;ntegra, para serem usados nas estrat&eacute;gias e trabalhos de SEO!</p><h2>Conclus&atilde;o</h2><p>Dando minha sincera opini&atilde;o, o <strong>Guerreiro SEO</strong> &eacute; livro que atende primordialmente a quem est&aacute; come&ccedil;ando ou come&ccedil;ou a pouco tempo na &aacute;rea, mas, com certeza, tem muito a oferecer com que j&aacute; &eacute; do ramo atrav&eacute;s de dicas de &#8220;micro otimiza&ccedil;&atilde;o&#8221;, inclusive para mecanismos de busca espec&iacute;ficos, e atrav&eacute;s de suas sugest&otilde;es de estrat&eacute;gias e disponibiliza&ccedil;&atilde;o de scripts que automatizam parte do trabalho de SEO.</p><p>Portanto, seja voc&ecirc; iniciante na &aacute;rea ou j&aacute; veterano, ter este livro no acervo para consultas constantes &eacute;, de fato, uma op&ccedil;&atilde;o s&eacute;ria a ser considerada.</p><h2>B&ocirc;nus!</h2><p>Ah, uma coisa que esqueci de comentar&#8230; A parceria com a Novatec tamb&eacute;m garantiu um c&oacute;digo promocional especialmente para os leitores do <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento para web</a>! Com este c&oacute;digo, voc&ecirc; pode adquirir Guerreiro SEO e qualquer outro t&iacute;tulo da editora com 20% de desconto!</p><div
class="atencao"><a
href="http://novatec.com.br/livros/guerreiroseo/" rel="nofollow">Adquira o livro Guerreiro SEO</a> com 20% de desconto usando o c&oacute;digo promocional <strong>DESENWEB</strong>.</div><p>E fique ligado tamb&eacute;m no <a
href="http://twitter.com/desenvolvweb">twitter do desenvolvimento para web</a>, pois a qualquer momento pode haver uma promo&ccedil;&atilde;o e voc&ecirc; ser contemplado com um dos livros da Novatec! ;-)</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li>Nenhum artigo relacionado...</li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/V6IZYcqnPMM1Eg4wb0sxkQGc97w/0/da"><img src="http://feedads.g.doubleclick.net/~a/V6IZYcqnPMM1Eg4wb0sxkQGc97w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/V6IZYcqnPMM1Eg4wb0sxkQGc97w/1/da"><img src="http://feedads.g.doubleclick.net/~a/V6IZYcqnPMM1Eg4wb0sxkQGc97w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=SVrGCv9Jf9s:7JwyhiLcLBE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=SVrGCv9Jf9s:7JwyhiLcLBE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=SVrGCv9Jf9s:7JwyhiLcLBE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=SVrGCv9Jf9s:7JwyhiLcLBE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=SVrGCv9Jf9s:7JwyhiLcLBE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=SVrGCv9Jf9s:7JwyhiLcLBE:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/SVrGCv9Jf9s" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/seo/guerreiro-seo-resenha/feed/</wfw:commentRss> <slash:comments>2</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/seo/guerreiro-seo-resenha/</feedburner:origLink></item> <item><title>Estratégia de Conteúdo ou Content Strategy</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/CmO8sWh4Q2M/</link> <comments>http://desenvolvimentoparaweb.com/miscelanea/estrategia-de-conteudo-content-strategy/#comments</comments> <pubDate>Mon, 16 Jan 2012 12:00:36 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Miscelânea]]></category> <category><![CDATA[Conteúdo]]></category> <category><![CDATA[Estratégia de Conteúdo]]></category> <category><![CDATA[Web]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=761</guid> <description><![CDATA[Estrat&eacute;gia de Conte&uacute;do: saiba o que &eacute;, para que serve e como se atua nesta emergente e promissora &aacute;rea do desenvolvimento web]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-766" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/01/estrategia-de-conteudo-content-strategy.jpg" alt="Estrat&eacute;gia de Conte&uacute;do ou Content Strategy" width="320" height="319" /></p><p>A maioria j&aacute; compreendeu que <strong>desenvolvimento web</strong> &eacute; o ramo / campo de atua&ccedil;&atilde;o mais din&acirc;mico que existe atualmente. Todos os dias novos conte&uacute;dos, t&eacute;cnicas e abordagens sobre seus diversos segmentos s&atilde;o descobertos, divulgados, testados e aprovados, come&ccedil;ando novamente num ciclo de constante aprimoramento.</p><p>E essa dinamicidade n&atilde;o diz respeito a somente conte&uacute;dos sobre o que j&aacute; existe; tamb&eacute;m &eacute; sobre novas ramifica&ccedil;&otilde;es do conhecimento web que surgem. &Eacute; o caso da <strong>Estrat&eacute;gia de Conte&uacute;do</strong>.</p><div
class="artigo-traduzido">Este artigo &eacute; baseado no <span
lang="en">post <a
href="http://knol.google.com/k/content-strategy">Content Strategy</a></span> do <a
href="http://knol.google.com/"><span
lang="en">Google Knol</span></a>.</div><h2>Vis&atilde;o Geral</h2><p><strong>Estrat&eacute;gia de Conte&uacute;do</strong> ou <strong>Content Strategy</strong> &eacute; uma &aacute;rea de atua&ccedil;&atilde;o emergente dentro do mundo do desenvolvimento web &#8211; considerada por alguns especialistas como uma parte do Design de Experi&ecirc;ncia do Usu&aacute;rio (<em>User Experience Design</em> ou UXD), mas isso n&atilde;o &eacute; un&acirc;nime.</p><p>A Estrat&eacute;gia de Conte&uacute;do tamb&eacute;m descreve os pap&eacute;is, produtos de trabalho, abordagens, conhecimentos, t&eacute;cnicas, metodologias e perspectivas do profissional da &aacute;rea, o <strong>estrategista de conte&uacute;do</strong>.</p><h2>Conte&uacute;do</h2><p>Conte&uacute;do &eacute; subst&acirc;ncia. N&atilde;o importa a plataforma, publica&ccedil;&atilde;o ou formato, o conte&uacute;do se refere a tudo o que transmite um significado:</p><ul><li>&#8220;Conte&uacute;do inclui texto, gr&aacute;ficos, v&iacute;deo e &aacute;udio que comp&otilde;em uma experi&ecirc;ncia interativa.&#8221; &#8211; Kristina Halvorson</li><li>&#8220;Tecnicamente, o conte&uacute;do da Web pode ser qualquer coisa que aparece em um site, incluindo palavras, imagens, v&iacute;deo, sons, arquivos para download (PDF), bot&otilde;es, &iacute;cones e logos.&#8221; &#8211; Richard Sheffield</li><li>&#8220;Informa&ccedil;&atilde;o e experi&ecirc;ncias que pode proporcionar valor para um end-user/audiencia em contextos espec&iacute;ficos.&#8221; &#8211; Wikipedia</li><li>&#8220;Tudo &eacute; conte&uacute;do.&#8221; &#8211; Rachel Lovinger citando Chris Sizemore</li><li>&#8220;Simplesmente, o conte&uacute;do s&atilde;o dados contextualizados.&#8221;</li></ul><h2>Estrat&eacute;gia de Conte&uacute;do</h2><p>Estrat&eacute;gia de Conte&uacute;do &eacute; um campo emergente de pr&aacute;tica que engloba todos os aspectos de conte&uacute;do, incluindo a sua concep&ccedil;&atilde;o, desenvolvimento, an&aacute;lise, apresenta&ccedil;&atilde;o, medi&ccedil;&atilde;o, avalia&ccedil;&atilde;o, produ&ccedil;&atilde;o, gest&atilde;o e governan&ccedil;a.</p><p>Kristina Halvorson, autora de <a
href="http://www.contentstrategy.com/">Content Strategy for the Web</a>, define Estrat&eacute;gia de Conte&uacute;do como &#8220;a pr&aacute;tica de planejamento para cria&ccedil;&atilde;o de conte&uacute;do, entrega e governan&ccedil;a&#8221;.</p><p>Rahel Anne Bailie estendeu a defini&ccedil;&atilde;o de Estrat&eacute;gia de Conte&uacute;do como &#8220;um processo repetitivo ou metodologia que gerencia conte&uacute;do dentro de seu ciclo de vida inteiro&#8221;. Esta defini&ccedil;&atilde;o reconhece que ciclos de vida iterativos conte&uacute;do v&atilde;o al&eacute;m da entrega e, n&atilde;o necessariamente, come&ccedil;am com a cria&ccedil;&atilde;o de conte&uacute;do.</p><p>No livro <a
href="http://www.web-content-strategy.com/">The Web Content Strategists Bible</a>, Richard Sheffield d&aacute; &ecirc;nfase &agrave; import&acirc;ncia do processo editorial da Estrat&eacute;gia de Conte&uacute;do.</p><div
id="attachment_762" class="wp-caption aligncenter" style="width: 310px"><a
href="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/01/estrategia-conteudo-ciclo-vida-conteudo.png" rel="lightbox"><img
class="size-medium wp-image-762  " src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/01/estrategia-conteudo-ciclo-vida-conteudo-300x231.png" alt="Estrat&eacute;gia de Conte&uacute;do: Ciclo de Vida do Conte&uacute;do" width="300" height="231" /></a><p
class="wp-caption-text">Ciclo de Vida do Conte&uacute;do, segundo Erin Scime (clique para aumentar)</p></div><h2>Estrat&eacute;gia de Conte&uacute;do: metodologias</h2><p>Como &eacute; que se aplica este pensamento ou &#8220;se faz&#8221; Estrat&eacute;gia de Conte&uacute;do? <a
href="http://intentionaldesign.ca/">Rahel Bailie</a> partilha a sua metodologia:</p><p>O <strong>Ciclo de Vida do Conte&uacute;do</strong> &eacute; um sistema de repeti&ccedil;&atilde;o que rege a gest&atilde;o de conte&uacute;do. Os processos dentro de um Ciclo de Vida do Conte&uacute;do s&atilde;o &#8220;agn&oacute;sticos&#8221;. Os processos s&atilde;o estabelecidos como parte de uma Estrat&eacute;gia de Conte&uacute;do e implementados durante o Ciclo de Vida do Conte&uacute;do.</p><p>O Ciclo de Vida do Conte&uacute;do abrange quatro fases macro: An&aacute;lise Estrat&eacute;gica, Coleta de Conte&uacute;do, Gest&atilde;o do Conte&uacute;do e Publica&ccedil;&atilde;o (que inclui a publica&ccedil;&atilde;o e a p&oacute;s-publica&ccedil;&atilde;o). O Ciclo est&aacute; em vigor se o conte&uacute;do &eacute; controlado por um CMS ou n&atilde;o, se ele &eacute; traduzido ou n&atilde;o, se ele &eacute; exclu&iacute;do no final de sua vida ou revisado e re-utilizado. O quadrante de an&aacute;lise compreende a Content Strategy; os outros 3 quadrantes s&atilde;o mais de natureza t&aacute;tica, com foco na implementa&ccedil;&atilde;o da <strong>Estrat&eacute;gia de Conte&uacute;do</strong>.</p><div
id="attachment_763" class="wp-caption aligncenter" style="width: 310px"><a
href="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/01/estrategia-conteudo-ciclo-vida-conteudo-rahel-bailie.png" rel="lightbox" target="_blank"><img
class="size-medium wp-image-763  " src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/01/estrategia-conteudo-ciclo-vida-conteudo-rahel-bailie-300x216.png" alt="Estrat&eacute;gia de Conte&uacute;do: Ciclo de Vida do Conte&uacute;do segundo Rahel Bailie" width="300" height="216" /></a><p
class="wp-caption-text">Ciclo de Vida do Conte&uacute;do segundo Rahel Bailie (clique para ampliar)</p></div><h3>An&aacute;lise</h3><p>Na fase de An&aacute;lise, o Ciclo de Vida do Conte&uacute;do diz respeito aos aspectos estrat&eacute;gicos do conte&uacute;do. Um estrategista de conte&uacute;do (ou Analista de Neg&oacute;cios ou Arquiteto da Informa&ccedil;&atilde;o ou Escritor) examina a necessidade de v&aacute;rios tipos de conte&uacute;do dentro do contexto do neg&oacute;cio e dos consumidores de conte&uacute;do para v&aacute;rias sa&iacute;das em m&uacute;ltiplas plataformas.</p><p>A An&aacute;lise tem uma influ&ecirc;ncia sobre a forma como a Estrat&eacute;gia de Conte&uacute;do &eacute; implementada em outros quadrantes do Ciclo de Vida do Conte&uacute;do. Em um novo projeto com novos conte&uacute;dos, este &eacute; o in&iacute;cio do processo. Na maior parte do tempo, o processo vai come&ccedil;ar em algum outro lugar no ciclo; depende muito de uma multiplicidade de fatores envolvidos na mudan&ccedil;a de conte&uacute;do de um estado atual para um estado futuro.</p><h3>Coleta</h3><p>A Coleta pode se dar atrav&eacute;s do desenvolvimento de conte&uacute;do &#8211; cria&ccedil;&atilde;o de conte&uacute;do ou edi&ccedil;&atilde;o de conte&uacute;do de terceiros -, conte&uacute;dos de outras fontes, incorpora&ccedil;&atilde;o de conte&uacute;do ou um h&iacute;brido de integra&ccedil;&atilde;o de conte&uacute;do e converg&ecirc;ncia &#8211; por exemplo, mashups.</p><h3>Gest&atilde;o</h3><p>O quadrante da Gest&atilde;o concerne ao uso eficiente e eficaz do conte&uacute;do. Em organiza&ccedil;&otilde;es que usam a tecnologia para automatizar o gerenciamento de conte&uacute;do, o aspecto da gest&atilde;o assume o uso de um CMS. Em organiza&ccedil;&otilde;es com pequenas quantidades de conte&uacute;do, com pouca necessidade de controle de fluxo de trabalho, um gerenciamento manual &eacute; at&eacute; poss&iacute;vel. No entanto, em grandes empresas, h&aacute; muito conte&uacute;do e h&aacute; muitas varia&ccedil;&otilde;es da produ&ccedil;&atilde;o de conte&uacute;do, portanto um CMS se faz obrigat&oacute;rio.</p><p>O potencial de configura&ccedil;&atilde;o de conte&uacute;do &eacute; enorme e se baseia nas informa&ccedil;&otilde;es recolhidas durante a fases de An&aacute;lise e Coleta. As solu&ccedil;&otilde;es ser&atilde;o muito contextualizadas e giram em torno das entradas e sa&iacute;das, as vari&aacute;veis ​​conte&uacute;do exigido, a complexidade do pipeline de publica&ccedil;&atilde;o e as tecnologias em jogo. As perguntas mais b&aacute;sicas giram em torno da ado&ccedil;&atilde;o de padr&otilde;es e tecnologias e determina&ccedil;&atilde;o de componentes, granularidade de conte&uacute;do e o qu&atilde;o longe o pipeline de publica&ccedil;&atilde;o ir&aacute; implementar t&eacute;cnicas espec&iacute;ficas.</p><h3>Publica&ccedil;&atilde;o</h3><p>O quadrante da Publica&ccedil;&atilde;o trata dos aspectos de conte&uacute;do que acontecem quando o conte&uacute;do &eacute; entregue para a plataforma de output. Publicar o conte&uacute;do &eacute; apenas um ponto na itera&ccedil;&atilde;o do Ciclo de Vida; existem considera&ccedil;&otilde;es na p&oacute;s-publica&ccedil;&atilde;o, tais como reutiliza&ccedil;&atilde;o e pol&iacute;ticas de reten&ccedil;&atilde;o que requerem aten&ccedil;&atilde;o.</p><h2>Estrategistas de Conte&uacute;do</h2><p>Mas as perspectivas estrategistas de conte&uacute;do dependem bastante da forma&ccedil;&atilde;o, educa&ccedil;&atilde;o e influ&ecirc;ncia do profissional.</p><p>Por exemplo, alguns se especializam em <strong>An&aacute;lise de Conte&uacute;do</strong>, que &eacute; mais sobre trabalhar com metadados, taxonomia, SEO e as maneiras em que a boa aplica&ccedil;&atilde;o desses conceitos d&aacute; suporte ao conte&uacute;do.</p><p>Outros preferem rumar para estrat&eacute;gias de <strong>Web Editorial</strong>, diretrizes e ferramentas que pode se estender a gest&atilde;o da mudan&ccedil;a organizacional. Esta forma de Estrat&eacute;gia de Conte&uacute;do pode estar preocupada com o desenvolvimento de novas formas de conte&uacute;dos, tais como multim&iacute;dia ou v&aacute;rias tecnologias de &#8220;gest&atilde;o de presen&ccedil;a&#8221;, como microblogs.</p><p>H&aacute;, tamb&eacute;m, outra corrente que simpatiza mais com os objetivos da <strong>Arquitetura da Informa&ccedil;&atilde;o</strong>. Neste caso, a Estrat&eacute;gia de Conte&uacute;do envolve a escrita do <a
title="CopyWriting: O que &eacute;? Para que serve?" href="http://mktportugal.com/blog/?p=2060">Copy</a> do site para as p&aacute;ginas do site novo e adaptar o conte&uacute;do para as j&aacute; existentes.</p><p>Todos os estrategistas de conte&uacute;do est&atilde;o familiarizados com uma grande variedade de aplica&ccedil;&otilde;es e ferramentas e, muitas vezes, s&atilde;o respons&aacute;veis ​​pela implementa&ccedil;&atilde;o e treinamento de pessoas para melhor us&aacute;-las.</p><div
id="attachment_764" class="wp-caption aligncenter" style="width: 310px"><a
href="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/01/estrategia-de-conteudo-estrategista-conteudo-colaboracao.png" rel="lightbox" target="_blank"><img
class="size-medium wp-image-764  " src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/01/estrategia-de-conteudo-estrategista-conteudo-colaboracao-300x259.png" alt="Estrat&eacute;gia de Conte&uacute;do: Colabora&ccedil;&atilde;o com Estrategista de Conte&uacute;do" width="300" height="259" /></a><p
class="wp-caption-text">Colabora&ccedil;&atilde;o com Estrategista de Conte&uacute;do, por Richard Ingram (clique para ampliar)</p></div><h2>Educa&ccedil;&atilde;o e Forma&ccedil;&atilde;o Profissional</h2><p>Estrategistas de conte&uacute;do surgem de uma variedade de disciplinas acad&ecirc;micas formais e profissionais:</p><ul><li>Biblioteconomia e Ci&ecirc;ncia da Informa&ccedil;&atilde;o</li><li>Ci&ecirc;ncia da Computa&ccedil;&atilde;o</li><li>Artes C&ecirc;nicas</li><li>Publicidade e Marketing</li><li>Ret&oacute;rica e Composi&ccedil;&atilde;o</li><li>Reda&ccedil;&atilde;o T&eacute;cnica e Comunica&ccedil;&atilde;o</li><li>Jornalismo</li><li>Comunica&ccedil;&otilde;es</li><li>Consultoria de Gest&atilde;o</li></ul><h2>Empregadores proeminentes de estrategistas de conte&uacute;do</h2><p>Apesar de ser uma profiss&atilde;o relativamente nova, mega-empresas de renome internacional j&aacute; contrataram ou est&atilde;o contratando estrategistas de conte&uacute;do. Alguns exemplos:</p><p><img
class="aligncenter size-full wp-image-765" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/01/estrategia-de-conteudo-empregadores-empresas.jpg" alt="Estrat&eacute;gia de Conte&uacute;do: empresas que contratam" width="507" height="451" /></p><h2>Estrat&eacute;gia de Conte&uacute;do: Produtos de Trabalho (ou Entregas)</h2><p><strong>Os Produtos de Trabalho (ou Entregas)</strong> t&iacute;picos de Estrat&eacute;gia de Conte&uacute;do s&atilde;o diversos e dependem das necessidades da empresa e do <em>know-how</em> do estrategista de conte&uacute;do. <a
href="http://www.pybop.com/">Shelly Bowen</a> diz:</p><blockquote><p>Alguns estrategistas de conte&uacute;do tamb&eacute;m s&atilde;o (no fundo) escritores, editores, designers ou arquitetos de informa&ccedil;&atilde;o. Esse background influencia n&atilde;o apenas a estrat&eacute;gia, mas, tamb&eacute;m, as Entregas.</p></blockquote><p>A mesma Shelly Bowen tamb&eacute;m indica esta lista Estregas como guia:</p><p><strong>O que se quer alcan&ccedil;ar?</strong></p><ul><li>Resumo dos objetivos da empresa</li></ul><p><strong>O que se tem?</strong></p><ul><li>Invent&aacute;rio de Conte&uacute;do ou Auditoria</li><li>Avalia&ccedil;&atilde;o de Conte&uacute;do (qualidade e quantidade)</li></ul><p><strong>O que est&aacute; faltando?</strong></p><ul><li>An&aacute;lise de lacunas de conte&uacute;do</li><li>An&aacute;lise comparativa de conte&uacute;do</li><li>An&aacute;lise competitiva</li></ul><p><strong>Como apresentar as palavras?</strong></p><ul><li>Personas</li><li>Cen&aacute;rios (pense em hist&oacute;rias veross&iacute;meis)</li><li>Estrat&eacute;gia Editorial</li><li>Estrat&eacute;gia de mensagens</li><li>Conte&uacute;do de amostra</li><li>Modelos de conte&uacute;do</li><li>Estrat&eacute;gia de SEO</li><li>Estrat&eacute;gia de marca</li><li>Estrat&eacute;gia de metadados</li><li>Guia de estilo</li><li>Gloss&aacute;rio</li></ul><p><strong>Aonde se quer chegar?</strong></p><ul><li>Estrat&eacute;gia de canais</li><li>Estrat&eacute;gia de convers&atilde;o/migra&ccedil;&atilde;o de conte&uacute;do</li><li>Esquema do Fluxo de Conte&uacute;do</li><li>Comunidade e Estrat&eacute;gia Social</li><li>Recomenda&ccedil;&otilde;es de visual</li><li>Wireframes</li></ul><p><strong>Como fazer acontecer?</strong></p><ul><li>Workflow da aprova&ccedil;&atilde;o de conte&uacute;do</li><li>Planos de comunica&ccedil;&atilde;o</li><li>Pol&iacute;ticas de modera&ccedil;&atilde;o comunit&aacute;rias</li><li>Oficinas e workshops de produ&ccedil;&atilde;o de conte&uacute;do</li><li>Revis&atilde;o de fornecedores de conte&uacute;do e planos (pessoas, ferramentas, or&ccedil;amento, tempo)</li></ul><p><strong>Como se manter organizado?</strong></p><ul><li>Requisitos de CMS</li><li>Regras de Neg&oacute;cio</li><li>Taxonomias</li><li>Responsabilidades</li><li>Hor&aacute;rios</li></ul><p><strong>Como saber se se est&aacute; correto?</strong></p><ul><li>Requisitos de CMS</li><li>Testes de usabilidade</li><li>Benchmarks</li><li>Resumo dos objetivos da empresa</li><li>M&eacute;tricas de sucesso</li></ul><p><strong>O que vem a seguir?</strong></p><ul><li>Calend&aacute;rio Editorial</li></ul><p>Aqui est&aacute; algumas <a
href="http://www.leenjones.com/2008/08/what-is-content-strategy-part-ii-examples/">ideias e exemplos concretos de aplica&ccedil;&atilde;o de Estrat&eacute;gia de Conte&uacute;do</a>, mostrados por <a
href="http://www.leenjones.com/blog/">Colleen Jones</a>.</p><h2>Modelos e Guias para download</h2><p>A seguir, alguns recursos de Estrat&eacute;gia de Conte&uacute;do, fornecidos por <a
href="http://www.kevinpnichols.com/">Kevin P. Nichols</a>.</p><ul><li><a
href="http://www.kevinpnichols.com/downloads/kpn_content_audit.xls">Invent&aacute;rio/Auditoria de Conte&uacute;do</a> (.xls)</li><li><a
href="http://www.kevinpnichols.com/downloads/kpn_content_market_matrix.xls">Matriz de Mercado de Conte&uacute;do</a>(.xls)</li><li><a
href="http://www.kevinpnichols.com/downloads/kpn_content_matrix.xls">Matriz de Conte&uacute;do</a>(.xls)</li><li><a
href="http://www.kevinpnichols.com/downloads/kpn_current_state_stakeholder_protocol.pdf">Guia de Protocolo de Estado Atual de Stakeholder</a>(.pdf)</li></ul><h2>Leitura Complementar</h2><p>Blogs sobre Estrat&eacute;gia de Conte&uacute;do</p><ul><li><a
href="http://blog.braintraffic.com/">Brain Traffic</a></li><li><a
href="http://content-science.com/expertise/content-insights/p/1">Content Insights</a></li><li><a
href="http://eatmedia.net/blog/">Eat Media</a></li><li><a
href="http://predicate-llc.com/category/link-blog/">Notes on Content</a></li><li><a
href="http://shellybowen.com/pybop">Pybop</a></li><li><a
href="http://scattergather.razorfish.com/">Scatter Gather</a></li></ul><p>Livros sobre Estrat&eacute;gia de Conte&uacute;do</p><ul><li><a
href="http://content-science.com/clout">Clout: The Art + Science of Influential Web Content</a></li><li><a
href="http://www.contentstrategy.com/">Content Strategy for the Web</a></li><li><a
href="http://www.abookapart.com/products/the-elements-of-content-strategy">The Elements of Content Strategy</a></li><li><a
href="http://www.web-content-strategy.com/">The Web Content Strategist&#8217;s Bible</a></li></ul><p>Artigos e publica&ccedil;&otilde;es importantes</p><ul><li>Margot Bloomstein; &#8220;<a
href="http://www.alistapart.com/articles/the-case-for-content-strategy-motown-style/">The Case for Content Strategy &#8211; Motown Style</a>&#8220;, A List Apart, 18 ago 2009.</li><li>Kristina Halvorson; &#8220;<a
href="http://alistapart.com/articles/thedisciplineofcontentstrategy">The Discipline of Content Strategy</a>&#8220;, A List Apart, 16 dez 2008.</li><li>Colleen Jones; &#8220;<a
href="http://www.smashingmagazine.com/2011/04/12/make-your-content-make-a-difference/">Make Your Content Make a Difference</a>&#8220;, Smashing Magazine, 12 abr 2011.</li><li>Colleen Jones; &#8220;<a
href="http://www.uxmatters.com/mt/archives/2009/04/toward-content-quality.php">Toward Content Quality</a>&#8220;, UXmatters, 13 abril 2009.</li><li>Matt Kinsman; &#8220;<a
href="http://www.foliomag.com/2008/editor-content-strategist">From Editor to &#8216;Content Strategist:&#8217; Semantics or Fundamental Change?</a>&#8220;, Folio, 1 jul 2008.</li><li>Fred Leise; &#8220;<a
href="http://boxesandarrows.com/view/content-analysis">Content Analysis Heuristics</a>&#8220;, Boxes and Arrows, 26 February 2007. 12 mar 2007.</li><li>Rachel Lovinger; &#8220;<a
href="http://www.boxesandarrows.com/view/content-strategy-the">Content Strategy: The Philosophy of Data</a>&#8220;, Boxes and Arrows, 26 fev 2007.</li><li>Jeffrey MacIntyre; &#8220;<a
href="http://alistapart.com/articles/contenttiousstrategy">Content-tious Strategy</a>&#8220;, A List Apart, 16 dez 2008.</li><li>Jeffrey MacIntyre; &#8220;<a
href="http://paidcontent.org/article/419-the-next-big-headache-for-digital-publishers/">The Next Big Headache for Digital Publishers</a>&#8220;, PaidContent, 6 ago 2009.</li><li>Karen McGrane; &#8220;<a
href="http://www.slideshare.net/KMcGrane/content-strategy-content-is-king">Content Strategy: Content Is King!</a>&#8220;, From Business to Buttons, 11 jun 2009.</li><li>Peter Merholz; &#8220;<a
href="http://www.adaptivepath.com/blog/2008/05/22/the-marginalization-of-content/">The Marginalization of Content</a>&#8220;, adaptivepath.com, 22 maio 2008.</li><li>Kaitlin Pike, &#8220;<a
href="http://blog.web2expo.com/2010/07/why-you-need-to-hire-a-content-strategist/">Why You Need to Hire a Content Strategist</a>&#8220;, Web 2.0 interview with Margot Bloomstein, 7 jul 2010.</li><li>Theresa Putkey; &#8220;<a
href="http://www.boxesandarrows.com/idea/view/8053">Exploring the Content Strategist Title</a>&#8220;, Boxes and Arrows, 22 maio 2007.</li><li>Erin Scime; &#8220;<a
href="http://www.alistapart.com/comments/content-strategist-as-digital-curator/">The Content Strategist as Digital Curator</a>&#8220;, A List Apart, 8 dez 2009.</li></ul><h2>Conclus&atilde;o</h2><p>No Brasil, pouco se tem falado a respeito, mas, como p&ocirc;de ser visto no artigo, <strong>Content Strategy</strong>, apesar de ser uma &aacute;rea de atua&ccedil;&atilde;o relativamente nova, j&aacute; conta com uma excelente bagagem advinda de outras &aacute;reas de conhecimento e muito, muito conte&uacute;do para ser estudado e aprendido.</p><p>A entrada de cada vez mais empresas no ambiente digital, aliada &agrave; necessidade das que j&aacute; est&atilde;o em aprimorar sua presen&ccedil;a e atua&ccedil;&atilde;o, certamente o estrategista de conte&uacute;do come&ccedil;ar&aacute; a ser um profissional bastante requisitado e, n&atilde;o duvide, ser&aacute; um elemento-chave para o meio online futuro.</p><p>Assim como hoje n&atilde;o &eacute; sequer imagin&aacute;vel um projeto web sem algu&eacute;m com conhecimentos de Usabilidade, Design e Programa&ccedil;&atilde;o, brevemente o mesmo acontecer&aacute; para a <strong>Estrat&eacute;gia de Conte&uacute;do</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/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/javascript/json-javascript-object-notation/" title="JSON &#8211; JavaScript Object Notation">JSON &#8211; JavaScript Object Notation</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/css/urls-longas-apresentadas-corretamente-com-css/" title="URLs longas apresentadas corretamente com CSS">URLs longas apresentadas corretamente com CSS</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/novas-tecnologias-exigem-novas-maneiras-de-se-comunicar/" title="Novas tecnologias exigem novas maneiras de se comunicar">Novas tecnologias exigem novas maneiras de se comunicar</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/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/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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/0pBWhwGMC-aIZwI53wxugvPTm8w/0/da"><img src="http://feedads.g.doubleclick.net/~a/0pBWhwGMC-aIZwI53wxugvPTm8w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/0pBWhwGMC-aIZwI53wxugvPTm8w/1/da"><img src="http://feedads.g.doubleclick.net/~a/0pBWhwGMC-aIZwI53wxugvPTm8w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=CmO8sWh4Q2M:2Me0Q4Zf5rk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=CmO8sWh4Q2M:2Me0Q4Zf5rk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=CmO8sWh4Q2M:2Me0Q4Zf5rk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=CmO8sWh4Q2M:2Me0Q4Zf5rk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=CmO8sWh4Q2M:2Me0Q4Zf5rk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=CmO8sWh4Q2M:2Me0Q4Zf5rk:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/CmO8sWh4Q2M" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/miscelanea/estrategia-de-conteudo-content-strategy/feed/</wfw:commentRss> <slash:comments>4</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/miscelanea/estrategia-de-conteudo-content-strategy/</feedburner:origLink></item> <item><title>10 dicas que desenvolvedores web iniciantes devem saber</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/Ygd9wRKYNA0/</link> <comments>http://desenvolvimentoparaweb.com/miscelanea/10-dicas-desenvolvedores-web-iniciantes-devem-saber/#comments</comments> <pubDate>Mon, 02 Jan 2012 12:00:33 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Miscelânea]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Carreira]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=753</guid> <description><![CDATA[Veja estas 10 dicas para desenvolvedores novatos e comece sua carreira com o p&eacute; direito]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-758" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2012/01/10-dicas-desenvolvedores-web-iniciantes-devem-saber.gif" alt="10 dicas que desenvolvedores web iniciantes devem saber" width="247" height="273" /></p><p>Se voc&ecirc; &eacute; um desenvolvedor iniciante, pode ser confuso sobre onde voc&ecirc; deve come&ccedil;ar no mundo do <strong>desenvolvimento web</strong>, j&aacute; que o ramo &eacute; amplo e oferece muitas op&ccedil;&otilde;es de escolha. H&aacute; muitas perguntas a serem feitas, tais como &#8220;Que linguagem de programa&ccedil;&atilde;o quero aprender?&#8221; ou &#8220;Eu deveria saber sobre front-end ou apenas back-end?&#8221;, e existem, literalmente, centenas de outras.</p><p>Mas, para que voc&ecirc; n&atilde;o fique t&atilde;o perdido, esta lista de <strong>10 dicas que desenvolvedores web iniciantes devem saber</strong> realmente pode ajud&aacute;-lo a iniciar sua carreira como desenvolvedor ou, caso j&aacute; tenha come&ccedil;ado, pode servir de norte para voc&ecirc; perceber se realmente escolheu a &aacute;rea certa ou se vai mudar.</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original <a
href="http://www.1stwebdesigner.com/design/things-beginner-developers-should-know/"><span
lang="en">10 Things Beginner Developers Should Know</span></a>, do blog <a
href="http://www.1stwebdesigner.com/"><span
lang="en">1stwebdesigner</span></a> – e sofreu pequenas adapta&ccedil;&otilde;es.</div><h2>Decida quais habilidades voc&ecirc; quer</h2><p>Ao iniciar na carreira de <strong>desenvolvedor web</strong>, voc&ecirc; realmente precisa se concentrar em alguma coisa e aceitar o fato de que n&atilde;o &eacute; poss&iacute;vel ser um &#8220;generalista&#8221;. Acredite: mesmo dando muita vontade de atuar em v&aacute;rios e v&aacute;rios campos do desenvolvimento web, isso &eacute; imposs&iacute;vel! Al&eacute;m do mais, geralmente o mercado valoriza mais um <em>expert</em> numa &aacute;rea do que um &#8220;faz tudo web&#8221;.</p><p><img
class="size-full wp-image-754 alignright" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/10-coisas-desenvolvedores-web-iniciantes-devem-saber-php.jpg" alt="10 coisas que desenvolvedores web iniciantes devem saber: exemplo PHP" width="250" height="150" /></p><p>N&atilde;o h&aacute; nada de errado em querer em ser excelente em v&aacute;rios campos, mas voc&ecirc; realmente n&atilde;o poder&aacute; fazer isso no come&ccedil;o. O que voc&ecirc; pode fazer &eacute; centrar seus esfor&ccedil;os no aprendizado em uma habilidade e se tornar um perito nesse campo. Pode ser PHP, Ruby, ASP.net ou C #, mas tem que ser bom no que faz&#8230; Muito bom! Depois de dominar um deles, voc&ecirc; pode seguir em frente, mas n&atilde;o fa&ccedil;a isso at&eacute; que voc&ecirc; tenha grande conhecimento nesse campo.</p><p>Esta dica tamb&eacute;m &eacute; bom para front-end designers, que sempre come&ccedil;am com HTML e CSS, depois passam para JavaScript, jQuery, AJAX, ou quaisquer outros que estiverem interessados ​. Claro, <strong>&eacute; poss&iacute;vel aprender HTML e CSS ao mesmo tempo</strong>, mas isso &eacute; porque eles meio que trabalham em conjunto. Voc&ecirc; n&atilde;o pode realmente dominar PHP e ASP.net ao mesmo tempo &#8211; a menos que voc&ecirc; gaste 20 horas de estudos por dia, o que, definitivamente, n&atilde;o &eacute; recomendado -, portanto, voc&ecirc; tem que adquirir suas habilidades uma a uma.</p><p>Mas, j&aacute; que voc&ecirc; &eacute; um novato e, provavelmente, n&atilde;o deve saber muito sobre linguagens de programa&ccedil;&atilde;o <em>hardcore</em>, escolher uma &aacute;rea para come&ccedil;ar pode ser complicado, mas h&aacute; uma solu&ccedil;&atilde;o: pense no que voc&ecirc; quiser desenvolver: se for temas para WordPress, ent&atilde;o seu caminho &eacute; o PHP; se for sistemas de gest&atilde;o personalizados, tente ASP.net; jogos de iPhone, aprender C# e assim por diante.</p><p>Basta pesquisar um pouco sobre o que cada linguagem pode fazer e come&ccedil;ar a aprender. E, neste caminho, voc&ecirc; certamente vai aprender que &eacute; poss&iacute;vel fazer as mesmas coisas usando diferentes linguagens&#8230;</p><h2>Aprenda direito</h2><p>Outra dica para novatos &eacute;, independentemente da linguagem que voc&ecirc; escolher, <strong>aprenda direito</strong>! Se voc&ecirc; aprender HTML codificando layouts com tabelas, isso n&atilde;o &eacute; nada certo &#8211; e eu tenho certeza que outros especialistas concordam comigo. Codificar usando os mais recentes padr&otilde;es da web parece in&uacute;til para alguns, mas &eacute; realmente importante e &eacute; altamente recomendado a aprender assim, j&aacute; que isso n&atilde;o vai s&oacute; melhorar a velocidade de carregamento de seus projetos, mas tamb&eacute;m ser&aacute; mais f&aacute;cil e far&aacute; mais sentido.</p><h2>Google &eacute; o seu melhor amigo</h2><p><img
class="alignleft size-full wp-image-755" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/10-coisas-desenvolvedores-web-iniciantes-devem-saber-google.jpg" alt="10 coisas que desenvolvedores web iniciantes devem saber: Google &eacute; seu amigo" width="250" height="154" />Realmente n&atilde;o importa que tipo de problema que voc&ecirc; tem, estou certo de Google pode resolv&ecirc;-lo (na maioria dos casos, pelo menos).</p><p>F&oacute;runs de programa&ccedil;&atilde;o s&atilde;o altamente recomendados, tamb&eacute;m, mas, antes de postar uma pergunta em algum f&oacute;rum, tente buscar uma solu&ccedil;&atilde;o no Google porque, na maioria das vezes, voc&ecirc; vai encontrar uma resposta para sua pergunta &#8211; ou, pelo menos, uma resposta que ir&aacute; gui&aacute;-lo para resolver a quest&atilde;o.</p><h2>Analise o c&oacute;digo alheio</h2><p>Isso vale principalmente para designers, mas, &agrave;s vezes, desenvolvedores t&ecirc;m conhecimentos de design de front-end e fazem seus pr&oacute;prios <em>layouts</em> antes de come&ccedil;ar a codific&aacute;-los. &Eacute; importante olhar outros sites para entender como eles s&atilde;o codificados. Se voc&ecirc; gosta de algum estilo ou elemento de um site, <strong>olhe para o c&oacute;digo fonte e o analise</strong>! O <a
href="http://getfirebug.com/">Firebug</a> funciona maravilhosamente bem nestes casos. Esta &eacute; a maneira pela qual a maioria das pessoas aprende a codificar.</p><p>O que n&atilde;o &eacute; aconselhado &eacute; roubar o design do alheio. Isso &eacute; imperdo&aacute;vel e digno de um &#8220;Que deselegante!&#8221;, al&eacute;m de mostrar uma falta de respeito e tremenda falta de profissionalismo, mas, geralmente, a comunidade de desenvolvedores n&atilde;o v&ecirc; maiores problema em &#8220;pegar emprestado&#8221; alguns trechos de c&oacute;digo (caso isso n&atilde;o infrinja alguma lei ou patente, claro).</p><p>Portanto, fica a &#8220;regrinha&#8221;: voc&ecirc; pode at&eacute; copiar algum c&oacute;digo aqui e ali &#8211; este &eacute; o caminho para aprender a fazer as coisas &#8211; mas nunca roube um design!</p><h2>Entre numa rede de conhecimentos</h2><p>Outra coisa importante &eacute; participar de uma rede dentro de seu campo de conhecimento. Nunca &eacute; demais conhecer outros desenvolvedores e designers. Um cen&aacute;rio n&atilde;o muito interessante &eacute; voc&ecirc; ter que voltar tr&aacute;s e buscar coisas no Google; um cen&aacute;rio melhor &eacute; voc&ecirc; ter discuss&otilde;es interessantes e poder obter ajuda atrav&eacute;s de discuss&otilde;es com pessoas da mesma &aacute;rea. Voc&ecirc; pode at&eacute; colaborar com seu colegas desenvolvedores em projetos maiores, o que, quase sempre, &eacute; bom para todos os envolvidos.</p><p>Voc&ecirc; est&aacute; perto de conseguir um projeto mas n&atilde;o tem certeza se voc&ecirc; pode lidar com o tipo de trabalho solicitado? Recomende um de seus colegas desenvolvedores! Ele(s) provavelmente ir&aacute;(&atilde;o) executar o trabalho melhor do que voc&ecirc; &#8211; se for(em) especialista(s) nessa &aacute;rea espec&iacute;fica &#8211; e voc&ecirc; pode fechar algum tipo de parceria em algum momento futuro. Fa&ccedil;a parte de uma rede e a mantenha ativa e sempre por perto. H&aacute; sempre a demanda por um desenvolvedor que esteja &#8220;ao redor&#8221;.</p><p>A pr&oacute;pria ideia de tradu&ccedil;&atilde;o deste artigo surgiu no <a
href="http://groups.google.com/group/html5-css3-brasil">grupo de discuss&atilde;o html5-css3-brasil</a> e viu como isso foi uma boa coisa?  ;-)</p><h2>Entenda os designers</h2><p>&Eacute; altamente aconselh&aacute;vel que voc&ecirc; compreenda os designers, caso n&atilde;o tem ideia de como eles trabalham. E isso vale tanto para designers gr&aacute;ficos quanto para front-end designers.</p><p>&Eacute; sempre bom para aprender como eles trabalham e porque eles podem entregar p&aacute;ginas est&aacute;ticas que realmente n&atilde;o correspondem aos mais recentes padr&otilde;es da web. Aprenda a conversar com eles e explicar o que est&aacute; errado e saber pedir para corrigir seus pr&oacute;prios erros. Dessa forma, sua rela&ccedil;&atilde;o de trabalho ser&aacute; mais pr&oacute;xima e o resultado bem melhor.</p><h2>Use ferramentas profissionais</h2><p><img
class="alignleft size-full wp-image-751" style="margin-right: 20px;" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/planejar-site-inicio-fim.jpg" alt="10 coisas que desenvolvedores web iniciantes devem saber: usar ferramentas profissionais" width="150" height="150" /></p><p>Apesar de HTML e CSS poderem ser feitos at&eacute; com o Bloco de Notas, isso n&atilde;o &eacute; recomendado. E, se isso n&atilde;o &eacute; aconselhado para HTML e CSS, &eacute; igualmente desaconselhado para PHP, ASP.net ou Ruby. Trabalhe com ferramenta profissionais como <a
href="http://www.eclipse.org/">Eclipse</a>, <a
href="http://aptana.com/">Aptana</a>, <a
href="http://netbeans.org/">NetBeans</a> ou outra qualquer, mas use o que os profissionais usam, caso contr&aacute;rio voc&ecirc; n&atilde;o ser&aacute; um deles!</p><p>Esse tipo de ferramenta verifica erros, tem autocomplete e d&aacute; sugest&otilde;es durante a codifica&ccedil;&atilde;o. H&aacute; uma raz&atilde;o pela qual Eclipse e NetBeans s&atilde;o 2 dos IDEs (<em>Integrated Development Environment</em> ou Ambiente de Desenvolvimento Integrado) mais usados no mundo: eles fazem o trabalho em grande estilo!</p><p>Ent&atilde;o comece a trabalhar agora, mesmo, com alguma ferramenta profissional, caso ainda n&atilde;o o tenha feito!</p><h2>Deixe as coisas legais por &uacute;ltimo</h2><p>Cada linguagem tem a sua pr&oacute;pria &#8220;vers&atilde;o cool&#8221;. Por exemplo, HTML tem HTML5, CSS tem CSS3, JavaScript e AJAX tem jQuery e assim por diante. &Eacute; muito melhor se voc&ecirc; aprender a linguagem b&aacute;sica e <strong>depois</strong> estudar mais at&eacute; chegar no est&aacute;gio <em>cool</em>. E, tamb&eacute;m, as coisas &#8220;cool&#8221; trabalham a partir dos elementos b&aacute;sicos, ent&atilde;o voc&ecirc; n&atilde;o ser&aacute; capaz de desenvolver e entender um controle deslizante com jQuery se voc&ecirc; n&atilde;o compreender o JavaScript b&aacute;sico.</p><h2>Mantenha-se informado e atualizado</h2><p><img
class="alignright size-full wp-image-756" style="margin-left: 20px;" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/10-coisas-desenvolvedores-web-iniciantes-devem-saber-matenha-se-atualizado.jpg" alt="10 coisas que desenvolvedores web iniciantes devem saber: mantenha-se atualizado" width="200" /></p><p><strong>&Eacute; sempre bom se manter informado e atualizado</strong> sobre o que est&aacute; acontecendo no mundo do desenvolvimento web, em especial da(s) &aacute;rea(s) que voc&ecirc; atua. Voc&ecirc; pode fazer isso atrav&eacute;s da leitura de feeds, livros &#8220;de verdade&#8221;, blogs e screencasts. Fique atualizado e certifique-se de que voc&ecirc; &eacute; um dos primeiros a oferecer produtos desenvolvidos com a tecnologia mais recente.</p><p>No come&ccedil;o, pode n&atilde;o funcionar muito (as pessoas podem querer manter o &#8220;velho&#8221; at&eacute; que as novas tecnologias mostrem seu valor), mas, certamente, tamb&eacute;m h&aacute; aquelas pessoas que querem ter um produto totalmente novo, desenvolvido com as mais recentes tecnologias &#8211; e isto lhe dar&aacute; uma vantagem e far&aacute; voc&ecirc; conhecido no ramo.</p><h2>Continue com o processo de aprendizagem</h2><p>Depois de se tornar um especialista no campo que escolheu, trilhe seu caminho rumo ao aprendizado de outras linguagens e/ou &aacute;reas de atua&ccedil;&atilde;o. Fique de olho aberto nas linguagens mais importantes e aprenda aquelas que julgar serem as mais interessantes. Quando voc&ecirc; domina duas, v&aacute; para a terceira e assim por diante.</p><p>E continue at&eacute;  que n&atilde;o haja muito mais para aprender &#8211; embora, como j&aacute; foi dito, isso seja imposs&iacute;vel. Este &eacute; o caminho para o sucesso!</p><h2>Conclus&atilde;o</h2><p>&Eacute; bastante comum que desenvolvedores iniciantes passem por tempos dif&iacute;ceis neste campo profundo do <strong>desenvolvimento web</strong>, mas estas dicas servem justamente para ajudar que cada um encontre seu caminho.</p><p>Nem sequer importa muito por onde come&ccedil;ar, tudo o que importa &eacute; voc&ecirc; comece! Isso geralmente &eacute; o que leva mais tempo, ent&atilde;o n&atilde;o desperdice estes dias preciosos e comece <strong>agora</strong> a estudar e a desenvolver a web!  ;-)</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/sobre-parcerias-de-trabalhos-de-desenvolvimento-web/" title="Sobre parcerias de trabalhos em desenvolvimento web">Sobre parcerias de trabalhos em desenvolvimento web</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/quando-o-cliente-pensa-que-sabe-mais/" title="Quando o cliente (pensa que) sabe mais">Quando o cliente (pensa que) sabe mais</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/web-sites-genericos-e-a-ilusao-dos-precos-baixos/" title="Web sites genéricos e a ilusão dos preços baixos">Web sites genéricos e a ilusão dos preços baixos</a></li><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/como-montar-um-portfolio-sem-ter-clientes/" title="Como montar um portfolio sem ter clientes">Como montar um portfolio sem ter clientes</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/miscelanea/desenvolvedores-frontend-mercado/" title="Desenvolvedores front end e o mercado">Desenvolvedores front end e o mercado</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/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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/z3C7ad4qdytNH2tZg0n5LbV_qJI/0/da"><img src="http://feedads.g.doubleclick.net/~a/z3C7ad4qdytNH2tZg0n5LbV_qJI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/z3C7ad4qdytNH2tZg0n5LbV_qJI/1/da"><img src="http://feedads.g.doubleclick.net/~a/z3C7ad4qdytNH2tZg0n5LbV_qJI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=Ygd9wRKYNA0:6pPnz-L9fC0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=Ygd9wRKYNA0:6pPnz-L9fC0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=Ygd9wRKYNA0:6pPnz-L9fC0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=Ygd9wRKYNA0:6pPnz-L9fC0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=Ygd9wRKYNA0:6pPnz-L9fC0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=Ygd9wRKYNA0:6pPnz-L9fC0:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/Ygd9wRKYNA0" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/miscelanea/10-dicas-desenvolvedores-web-iniciantes-devem-saber/feed/</wfw:commentRss> <slash:comments>16</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/miscelanea/10-dicas-desenvolvedores-web-iniciantes-devem-saber/</feedburner:origLink></item> <item><title>Como otimizar códigos jQuery e aumentar a performance do front-end</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/PkgWol24zsA/</link> <comments>http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/#comments</comments> <pubDate>Mon, 26 Dec 2011 12:00:17 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[jQuery]]></category> <category><![CDATA[Otimização]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[UX]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=745</guid> <description><![CDATA[Dicas simples de como otimizar c&oacute;digos jQuery e aumentar a performance do front-end]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/otimizar-codigos-jquery-aumentar-performance-front-end.jpg" alt="Como otimizar c&oacute;digos jQuery e aumentar a performance do front-end: representa&ccedil;&atilde;o" title="" width="347" height="346" class="aligncenter size-full wp-image-747" /></p><p><strong>Otimizar c&oacute;digos jQuery</strong> em um site significa <strong>aumentar sua performance</strong>. E, como qualquer desenvolvedor web deveria saber, os componentes e recursos do front-end s&atilde;o respons&aacute;veis por, pelo menos, 80% da performance de p&aacute;ginas web!</p><p>O jQuery, em rela&ccedil;&atilde;o a JavaScript &#8220;puro&#8221;, j&aacute; &eacute; bem simples de se aprender e possui uma gama de recursos incr&iacute;vel! Entretanto, principalmente quem est&aacute; come&ccedil;ando e/ou ainda n&atilde;o entendeu bem a din&acirc;mica da biblioteca, desconhece alguma dicas simples que, se aplicadas, garantem que o desempenho seja aumentado escrevendo menos c&oacute;digo! &Eacute; isso que vamos ver neste artigo e aprender como melhorar c&oacute;digos jQuery para conseguir um desempenho melhor.</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original <a
href="http://24ways.org/2011/your-jquery-now-with-less-suck"><span
lang="en">Your jQuery: Now With 67% Less Suck</span></a>, do blog <a
href="http://24ways.org/"><span
lang="en">24 ways</span></a> &#8211; e sofreu pequenas adapta&ccedil;&otilde;es.</div><h2>Otimiza&ccedil;&atilde;o de seletores</h2><p>Para come&ccedil;ar, vejamos como &eacute; poss&iacute;vel otimizar os seletores no jQuery, otimizando as consultas realizadas e aumentando a performance do c&oacute;digo.</p><h3>Velocidade de seletores</h3><p>Muito do poder do jQuery vem de sua capacidade de selecionar elementos DOM e agir/interagir com eles atrav&eacute;s de seus <a
href="http://api.jquery.com/category/selectors/" title="jQuery Selectors">selectors</a> e, atrav&eacute;s deles, o jQuery prov&ecirc; uma tonelada de maneiras de escolher qual(is) elemento(s) em uma p&aacute;gina se quer trabalhar. No entanto, um n&uacute;mero surpreendente de desenvolvedores web n&atilde;o sabe que os seletores n&atilde;o s&atilde;o todos iguais e que &eacute; incr&iacute;vel a diferen&ccedil;a de desempenho entre 2 seletores que, &agrave; primeira vista, parecem quase id&ecirc;nticos.</p><p>Como exemplo, vejamos 2 maneiras de selecionar todas as tags de par&aacute;grafo dentro de uma div com id espec&iacute;fico:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#id p'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#id'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>&Eacute; surpreendente o fato de que a segunda maneira pode ser <strong>2 vezes mais r&aacute;pida</strong>!</p><p>H&aacute; muitas maneiras diferentes de selecionar elementos usando jQuery; estas podem ser (virtualmente) divididas em 5 diferentes m&eacute;todos. Em ordem, do mais r&aacute;pido para o mais lento, s&atilde;o:</p><ul><li><code>$('#id')</code>. Sem d&uacute;vidas, este &eacute; o selector mais r&aacute;pido, j&aacute; que mapeia diretamente o <code>document.getElementbyId()</code> nativo do JavaScript. Sempre que poss&iacute;vel, os seletores descendentes devem ser feitos com um seletor de ID conjuntamente ao m&eacute;todo <a
href="http://api.jquery.com/find/" title="jQuery .find()">.find()</a>, que limita o escopo do que est&aacute; sendo pesquisado (tal como no exemplo <code>$('#id').find('p')</code> anterior).</li><li><code>$('p'), $('input'), $('form'), [...]</code>. Selecionar elementos pelo nome da tag tamb&eacute;m &eacute; r&aacute;pido, j&aacute; que mapeia diretamente para o m&eacute;todo nativo <code>document.getElementsByTagname()</code>.</li><li><code>$(".class")</code>. Selecionar por nome de classes &eacute; um pouco mais custoso. Enquanto isso &eacute; executado muito bem por navegadores modernos, pode ser que uma lentid&atilde;o seja causada em vers&otilde;es do IE baixo da 9. Por qu&ecirc;? Porque o IE9 foi a primeira vers&atilde;o do Internet Explorer a dar suporte para a fun&ccedil;&atilde;o <code>document.getElementsByClassName()</code>, nativa do JavaScript. Para interpretar isso, browsers mais antigos t&ecirc;m de recorrer ao usos de artif&iacute;cios bem mais custosos, que realmente afetam o desempenho do seletor.</li><li><code>$('[attribute="value"]')</code>. N&atilde;o h&aacute; nenhum m&eacute;todo JavaScript nativo para este tipo seletor, ent&atilde;o, a &uacute;nica maneira que pode realizar essa busca, &eacute; procurar por todo o DOM em busca de combina&ccedil;&otilde;es que satisfa&ccedil;am &agrave; condi&ccedil;&atilde;o do seletor. Navegadores modernos que suportam o m&eacute;todo <code>querySelectorAll()</code> ter&atilde;o um desempenho melhor em certos casos, mas, em geral, este tipo de seletor &eacute; bastante lento.</li><li><code>$(':hidden')</code>. Assim como o caso anterior, n&atilde;o existe um m&eacute;todo JavaScript nativo para usar este tipo de seletor. Pseudo-seletores podem ser extremamente lentos, j&aacute; que a consulta tem que ser executada em cada elemento da p&aacute;gina. Novamente, navegadores modernos que suportam o m&eacute;todo <code>querySelectorAll()</code> se saem ligeiramente melhores, mas tente evitar este tipo de sele&ccedil;&atilde;o. Se realmente for necess&aacute;rio, &eacute; poss&iacute;vel amenizar um pouco usando o <code>.find()</code>, como visto anteriormente. Por exemplo: <code>$('#list').find(':hidden')</code>.</li></ul><h3>Encadeamento</h3><p>Quase todos os m&eacute;todos jQuery retornam um <strong>objeto jQuery</strong>. Isto significa que, quando um m&eacute;todo &eacute; executado, seus resultados s&atilde;o retornados e &eacute; poss&iacute;vel continuar a implementa&ccedil;&atilde;o de mais m&eacute;todos em sequ&ecirc;ncia, o que &eacute; conhecido como  encadeamento ou <em>chaining</em>. Ao inv&eacute;s de escrever o mesmo seletor v&aacute;rias vezes, esta caracter&iacute;stica da biblioteca permite que v&aacute;rias a&ccedil;&otilde;es possam ser executadas de uma vez.</p><p>Sem encadeamento:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#object'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#object'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'color'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'#F0F'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#object'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Com encadeamento:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#object'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'color'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'#F0F'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">height</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Isto tem um duplo efeito ao tornar seu c&oacute;digo mais curto e mais r&aacute;pido. M&eacute;todos encadeados s&atilde;o executados mais rapidamente do que v&aacute;rios m&eacute;todos de um seletor em cache e, de ambos os jeitos, s&atilde;o muito mais r&aacute;pidos que v&aacute;rios m&eacute;todos atrav&eacute;s de seletores sem cache. Mas, esperem&#8230; &#8220;Seletor em cache&#8221;? O que &eacute; isso?</p><h3>Seletores em cache</h3><p>Outra maneira f&aacute;cil de melhorar a performance do c&oacute;digo jQuery &#8211; e que parece ser um mist&eacute;rio para a maioria dos desenvolvedores &#8211; &eacute; a ideia de fazer <strong>cache de seletores</strong>. Pense em quantas vezes voc&ecirc; acaba escrevendo o mesmo seletor em seus c&oacute;digos. Cada <code>$('.element')</code> tem que varrer todo o DOM procurando por combina&ccedil;&otilde;es o tempo todo, independentemente se este seletor tenha sido executado antes. Executando a sele&ccedil;&atilde;o uma vez e depois guardando o(s) resultado(s) em uma vari&aacute;vel, significa que a busca no DOM tem que ser feita apenas <strong>uma &uacute;nica vez</strong>. Uma vez que os resultados de um seletor tem sido armazenada em cache, &eacute; poss&iacute;vel fazer qualquer coisa com eles.</p><p>Primeiro, executa-se o seletor desejado (como exemplo, pegar todos os <code>li</code> dentro de uma <code>ul</code> de id &#8220;blocks&#8221;):</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> blocks <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#blocks'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'li'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Agora, &eacute; poss&iacute;vel usar a vari&aacute;vel <code>blocks</code> em qualquer lugar que se queira, sem ter que percorrer todo o DOM novamente em cada vez:</p><pre>
$('#hideBlocks').click(function(){
    blocks.fadeOut();
});
$('#showBlocks').click(function(){
    blocks.fadeIn();
});
</pre><p>Portanto, fica essa preciosa dica: qualquer seletor que &eacute; executado mais de uma vez deve ser armazenado em cache! Veja este <a
href="http://jsperf.com/ns-jq-cached/3">teste no jsperf</a> que mostra o qu&atilde;o mais r&aacute;pido e eficiente &eacute; um seletor cacheado em detrimento a um n&atilde;o cacheado.</p><h2>Delega&ccedil;&atilde;o de Evento ou Event Delegation</h2><p><em>Event listeners</em> consomem mem&oacute;ria. Em sites e aplica&ccedil;&otilde;es complexos n&atilde;o &eacute; incomum ter um monte de event listeners implementados e, felizmente, jQuery fornece m&eacute;todos realmente f&aacute;ceis para umaa gest&atilde;o eficiente event listeners atrav&eacute;s da delega&ccedil;&atilde;o.</p><p>Num exemplo extremo, imagine uma situa&ccedil;&atilde;o em que uma tabela 10×10 precisa ter um event listener em cada uma de suas c&eacute;lulas para que, quando ocorrer um clique em alguma delas, seja adiciona ou removida uma classe que define a cor de fundo da respectiva c&eacute;lula. Uma maneira comum de implementar isso (e algo bastante comum de ser visto em c&oacute;digos jQuery) &eacute;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'table'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'td'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</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>
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggleClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</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>O jQuery, a partir de sua vers&atilde;o 1.7, passou a oferecer um novo m&eacute;todo de escuta de eventos: <a
href="http://api.jquery.com/on/" title="jQuery .on()">.on()</a>. Ele age como um utilit&aacute;rio que envolve todos os <em>event listeners</em> anteriores do jQuery em um &uacute;nico e conveniente m&eacute;todo e a forma que ele &eacute; implementado determina como ele se comporta. Ao reescrever o exemplo acima usando .on(), tem-se o seguinte:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'table'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'td'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">on</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</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>
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggleClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</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>Bastante simples, certo? Mas o problema aqui &eacute; que, mesmo com a mudan&ccedil;a, o c&oacute;digo ainda conta com um <em>event listener</em> para cada c&eacute;lula da tabela&#8230; Uma maneira muito melhor de fazer isso funcionar &eacute; criar um <strong>&uacute;nico</strong> <em>event listener</em> para monitorar os eventos na pr&oacute;pria tabela! Uma vez que a maioria dos eventos faz <em>bubbling</em> (vai percorrendo seus ancestrais em sequ&ecirc;ncia) na &aacute;rvore do DOM, &eacute; poss&iacute;vel vincular um &uacute;nico listener para um elemento (neste caso, <code>table</code>) e esperar eventos serem disparados a partir de seus descendentes. A melhor maneira de fazer isso usando o <code>.on()</code> &eacute;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'table'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">on</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'td'</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>
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggleClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'active'</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>Com essa mudan&ccedil;a simples, o n&uacute;mero de <em>event listeners</em> passou de 100 (10&#215;10 c&eacute;lulas da tabela) para <strong>1</strong>! Acredite: a diferen&ccedil;a de performance entre os 2 exemplos acima &eacute; impressionante!</p><p>Se voc&ecirc; est&aacute; usando alguma vers&atilde;o do jQuery abaixo da 1.7, &eacute; poss&iacute;vel fazer a mesma coisa usando <a
href="http://api.jquery.com/delegate/" title="jQuery .delegate()">.delegate()</a>. A sintaxe &eacute; diferente, mas uma consulta &agrave; documenta&ccedil;&atilde;o vai esclarecer as coisas.</p><h2>Manipula&ccedil;&atilde;o de DOM</h2><p>Com jQuery &eacute; f&aacute;cil de manipular o DOM. &Eacute; trivial criar novos n&oacute;s, inserir, retirar outros, mudar as coisas ao redor e assim por diante. o c&oacute;digo para fazer isso &eacute; simples de escrever, mas, toda vez que o DOM &eacute; manipulado, o navegador tem que revisar o DOM, o que pode ser muito custoso e impactar a <strong>performance do front-end</strong>. Um exemplo evidente em que isso acontece &eacute; em um loop longo, seja atrav&eacute;s de um loop <code>for()</code>, <code>while()</code> ou <code>$.each()</code>.</p><p>Como exemplo, vamos supor que existe um array cheio de URLs de imagens de um banco de dados ou alguma chamada em AJAX e, o que se pretende, &eacute; colocar todas essas imagens numa lista n&atilde;o ordenada. Comumente, o c&oacute;digo que se encontra para isso &eacute;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> arr <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>reallyLongArrayOfImageURLs<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
$.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>arr<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>count<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">item</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> newImg <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;li&gt;&lt;img src=&quot;'</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">item</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;&gt;&lt;/li&gt;'</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#imgList'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span>newImg<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>Existem alguns problemas com isso. Para come&ccedil;ar, h&aacute; a sele&ccedil;&atilde;o de <code>$('#ImgList')</code> em cada itera&ccedil;&atilde;o do loop &#8211; e, como vimos anteriormente, isso n&atilde;o &eacute; nada bom para a performance. O outro problema &eacute; que, a cada vez que o loop repete, &eacute; adicionado um novo <code>li</code> ao DOM. Cada uma dessas inser&ccedil;&otilde;es consome recursos e, se o array &eacute; muito grande, isso poderia levar a uma grande <strong>perda de performance</strong> ou, at&eacute; mesmo, ao temido alerta &#8220;Um script desta p&aacute;gina est&aacute; tornando a p&aacute;gina lenta&#8221;&#8230;</p><p>Uma outra maneira de implementar a solu&ccedil;&atilde;o &eacute;:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> arr <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>reallyLongArrayOfImageURLs<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
    tmp <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>
&nbsp;
$.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>arr<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>count<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">item</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    tmp <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&lt;li&gt;&lt;img src=&quot;'</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">item</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;&gt;&lt;/li&gt;'</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;">'#imgList'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span>tmp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>O que foi feito, aqui, foi a cria&ccedil;&atilde;o de uma vari&aacute;vel <code>tmp</code> para receber cada <code>li</code> criado. Quando o loop termina, a vari&aacute;vel cont&eacute;m todos os itens de lista na mem&oacute;ria e estes podem ser anexados ao <code>ul</code> todos de uma vez! Como navegadores trabalham melhor com opera&ccedil;&otilde;es de objetos na mem&oacute;ria ao inv&eacute;s de diretamente atualizando o DOM a cada vez, este c&oacute;digo &eacute; bem mais r&aacute;pido e eficiente!</p><h2>Conclus&atilde;o</h2><p>Logicamente, estas dicas de como otimizar c&oacute;digos jQuery para aumentar a performance do front-end n&atilde;o s&atilde;o as &uacute;nicas existentes, mas, certamente, est&atilde;o dentre as mais simples de implementar. Embora algumas das mudan&ccedil;as, individualmente, fa&ccedil;am apenas alguns mil&eacute;simos de segundo de diferen&ccedil;a, ao somar isso, dependendo de sua aplica&ccedil;&atilde;o, &eacute; poss&iacute;vel ter um <strong>aumento de performance de quase 70%</strong>!</p><p>Estudos mostram que o olho humano &eacute; capaz de discernir delays de 100ms (!), portanto, fazer algumas mudan&ccedil;as no c&oacute;digo pode, facilmente, ter um efeito not&aacute;vel sobre o modo (e a percep&ccedil;&atilde;o) de qu&atilde;o bem um seu site ou aplicativo &eacute; executado.</p><p>E voc&ecirc;, tem alguma outra dica de otimiza&ccedil;&atilde;o de c&oacute;digo jQuery para compartilhar? Comente!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><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/html/textarea-dicas-truques-textarea/" title="Textarea: dicas e truques que você sempre quis saber">Textarea: dicas e truques que você sempre quis saber</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/jquery/8-dicas-fazer-codigos-melhores-jquery/" title="8 dicas para fazer códigos melhores com jQuery">8 dicas para fazer códigos melhores com jQuery</a></li><li><a
href="http://desenvolvimentoparaweb.com/wordpress/truques-de-configuracao-do-wordpress/" title="Truques de configuração do WordPress">Truques de configuração do WordPress</a></li><li><a
href="http://desenvolvimentoparaweb.com/usabilidade/pergunte-se-a-si-mesmo-questoes-para-desenvolver-um-bom-site/" title="Pergunte-se a si mesmo: questões para desenvolver um bom site">Pergunte-se a si mesmo: questões para desenvolver um bom site</a></li><li><a
href="http://desenvolvimentoparaweb.com/php/dicas-para-otimizar-codigos-php/" title="Dicas para otimizar códigos PHP">Dicas para otimizar códigos PHP</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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/jig3v6H7Jxdruw4JcQU4kNlXKgE/0/da"><img src="http://feedads.g.doubleclick.net/~a/jig3v6H7Jxdruw4JcQU4kNlXKgE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/jig3v6H7Jxdruw4JcQU4kNlXKgE/1/da"><img src="http://feedads.g.doubleclick.net/~a/jig3v6H7Jxdruw4JcQU4kNlXKgE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=PkgWol24zsA:HKoG5SDfy34:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=PkgWol24zsA:HKoG5SDfy34:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=PkgWol24zsA:HKoG5SDfy34:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=PkgWol24zsA:HKoG5SDfy34:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=PkgWol24zsA:HKoG5SDfy34:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=PkgWol24zsA:HKoG5SDfy34:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/PkgWol24zsA" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/feed/</wfw:commentRss> <slash:comments>7</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/jquery/otimizar-codigos-jquery-aumentar-performance-front-end/</feedburner:origLink></item> <item><title>Elementos de design aplicados à web</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/FEQUaZnwkQI/</link> <comments>http://desenvolvimentoparaweb.com/design/elementos-design-aplicados-web/#comments</comments> <pubDate>Sun, 11 Dec 2011 10:00:01 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Design]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Layout]]></category> <category><![CDATA[Planejamento]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=735</guid> <description><![CDATA[Conhe&ccedil;a os princ&iacute;pios de design que v&atilde;o mostrar como projetos web designs mais eficientes e funcionais.]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-743" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/elementos-design-aplicados-web.jpg" alt="Elementos do design aplicados &agrave; web: imagem representativa" width="300" height="299" /></p><p>O <strong>design</strong> &eacute; dividido em uma s&eacute;rie de princ&iacute;pios b&aacute;sicos que se aplicam a todo o projeto, seja ele do &#8220;mundo real&#8221; ou do mundo virtual. No entanto, especialmente na web, &agrave;s vezes essas regras tendem a ser esquecidas e n&oacute;s apenas trabalhamos com o que sentimos ser o &#8220;certo&#8221;.</p><p>Em uma das <a
href="http://desenvolvimentoparaweb.com/categoria/series/">s&eacute;ries</a> do <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento para web</a> foram abordados alguns dos principais estudos sobre Gestalt para web, e isso foi um grande passo sobre o que estamos tratando aqui, pois pudemos estudar como &eacute; a percep&ccedil;&atilde;o e entendimento das pessoas no ambiente online. Agora, veremos alguns dos <strong>elementos de design aplicados &agrave; web</strong>.</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original &#8220;<a
href="http://astheria.com/design/the-elements-of-design-applied-totheweb">The Elements of Design Applied to the Web</a>&#8220;, do blog <a
href="http://astheria.com/">Astheria</a>, e sofreu pequenas adapta&ccedil;&otilde;es.</div><h2>Equil&iacute;brio</h2><p><strong>Equil&iacute;brio</strong> &eacute; um assunto complexo. Existem dois tipos de equil&iacute;brio: <strong>equil&iacute;brio sim&eacute;trico</strong> e <strong>equil&iacute;brio assim&eacute;trico</strong>. Quase todos n&oacute;s estamos familiarizados com imagens sim&eacute;tricas. A maioria de n&oacute;s, nos tempos de crian&ccedil;a, provavelmente j&aacute; fez algum tipo de recorte em papel de forma que o resultado final ficasse perfeitamente sim&eacute;trico. Enquanto o equil&iacute;brio sim&eacute;trico &eacute; f&aacute;cil de detectar (as coisas aparecem como imagens num espelho), o equil&iacute;brio assim&eacute;trico &eacute; menos percept&iacute;vel, mas, aparentemente, mais importante.</p><div
id="attachment_736" class="wp-caption aligncenter" style="width: 476px"><img
class="size-full wp-image-736" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/elemento-design-aplicados-web-equilibrio.jpg" alt="Elementos de design aplicados &agrave; web: equil&iacute;brio assim&eacute;trico" width="466" height="401" /><p
class="wp-caption-text">Subtraction: exemplo de Equil&iacute;brio Assim&eacute;trico</p></div><p>A figura acima &eacute; um excelente exemplo de equil&iacute;brio assim&eacute;trico (aplicado em v&aacute;rios lugares), especialmente a imagem do cachorro. Nesse exemplo P&amp;B, a coloca&ccedil;&atilde;o do animal nessa posi&ccedil;&atilde;o deixa muito peso para o preto na metade esquerda da composi&ccedil;&atilde;o, que &eacute; equilibrada pelo aparentemente aleat&oacute;rios &#8220;X&#8221; na parede, &agrave; direita (1). Esta pequena adi&ccedil;&atilde;o cria um senso de equil&iacute;brio que quase faz voc&ecirc; se sentir como se o cachorro esteja no centro da imagem, quando, na verdade, ele n&atilde;o est&aacute;. <a
href="http://www.subtraction.com/">Confira</a>.</p><p>Enquanto a imagem do cachorro demonstra um equil&iacute;brio gr&aacute;fico h&aacute;, tamb&eacute;m, algum equil&iacute;brio assim&eacute;trico no cabe&ccedil;alho do site (2). A barra de menu &eacute; bastante pesada, tanto em seu tamanho, quanto na cor. No entanto, a linha mais fina acima de &#8220;Subtraction&#8221; usa o espa&ccedil;o negativo acima e abaixo para criar um equil&iacute;brio visual entre os dois. Ent&atilde;o, a &aacute;rea em branco acima da barra de menu fica como mesmo peso visual que a barra de navega&ccedil;&atilde;o preta mais abaixo.</p><p>Um desenho sim&eacute;trico, apesar de ser um conceito extremamente simples, pode ser surpreendentemente poderoso.</p><div
id="attachment_737" class="wp-caption aligncenter" style="width: 476px"><img
class="size-full wp-image-737" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/elemento-design-aplicados-web-equilibrio-2.jpg" alt="Elementos de design aplicados &agrave; web: equil&iacute;brio sim&eacute;trico" width="466" height="466" /><p
class="wp-caption-text">Apple: exemplo de Equil&iacute;brio Sim&eacute;trico</p></div><p><a
href="http://www.apple.com/">Apple</a>, uma das atuais refer&ecirc;ncias de design, usa um layout completamente sim&eacute;trico em sua p&aacute;gina inicial (atualmente a p&aacute;gina deles est&aacute; diferente que a desse screenshot). Como voc&ecirc; pode ver na imagem, cada elemento &eacute; correspondido do outro lado da linha, criando uma harmonia visual simples.</p><h2>Propor&ccedil;&atilde;o</h2><p>Escolher o tamanho certo para os elementos vai al&eacute;m de simplesmente selecionar um tamanho leg&iacute;vel para o corpo do conte&uacute;do ou a largura das colunas. Deve-se levar em conta a <strong>propor&ccedil;&atilde;o</strong>, que est&aacute; entre o equil&iacute;brio e domin&acirc;ncia, baseados nas propor&ccedil;&otilde;es de certos objetos. Se num site &#8220;tradicional&#8221;, por exemplo, com uma coluna maior para conte&uacute;do e uma menor para menus e meta-informa&ccedil;&otilde;es, a coluna do conte&uacute;do &eacute; maior justamente por ser mais importante. Se os menus e meta-informa&ccedil;&otilde;es fossem colocados na coluna principal, certamente a primeira rea&ccedil;&atilde;o dos visitantes ser&aacute; de pensar que a p&aacute;gina n&atilde;o tem o conte&uacute;do que est&atilde;o procurando.</p><p>Enquanto algumas pessoas preferem usar <em>grids</em> com m&oacute;dulos fixos, outros preferem usar abordagens diferenciadas, tais como a usada aqui, no <a
href="http://desenvolvimentoparaweb.com">desenvolvimento para web</a> &#8211; pelo menos na data de publica&ccedil;&atilde;o deste artigo -, que tem como base a <a
href="http://pt.wikipedia.org/wiki/Propor%C3%A7%C3%A3o_%C3%A1urea" rel="nofollow">Propor&ccedil;&atilde;o &Aacute;urea</a>: a largura da coluna do conte&uacute;do &eacute;, aproximadamente, <strong>1,625</strong> maior que a coluna da barra lateral.</p><p>A propor&ccedil;&atilde;o tamb&eacute;m pode ser usado para, simplesmente, atribuir import&acirc;ncia a elementos na p&aacute;gina.</p><div
id="attachment_738" class="wp-caption aligncenter" style="width: 476px"><img
class="size-full wp-image-738" title="Coda: exemplo de Propor&ccedil;&atilde;o" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/elemento-design-aplicados-web-proporcao.jpg" alt="" width="466" height="407" /><p
class="wp-caption-text">Elementos de design aplicados &agrave; web: propor&ccedil;&atilde;o</p></div><p>Apesar de a p&aacute;gina atual estar diferente deste screenshot, o pessoal da <a
href="http://www.panic.com/">Panic</a> fez um bom trabalho em usar elementos proporcionalmente dimensionados para atribuir n&atilde;o somente uma <strong>hierarquia visual</strong>, mas <strong>significado</strong> entre eles. Come&ccedil;ando com o logo do produto (1), passando, mais baixo, para as tr&ecirc;s <a
href="http://desenvolvimentoparaweb.com/usabilidade/4-elementos-design-call-to-action/">call to action</a> (2) &#8211; que s&atilde;o ligadas por tamanho e aspectos relacionais, como os &iacute;cones &agrave; esquerda &#8211; e, finalmente, t&iacute;tulos e texto importante (3). Combinado com um design muito unificado, esta p&aacute;gina &eacute; quase uma obra-prima da web (especialmente para os que adoram um javascript bem feito aplicado a <em>user interfaces</em>).</p><h2>Ritmo</h2><p><strong>Ritmo</strong> na web &eacute; algo presente principalmente em dados. &Eacute; especialmente importante para sites que cont&ecirc;m p&aacute;ginas compridas e/ou grandes quantidades de informa&ccedil;&atilde;o. Este screenshot do <a
href="http://digg.com">Digg</a> mostra que o site cai em ambas as situa&ccedil;&otilde;es e, tamb&eacute;m, &eacute; um excelente exemplo de ritmo atrav&eacute;s da repeti&ccedil;&atilde;o:</p><div
id="attachment_739" class="wp-caption aligncenter" style="width: 476px"><img
class="size-full wp-image-739" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/elemento-design-aplicados-web-ritmo.jpg" alt="Elementos de design aplicados &agrave; web: ritmo" width="466" height="360" /><p
class="wp-caption-text">Digg: exemplo de Ritmo</p></div><p>O site cria um ponto de partida no cabe&ccedil;alho com sua navega&ccedil;&atilde;o horizontal estabelecendo a dire&ccedil;&atilde;o de leitura (1) para, logo em seguida, cair no conte&uacute;do principal, que &eacute; id&ecirc;ntico para cada artigo. Isso cria um ritmo consistente que o usu&aacute;rio segue inconscientemente (2). Esta t&eacute;cnica &eacute; repetida na barra lateral.</p><p>Uma boa maneira de pensar sobre o ritmo no design est&aacute; na mesma defini&ccedil;&atilde;o que vem &agrave; mente quando pensamos em m&uacute;sica. Cada projeto tem um pouco de um &#8220;pulso visual&#8221; que, dependendo de onde voc&ecirc; est&aacute; na p&aacute;gina, convida a uma leitura r&aacute;pida, uma pausa numa imagem interessante ou a uma orienta&ccedil;&atilde;o para um bot&atilde;o de download.</p><p>Um site que &eacute; muito consistente no seu ritmo pode sofrer no fato de que todos os elementos na p&aacute;gina acabam ficando com uma quantidade igual de peso ao redor, podendo deixar os visitantes ligeiramente desorientados. Muitas varia&ccedil;&otilde;es, por outro lado, podem fazer com que a p&aacute;gina se torne um caos! O importante &eacute; estabelecer uma <strong>coer&ecirc;ncia</strong> dentro de certas se&ccedil;&otilde;es do site, como demonstrado acima, no Digg: cada parte tem seu pr&oacute;prio ritmo interno, segundo seu prop&oacute;sito; mas, como um todo, a p&aacute;gina inteira &eacute; unificada e tudo instantaneamente tem significado apenas com base na <strong>cor</strong>, <strong>forma</strong> e <strong>propor&ccedil;&atilde;o</strong>.</p><h2>Domin&acirc;ncia (ou &Ecirc;nfase)</h2><p>N&atilde;o h&aacute; nada mais poderoso no design do que uma forma circular, especialmente em um mundo de ret&acirc;ngulos, como a web. Um c&iacute;rculo chama a aten&ccedil;&atilde;o simplesmente por sua forma. Ele n&atilde;o precisa ser especialmente vibrante em cores ou espa&ccedil;o em branco. E o melhor lugar para aproveitar todas essas boas caracter&iacute;sticas est&aacute; no logotipo.</p><div
id="attachment_740" class="wp-caption aligncenter" style="width: 476px"><img
class="size-full wp-image-740" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/elemento-design-aplicados-web-dominancia-enfase.jpg" alt="Elementos de design aplicados &agrave; web: domin&acirc;ncia (ou &ecirc;nfase)" width="466" height="426" /><p
class="wp-caption-text">A List Apart: exemplo de Domin&acirc;ncia</p></div><p>Como &eacute; poss&iacute;vel ver na imagem, <a
href="http://www.alistapart.com/">A List Apart</a> est&aacute; usando n&atilde;o um, mas um par de c&iacute;rculos para fazer a <strong>domin&acirc;ncia</strong> ao seu logotipo (1). Isso &eacute; refor&ccedil;ado pelo s&iacute;mbolo com o n&uacute;mero da edi&ccedil;&atilde;o, adjacente ao logo. H&aacute;, tamb&eacute;m, outros &#8220;selinhos&#8221; como esse usados ​​no lado direito (2) para chamar a aten&ccedil;&atilde;o para algum ponto espec&iacute;fico (no caso, venda de camisetas).</p><p>Outra forma de alcan&ccedil;ar uma posi&ccedil;&atilde;o dominante &eacute; atrav&eacute;s do uso de espa&ccedil;o em branco e/ou cores. Estes podem ser combinados com uma forma dominante, mas, raramente, voc&ecirc; sempre precisa combinar todos eles; um ou dois geralmente j&aacute; &eacute; o suficiente.</p><div
id="attachment_741" class="wp-caption aligncenter" style="width: 476px"><img
class="size-full wp-image-741" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/elemento-design-aplicados-web-dominancia-enfase-2.jpg" alt="Elementos de design aplicados &agrave; web: domin&acirc;ncia (ou &ecirc;nfase)" width="466" height="233" /><p
class="wp-caption-text">Google: outro exemplo de Domin&acirc;ncia</p></div><p>Google usa ambos, espa&ccedil;o em branco e domin&acirc;ncia de cores, para puxar o olho para a &aacute;rea principal da p&aacute;gina (1). O l&uacute;dico colorido do logotipo do Google, combinado com a quantidade de espa&ccedil;o em branco que envolve esta &aacute;rea, for&ccedil;a de seu olho a se concentrar l&aacute; imediatamente. Embora o Google pode fornecer excelentes resultados para as buscas, a chave para seu sucesso na web &eacute; a sua facilidade de uso, que &eacute; naturalmente f&aacute;cil de se usar devido a suas tend&ecirc;ncias visuais b&aacute;sicas.</p><h2>Unidade</h2><p>O conceito de <strong>unidade</strong> &eacute; muito mais aberto a interpreta&ccedil;&otilde;es. A unidade &eacute;, na verdade, um sentimento de que todos os elementos est&atilde;o ligados, conectados de alguma forma, e isso d&aacute; uma ideia de um todo. Um grande exemplo de unidade &eacute; o <a
href="http://www.okaydave.com/">portfolio de Dave Werner</a>, no qual cada p&aacute;gina do site apresenta escrita &agrave; m&atilde;o, alfinetes e todo o tipo de outros elementos que, quando analisados em conjunto, produzem um sentimento de unidade. N&atilde;o h&aacute; nada que se sente estar fora do lugar e tudo compartilha o mesmo estilo:</p><div
id="attachment_742" class="wp-caption aligncenter" style="width: 476px"><img
class="size-full wp-image-742" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/12/elemento-design-aplicados-web-dominancia-unidade.jpg" alt="Elementos de design aplicados &agrave; web: unidade" width="466" height="292" /><p
class="wp-caption-text">Dave Werner: exemplo de Unidade</p></div><p>Mesmo peda&ccedil;os do site que, como entidades separadas, naturalmente podem parecer diferentes umas das outras, s&atilde;o cobertas de notas e esbo&ccedil;os, trazendo at&eacute; mesmo esses aspectos do site para o portfolio. N&atilde;o h&aacute; nada no site que voc&ecirc; n&atilde;o esperaria ver alfinetado num quadro de camur&ccedil;a de projetos!  ;-)</p><h2>Conclus&atilde;o</h2><p>Embora ningu&eacute;m v&aacute; se tornar um &#8220;guru do design&#8221; somente com essas dicas, certamente essas explica&ccedil;&otilde;es e exemplos ajudam a conceber projetos de forma mais consciente, que podem impor a hierarquia visual necess&aacute;ria e realmente guiar os olhos do visitante atrav&eacute;s da p&aacute;gina da maneira que planejada.</p><p>Sem este tipo de estudo (e o de <a
href="http://desenvolvimentoparaweb.com/?s=gestalt">Gestalt aplicado ao web design</a>) esses elementos voc&ecirc; n&atilde;o ganha nada al&eacute;m de muito trabalho e retrabalho em busca de uma solu&ccedil;&atilde;o visual que voc&ecirc; <em>sinta</em> ser a certa ou a &#8220;bonita&#8221;. Os princ&iacute;pios, em si, s&atilde;o muito simples; o mais importante &eacute; estar ciente de que eles existem e, a partir de agora, come&ccedil;ar a refletir sobre eles na hora dos projetos e partir para a pr&aacute;tica que, como sabem aqueles que j&aacute; sentem um pouco da experi&ecirc;ncia dos anos de trabalho na &aacute;rea, sempre recompensa com trabalhos cada vez melhores.</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/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/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/estrategia-web-da-piramide-guia-estrategia-web-equilibrada/" title="Estratégia Web de Pirâmide: guia para uma estratégia de web equilibrada">Estratégia Web de Pirâmide: guia para uma estratégia de web equilibrada</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/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/miscelanea/como-otimizar-imagens-web-internet/" title="Como otimizar imagens para web: guia de otimização de imagens">Como otimizar imagens para web: guia de otimização de imagens</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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/49H-y2LksHF8sqS-EKU-p1_LCY8/0/da"><img src="http://feedads.g.doubleclick.net/~a/49H-y2LksHF8sqS-EKU-p1_LCY8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/49H-y2LksHF8sqS-EKU-p1_LCY8/1/da"><img src="http://feedads.g.doubleclick.net/~a/49H-y2LksHF8sqS-EKU-p1_LCY8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=FEQUaZnwkQI:epNsNK4KgeQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=FEQUaZnwkQI:epNsNK4KgeQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=FEQUaZnwkQI:epNsNK4KgeQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=FEQUaZnwkQI:epNsNK4KgeQ:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=FEQUaZnwkQI:epNsNK4KgeQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=FEQUaZnwkQI:epNsNK4KgeQ:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/FEQUaZnwkQI" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/design/elementos-design-aplicados-web/feed/</wfw:commentRss> <slash:comments>1</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/design/elementos-design-aplicados-web/</feedburner:origLink></item> <item><title>Wireframes para web: guia completo de desenvolvimento</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/wUilw-SNAQ0/</link> <comments>http://desenvolvimentoparaweb.com/usabilidade/wireframe-web-guia-completo/#comments</comments> <pubDate>Tue, 22 Nov 2011 16:13:58 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Usabilidade]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Layout]]></category> <category><![CDATA[UX]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=674</guid> <description><![CDATA[Leia este Guia e tire todas as suas d&uacute;vidas sobre wireframes: conceitos, produ&ccedil;&atilde;o, teorias, programas, conceitos e conselhos.]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-733" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/11/wireframe-web-guia-completo.jpg" alt="Wireframes para web: guia completo de desenvolvimento" width="215" height="215" /></p><p><strong>Wireframes</strong> s&atilde;o uma das partes mais importantes de um projeto web, portanto, <strong>desenvolver wireframes para web sites</strong> &eacute; uma etapa que, mesmo frequentemente negligenciada, abandonada, mesmo, n&atilde;o o deveria ser.</p><p>Neste artigo, veja mais sobre a import&acirc;ncia desta etapa do projeto web e conhe&ccedil;a algumas diretrizes important&iacute;ssimas para se preparar <em>wireframes</em> de qualidade, que realmente fa&ccedil;am a diferen&ccedil;a na qualidade final e n&iacute;vel de profissionalismo e produtividade de seus <em>web projects</em>.</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original &#8220;<a
href="http://sixrevisions.com/user-interface/website-wireframing/">Ultimate Guide to Website Wireframing</a>&#8220;, do blog <a
href="http://sixrevisions.com/">Six Revisions</a>, e sofreu pequenas modifica&ccedil;&otilde;es.</div><p>A maioria dos designers desenvolve wireframes para seus projetos, de uma forma ou de outra, mesmo que sejam apenas esbo&ccedil;os r&aacute;pidos na parte de tr&aacute;s de alguns pap&eacute;is de rascunho. Wireframe &eacute; uma parte importante do processo de <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento web</a>, especialmente para projetos mais complexos.</p><h2>Por que fazer wireframes</h2><p><strong>Wireframes realmente s&atilde;o &uacute;teis</strong> quando voc&ecirc; est&aacute; se comunicando com clientes, pois lhes permite visualizar suas ideias mais facilmente do que quando voc&ecirc; apenas as descreve verbalmente. Para casos em que o &#8220;cliente&#8221; &eacute; a pr&oacute;prio empresa em que se trabalha ou para quando se tratam de projetos pessoais, a afirmativa tamb&eacute;m &eacute; verdadeira.</p><p>Ent&atilde;o, que esteja claro: desenvolver wireframes &eacute; realmente um passo <strong>necess&aacute;rio</strong> no processo de design! Mesmo se o site que se est&aacute; projetando seja incrivelmente minimalista e simples, fazer o wireframe ajuda a esclarecer exatamente o que precisa ser feito nos diferentes tipos de p&aacute;gina do projeto.</p><p
style="text-align: center;"><img
class="size-full wp-image-724 aligncenter" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/11/wireframe-web-guia-completo-exemplo-wireframe.png" alt="Exemplo de um wireframe para uma p&aacute;gina web" width="550" height="519" /></p><p>Ao dedicar tempo para criar, pelo menos, um wireframe simples, tenha certeza de que seu web design levar&aacute; em conta todos os elementos das diferentes p&aacute;ginas que comp&otilde;em o projeto e precisam ir para o design. Al&eacute;m disso, eles estar&atilde;o posicionados na melhor localiza&ccedil;&atilde;o a que o estudo destes elementos chegou.</p><p>Al&eacute;m disso, o processo de <strong>produ&ccedil;&atilde;o de wire frames</strong> &eacute; muito mais<strong> simples</strong>, <strong>f&aacute;cil</strong> e <strong>barato</strong> de ser feito do que quando se &#8220;pula&#8221; essa etapa e se parte direto para o HTML/CSS: wireframes podem ser facilmente revistos, adaptados ou descartados.</p><h2>Wireframes x Modelos x Prot&oacute;tipos</h2><p>Wireframe, modelo (<em>mockup</em>) e prot&oacute;tipo s&atilde;o frequentemente usados ​​como sin&ocirc;nimos, mas s&atilde;o tr&ecirc;s coisas diferentes (embora, frequentemente, haja alguma sobreposi&ccedil;&atilde;o entre eles). Cada um tem um prop&oacute;sito diferente do outro e sua pr&oacute;pria import&acirc;ncia no processo de design:</p><ul><li><strong>Wireframes.</strong> S&atilde;o &#8220;ilustra&ccedil;&otilde;es b&aacute;sicas&#8221; da estrutura e componentes de uma p&aacute;gina web. Geralmente s&atilde;o o primeiro passo no processo de design (depois da concep&ccedil;&atilde;o mental, obviamente).</li><li><strong>Modelos.</strong> Geralmente focam sobre os elementos de design visual do site. S&atilde;o muitas vezes bastante pr&oacute;ximos ou id&ecirc;nticos ao web design final efetivo e incluem todos os gr&aacute;ficos, tipografia e outros elementos da p&aacute;gina. Mockups geralmente s&atilde;o apenas arquivos de imagem.</li><li><strong>Prot&oacute;tipos.</strong> S&atilde;o layouts semi-funcionais das p&aacute;ginas e servem para dar um <em>preview</em> de maior fidelidade do site real. Esta fase antecede a programa&ccedil;&atilde;o da l&oacute;gica de neg&oacute;cios do site. Enquanto eles n&atilde;o podem ter toda a funcionalidade, eles geralmente d&atilde;o aos clientes a capacidade de interagir com os elementos e simular a forma como o site ir&aacute;, eventualmente, trabalhar. Prot&oacute;tipos podem ou n&atilde;o incluir elementos de design finalizado.</li></ul><p><img
class="aligncenter size-full wp-image-725" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/11/wireframe-web-guia-completo-diferenca-wireframe-modelo-prototipo.jpg" alt="Wireframe, Modelo e Prot&oacute;tipo: rascunho do fluxo de intera&ccedil;&atilde;o numa aplica&ccedil;&atilde;o mobile" width="550" height="450" />Em suma, o wireframe v&ecirc;m em primeiro lugar, seguido do modelo (ou mockup) e, caso seja poss&iacute;vel/vi&aacute;vel, haver&aacute; in&uacute;meros benef&iacute;cios ao se fazer o uso de prot&oacute;tipo (&agrave;s vezes chamado &#8220;<strong>wireframe funcional</strong>&#8220;).</p><h2>Como criar wireframes</h2><p>Criar wireframes &eacute; t&atilde;o simples ou t&atilde;o complicado quanto voc&ecirc; queira. Em sua forma mais b&aacute;sica, um wireframe poderia ser nada mais do que um esbo&ccedil;o numa folha de papel. Outros &#8220;wireframes&#8221; s&atilde;o criados digitalmente e s&atilde;o realmente mais como prot&oacute;tipos, com objetos clic&aacute;veis ​​e toda a interatividade prevista.</p><p>O <strong>tipo de wireframe</strong> que ser&aacute; criado vai depender do que o projeto demanda. Projetos mais complicados provavelmente requerem wireframes mais elaborados, enquanto sites simples pode ter wireframes simples.</p><h3>O que incluir em um wireframe</h3><p>Os wireframes devem incluir informa&ccedil;&otilde;es suficientes para refletir o que precisa aparecer em cada p&aacute;gina do projeto web. Pense sobre os elementos gerais da maioria das p&aacute;ginas web: cabe&ccedil;alhos, rodap&eacute;s, barras laterais, &aacute;reas de conte&uacute;do, meta-informa&ccedil;&atilde;o, busca, widgets, gr&aacute;ficos, etc. Depois de ter uma id&eacute;ia do que ter&aacute; o site, comece a criar os wireframes <strong>com base nesses elementos</strong>.</p><p>O qu&atilde;o detalhado deve ser o wireframe tamb&eacute;m depende do projeto e de sua finalidade. Se o wireframe servir&aacute; apenas como um documento orientador para refer&ecirc;ncia, ent&atilde;o talvez n&atilde;o seja uma boa ideia dar muito foco nesta etapa; por outro lado, se ele vai ser usado por mais de um designer ou desenvolvedor &#8211; ou apresentado a clientes &#8211; ent&atilde;o ele precisa ser melhor trabalhado.</p><h3>Wireframes de baixa fidelidade x Wireframes de alta fidelidade</h3><p>Existem algumas op&ccedil;&otilde;es quando se trata do &#8220;estilo&#8221; de wireframes. Alguns designers optam por <strong>wireframes de baixa fidelidade</strong> , que s&atilde;o basicamente linhas sobre um fundo liso com alguns r&oacute;tulos. Estes incluem tanto os desenhados a m&atilde;o, como wireframes digitais, e s&atilde;o geralmente muito simples.</p><div
id="attachment_726" class="wp-caption aligncenter" style="width: 560px"><img
class="size-full wp-image-726" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/11/wireframe-web-guia-completo-wireframe-baixa-fidelidade.jpg" alt="Wireframes para web: exemplo de wireframe de baixa fidelidade" width="550" height="450" /><p
class="wp-caption-text">Wireframe de baixa fidelidade</p></div><p><strong>Wireframes de alta fidelidade</strong> v&atilde;o um passo al&eacute;m ao usando determinados elementos de design dentro do pr&oacute;prio wireframe. Isto pode incluir o logotipo ou alguns outros elementos gr&aacute;ficos b&aacute;sicos, bem como o esquema de cores e outros elementos visuais de design.</p><p>Wireframes assim come&ccedil;am a se aproximar do n&iacute;vel de modelos, mas eles podem ser inestim&aacute;veis ​​para transmitir uma sensa&ccedil;&atilde;o de como o site ser&aacute;, especialmente para os casos em que se tem dificuldade em vislumbrar como o site ser&aacute; ao ver wireframes de baixa fidelidade.</p><h3>T&eacute;cnicas para fazer wireframes</h3><p>Existem dezenas de maneiras diferentes para criar wireframes que v&atilde;o desde simples &#8211; caneta e esbo&ccedil;os em papel &#8211;  a diagramas mais complexos &#8211; que parecem quase t&atilde;o eficientes quanto sites em produ&ccedil;&atilde;o.</p><p>Existem, tamb&eacute;m, abordagens diferentes para o prop&oacute;sito e o racioc&iacute;nio por tr&aacute;s da cria&ccedil;&atilde;o de wireframes, dependendo das necessidades do projeto e dos designers envolvidos nisto.</p><p>Aqui est&atilde;o alguns recursos sobre diferentes procedimentos para a cria&ccedil;&atilde;o de wireframes para web (em ingl&ecirc;s):</p><ul><li><a
href="http://www.uxmatters.com/mt/archives/2007/01/wireframing-with-indesign-and-illustrator.php">Wireframes com InDesign e Illustrator</a>. Esse &eacute; um artigo da <a
href="http://www.uxmatters.com/"> UXmatters</a> sobre como criar wireframes usando Adobe InDesign e o Illustrator. Eles falam sobre o que o levou at&eacute; a decis&atilde;o de usar o InDesign e o Illustrator em detrimento a outros outros produtos at&eacute; chegar na parte sobre como usar esses 2 aplicativos para criar wireframes.</li><li><a
href="http://v3.jasonsantamaria.com/archive/2004/05/24/grey_box_method.php">M&eacute;todo Caixa Cinza</a>. Jason Santa Maria tem um post fant&aacute;stico sobre o &#8220;M&eacute;todo Caixa Cinza&#8221; de cria&ccedil;&atilde;o de wireframes. Ele descreve seu processo inteiro de cria&ccedil;&atilde;o de wireframes, desde esbo&ccedil;ar no papel at&eacute; criar uma escala de cinza no Illustrator. Artigo com v&aacute;rios exemplos.</li><li><a
href="http://visitmix.com/articles/the-future-of-wireframes">O Futuro dos Wireframes</a>. Inclui informa&ccedil;&otilde;es valiosas sobre processos e m&eacute;todos de cria&ccedil;&atilde;o de wireframes, especialmente em termos de como fazer o processo de wireframe melhor para designers, desenvolvedores e propriet&aacute;rios de sites.</li><li><a
href="http://thinkvitamin.com/design/20-steps-to-better-wireframing/">20 Passos para Fazer Wireframes Melhores</a>. Este artigo estabelece 20 passos sobre o que voc&ecirc; deve fazer para criar wireframes melhores. &Eacute; um post fant&aacute;stico para verificar se voc&ecirc; &eacute; completamente novo na arte de fazer wireframes ou apenas infeliz com o seu processo atual.</li></ul><h2>Processo do wireframe</h2><p>Existem muitas varia&ccedil;&otilde;es, mas h&aacute; um punhado de passos fundamentais para a <strong>cria&ccedil;&atilde;o de um wireframe</strong>. &Eacute; prov&aacute;vel que voc&ecirc; comece com uma lista de coisas que o site precisa incluir ou um documento de especifica&ccedil;&atilde;o formal de design. Outros j&aacute; gostam de come&ccedil;ar com um &#8220;olhar geral&#8221; do design e ir acrescentando detalhes, uma vez que se tem os fundamentos b&aacute;sicos do layout.</p><p>Quer voc&ecirc; decida rabiscar algumas coisas no papel ou trabalhar com algum <em>software</em>, ainda n&atilde;o descarte um ou outro m&eacute;todo. Alguns designers fazem esbo&ccedil;os no papel e depois os passam para software espec&iacute;ficos; outros v&atilde;o direto para o software; outros ainda ficam somente no &#8220;wireframe de papel&#8221;. Tenha em mente que, caso se depare com algum &#8220;entrave criativo&#8221;, mudar os formatos com que se trabalha pode fazer maravilhas para sua criatividade!</p><p>&Eacute; muito comum <strong>experimentar v&aacute;rias id&eacute;ias</strong> e possibilidades diferentes com wireframes antes de tomar decis&otilde;es finais em um projeto. Ali&aacute;s, &eacute; justamente para facilitar/agilizar isso que &eacute; muito bom trabalhar com wireframes, j&aacute; que, como se tem o m&iacute;nimo de tempo e energia investidos, &eacute; poss&iacute;vel facilmente fazer altera&ccedil;&otilde;es e tentar coisas novas.</p><p>Uma vez que um wireframe b&aacute;sico &eacute; criado, voc&ecirc; pode envi&aacute;-lo para outros membros da equipe para an&aacute;lise ou coloc&aacute;-lo um pouco de lado por 1 ou 2 dias para analisar novamente. Quando estiver satisfeito, &eacute; hora de mostr&aacute;-lo ao cliente ou, caso n&atilde;o seja o caso de haver um cliente, come&ccedil;ar a trabalhar em modelos baseados no wireframe.</p><p><img
class="aligncenter size-full wp-image-727" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/11/wireframe-web-guia-completo-processo-wireframe.png" alt="Wireframes para web: processo do wireframe" width="550" height="444" /></p><h2>Ferramentas para criar wireframes</h2><p>Existem muitas ferramentas para wireframe dispon&iacute;veis. Algumas s&atilde;o feitas especificamente para wireframes, enquanto outros s&atilde;o mais gerais, apesar de cumprirem bem seu papel quando trabalho &eacute; esse.</p><p>As ferramentas que voc&ecirc; vai usar v&atilde;o depender de prefer&ecirc;ncia pessoal e dos requisitos do projeto. N&atilde;o h&aacute; &#8220;melhor&#8221; ferramenta para fazer wireframes, mas sim aquela na qual voc&ecirc; se sente melhor usando e que funciona melhor <strong>para voc&ecirc;</strong>.</p><h3>Papel e caneta</h3><p>Caneta (ou l&aacute;pis) e papel s&atilde;o as ferramentas mais b&aacute;sicas que voc&ecirc; pode usar para criar um wireframe. Tamb&eacute;m &eacute; &uacute;til usar papel quadriculado para criar elementos em propor&ccedil;&atilde;o.</p><p>Voc&ecirc; pode querer usar um l&aacute;pis para o seu esbo&ccedil;o inicial, para que voc&ecirc; possa apagar as coisas sem ter que come&ccedil;ar de novo. Ent&atilde;o, a medida que for finalizando os elementos, pode passar caneta por cima para evitar apagar o que n&atilde;o precisa mais ser apagado.</p><p>Voc&ecirc; tamb&eacute;m pode considerar usar canetas coloridas (ou l&aacute;pis coloridos) para diferenciar elementos e dar mais sentido ao <em>wireframe</em>. Por exemplo, uma cor para um grupo de elementos pode ser &uacute;til, pois ajuda a identificar instantaneamente outros itens.</p><div
id="attachment_728" class="wp-caption aligncenter" style="width: 560px"><img
class="size-full wp-image-728" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/11/wireframe-web-guia-completo-wireframe-papel-caneta.jpg" alt="Wireframes para web: wireframe feito com papel e caneta" width="550" height="331" /><p
class="wp-caption-text">Wireframe com papel e caneta em papel quadriculado</p></div><h3>Programas para cria&ccedil;&atilde;o de wireframes</h3><p>Existem diversos programas para criar<em> wireframes</em> dispon&iacute;veis no mercado. Alguns s&atilde;o pagos, outros de gra&ccedil;a, outros mais completos e alguns nem tanto; mas todos com o objetivo de ajudar na cria&ccedil;&atilde;o de wireframes para facilitar e agilizar o processo de desenvolvimento web.</p><p>Recomendamos fortemente que d&ecirc; uma lida no artigo &#8220;<a
href="http://desenvolvimentoparaweb.com/usabilidade/ferramentas-criacao-wireframes/">Ferramentas para cria&ccedil;&atilde;o de wireframes</a>&#8220;. L&aacute; voc&ecirc; vai encontrar uma boa lista com os principais programas para cria&ccedil;&atilde;o de wireframes com descri&ccedil;&atilde;o e imagem de cada um.</p><h3>Modelos para wireframes</h3><p>Usar modelos (<em>templates</em>) para criar seus wireframes pode acelerar bastante o processo, especialmente se voc&ecirc; optar por usar caneta e papel ou programas que s&atilde;o capazer de cumprir este prop&oacute;sito (como o Adobe Illustrator). Veja alguns bons modelos, kits e elementos de interface gratuitos para serem usados na elabora&ccedil;&atilde;o de wireframes:</p><ul><li><a
href="http://www.fuelyourinterface.com/free-web-ui-wireframe-kit/">Free Web UI Wireframe Kit</a>. Fuel You Interface oferece, neste kit, diversos elementos para wireframes, tais como bot&otilde;es, breadcrumbs, caixas de di&aacute;logo, campos de busca e mais.</li><li><a
href="http://developer.yahoo.com/ypatterns/about/stencils/">Yahoo! Developer Network Design Stencils</a>. Conhecid&iacute;ssimo set de UI da Yahoo! para o desenvolvimento de wireframes. Eles disponibilizam os modelos para v&aacute;rios programas como OmniGraffle, Visio, Illustrator e Photoshop.</li><li><a
href="http://www.johnnynines.com/2009/03/wireframe-symbols/">Wireframe Symbols</a>. Cont&eacute;m formas e elementos diversos, como bot&otilde;es, cabe&ccedil;alhos, listas e tabelas para criar wireframes com o Illustrator.</li><li><a
href="http://www.jankoatwarpspeed.com/post/2009/12/24/sketching-wireframing-kit.aspx">Free Sketching &amp; Wireframing Kit</a>. Conjunto de elementos para wireframe dispon&iacute;vel em v&aacute;rios formatos de arquivo: Adobe Illustrator, SVG, PDF e EPS.</li><li><a
href="http://www.eleqtriq.com/2010/08/sqetch-wireframe-toolkit/">Sqetch</a>. Kit para Illustrator que inclui modelos e elementos, incluindo para iPad, elementos GUI e elementos de formul&aacute;rio.</li><li><a
href="http://www.dragnet.se/webbdesign/websitewireframes.html">Dragnet Kit for Fireworks</a>. Kit para Adobe Fireworks que inclui uma variedade de elementos da interface como bot&otilde;es, menus, combobox e abas.</li></ul><p>Frequentemente esta lista com <strong>modelos para wireframes</strong> ser&aacute; revisada e novas fontes ser&atilde;o inclu&iacute;das. Portanto, fique atento a este artigo para saber quando novos recursos forem disponibilizados.</p><h2>Utilize wireframes para pensar o projeto</h2><div
id="attachment_731" class="wp-caption alignleft" style="width: 260px"><img
class="size-full wp-image-731" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/11/wireframe-web-guia-completo-exemplo-de-um-wireframe.jpg" alt="Wireframes para web: exemplo de um wireframe" width="250" height="250" /><p
class="wp-caption-text">Wireframe manual</p></div><p>Trabalhar com wireframes pode ser uma &oacute;tima maneira de pensar o design de um projeto web sem gastar horas trabalhando em modelos no Photoshop ou codificando projetos preliminares. A <strong>flexibilidade dos wireframes</strong> permite trabalhar com diversas id&eacute;ias de design e layout rapidamente e com pouco custo.</p><p>D&ecirc; uma olhada nos documentos de especifica&ccedil;&atilde;o de projeto; eles dir&atilde;o quais elementos s&atilde;o necess&aacute;rios para o site. Em seguida, comece a organizar tudo em wireframes. N&atilde;o tenha medo de tentar coisas n&atilde;o tradicionais nesta fase. Lembre-se: s&atilde;o apenas wireframes. Um erro ou uma tentativa fracassada neste momento, n&atilde;o definir&aacute; um fracasso ou far&aacute; com que voc&ecirc; tenha muito retrabalho. Libere sua criatividade nesta fase!</p><h2>Wireframes como resultado final do projeto</h2><p>Apresentar wireframes para o cliente pode ser uma valiosa forma de se certificar de que todos est&atilde;o em sintonia com o projeto antes de criar os modelos do projeto real. &Eacute; muito mais f&aacute;cil alterar a posi&ccedil;&atilde;o dos elementos quando voc&ecirc; est&aacute; trabalhando com wireframes do que quando est&aacute; com o projeto no Photoshop ou p&aacute;ginas j&aacute; codificadas.</p><p>Se for esse o caso, de haver a etapa de apresenta&ccedil;&atilde;o dos wireframes, isso tamb&eacute;m pode mostrar a habilidade do designer e agrega valor ao projeto, como um todo. Certifique-se, portanto, de que a etapa para cria&ccedil;&atilde;o, apresenta&ccedil;&atilde;o e aprova&ccedil;&atilde;o dos wire frames constam no escopo do projeto &#8211; e isso acarreta em um impacto no tempo total, obviamente &#8211; e, por consequ&ecirc;ncia, haver&aacute; um impacto no processo geral de design.</p><h3>Wireframe em rascunho x Wireframe elegante</h3><p>Um dos maiores considera&ccedil;&otilde;es ao criar wireframes que ser&aacute; apresentado &eacute; a forma como eles devem parecer. Geralmente h&aacute; duas formas de pensar sobre este assunto. Um ponto de vista sobre esta debate <strong>wireframe em rascunho</strong> contra <strong>wireframes elegantes</strong> (mais bem elaborados/apresentados) afirma que: tudo o que ser&aacute; apresentado a um cliente deve ser o mais polido e formalizado poss&iacute;vel.</p><p>O outro ponto de vista argumenta que oferecer ao cliente um wireframe &#8220;polido&#8221; faz do cliente menos propensos a solicitar altera&ccedil;&otilde;es, j&aacute; que as coisas passam o sentimento de &#8220;finalizado&#8221;. Em outras palavras, wireframes em rascunhos d&atilde;o mais margem para que o cliente n&atilde;o goste do resultado e/ou solicite mudan&ccedil;as. H&aacute; pr&oacute;s e contras em cada uma das abordagens.</p><p>Wireframes elegantes muitas vezes podem ajudar um cliente a visualizar melhor o layout do site e ter uma ideia melhor de como tudo vai funcionar e se parecer. Acrescentando coisas como cor ou gr&aacute;ficos voc&ecirc; chega ainda mais perto deste objetivo. No entanto, voc&ecirc; corre o risco de que seu cliente n&atilde;o oferece um <em>feedback</em> verdadeiro por sentir que a proposta j&aacute; est&aacute; &#8220;muito finalizada&#8221;.</p><div
id="attachment_732" class="wp-caption aligncenter" style="width: 560px"><a
href="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/11/wireframe-web-guia-completo-wireframe-elegante.png"><img
class="size-full wp-image-732" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/11/wireframe-web-guia-completo-wireframe-elegante.png" alt="Wireframes para web: exemplo de wireframe elegante" width="550" height="450" /></a><p
class="wp-caption-text">Wireframe elegante</p></div><p>Por outro lado, wireframes em forma de rascunhos s&atilde;o mais como &#8220;id&eacute;ias cruas&#8221; e parecem mais convidativos ao <em>feedback</em> do cliente. A desvantagem &eacute; que os clientes que n&atilde;o s&atilde;o particularmente orientados visualmente &#8211; ou que n&atilde;o t&ecirc;m familiaridade com o que wireframes s&atilde;o &#8211; podem ter dificuldade em imaginar qual realmente &eacute; a proposta e como o site ir&aacute; se parecer no final de todo o desenvolvimento.</p><h2>Recursos de wireframes</h2><p>Para concluir este <strong>guia sobre desenvolvimento de wiframes</strong>, aqui est&atilde;o diversos recursos na web dedicados ao design/produ&ccedil;&atilde;o de wireframes:</p><ul><li><a
href="http://www.flickr.com/groups/ilovewireframes/">I ♥ Wireframes Flickr Group</a>. Milhares de wireframes para se ver e milhares de membros cadastrados colocando novos conte&uacute;dos com frequ&ecirc;ncia.</li><li><a
href="http://wireframes.tumblr.com/">I ♥ Wireframes Tumblr</a>. Excelente lugar para se ver muitos wireframes e se inspirar (&eacute; associado ao grupo do Flickr acima).</li><li><a
href="http://www.wireframeshowcase.com/">Wireframe Showcase</a>. Site que apresenta um &#8220;antes e depois&#8221;, mostrando wireframes com seus respectivos projetos finais. Excelente!</li><li><a
href="http://wireframes.linowski.ca/">Wireframes Magazine</a>. Cobre todas as coisas relacionadas a wireframe, incluindo toneladas de stencils e modelos, bem como exemplos para inspira&ccedil;&atilde;o.</li></ul><p>Esta lista de recursos para wireframes ser&aacute; constantemente atualizada. Fique ligado!</p><h2>Conclus&otilde;es</h2><p>Depois de acompanhar este <strong>guia completo de wireframes</strong>, &eacute; poss&iacute;vel chegar a algumas conclus&otilde;es importantes sobre o assunto.</p><p>Como o wireframe deve ser, depende do objetivo do projeto e/ou do perfil do cliente. Caso haja maior espa&ccedil;o para troca de ideias, opte pelo wireframes no estilo rascunho; caso apresente algo mais elegante, um wireframe melhor trabalhado &#8211; podendo at&eacute; conter cores, gr&aacute;ficos, etc -, o impacto da apresenta&ccedil;&atilde;o &eacute; melhor, contudo, isso n&atilde;o abre tanto espa&ccedil;o para discuss&otilde;es, pois causa sentimentos de completude e imutabilidade.</p><p>De qual maneira se vai fazer os wireframes, tamb&eacute;m &eacute; algo opcional: h&aacute; pessoas que preferem wireframes em papel e caneta; outros em programas de editora&ccedil;&atilde;o de imagens; e ainda os que preferem programas espec&iacute;ficos para constru&ccedil;&atilde;o de wireframes, modelos e prot&oacute;tipos. Mais uma vez, &eacute; voc&ecirc; quem decide qual destes ser&aacute; melhor.</p><p>Deve haver, no projeto, a important&iacute;ssima etapa de elabora&ccedil;&atilde;o de wireframes. &Eacute; preciso que dentro do prazo &#8211; e or&ccedil;amento &#8211; conste os per&iacute;odos estimados para a feitura, edi&ccedil;&atilde;o, entrega, feedback e revis&atilde;o de cada wireframe. &Eacute; logicamente mais r&aacute;pido, f&aacute;cil e dispende menos recursos financeiros se alterar elementos num wireframe do que numa estrutura HTML/CSS j&aacute; pronta.</p><p>Caso queira que seu projeto dispense retrabalhos e que poss&iacute;veis mudan&ccedil;as sejam pensadas e mostras de maneira mais r&aacute;pida, podendo ser feitas com um custo baix&iacute;ssimo, ent&atilde;o <strong>usar wireframes em seus projetos &eacute; de extrema import&acirc;ncia!</strong></p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><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/design/elementos-design-aplicados-web/" title="Elementos de design aplicados à web">Elementos de design aplicados à web</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/javascript/melhores-editores-wysiwyg-para-seu-projeto/" title="Melhores editores WYSIWYG para seu projeto">Melhores editores WYSIWYG para seu projeto</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/css/diferencas-entre-ids-e-classes/" title="Diferenças entre IDs e Classes">Diferenças entre IDs e Classes</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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/79x0pQrxuBc8nO-5K0FVrDvUyDE/0/da"><img src="http://feedads.g.doubleclick.net/~a/79x0pQrxuBc8nO-5K0FVrDvUyDE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/79x0pQrxuBc8nO-5K0FVrDvUyDE/1/da"><img src="http://feedads.g.doubleclick.net/~a/79x0pQrxuBc8nO-5K0FVrDvUyDE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=wUilw-SNAQ0:_GlmMQ7Pz64:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=wUilw-SNAQ0:_GlmMQ7Pz64:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=wUilw-SNAQ0:_GlmMQ7Pz64:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=wUilw-SNAQ0:_GlmMQ7Pz64:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=wUilw-SNAQ0:_GlmMQ7Pz64:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=wUilw-SNAQ0:_GlmMQ7Pz64:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/wUilw-SNAQ0" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/usabilidade/wireframe-web-guia-completo/feed/</wfw:commentRss> <slash:comments>3</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/usabilidade/wireframe-web-guia-completo/</feedburner:origLink></item> <item><title>10 erros básicos de web design</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/OPeZYaJ8Epw/</link> <comments>http://desenvolvimentoparaweb.com/design/10-erros-basicos-de-web-design/#comments</comments> <pubDate>Wed, 14 Sep 2011 13:38:39 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Design]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Layout]]></category> <category><![CDATA[Web Design]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=710</guid> <description><![CDATA[Conhe&ccedil;a 10 erros b&aacute;sicos de web design e aprenda como evit&aacute;-los para tornar seus projetos web mais profissionais.]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-715" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/09/web-design-erros-basicos.png" alt="Web design: 10 erros b&aacute;sicos" width="128" height="128" /></p><p>Uma das principais &aacute;reas do <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento web</a> &eacute; o <strong>web design</strong>. Ao se comunicar com outras &aacute;reas correlatas, &eacute;  atrav&eacute;s de um bom planejamento visual que o web design proporciona uma boa experi&ecirc;ncia visual ao visitante, garantindo que a qualidade do projeto web seja incrementada e esteja mais perto do sucesso!</p><p>O contr&aacute;rio disso &eacute; um web design que n&atilde;o consegue atender &agrave;s necessidades do projeto e acaba por piorar a situa&ccedil;&atilde;o&#8230; Para corrigirmos um problema, &eacute; preciso conhec&ecirc;-los antes; por isso, vamos a essa lista de <strong>10 erros b&aacute;sicos de web design</strong> que voc&ecirc; deve evitar!</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original <a
href="http://www.1stwebdesigner.com/design/basic-visual-web-design-mistakes/">10 Basic Visual Web Design Mistakes</a>, do blog <a
href="http://www.1stwebdesigner.com">1WD.CO</a> e sofreu algumas adapta&ccedil;&otilde;es.</div><p>Acredito que as pessoas t&ecirc;m tanta experi&ecirc;ncias em ver/analisar web design quanto &eacute; seu tempo de navega&ccedil;&atilde;o na web. Eu poderia garantir que voc&ecirc; v&ecirc; mais web design ruim do que bom. Eu tamb&eacute;m vejo dessa maneira: existe um monte de sites que tem web design ruim. A seguir, veja 10 erros b&aacute;sicos de web design para que voc&ecirc; possa analisar e saber o que <strong>n&atilde;o deve</strong> fazer em seus sites!</p><h2>Erro b&aacute;sico de web design 1: usar fontes ruins</h2><p
style="text-align: center;"><img
class="aligncenter size-full wp-image-712" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/09/erro-basico-web-design-fontes-ruins.jpg" alt="Erro b&aacute;sico de web design: usar fontes ruins" width="570" height="133" /></p><p>Sabe quando voc&ecirc; visita um site com com uma fonte t&atilde;o estranha ou extravagante que fica muito dif&iacute;cil de ler? Determinadas fontes &#8220;extravagantes&#8221; n&atilde;o devem ser usado no corpo do texto, caso contr&aacute;rio, o leitor n&atilde;o ser&aacute; capaz de ler e/ou a leitura ficar&aacute; t&atilde;o cansativa a ponte de fazer com que esse visitante desista da leitura e abandone o site.</p><p>Use fontes que s&atilde;o <strong>f&aacute;ceis de ler</strong>!</p><p>Outro erro &eacute; que algumas pessoas usam fonte n&atilde;o-padr&atilde;o em seus sites. Se o seu leitor &eacute; apenas uma pessoa comum que n&atilde;o t&ecirc;m tantas fontes adicionais instaladas, ele vai se confundir e dizer: &#8220;Por que &eacute; que o tamanho da fonte deste site &eacute; t&atilde;o pequena?&#8221;. Infelizmente, isso faz as pessoas se queixarem sobre o site. Basta usar font comuns como Arial, Helvetica, Verdana, Georgia, ou Times New Roman, que a grande maioria tem em seu computador.</p><h2>Erro b&aacute;sico de web design 2: n&atilde;o usar imagens, apenas texto puro</h2><p>Acredite, as pessoas v&atilde;o ficar entediadas se veem apenas texto e deixar&atilde;o seu site uma vez que est&atilde;o cansados ​​de ler um oceano de palavras&#8230; Isso &eacute; internet, n&atilde;o um livro de auto-ajuda. Se voc&ecirc; n&atilde;o tem id&eacute;ia sobre que imagem voc&ecirc; deve colocar, basta usar qualquer imagem relacionada com o t&iacute;tulo do conte&uacute;do. Evite deixar o &#8220;corpo&#8221; do texto sozinho, sem qualquer imagem.</p><p>Obviamente que existem algumas (que podem ser consideradas) exce&ccedil;&otilde;es, como manuais t&eacute;cnicos, sites com tutoriais espec&iacute;ficos e afins. Mas, ainda nestes casos, sempre que poss&iacute;vel &eacute; interessante inserir algumas imagens/ilustra&ccedil;&otilde;es contextualizadas.</p><h2>Erro b&aacute;sico de web design 3: textos longos sem par&aacute;grafos</h2><p>Mesmo que voc&ecirc; tenha inserido imagens no conte&uacute;do de seu site, &eacute; importante lembrar de separar as coisas usando par&aacute;grafos. Imagine que voc&ecirc; est&aacute; lendo um artigo com mais de 500 palavras sem qualquer par&aacute;grafo. &Eacute; cansativo e pode ser confuso! Com algumas frases separadas por par&aacute;grafos, as pessoas conseguir&atilde;o ler seus conte&uacute;dos com mais facilidade.</p><p>Mas acho que todos que cursaram o prim&aacute;rio j&aacute; sabem disso, n&atilde;o &eacute;?  ;-)</p><h2>Erro b&aacute;sico de web design 4: fonte muito pequena</h2><p><img
class="aligncenter size-full wp-image-713" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/09/erro-basico-web-design-fonte-muito-pequena.jpg" alt="Erro b&aacute;sico de web design: fonte muito pequena" width="570" height="133" /></p><p>Alguma vez voc&ecirc; j&aacute; visitou um site e voc&ecirc; teve que ampliar o tamanho da fonte atrav&eacute;s de recursos do navegaor para ler o conte&uacute;do? Isso &eacute; ruim. Fa&ccedil;a com que seu texto tenha um tamanho equivalente de, pelo menos, 12pt, para se certificar de que o conte&uacute;do ser&aacute; leg&iacute;vel o suficiente. Se n&atilde;o, as pessoas ter&atilde;o que apelar para ferramentas de terceiros e, certamente, podem querer ir para um site que n&atilde;o tenha o mesmo problema&#8230;</p><p>Adicionalmente, voc&ecirc; pode fornecer aos visitantes uma ferramenta simples para controle do tamanho da fonte. Com isso, mesmo usando o texto com um tamanho m&iacute;nimo aceit&aacute;vel, os visitantes que, mesmo assim, quiserem algo maior, ter&atilde;o essa possibilidade de personaliza&ccedil;&atilde;o e facilita&ccedil;&atilde;o de sua leitura.</p><h2>Erro b&aacute;sico de web design 5: flash muito pesado</h2><p>Quando se opta por utilizar Flash em um site, geralmente o objetivo &eacute; agregar valor &agrave; percep&ccedil;&atilde;o visual dos visitantes. Infelizmente, o uso do flash faz com que o site seja mais lento para abrir e aumenta as chances de os visitantes deix&aacute;-lo rapidamente. Reduza o uso de Flash, a menos que seja extremamente necess&aacute;rio para alguma fun&ccedil;&atilde;o espec&iacute;fica.</p><p>Assim que o HTML5 ficar mais madura e amplamente utilizado, provavelmente esta dica ficar&aacute; obsoleta.</p><h2>Erro b&aacute;sico de web design 6: texto por cima de background coloridos</h2><p>A maioria dos web sites usam backgrounds de cor &uacute;nica para melhorar a legibilidade. Se voc&ecirc; pensa que usar fundo colorido vai tornar as coisas melhores e mais agrad&aacute;veis, voc&ecirc; est&aacute; absolutamente errado! Isso s&oacute; faz as pessoas ficarem cansadas de ler seu conte&uacute;do, porque a cor do texto se mistura com o background.</p><p>Perceba que n&atilde;o h&aacute; &#8220;proibi&ccedil;&otilde;es&#8221; em usar cores para o background, o problema est&aacute; em usar patterns ou imagens sem tratamento algum que, inevitavelmente, fazem com que a experi&ecirc;ncia de leitura seja um desastre&#8230; <strong>Bom senso</strong>, pessoal!</p><h2>Erro b&aacute;sico de web design 7: publicidade demais</h2><p><img
class="aligncenter size-full wp-image-714" title="" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/09/erro-basico-web-design-publicidade-demais.jpg" alt="Erro b&aacute;sico de web design: publicidade demais" width="570" height="133" /></p><p>Provavelmente voc&ecirc; j&aacute; deve ter visto sites cheio de banner e an&uacute;ncios de publicidade, das mais variadas maneiras e possibilidades cab&iacute;veis. Voc&ecirc;, mesmo, pode dizer o qu&atilde;o desagrad&aacute;vel isso &eacute;, sem ningu&eacute;m falar pra isso pra voc&ecirc;. Jamais priorize an&uacute;ncios em detrimento do conte&uacute;do!</p><p>Bons web sites sempre colocam an&uacute;ncios em lugares estrat&eacute;gicos de modo a n&atilde;o incomodar o visitante e n&atilde;o atrapalhar o conte&uacute;do principal. Inspirar-se nos bons geralmente &eacute; uma boa estrat&eacute;gia.</p><h2>Erro b&aacute;sico de web design 8: pop ups indesejados</h2><p>Eu odeio (e tenho certeza de que voc&ecirc;, tamb&eacute;m) sites com pop-ups indesej&aacute;veis! Eles realmente irritam! Eu quero olhar para a informa&ccedil;&atilde;o, mas o pop up interfere e faz com que eu perca meu tempo. Existe um motivo pra isso, claro, mas isso continua sendo um ato odi&aacute;vel&#8230;</p><h2>Erro b&aacute;sico de web design 9: conte&uacute;dos muito extensos</h2><p>Conte&uacute;dos (como artigos, por exemplo) muito extensos causam um efeito: geralmente as pessoas ficam entediadas para l&ecirc;-los&#8230; Algumas pessoas apregoam a diretiva de que conte&uacute;dos devem ter, no m&aacute;ximo, 1000 palavras &#8211; com alguma adi&ccedil;&atilde;o de imagem para torn&aacute;-lo mais atraente do que um texto simples. Pessoalmente, n&atilde;o sou muito apegado a n&uacute;meros precisos e sim ao <strong>bom senso</strong>. Este artigo que voc&ecirc; est&aacute; lendo neste exato momento, por exemplo, tem mais de 1000 palavras mas, segundo o contexto em que est&aacute;, n&atilde;o &eacute; cansativo.</p><p>O importante &eacute; fazer suas palavras simples e compreens&iacute;veis e ter em mente que a maioria das pessoas n&atilde;o gosta de artigos muito longos, mas que isso n&atilde;o &eacute; uma verdade absoluta e que esta &#8220;regra&#8221; pode ser &#8220;flex&iacute;vel&#8221;, dependendo do nicho a que o conte&uacute;do est&aacute; destinado.</p><h2>Erro b&aacute;sico de web design 10: links invis&iacute;veis</h2><p>Certifique-se de que a cor do link tenha uma cor diferente do texto simples. Simplesmente isso. Isso ajuda o leitor a identificar quais os links que visitaram e tamb&eacute;m o ajuda a n&atilde;o clicar nos links sem querer. Uma dica b&aacute;sica sobre <a
href="http://desenvolvimentoparaweb.com/usabilidade/user-interface-dicas-rapidas/">boas user interfaces</a> que &eacute; preciosa e n&atilde;o deve ser negligenciada.</p><p>Alguns ainda afirmar que a cor dos links deve ser diferente da cor dos t&iacute;tulos. Pessoalmente, n&atilde;o vejo muita necessidade para isso j&aacute; que, teoricamente, a apresenta&ccedil;&atilde;o de um t&iacute;tulo &eacute; bem diferente da apresenta&ccedil;&atilde;o de um link textual. De qualquer forma, fica a seu crit&eacute;rio.</p><h2>Conclus&atilde;o sobre erros de web design</h2><p>Como vimos, estes s&atilde;o 10 erros b&aacute;sicos de web design que voc&ecirc; deve evitar cometer em seus projetos web. Evidentemente, nenhuma das dicas aqui apresentadas s&atilde;o inflex&iacute;veis e/ou constituem-se verdades absolutas. Como j&aacute; tivemos a oportunidade de ressalvar em diversos artigos aqui no <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento para web</a>, no fim das contas, o que melhor guia seu projeto ao sucesso &eacute; o seu bom senso!</p><p>E voc&ecirc;, apontaria mais algum erro b&aacute;sico de web design? Comente!</p><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/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/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/css/diferencas-entre-ids-e-classes/" title="Diferenças entre IDs e Classes">Diferenças entre IDs e Classes</a></li><li><a
href="http://desenvolvimentoparaweb.com/css/css-float-consideracoes-dicas-e-macetes-para-bons-layouts-na-web/" title="CSS float: considerações, dicas e macetes para bons layouts na web">CSS float: considerações, dicas e macetes para bons layouts na web</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/gestalt-aplicado-ao-design-web-parte-6-principio-da-experiencia-passada/" title="Gestalt aplicado ao design web (parte 6): princípio da experiência passada">Gestalt aplicado ao design web (parte 6): princípio da experiência passada</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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/CD9sdqVA1gLgkdn2kO3fkTSMcMk/0/da"><img src="http://feedads.g.doubleclick.net/~a/CD9sdqVA1gLgkdn2kO3fkTSMcMk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CD9sdqVA1gLgkdn2kO3fkTSMcMk/1/da"><img src="http://feedads.g.doubleclick.net/~a/CD9sdqVA1gLgkdn2kO3fkTSMcMk/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=OPeZYaJ8Epw:LLc4yvyN9VI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=OPeZYaJ8Epw:LLc4yvyN9VI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=OPeZYaJ8Epw:LLc4yvyN9VI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=OPeZYaJ8Epw:LLc4yvyN9VI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=OPeZYaJ8Epw:LLc4yvyN9VI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=OPeZYaJ8Epw:LLc4yvyN9VI:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/OPeZYaJ8Epw" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/design/10-erros-basicos-de-web-design/feed/</wfw:commentRss> <slash:comments>12</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/design/10-erros-basicos-de-web-design/</feedburner:origLink></item> <item><title>JSON – JavaScript Object Notation</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/ZJ5Xk5ypVxE/</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>
<p><a href="http://feedads.g.doubleclick.net/~a/bAofM_ooH0ce0Mit-Ey2PE7UJ1Q/0/da"><img src="http://feedads.g.doubleclick.net/~a/bAofM_ooH0ce0Mit-Ey2PE7UJ1Q/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bAofM_ooH0ce0Mit-Ey2PE7UJ1Q/1/da"><img src="http://feedads.g.doubleclick.net/~a/bAofM_ooH0ce0Mit-Ey2PE7UJ1Q/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=ZJ5Xk5ypVxE:JiXfAJNLTuw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=ZJ5Xk5ypVxE:JiXfAJNLTuw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=ZJ5Xk5ypVxE:JiXfAJNLTuw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=ZJ5Xk5ypVxE:JiXfAJNLTuw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=ZJ5Xk5ypVxE:JiXfAJNLTuw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=ZJ5Xk5ypVxE:JiXfAJNLTuw:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/ZJ5Xk5ypVxE" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/feed/</wfw:commentRss> <slash:comments>15</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/javascript/json-javascript-object-notation/</feedburner:origLink></item> <item><title>Cores na web: guia completo</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/uD4vxbLB5l4/</link> <comments>http://desenvolvimentoparaweb.com/design/cores-na-web-guia-completo/#comments</comments> <pubDate>Mon, 09 May 2011 13:10:59 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Design]]></category> <category><![CDATA[Planejamento]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Web Design]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=702</guid> <description><![CDATA[Guia completo sobre cores na web: indica&ccedil;&otilde;es de sites, ferramentas, artigos e mais.]]></description> <content:encoded><![CDATA[<p><img
class="aligncenter size-full wp-image-704" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/05/cores-na-web-guia-teoria-pratica.jpg" alt="Cores na web: guia completo (exemplo de roda de cores)" width="300" height="300" /></p><p>Recentemente, uma leitora do blog escreveu pedindo algum material sobre <strong>cores na web</strong>, perguntando se poderia publicar um artigo sobre este assunto t&atilde;o importante no desenvolvimento para web. Como j&aacute; tivemos a oportunidade de mostrar, as cores s&atilde;o uma das <a
href="http://desenvolvimentoparaweb.com/usabilidade/web-sites-e-comunicacao-21-maneiras-de-os-sites-se-comunicarem-com-seus-visitantes/">maneiras de os sites se comunicarem com seus visitantes</a>, imprescind&iacute;vel para se fazer web sites de qualidade.</p><p>O assunto, al&eacute;m de complexo e, em alguns pontos, controverso, &eacute; bastante amplo. Por isso, ao inv&eacute;s de escrever um artigo ou uma <a
href="http://desenvolvimentoparaweb.com/categoria/series/">s&eacute;rie</a> a respeito, decidi que a contribui&ccedil;&atilde;o seria maior ao indicar fontes e refer&ecirc;ncias sobre o tema. Certamente compartilhar o que outras pessoas j&aacute; escreveram sobre as <strong>cores na web</strong> (e cores, em geral) ser&aacute; uma contribui&ccedil;&atilde;o muito maior.</p><h2>Refer&ecirc;ncias sobre teoria das cores para web</h2><p>O uso da teoria das cores na web, na verdade, n&atilde;o &eacute; assunto exclusivo da web. O que se faz &eacute; pegar todo o este conte&uacute;do te&oacute;rico e, simplesmente, realizar algumas adapta&ccedil;&otilde;es para que este seja mais &#8220;compat&iacute;vel&#8221; e traga resultados mais eficientes no ambiente online. Portanto, quando se faz este tipo de estudo, voc&ecirc; encontra os mesmos termos, terminologias, conceitos e constata&ccedil;&otilde;es, seja no &#8220;mundo online&#8221; ou &#8220;mundo offine&#8221;.</p><p>Ent&atilde;o, uma boa forma de come&ccedil;ar o estudo das cores &eacute; acessando o site de <strong>Maria Claudia Cortes</strong>, <a
href="http://www.mariaclaudiacortes.com/colors/Colors.html">Color in Motion</a>, no qual, atrav&eacute;s de intera&ccedil;&otilde;es do pr&oacute;prio visitante, ela mostra o significado, melhor combina&ccedil;&atilde;o, efeitos psicol&oacute;gicos, significado nas diferentes partes do mundo, etc, das cores vermelho, laranja, amarelo, verde, azul e roxo. Al&eacute;m disso, h&aacute; uma anima&ccedil;&atilde;o que envolve os personagens das cores, mostrando algumas das principais respectivas caracter&iacute;sticas. Realmente vale a pena o acesso!</p><p>&Eacute; importante, tamb&eacute;m, j&aacute; que o assunto s&atilde;o <strong>cores na web</strong>, conhecer um pouco da parte t&eacute;cnica que envolve a exibi&ccedil;&atilde;o de cores em monitores, diferen&ccedil;a entre CMYK (real) e RGB (virtual), diferen&ccedil;a ao representar as cores usando RGB ou Hexadecimal, dentre outros. E, para isso, existe uma explica&ccedil;&atilde;o-base bastante simples de se entender, que pode ser encontrada no site da <a
href="http://www.hi-midia.com/">Hi-Midia</a>, em um <a
href="http://www.hi-midia.com/2009/06/as-cores-na-web/">artigo sobre as cores na web</a>.</p><p>Uma das grandes refer&ecirc;ncias na &aacute;rea &eacute; <strong>Daniele Viana</strong> que, em <a
href="http://www.danielevsilva.com.br/">seu blog</a>, fez uma s&eacute;rie de artigos a respeito. O interessante &eacute; que, dentre esses artigos, existem aqueles que abordam, especificamente, as principais cores e seus efeitos em web designs. Artigos estes que, numa disposi&ccedil;&atilde;o did&aacute;tica, seriam:</p><ul><li><a
href="http://www.danielevsilva.com.br/uso-das-cores/">O uso das cores em webdesign</a></li><li>Breve an&aacute;lise das cores<ul><li><a
href="http://www.danielevsilva.com.br/amarelo/">Amarelo</a></li><li><a
href="http://www.danielevsilva.com.br/azul/">Azul</a></li><li><a
href="http://www.danielevsilva.com.br/cinza/">Cinza</a></li><li><a
href="http://www.danielevsilva.com.br/laranja/">Laranja</a></li><li><a
href="http://www.danielevsilva.com.br/marrom/">Marrom</a></li><li><a
href="http://www.danielevsilva.com.br/preto/">Preto</a></li><li><a
href="http://www.danielevsilva.com.br/cor-de-rosa/">Rosa</a></li><li><a
href="http://www.danielevsilva.com.br/roxo/">Roxo</a></li><li><a
href="http://www.danielevsilva.com.br/verde/">Verde</a></li><li><a
href="http://www.danielevsilva.com.br/vermelho/">Vermelho</a></li></ul></li><li><a
href="http://www.danielevsilva.com.br/combinando-cores-2/">Como criar combina&ccedil;&otilde;es de cores mais inteligentes</a></li></ul><div>Tamb&eacute;m o pessoal do <a
href="http://vandelaydesign.com/blog/">Vandelay Design Blog</a> apresenta excelentes refer&ecirc;ncias de sites por cor que valem a pena serem vistos:</div><div><ul><li><a
href="http://vandelaydesign.com/blog/galleries/yellow-websites/">Amarelo</a></li><li><a
href="http://vandelaydesign.com/blog/galleries/blue-websites/">Azul</a></li><li><a
href="http://vandelaydesign.com/blog/galleries/orange-websites/">Laranja</a></li><li><a
href="http://vandelaydesign.com/blog/galleries/brown-websites/">Marrom</a></li><li><a
href="http://vandelaydesign.com/blog/galleries/green-websites/">Verde</a></li><li><a
href="http://vandelaydesign.com/blog/galleries/red-websites/">Vermelho</a></li><li><a
href="http://vandelaydesign.com/blog/galleries/pink-websites/">Rosa</a></li><li><a
href="http://vandelaydesign.com/blog/galleries/purple-websites/">Roxo</a></li></ul></div><h2>Ferramentas para cores na web</h2><p>J&aacute; tivemos a oportunidade de mostrar algumas ferramentas para cores na web, como, por exemplo, o <a
href="http://desenvolvimentoparaweb.com/acessibilidade/colorblind-web-page-filter/">Colorblind Web Page Filter</a>. Mas, para compor este artigo melhor, faz-se necess&aacute;ria uma lista mais incrementada. Portanto, segue uma lista completa de ferramentas de cores para web:</p><ul><li>Amostras/Combina&ccedil;&otilde;es de cores<ul><li><a
href="http://0to255.com/">0to255</a></li><li><a
href="http://www.colorschemer.com/schemes/">Color Schemer Scheme Gallery</a></li><li><a
href="http://www.colourlovers.com/">COLOURlovers</a></li><li><a
href="http://www.firewheeldesign.com/sparkplug/2006/February/colorburn_winners.php">ColorBurn Winners</a></li><li><a
href="http://www.colorcombos.com/">Color Combos</a></li><li><a
href="http://www.gpeters.com/color/color-schemes.php">Color Schemes</a></li><li><a
href="http://kuler.adobe.com/">Kuler</a></li></ul></li><li>Montagem de esquemas de cores<ul><li><a
href="http://colorblender.com/">Color Blender</a></li><li><a
href="http://www.colorjack.com/sphere/">Color Jack: Sphere</a></li><li><a
href="http://www.degraeve.com/color-palette/">Color Palette Generator</a></li><li><a
href="http://colorschemedesigner.com/">Color Scheme Designer</a></li><li><a
href="http://www.colorschemer.com/online.html">Color Schemer Online</a></li><li><a
href="http://www.easyrgb.com/index.php?X=HARM">EasyRGB: Color Harmonies</a></li></ul></li><li>Cores a partir de imagem<ul><li><a
href="http://www.degraeve.com/color-palette/">Color Palette Generator</a></li><li><a
href="http://bighugelabs.com/flickr/colors.php">Palette Generator</a></li><li><a
href="http://whatsitscolor.com/">What’s Its Color</a></li></ul></li><li>Outros<ul><li><a
href="http://meyerweb.com/eric/tools/color-blend/">Color Blender</a></li><li><a
href="http://www.etre.com/tools/colourcheck/">Colour Check</a></li><li><a
href="http://www.limov.com/colour/">Colour Selector</a></li><li><a
href="http://redalt.com/Tools/I+Like+Your+Colors">I Like Your Colors</a></li></ul></li></ul><h2>Conclus&atilde;o</h2><p>Quando se trata de cores e exibi&ccedil;&atilde;o de imagens na web, algo que deve ser feito depois de o servi&ccedil;o feito, &eacute; &#8220;ajustar&#8221; o trabalho para a web. Ent&atilde;o, confira o artigo &#8220;<a
href="http://desenvolvimentoparaweb.com/miscelanea/como-otimizar-imagens-web-internet/">Como otimizar imagens para web – guia de otimiza&ccedil;&atilde;o de imagens</a>&#8220;.</p><p>Existem muitos e muitos sites que tratam sobre a teoria das cores na web. Alguns tratam de forma mais geral; outros mais pormenorizada. Mas s&atilde;o tantos e tantos que tentar sistematizar todos em um &uacute;nico artigo &eacute; algo bastante dif&iacute;cil de se fazer. Portanto, caso tenha algum complemento a fazer e/ou ferramenta para indicar, <strong>comente</strong>!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/css/css-float-consideracoes-dicas-e-macetes-para-bons-layouts-na-web/" title="CSS float: considerações, dicas e macetes para bons layouts na web">CSS float: considerações, dicas e macetes para bons layouts na web</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/gestalt-aplicado-ao-design-web-parte-6-principio-da-experiencia-passada/" title="Gestalt aplicado ao design web (parte 6): princípio da experiência passada">Gestalt aplicado ao design web (parte 6): princípio da experiência passada</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-4-principio-da-boa-continuidade-ou-principio-do-alinhamento/" title="Gestalt aplicado ao design web (parte 4): princípio da boa continuidade ou princípio do alinhamento">Gestalt aplicado ao design web (parte 4): princípio da boa continuidade ou 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/design/gestalt-aplicado-ao-design-web-parte-2-principio-da-proximidade/" title="Gestalt aplicado ao design web (parte 2): princípio da proximidade">Gestalt aplicado ao design web (parte 2): princípio da proximidade</a></li><li><a
href="http://desenvolvimentoparaweb.com/design/gestalt-aplicado-ao-design-web-parte-1-origem-do-termo-significado-e-utilidade/" title="Gestalt aplicado ao design web (parte 1): origem do termo, significado e utilidade">Gestalt aplicado ao design web (parte 1): origem do termo, significado e utilidade</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><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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/PNyta0Wz4HPL_qXw20vfVgDl-9s/0/da"><img src="http://feedads.g.doubleclick.net/~a/PNyta0Wz4HPL_qXw20vfVgDl-9s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PNyta0Wz4HPL_qXw20vfVgDl-9s/1/da"><img src="http://feedads.g.doubleclick.net/~a/PNyta0Wz4HPL_qXw20vfVgDl-9s/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=uD4vxbLB5l4:Cqp5dao6XKk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=uD4vxbLB5l4:Cqp5dao6XKk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=uD4vxbLB5l4:Cqp5dao6XKk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=uD4vxbLB5l4:Cqp5dao6XKk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=uD4vxbLB5l4:Cqp5dao6XKk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=uD4vxbLB5l4:Cqp5dao6XKk:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/uD4vxbLB5l4" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/design/cores-na-web-guia-completo/feed/</wfw:commentRss> <slash:comments>6</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/design/cores-na-web-guia-completo/</feedburner:origLink></item> <item><title>Como fazer loading em conteúdos do site</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/tMw5RUsUb1w/</link> <comments>http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/#comments</comments> <pubDate>Thu, 24 Feb 2011 20:12:22 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[jQuery]]></category> <category><![CDATA[Usabilidade]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[Plugins]]></category> <category><![CDATA[UX]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=696</guid> <description><![CDATA[Muitos desenvolvedores procuram uma solu&ccedil;&atilde;o eficiente para fazer loading em conte&uacute;dos do site. Com jLoader, isso &eacute; simples.]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2011/02/como-fazer-loading-conteudos-site-300x300.jpg" alt="Como fazer loading em conte&uacute;dos do site: caneca ilustrativa" title="" width="300" height="300" class="aligncenter size-medium wp-image-697" /></p><p>Quando o assunto &eacute; <strong>desenvolvimento web</strong>, os visitantes de sites n&atilde;o t&ecirc;m muita paci&ecirc;ncia para esperar&#8230; Estudos mostram que se o site n&atilde;o apresentar algum feedback (mostrar alguns elementos/conte&uacute;dos) em poucos segundos, a pessoa desiste de esperar e abandona o site &#8211; com grandes probabilidades de n&atilde;o mais retornar.</p><p>Uma das fun&ccedil;&otilde;es mais interessantes &eacute; apresentar um <strong>loading</strong> (vulgo &#8220;carregamento&#8221;) indicando quantos por cento (%) do site est&atilde;o carregados e o que ainda falta, mostrando para o visitante este feedback que ele precisa para ter certeza de que &#8220;coisas&#8221; est&atilde;o acontecendo.</p><p>Depois do advento do AJAX, nos anos 90 do s&eacute;culo passado, e surgimento de muitos bons frameworks para front-end depois disso, tais como <a
href="http://desenvolvimentoparaweb.com/categoria/jquery/">jQuery</a>, os programadores contamos com excelentes <a
title="ferramentas e recursos" href="http://desenvolvimentoparaweb.com/indicacoes/ferramentas-e-recursos-para-desenvolvimento-web/">ferramentas e recursos</a> para acelerar o carregamento e <a
title="melhorar a performance de sites" href="http://desenvolvimentoparaweb.com/miscelanea/8-maneiras-de-melhorar-a-performance-de-um-site/">melhorar a performance de sites</a>, sendo poss&iacute;vel realizar fun&ccedil;&otilde;es, efeitos e intera&ccedil;&otilde;es que, pouco tempo atr&aacute;s, n&atilde;o eram sequer imaginadas.</p><p>Uma das intera&ccedil;&otilde;es &eacute; <strong>fazer loading em conte&uacute;dos do site</strong>, ou, mesmo, em p&aacute;ginas inteiras do site, e uma das maneias de se fazer isso &eacute; usando o plugin para jQuery <strong>jLoader</strong>.</p><h2>jLoader: din&acirc;mica</h2><p>&Eacute; poss&iacute;vel ver no <a
href="http://code.google.com/p/jloader/">site oficial do jLoad</a> que est&aacute; licenciado sob a <a
href="http://www.gnu.org/licenses/gpl.html">GNU GPL v3</a>, ent&atilde;o seu uso &eacute; gr&aacute;tis e pode ser feito sem maiores complica&ccedil;&otilde;es.</p><p>O que o plugin permite &eacute; mostrar uma barra de carregamento para elementos espec&iacute;ficos da p&aacute;gina (lembrando que &#8220;body&#8221; tamb&eacute;m &eacute; um elemento da p&aacute;gina). Quer dizer, &eacute; poss&iacute;vel tanto carregar elementos espec&iacute;ficos da p&aacute;gina (e o jLoader permite fazer m&uacute;ltiplos carregamentos simult&acirc;neos), quanto carregar a p&aacute;gina inteira, colocando o loader no documento inteiro.</p><p>Algumas das caracter&iacute;sticas do jLoader s&atilde;o:</p><ul><li>M&uacute;ltiplos loadings simult&acirc;neos na mesma p&aacute;gina</li><li>Acompanha redimensionamento da janela</li><li>Se o elemento-alvo tiver imagem de background ou for uma imagem, isso &eacute; levado em considera&ccedil;&atilde;o</li><li>Fun&ccedil;&atilde;o para interromper loadings em triggers de eventos</li><li>Dentre outros</li></ul><h2>jLoader: funcionamento</h2><p>O plugin &eacute; leve (8KB) e conta com somente 1 arquivo (nada de CSS externo). Como citado, &eacute; poss&iacute;vel fazer carregamento para v&aacute;rios elementos da p&aacute;gina ao mesmo tempo; para cada um deles, o m&eacute;todo construtor pode receber argumentos de personaliza&ccedil;&atilde;o:</p><ul><li><strong>overlayColor.</strong> Hexadecimal da cor de background do loading (padr&atilde;o &#8220;#000&#8243;).</li><li><strong>userCallback.</strong> Fun&ccedil;&atilde;o para quando o carregamento termina (padr&atilde;o &#8220;null&#8221;).</li><li><strong>showProgress.</strong> Se a barra de loading vai ou n&atilde;o aparecer (padr&atilde;o &#8220;false&#8221;).</li><li><strong>showProgressText.</strong> Se o n&uacute;mero da porcentagem vai ou n&atilde;o aparecer (padr&atilde;o &#8220;false&#8221;).</li><li><strong>progressColor.</strong> Hexadecimal para a cor da barra de progresso (padr&atilde;o &#8220;#FFF&#8221;).</li><li><strong>textColor.</strong> Hexadecimal para a cor dos n&uacute;meros da porcentagem (padr&atilde;o &#8220;#FFF&#8221;).</li><li><strong>textSize.</strong> Tamanho do texto para os n&uacute;meros da porcentagem (padr&atilde;o &#8220;15&#8243;).</li><li><strong>loaderPosition.</strong> Reposiciona o loader no overlay; por padr&atilde;o &eacute; centalizado (usa-se &#8220;loaderPosition:{top:y,left:x}&#8221;).</li></ul><p>N&atilde;o s&atilde;o tantas op&ccedil;&otilde;es, assim, mas j&aacute; d&aacute; para fazer um n&iacute;vel de personaliza&ccedil;&atilde;o bem interessante. Vamos ver em alguns exemplos.</p><h2>jLoader: exemplo 1</h2><p>Como primeiro exemplo, vamos imaginar que queremos fazer loading em um elemento de id &#8220;escopo&#8221;, mostrando a barra de progresso e o texto da porcentagem de carregamento com texto 20 e, ap&oacute;s o fim do carregamento, dar o trigger para a fun&ccedil;&atilde;o showContent().</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td
class="code"><pre class="php" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>ready<span style="color: #009900;">&#40;</span><span style="color: #000000; 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: #000000; font-weight: bold;">var</span> loader <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Loader<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#escopo'</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span>
	    showProgress<span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	    showProgressText<span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	    textSize<span style="color: #339933;">:</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span>
	    userCallback<span style="color: #339933;">:</span>showContent
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    loader<span style="color: #339933;">.</span>Start<span style="color: #009900;">&#40;</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></td></tr></table></div><h2>jLoader: exemplo 2</h2><p>Loadin no elemento de id &#8220;noticias&#8221;, com fundo &#8220;#0B274C&#8221; e cor da barra de carregamento &#8220;#F6911E&#8221;.</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td
class="code"><pre class="php" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>ready<span style="color: #009900;">&#40;</span><span style="color: #000000; 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: #000000; font-weight: bold;">var</span> loader <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Loader<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#noticias'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#123;</span>
	    showProgress<span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	    showProgressText<span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	    overlayColor<span style="color: #339933;">:</span><span style="color: #0000ff;">'#0B274C'</span><span style="color: #339933;">,</span>
	    progressColor<span style="color: #339933;">:</span><span style="color: #0000ff;">'#F6911E'</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    loader<span style="color: #339933;">.</span>Start<span style="color: #009900;">&#40;</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></td></tr></table></div><h2>jLoader: exemplo 3</h2><p>Loading o site inteiro, com todas as configura&ccedil;&otilde;es padr&atilde;o, exceto o tamanho do texto, que ser&aacute; &#8220;10&#8243;.</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td
class="code"><pre class="php" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>ready<span style="color: #009900;">&#40;</span><span style="color: #000000; 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: #000000; font-weight: bold;">var</span> loader <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Loader<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'body'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#123;</span>
	    textSize<span style="color: #339933;">:</span><span style="color: #cc66cc;">10</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    loader<span style="color: #339933;">.</span>Start<span style="color: #009900;">&#40;</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></td></tr></table></div><h2>Outras customiza&ccedil;&otilde;es</h2><p>Estamos falando de arquivos javascript, meus amigos, e, mesmo que n&atilde;o haja uma fun&ccedil;&atilde;o pr&eacute;-definida e/ou voc&ecirc; queira fazer ajustes mais &#8220;pesados&#8221;, diretamente no core do plugin, basta abrir o arquivo que voc&ecirc; baixou e realizar as mudan&ccedil;as que quiser&#8230;</p><p>Por exemplo, se quiser aumentar a espessura da <strong>barra de loading</strong> (que, por padr&atilde;o, &eacute; de 1px), simplesmente abro o arquivo, procura o trecho de c&oacute;digo que especifica essa caracter&iacute;sticas (na atual vers&atilde;o do jLoader, a 1.1.1, esta caracter&iacute;stica est&aacute; na linha 139 do arquivo <a
href="http://jloader.googlecode.com/files/jLoader.js">jLoader.js</a>).</p><p>Assim como foi explicado no artigo sobre <a
title="cria&ccedil;&atilde;o de URLs amig&aacute;veis com slugs" href="http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/">cria&ccedil;&atilde;o de URLs amig&aacute;veis com slugs</a>, o mesmo vale para qualquer script pronto: basta abrir, estudar e fazer as modifica&ccedil;&otilde;es que cabem ao projeto/resultado pretendido.</p><h2>Conclus&atilde;o</h2><p>Certamente, uma das maiores quest&otilde;es de muitos desenvolvedores &eacute; <strong>como fazer loading no site</strong>. Usando o jLoader, isto est&aacute; resolvido.</p><p>Mas, aten&ccedil;&atilde;o: n&atilde;o &eacute; s&oacute; porque existe o recurso de carregamento, que este deve ser usado em todo e qualquer elemento de todos os sites do mundo&#8230; H&aacute; que se levar em considera&ccedil;&atilde;o o escopo do projeto e se, realmente, existe a necessidade e/ou conveni&ecirc;ncia em usar o recurso.</p><p>Se realmente for necess&aacute;rio, use o jLoader para fazer loadings de elementos no site (ou p&aacute;ginas completas) e desfrute das facilidades de fazer isso de forma t&atilde;o simples, aumentando a boa experi&ecirc;ncia que os visitantes ter&atilde;o!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><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/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/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/indicacoes/25-extensoes-para-o-firefox-para-aumentar-a-produtividade-no-dia-a-dia-na-web/" title="25 extensões para o Firefox para aumentar a produtividade no dia-a-dia na web">25 extensões para o Firefox para aumentar a produtividade no dia-a-dia na web</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/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/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/usabilidade/wireframe-web-guia-completo/" title="Wireframes para web: guia completo de desenvolvimento">Wireframes para web: guia completo de desenvolvimento</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/bRaeR6arrLDaMcYhpOlHlHnqo3c/0/da"><img src="http://feedads.g.doubleclick.net/~a/bRaeR6arrLDaMcYhpOlHlHnqo3c/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bRaeR6arrLDaMcYhpOlHlHnqo3c/1/da"><img src="http://feedads.g.doubleclick.net/~a/bRaeR6arrLDaMcYhpOlHlHnqo3c/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=tMw5RUsUb1w:IOZZc2iAgo0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=tMw5RUsUb1w:IOZZc2iAgo0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=tMw5RUsUb1w:IOZZc2iAgo0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=tMw5RUsUb1w:IOZZc2iAgo0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=tMw5RUsUb1w:IOZZc2iAgo0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=tMw5RUsUb1w:IOZZc2iAgo0:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/tMw5RUsUb1w" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/feed/</wfw:commentRss> <slash:comments>13</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/jquery/como-fazer-loading-site-conteudos/</feedburner:origLink></item> <item><title>5 dicas para temas WordPress melhores</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/eU584go7cBg/</link> <comments>http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/#comments</comments> <pubDate>Mon, 22 Nov 2010 16:54:54 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[WordPress]]></category> <category><![CDATA[Blogs]]></category> <category><![CDATA[Otimização]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[Plugins]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=673</guid> <description><![CDATA[Leia este artigo e conhe&ccedil;a dicas de como desenvolver temas WordPress melhores]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/11/dicas-temas-wordpress-melhores.jpg" alt="5 dicas para temas WordPress melhores" title="" width="250" height="250" class="aligncenter size-full wp-image-677" /></p><p>Muitas pessoas usam o <a
href="http://wordpress.org/">WordPress</a> como plataforma para blogging, sites, portais e outros tipos de projetos online. Depois de instalar o WordPress, a maioria dos usu&aacute;rios de WordPress normalmente vai em busca de um tema pronto para n&atilde;o usar o tema padr&atilde;o que vem com o WP.</p><p>Quer voc&ecirc; use temas gratuitos ou pagos (ou, mesmo, desenvolva seus pr&oacute;prios temas), existem muitas maneiras de melhor&aacute;-los atrav&eacute;s de <strong>dicas para fazer temas WordPress melhores</strong>!</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original &#8220;<a
href="http://sixrevisions.com/wordpress/improve-wordpress-themes-tips/">10 Basic Tips for Improving WordPress Themes</a>&#8220;, do blog <a
href="http://sixrevisions.com/">Six Revisions</a>, e sofreu pequenas modifica&ccedil;&otilde;es.</div><h2>Use favicon personalizado</h2><p>Quando um site n&atilde;o tem um favicon personalizado, ele pode parecer n&atilde;o-profissional. Certifique-se que o seu tema WordPress tenha um favicon pr&oacute;prio. Voc&ecirc; pode conferir uma lista de <a
href="http://sixrevisions.com/resources/favicon_generators_resources/">geradores de favicon</a> para ajudar.</p><p>Para fazer refer&ecirc;ncia ao seu &iacute;cone no WordPress, basta colocar o seguinte c&oacute;digo, normalmente dentro arquivo <strong>header.php</strong> que pode ser encontrado na pasta raiz do seu tema (levando em conta que o arquivo da imagem tamb&eacute;m est&aacute; na pasta raiz):</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;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;icon&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;favicon.ico&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;image/x-icon&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></div></div><h2>Estilize a legenda das imagens</h2><p>Quando voc&ecirc; faz upload de uma imagem para colocar em um post ou p&aacute;gina do WordPress, dentre outras op&ccedil;&otilde;es, &eacute; poss&iacute;vel inserir uma legendas para colocar uma descri&ccedil;&atilde;o para a imagem.  Um bom tema WordPress deve incluir regras CSS para estilizar as legendas da imagens. Para estilizar as legendas segundo o padr&atilde;o do WordPress, insira as seguintes linhas em seu arquivo CSS (geralmente chamado <strong>styles.css</strong>):</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.wp-caption</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#f3f3f3</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#ddd</span><span style="color: #00AA00;">;</span>
border-radius<span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">padding-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">4px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">center</span><span style="color: #00AA00;">;</span>
&nbsp;
-khtml-border-radius<span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span><span style="color: #00AA00;">;</span>
-moz-border-radius<span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span><span style="color: #00AA00;">;</span>
-webkit-border-radius<span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #6666ff;">.wp-caption</span> img <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #6666ff;">.wp-caption</span> p.wp-caption-<span style="color: #993333;">text</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span><span style="color: #933;">11px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span><span style="color: #933;">17px</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span> <span style="color: #933;">4px</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><p>Veja o artigo com o <a
href="http://desenvolvimentoparaweb.com/usabilidade/breadcrumbs-guia-completo-exemplos-melhores-praticas/">guia completo sobre breadcrumbs</a> para visualizar imagens com captions estilizados corretamente.</p><h2>Use PHP Flush</h2><p>Chamando a fun&ccedil;&atilde;o <a
href="http://www.php.net/manual/pt_BR/function.flush.php">flush()</a> do PHP imediatamente depois do cabe&ccedil;alho HTML, voc&ecirc; ser&aacute; capaz de acelerar seu site WordPress. Basta adicionar esta linha com a chamada &agrave; fun&ccedil;&atilde;o ap&oacute;s o &lt;/ head&gt; (por padr&atilde;o, no arquivo arquivo <strong>header.php</strong>):</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: #990000;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div><p>Esse c&oacute;digo simplesmente for&ccedil;a seu servidor web a enviar cabe&ccedil;alho do site antes de enviar o restante do conte&uacute;do. Usando a fun&ccedil;&atilde;o flush(), o navegador tem tempo para baixar todas as folhas de estilo referenciadas no cabe&ccedil;alho enquanto espera pelas outras partes da p&aacute;gina.</p><h2>Minimize os arquivos de seu tema WordPress</h2><p>&Eacute; muito &uacute;til ter os arquivos CSS e javascript de seu tema minimizados para reduzir seu tamanho, consequentemente realizando uma transfer&ecirc;ncias de arquivos mais r&aacute;pido, aumentando a velocidade do site, em geral. Minimizar os arquivos significa retirar caracteres desnecess&aacute;rios deles, como espa&ccedil;os e tabs (e, no melhor caso, juntar todos os arquivos do mesmo tipo em um s&oacute;).</p><p>Existem diversas ferramentas gratuitas na internet para minimizar arquivos CSS e javascript. Para javascript, existem, dentre outros, os excelentes <a
href="http://www.minifyjavascript.com/">JavaScript Compressor</a>, <a
href="http://dean.edwards.name/packer/">/packer/</a>, <a
href="http://jscompress.com/">jsCompress</a> e <a
href="http://yui.2clics.net/">YUI Compressor Online</a>. Para fazer um minify em arquivos CSS, confira o item &#8220;Otimizadores e Formatadores de CSS&#8221; do artigo de <a
href="http://desenvolvimentoparaweb.com/indicacoes/ferramentas-e-recursos-para-desenvolvimento-web/">ferramentas e recursos para desenvolvimento web</a>.</p><p>Existem, tamb&eacute;m, v&aacute;rios plugins para WordPress para minimizar e otimizar os arquivos, como o <a
href="http://wordpress.org/extend/plugins/wp-minify/">WP Minify</a> e <a
href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Chache</a>, que fazem o servi&ccedil;o de minify de forma bastante transparente e, ainda, melhoram outros aspectos para otimiza&ccedil;&atilde;o de temas WordPress, tais como manipula&ccedil;&otilde;es de cache, combina&ccedil;&atilde;o de arquivos, e outros para melhorar a velocidade do site.</p><h2>Substitua fun&ccedil;&otilde;es e hooks por conte&uacute;do est&aacute;tico</h2><p>Os arquivos de temas que podem ser baixados na web precisam ser bem flex&iacute;veis, para atender ao maior n&uacute;mero de pessoas que os queiram usar. Por isso, existem diversas chamadas a fun&ccedil;&otilde;es e <a
href="http://codex.wordpress.org/Plugin_API/Hooks">hooks</a> que permitem que um tema funcione nas mais diversas formas e situa&ccedil;&otilde;es.</p><p>No entanto, isso pode acarretar em uma perda de performance e desempenho das p&aacute;gina, j&aacute; que cada vez que uma p&aacute;gina &eacute; gerada, ela precisa fazer v&aacute;rias chamadas a hooks/fun&ccedil;&otilde;es para renderizar a p&aacute;gina.</p><p>Inspecione os arquivos do tema que voc&ecirc; escolheu para seu site/blog e perceba as chamadas desnecess&aacute;rias. Por exemplo, no <strong>header.php</strong>, voc&ecirc; pode encontrar uma linha parecida com esta:</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;">title</span>&gt;&lt;?php bloginfo<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'name'</span><span style="color: #66cc66;">&#41;</span>; ?&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span></pre></div></div><p>Essa fun&ccedil;&atilde;o serve para mostrar o nome do seu site (definido nas configura&ccedil;&otilde;es no Painel Administrativo) na barra de t&iacute;tulos do navegador. Na verdade, o nome do site n&atilde;o se altera quase nunca, ent&atilde;o, para que deixar mais uma chamada a fun&ccedil;&atilde;o? Isso consome recursos do servidor e reduz o tempo de carregamento do site. Voc&ecirc; pode, facilmente, substituir por:</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;">title</span>&gt;</span>Nome do Site<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span></pre></div></div><p>Eis um outro exemplo do que pode ser encontrado no header.php:</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;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&lt;?php bloginfo('stylesheet_url'); ?&gt;</span></span>&quot; type=&quot;text/css&quot; /&gt;</pre></div></div><p>Essa linha usa a fun&ccedil;&atilde;o para referenciar o caminho de onde se encontra o arquivo &#8220;style.css&#8221; do tema. Mais uma vez, &eacute; poss&iacute;vel poupar recursos do servidor com uma simples mudan&ccedil;a:</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;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.site.com/wp-content/themes/themename/style.css&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></div></div><p>Esses foram somente 2 exemplos, mas existem muitas outra chamadas a fun&ccedil;&otilde;es &#8220;desnecess&aacute;rias&#8221; quando se baixa um tema, seja ele gratuito ou pago. Vasculhe os arquivos do tema usado e substitua por conte&uacute;do est&aacute;tico sempre que poss&iacute;vel.</p><p>E voc&ecirc;, tem mais alguma dica para o <strong>desenvolvimento de temas WordPress melhores</strong>? Comente!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><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/truques-de-configuracao-do-wordpress/" title="Truques de configuração do WordPress">Truques de configuração do WordPress</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/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/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/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/jquery/8-dicas-fazer-codigos-melhores-jquery/" title="8 dicas para fazer códigos melhores com jQuery">8 dicas para fazer códigos melhores com jQuery</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/usabilidade/pergunte-se-a-si-mesmo-questoes-para-desenvolver-um-bom-site/" title="Pergunte-se a si mesmo: questões para desenvolver um bom site">Pergunte-se a si mesmo: questões para desenvolver um bom site</a></li></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/MG5etvs1fwGGXybaguB7PG4g9L4/0/da"><img src="http://feedads.g.doubleclick.net/~a/MG5etvs1fwGGXybaguB7PG4g9L4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/MG5etvs1fwGGXybaguB7PG4g9L4/1/da"><img src="http://feedads.g.doubleclick.net/~a/MG5etvs1fwGGXybaguB7PG4g9L4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=eU584go7cBg:wm1jQOf2kGA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=eU584go7cBg:wm1jQOf2kGA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=eU584go7cBg:wm1jQOf2kGA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=eU584go7cBg:wm1jQOf2kGA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=eU584go7cBg:wm1jQOf2kGA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=eU584go7cBg:wm1jQOf2kGA:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/eU584go7cBg" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/feed/</wfw:commentRss> <slash:comments>13</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/wordpress/5-dicas-para-temas-wordpress-melhores/</feedburner:origLink></item> <item><title>URLs longas apresentadas corretamente com CSS</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/6UoVPnDHHp8/</link> <comments>http://desenvolvimentoparaweb.com/css/urls-longas-apresentadas-corretamente-com-css/#comments</comments> <pubDate>Mon, 25 Oct 2010 12:00:57 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[Design]]></category> <category><![CDATA[Conteúdo]]></category> <category><![CDATA[Layout]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=667</guid> <description><![CDATA[Apresentar corretamente URLs e outros textos longos &eacute; essencial para um layout consistente e de qualidade. Saiba como fazer isso lendo este artigo!]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/10/urls-longas-apresentadas-corretamente-com-css.jpg" alt="URLs longas apresentadas corretamente com CSS" title="" width="250" height="250" class="aligncenter size-full wp-image-670" /></p><p>Principalmente em blogs sobre <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento web</a> &#8211; ou que n&atilde;o sejam, mas que precisem, eventualmente, <strong>apresentar URLs longas</strong> -, a indica&ccedil;&atilde;o de endere&ccedil;os completos da internet e/ou da web geralmente se faz necess&aacute;ria. Mas &eacute; preciso saber como estilizar corretamente estes endere&ccedil;os atrav&eacute;s de <strong>regras CSS</strong> para que sua apresenta&ccedil;&atilde;o n&atilde;o fique &#8220;quebrada&#8221; dentro do layout feito.</p><div
class="artigo-traduzido"> Este &eacute; um artigo traduzido do original &#8220;<a
href="http://perishablepress.com/press/2010/06/01/wrapping-content/">Wrapping Long URLs and Text Content with CSS</a>&#8220;, do blog <a
href="http://perishablepress.com/">Perishable Press</a>, e sofreu pequenas modifica&ccedil;&otilde;es.</div><p>Para apresentar corretamente <strong>URLs longas</strong>, seq&uuml;&ecirc;ncias de texto e outros conte&uacute;dos, basta utilizar esta regra CSS em qualquer elemento em<a
href="http://htmlhelp.com/reference/html40/block.html"> n&iacute;vel de bloco</a> (por exemplo, &eacute; perfeito para tags &lt;pre&gt;):</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;">pre <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">white-space</span><span style="color: #00AA00;">:</span> pre<span style="color: #00AA00;">;</span>           <span style="color: #808080; font-style: italic;">/* CSS 2.0 */</span>
<span style="color: #000000; font-weight: bold;">white-space</span><span style="color: #00AA00;">:</span> pre-wrap<span style="color: #00AA00;">;</span>      <span style="color: #808080; font-style: italic;">/* CSS 2.1 */</span>
<span style="color: #000000; font-weight: bold;">white-space</span><span style="color: #00AA00;">:</span> pre-line<span style="color: #00AA00;">;</span>      <span style="color: #808080; font-style: italic;">/* CSS 3.0 */</span>
<span style="color: #000000; font-weight: bold;">white-space</span><span style="color: #00AA00;">:</span> -pre-wrap<span style="color: #00AA00;">;</span>     <span style="color: #808080; font-style: italic;">/* Opera 4-6 */</span>
<span style="color: #000000; font-weight: bold;">white-space</span><span style="color: #00AA00;">:</span> -o-pre-wrap<span style="color: #00AA00;">;</span>   <span style="color: #808080; font-style: italic;">/* Opera 7 */</span>
<span style="color: #000000; font-weight: bold;">white-space</span><span style="color: #00AA00;">:</span> -moz-pre-wrap<span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* Mozilla */</span>
<span style="color: #000000; font-weight: bold;">white-space</span><span style="color: #00AA00;">:</span> -hp-pre-wrap<span style="color: #00AA00;">;</span>  <span style="color: #808080; font-style: italic;">/* HP Printers */</span>
word-wrap<span style="color: #00AA00;">:</span> break-word<span style="color: #00AA00;">;</span>      <span style="color: #808080; font-style: italic;">/* IE 5+ */</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><p>Por padr&atilde;o, o valor da <a
href="http://www.w3.org/TR/CSS21/text.html#white-space-prop">propriedade white-space</a> &eacute; definido como &#8220;normal&#8221;. Ent&atilde;o, voc&ecirc; pode ver algo como isto quando tenta &#8220;for&ccedil;ar&#8221; URLs longas e outras seq&uuml;&ecirc;ncias cont&iacute;nuas de texto:</p><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/10/urls-longas-apresentadas-corretamente-com-css-errado.gif" alt="URLs longas apresentadas corretamente com CSS: errado" title="" width="477" height="245" class="aligncenter size-full wp-image-668" /></p><p>Para &#8220;for&ccedil;ar&#8221; fragmentos de texto longos e cont&iacute;nuos que s&atilde;o &#8220;envolvidos&#8221; dentro da largura do &lt;pre&gt; (ou outro elemento n&iacute;vel de bloco, como &lt;div&gt; ou &lt;p&gt;), &eacute; necess&aacute;rio um valor diferente para a propriedade <em>white-space</em>. As op&ccedil;&otilde;es poss&iacute;veis s&atilde;o:</p><ul><li><strong>normal.</strong> O valor padr&atilde;o para a propriedade white-space. Sequ&ecirc;ncias de espa&ccedil;os em branco s&atilde;o &#8220;recolhidos&#8221; a um &uacute;nico espa&ccedil;o em branco. O conte&uacute;do de &lt;pre&gt; ir&aacute; se adequar &agrave; largura do elemento.</li><li><strong>nowrap.</strong> Sequ&ecirc;ncias de espa&ccedil;os em branco s&atilde;o recolhidos a um &uacute;nico espa&ccedil;o em branco. Os conte&uacute;dos de &lt;pre&gt; pulam de linha SOMENTE em elementos com &lt;br /&gt;.</li><li><strong>pre.</strong> Todos os espa&ccedil;os em branco s&atilde;o preservados e o conte&uacute;do de &lt;pre&gt; ir&aacute; pular de linha de forma impl&iacute;cita. Esse &eacute; o comportamento padr&atilde;o do elemento &lt;pre&gt;.</li><li><strong>pre-line.</strong> Sequ&ecirc;ncias de espa&ccedil;os em branco se recolhem a um &uacute;nico espa&ccedil;o em branco; o conte&uacute;do de &lt;pre&gt; ir&aacute; dar <em>wrap</em> em espa&ccedil;os em branco e quebras de linha acontecem de acordo com a largura do elemento.</li><li><strong>pre-wrap.</strong> Todos os espa&ccedil;os em branco s&atilde;o preservados e o conte&uacute;do de &lt;pre&gt; ir&aacute; se comportar de acordo com os espa&ccedil;os em branco e quebras de linha de acordo com a largura do elemento.</li><li><strong>inherit.</strong> Valor de <em>white-space</em> herdado do elemento pai.</li></ul><p>Em um mundo perfeito, n&oacute;s poder&iacute;amos simplesmente usar &#8220;white-space:pre-line&#8221; dessa forma:</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;">pre <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">white-space</span><span style="color: #00AA00;">:</span> pre-line<span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">300px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><p>Embora a propriedade <em>white-space</em> seja, teoricamente, suportada por todos os principais navegadores, infelizmente muitos deles falham e n&atilde;o conseguem aplicar corretamente a propriedade para strings longos.</p><p>Diferentes navegadores far&atilde;o o <em>wrap</em> (&#8220;quebrar&#8221; o texto) em textos longos, mas exigem valores diferentes de white-space para trabalhar. Felizmente, podemos aplicar os valores necess&aacute;rios para <strong>cada navegador</strong> incluindo v&aacute;rias declara&ccedil;&otilde;es de <em>white-space</em>. Essa &eacute; exatamente a solu&ccedil;&atilde;o apresentada no c&oacute;digo CSS mostrado no in&iacute;cio do artigo.</p><p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/10/urls-longas-apresentadas-corretamente-com-css-certo.gif" alt="URLs longas apresentadas corretamente com CSS: certo" title="" width="477" height="165" class="aligncenter size-full wp-image-669" /></p><p>Os coment&aacute;rios inclu&iacute;dos na solu&ccedil;&atilde;o CSS mostram qual solu&ccedil;&atilde;o se aplica a cada browser. Observe que algumas das regras s&atilde;o espec&iacute;ficas de alguns navegadores (veja os prefixos espec&iacute;ficos dos fornecedores), enquanto outros declaram valores default a partir de diferentes especifica&ccedil;&otilde;es CSS.</p><p>A estranha propriedade &#8220;word-wrap&#8221; &eacute; uma inven&ccedil;&atilde;o da Microsoft que foi inclu&iacute;do no CSS3. Gra&ccedil;as &agrave;s &#8220;CSS forward compatibility guidelines&#8221;, &eacute; perfeitamente poss&iacute;vel incluir v&aacute;rias inst&acirc;ncias da mesma propriedade. Em poucas palavras:</p><p><strong></p><ul><li>Propriedades n&atilde;o reconhecidas s&atilde;o ignoradas</li><li>Para v&aacute;rias declara&ccedil;&otilde;es da mesma propriedade, somente a &uacute;ltima tem validade</li></ul><p></strong></p><p>A solu&ccedil;&atilde;o de c&oacute;digo apresentada neste artigo parece funcionar bem em todos os navegadores, mas ela n&atilde;o valida (segundo o <a
href="http://www.w3.org/">W3C</a>) devido &agrave; louca propriedade da Microsoft.</p><p>Para ver os conceitos aqui mostrados na pr&aacute;tica, veja uma <a
href="http://perishablepress.com/press/wp-content/online/demos/css-wrap-demo.html">p&aacute;gina de exemplo</a> e, para uma discuss&atilde;o mais completa sobre a quebra autom&aacute;tica de texto, confira o artigo <a
href="http://perishablepress.com/press/2009/11/09/perfect-pre-tags/">Perfect Pre Tags</a>, tamb&eacute;m do blog <a
href="http://perishablepress.com/">Perishable Press</a>.</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/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/estrategia-de-conteudo-content-strategy/" title="Estratégia de Conteúdo ou Content Strategy">Estratégia de Conteúdo ou Content Strategy</a></li><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/javascript/json-javascript-object-notation/" title="JSON &#8211; JavaScript Object Notation">JSON &#8211; JavaScript Object Notation</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/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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/BBy29-ejTKu0WuVH__QjhQfEA-I/0/da"><img src="http://feedads.g.doubleclick.net/~a/BBy29-ejTKu0WuVH__QjhQfEA-I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/BBy29-ejTKu0WuVH__QjhQfEA-I/1/da"><img src="http://feedads.g.doubleclick.net/~a/BBy29-ejTKu0WuVH__QjhQfEA-I/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=6UoVPnDHHp8:5Hzze6Gjj6A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=6UoVPnDHHp8:5Hzze6Gjj6A:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=6UoVPnDHHp8:5Hzze6Gjj6A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=6UoVPnDHHp8:5Hzze6Gjj6A:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=6UoVPnDHHp8:5Hzze6Gjj6A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=6UoVPnDHHp8:5Hzze6Gjj6A:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/6UoVPnDHHp8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/css/urls-longas-apresentadas-corretamente-com-css/feed/</wfw:commentRss> <slash:comments>14</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/css/urls-longas-apresentadas-corretamente-com-css/</feedburner:origLink></item> <item><title>Novas tecnologias exigem novas maneiras de se comunicar</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/ksI_67INDAg/</link> <comments>http://desenvolvimentoparaweb.com/miscelanea/novas-tecnologias-exigem-novas-maneiras-de-se-comunicar/#comments</comments> <pubDate>Mon, 20 Sep 2010 13:00:11 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[Miscelânea]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Web]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=664</guid> <description><![CDATA[Assista ao v&iacute;deo que mostra que novas tecnologias exigem novas maneiras de se comunicar.]]></description> <content:encoded><![CDATA[<p
style="text-align: center;"><img
class="aligncenter size-full wp-image-665" src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/09/novas-tecnologias-exigem-novas-maneiras-de-se-comunicar.jpg" alt="Novas tecnologias exigem novas maneiras de se comunicar" width="265" height="230" /></p><p>&Eacute; bastante comum ao desenvolvedor web se deparar com casos em que deve justificar as a&ccedil;&otilde;es que toma em seu trabalho &#8211; chamado por alguns de &#8220;defesa do trabalho&#8221;. E, nessas situa&ccedil;&otilde;es, &eacute; importante saber como argumentar com o cliente, &agrave;s vezes sobre como a comunica&ccedil;&atilde;o na web &eacute; diferente e peculiar em rela&ccedil;&atilde;o a outras m&iacute;dias.</p><p>Recentemente, conheci o excelente v&iacute;deo (que vi no <a
href="http://www.publicidadenaweb.com/">Publicidade na Web</a>) intitulado &#8220;Como a internet mudou a propaganda&#8221; que, de uma maneira bastante simples de se entender, explica algumas dessas peculiaridades, refor&ccedil;ando o conceito de que <strong>novas  tecnologias exigem novas maneiras de se comunicar</strong>!</p><p
style="text-align: center;"><iframe
src="http://player.vimeo.com/video/9883036?title=0&amp;byline=0&amp;portrait=0&amp;color=c9ff23" frameborder="0" height="400" width="500"></iframe></p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/miscelanea/web-sites-genericos-e-a-ilusao-dos-precos-baixos/" title="Web sites genéricos e a ilusão dos preços baixos">Web sites genéricos e a ilusão dos preços baixos</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/estrategia-de-conteudo-content-strategy/" title="Estratégia de Conteúdo ou Content Strategy">Estratégia de Conteúdo ou Content Strategy</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/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/javascript/json-javascript-object-notation/" title="JSON &#8211; JavaScript Object Notation">JSON &#8211; JavaScript Object Notation</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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/Lx0I5truWzlzGxWxkbz_WuBw3as/0/da"><img src="http://feedads.g.doubleclick.net/~a/Lx0I5truWzlzGxWxkbz_WuBw3as/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Lx0I5truWzlzGxWxkbz_WuBw3as/1/da"><img src="http://feedads.g.doubleclick.net/~a/Lx0I5truWzlzGxWxkbz_WuBw3as/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=ksI_67INDAg:lXbKRz2bJoY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=ksI_67INDAg:lXbKRz2bJoY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=ksI_67INDAg:lXbKRz2bJoY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=ksI_67INDAg:lXbKRz2bJoY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=ksI_67INDAg:lXbKRz2bJoY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=ksI_67INDAg:lXbKRz2bJoY:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/ksI_67INDAg" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/miscelanea/novas-tecnologias-exigem-novas-maneiras-de-se-comunicar/feed/</wfw:commentRss> <slash:comments>4</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/miscelanea/novas-tecnologias-exigem-novas-maneiras-de-se-comunicar/</feedburner:origLink></item> <item><title>Erros comuns em desenvolvimento web para campanhas de SEO</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/ZDYH9jIhr2k/</link> <comments>http://desenvolvimentoparaweb.com/seo/erros-comuns-desenvolvimento-web-campanhas-seo/#comments</comments> <pubDate>Mon, 16 Aug 2010 13:00:14 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[SEO]]></category> <category><![CDATA[Análise]]></category> <category><![CDATA[Conteúdo]]></category> <category><![CDATA[Planejamento]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=659</guid> <description><![CDATA[Conhe&ccedil;a erros comuns em desenvolvimento web para campanhas de SEO e saiba como evit&aacute;-los]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/08/erros-comuns-desenvolvimento-web-campanhas-seo.jpg" alt="Erros comuns em desenvolvimento web para campanhas de SEO" title="" width="250" height="250" class="aligncenter size-full wp-image-660" /><br
/> Uma <strong>boa campanha de SEO</strong> acontece quando v&aacute;rias a&ccedil;&otilde;es de otimiza&ccedil;&atilde;o s&atilde;o realizadas, conjunta e simultaneamente. E, certamente, uma dos aspectos da <strong>estrat&eacute;gia de uma a&ccedil;&atilde;o de SEO</strong> s&atilde;o as a&ccedil;&otilde;es t&eacute;cnicas tomadas no <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento web</a>.</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original &#8220;<a
href="http://www.webseoanalytics.com/blog/common-web-development-mistakes/">Why my SEO campaign failed? Part 2: Common Web Development mistakes</a>&#8220;, do blog <a
title="Visitar o CSS-Tricks." href="http://www.webseoanalytics.com/blog/">Web SEO Analytics</a>, e sofreu pequenas modifica&ccedil;&otilde;es.</div><h2>Passar muitos argumentos no URL</h2><p>Quando o site &eacute; din&acirc;mico, os desenvolvedores web precisam ter uma refer&ecirc;ncia sobre o qual a p&aacute;gina, o produto ou categoria o visitante quer ver. Normalmente um ID &eacute; necess&aacute;rio para recuperar os dados do banco de dados. Em outros casos, devido &agrave; <strong>complexidade do projeto</strong> ou devido a <strong>m&aacute;s t&eacute;cnicas de programa&ccedil;&atilde;o</strong>, mais vari&aacute;veis s&atilde;o necess&aacute;rias para identificar uma determinada p&aacute;gina. Aqui est&aacute; um exemplo de um URL din&acirc;mico:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.exemplo.com/produtos.php?id=30&amp;amp;categoria=2&amp;amp;cor=verde</span></pre></div></div><p>Infelizmente, este tipo de URL n&atilde;o &eacute; amig&aacute;vel nem para pessoas, nem para mecanismos de busca. Segundo &eacute; poss&iacute;vel ler nas <a
href="http://www.google.com/support/webmasters/bin/answer.py?answer=35769#2">Diretrizes T&eacute;cnicas das Diretrizes para Webmasters da Central do Webmaster Google</a>,</p><blockquote><p>Se voc&ecirc; decidir usar p&aacute;ginas din&acirc;micas (por exemplo, o URL que cont&eacute;m um caractere &#8220;?&#8221;), saiba que nem todos os spiders de mecanismos de pesquisa rastreiam as p&aacute;ginas din&acirc;micas e est&aacute;ticas. Isso ajuda a manter os par&acirc;metros curtos e a quantidade desses par&acirc;metros pequena.</p></blockquote><p>Por isso, &eacute; altamente recomendado usar algum tipo de <strong>reescrita de URL</strong>, como mod_rewrite, para converter as URLs din&acirc;micas para URLs amig&aacute;veis. Qual &eacute; o risco, se isso n&atilde;o for feito? Bem, se h&aacute; muitos par&acirc;metros em URLs: os motores de busca podem n&atilde;o indexar as p&aacute;ginas; al&eacute;m disso, geralmente  URLs n&atilde;o amig&aacute;veis n&atilde;o cont&eacute;m palavras-chave importantes no endere&ccedil;o, ent&atilde;o, n&atilde;o raramente voc&ecirc; pode conseguir&aacute; rankings inferiores para essas p&aacute;ginas do que se elas tivessem URLs amig&aacute;veis.</p><h2>Usar muito JavaScript, frames/iframes, AJAX, Flash e Silverlight</h2><p>JavaScript, frames/iframes, AJAX, Flash e Silverlight s&atilde;o ferramentas &uacute;teis e alguns deles, quando bem usados, melhoram a experi&ecirc;ncia do usu&aacute;rio. Mas nenhum deles &eacute; <em>search engine friendly</em>.</p><p>As mesmas <a
href="http://www.google.com/support/webmasters/bin/answer.py?answer=35769#2">Diretrizes T&eacute;cnicas do Google</a> citadas, indicam:</p><blockquote><p>Use um navegador de texto como o Lynx para examinar o seu site, pois muitos spiders de mecanismos de pesquisa veem o site do mesmo modo que o Lynx. Se recursos especiais como JavaScript, cookies, IDs de sess&atilde;o, frames, DHTML ou Flash permitirem que voc&ecirc; veja todo o site em um navegador de texto, os spiders dos mecanismos de pesquisa poder&atilde;o ter dificuldade em rastrear o seu site.</p></blockquote><p>Se o objetivo &eacute; que <strong>o site seja amig&aacute;vel aos mecanismos de busca</strong>, devemos verificar se eles podem ser vistos usando browsers de texto simples como o Lynx (que &eacute; como o googlebot &#8220;v&ecirc;&#8221; os sites). &Eacute; poss&iacute;vel usar emuladores do Lynx ou desabilitar CSS e imagens diretamente no navegador (se usar, Firefox, uma &oacute;tima op&ccedil;&atilde;o &eacute; usar o plugin <a
href="https://addons.mozilla.org/pt-BR/firefox/addon/60/">Web Developer</a>).</p><h2>N&atilde;o usar o atributo alt em imagens e n&atilde;o otimizar o caminho das imagens</h2><p>Os motores de busca (e computadores, em geral) n&atilde;o s&atilde;o muito bons em identificar o que &eacute; representado em uma imagem. Portanto, a fim de compreender sobre o que uma imagem &eacute;, os bots analisam o nome e o atributo &#8220;alt&#8221; das imagens.</p><p>O Google Image Search pode trazer uma quantidade significativa de tr&aacute;fego. Se voc&ecirc; n&atilde;o garantir o &#8220;apoio&#8221; a mecanismos que permitam a otimiza&ccedil;&atilde;o de imagens, voc&ecirc; pode perder uma boa fonte de tr&aacute;fego. Assim, garanta que voc&ecirc; use corretamente ambos, o atributo alt e o nome da imagem &#8211; usar um CMS que permita esse tipo de otimiza&ccedil;&atilde;o &eacute; uma boa dica.</p><h2>Usar m&eacute;todos incorretos para oferecer suporte a idiomas diferentes</h2><p>Quando voc&ecirc; tem sites multil&iacute;ngue, tenha certeza de que a arquitetura est&aacute; correta. N&atilde;o h&aacute; uma &uacute;nica forma &#8220;correta&#8221; para fazer isso. Basicamente, h&aacute; tr&ecirc;s maneiras corretas para suportar um site em v&aacute;rios idiomas e cada um dos m&eacute;todos a seguir tem alguns pr&oacute;s e contras:</p><ul><li><strong>Subdom&iacute;nios.</strong> Exemplo: fr.example.com, gr.example.com, etc</li><li><strong>Subdiret&oacute;rios.</strong> Exemplo: www.example.com/fr/, www.example.com/gr/, etc</li><li><strong>Diferente dom&iacute;nios.</strong> Exemplo: www.example.fr, www.example.gr, etc</li></ul><p>A dica &eacute; evitar o envio de conte&uacute;do baseado em IP sem ter a mesma vers&atilde;o do site dispon&iacute;vel para todos. Tamb&eacute;m n&atilde;o implementar solu&ccedil;&otilde;es ruins como passar o idioma como uma vari&aacute;vel GET, por exemplo www.example.com/?lang=fr.</p><h2>N&atilde;o se preocupar com o tempo de carregamento da p&aacute;gina</h2><p>Recentemente o Google informou que passou a usar a <strong>velocidade de carregamento</strong> dos websites em seus algoritmos de classifica&ccedil;&atilde;o (apesar de isso n&atilde;o estar valendo para sites de todos os pa&iacute;ses do mundo). H&aacute; um debate sobre se esse recurso deve ser inclu&iacute;do, uma vez que n&atilde;o tem nada a ver com a relev&acirc;ncia de um site. No entanto, a velocidade aumenta a <strong>experi&ecirc;ncia do usu&aacute;rio</strong>. Al&eacute;m disso, ter um site leve, que carregue rapidamente, pode melhorar seu ROI e diminuir a carga do seu servidor (conhe&ccedil;a <a
href="http://desenvolvimentoparaweb.com/miscelanea/8-maneiras-de-melhorar-a-performance-de-um-site/">8 maneiras de melhorar a performance de um site</a>).</p><h2>7 dicas de desenvolvimento web</h2><p>Algumas dicas para guiar o desenvolvimento de suas p&aacute;ginas web s&atilde;o:</p><ul><li>Colocar menus, cabe&ccedil;alhos e rodap&eacute;s em arquivos separados, a fim de realizar mudan&ccedil;as globais r&aacute;pidas (fun&ccedil;&otilde;es &#8220;include);</li><li>Tentar usar subdom&iacute;nios em sites multi idioimas;</li><li>Usar caminhos absolutos para cada p&aacute;gina, imagem, CSS e javascript do site;</li><li>Usar canonicals para evitar conte&uacute;do duplicado;</li><li>Usar redirecionamento 301 ao inv&eacute;s de 302 quando o caminho para a p&aacute;gina mudar e nunca apagar p&aacute;ginas;</li><li>Redirecione corretamente as vers&otilde;es sem &#8220;www&#8221; para as que tenham &#8220;www&#8221; e vice-versa;</li><li>N&atilde;o adicionar IDs de sess&atilde;o nas URLs.</li></ul><p>E voc&ecirc;, conhece algum outro <strong>erro comum em desenvolvimento web</strong> que pode atrapalhar uma <strong>campanha de SEO</strong> e o que fazer para evitar/corrigir?</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><li><a
href="http://desenvolvimentoparaweb.com/html/meta-tags/" title="Meta tags">Meta tags</a></li><li><a
href="http://desenvolvimentoparaweb.com/blogs/maneiras-praticas-para-melhorar-a-visitacao-de-seu-blog-e-fidelizar-seus-leitores/" title="Maneiras práticas para melhorar a visitação de seu blog e fidelizar seus leitores">Maneiras práticas para melhorar a visitação de seu blog e fidelizar seus leitores</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/design/elementos-design-aplicados-web/" title="Elementos de design aplicados à web">Elementos de design aplicados à web</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/usabilidade/estrategia-web-da-piramide-guia-estrategia-web-equilibrada/" title="Estratégia Web de Pirâmide: guia para uma estratégia de web equilibrada">Estratégia Web de Pirâmide: guia para uma estratégia de web equilibrada</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/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/miscelanea/como-otimizar-imagens-web-internet/" title="Como otimizar imagens para web: guia de otimização de imagens">Como otimizar imagens para web: guia de otimização de imagens</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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/6iuK30pxo27lGrwDVc-uXDZDhdQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/6iuK30pxo27lGrwDVc-uXDZDhdQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6iuK30pxo27lGrwDVc-uXDZDhdQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/6iuK30pxo27lGrwDVc-uXDZDhdQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=ZDYH9jIhr2k:4PQrzRi8-Mg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=ZDYH9jIhr2k:4PQrzRi8-Mg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=ZDYH9jIhr2k:4PQrzRi8-Mg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=ZDYH9jIhr2k:4PQrzRi8-Mg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=ZDYH9jIhr2k:4PQrzRi8-Mg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=ZDYH9jIhr2k:4PQrzRi8-Mg:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/ZDYH9jIhr2k" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/seo/erros-comuns-desenvolvimento-web-campanhas-seo/feed/</wfw:commentRss> <slash:comments>18</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/seo/erros-comuns-desenvolvimento-web-campanhas-seo/</feedburner:origLink></item> <item><title>Melhorando a interação em formulários de busca</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/5TEtyWe-Adw/</link> <comments>http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/#comments</comments> <pubDate>Tue, 03 Aug 2010 19:44:05 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[jQuery]]></category> <category><![CDATA[Usabilidade]]></category> <category><![CDATA[Exemplos]]></category> <category><![CDATA[Otimização]]></category> <category><![CDATA[UX]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=657</guid> <description><![CDATA[Aprenda a melhorar a intera&ccedil;&atilde;o em formul&aacute;rios de busca com poucas linhas de c&oacute;digo e aumente a usabilidade de seu form de busca]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/08/melhorar-interacao-formularios-busca.jpg" alt="Melhorando a intera&ccedil;&atilde;o em formul&aacute;rios de busca" title="" width="250" height="250" class="aligncenter size-full wp-image-658" /></p><p>Melhorar a intera&ccedil;&atilde;o do campo de busca de um site permite que as pessoas que usam tal formul&aacute;rio para buscar tenham uma melhor experi&ecirc;ncia de uso (leia-se: <strong>usabilidade</strong>). Com pequenos detalhes, um pouquinho de bom-senso e algumas poucas linhas de jQuery, &eacute; poss&iacute;vel promover efeitos interessante no campo de busca.</p><p>Para ficar claro, ser&aacute; abordada a seguinte intera&ccedil;&atilde;o:</p><ul><li>Campo de busca &eacute; &#8220;populado&#8221; com um termo pr&eacute;-definido;</li><li>Quando o campo recebe o foco, caso tenha o termo pr&eacute;-definido, &eacute; limpo para a pessoa escrever o que pretende;</li><li>Quando o campo perde o foco, se o conte&uacute;do for o mesmo do termo pr&eacute;-definido (ou em branco), este termo reaparece;</li><li>Quando o bot&atilde;o &eacute; pressionado, caso o valor seja termo pr&eacute;-definido ou esteja em branco, o form n&atilde;o submete e o foco passa ao campo apropriado.</li></ul><h2>O formul&aacute;rio de busca</h2><p>Um exemplo de um formul&aacute;rio simples de busca, que pode ser usado em &#8220;sites reais&#8221;, profissionalmente, pode ser 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;">form</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;get&quot;</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;script.php&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form-input&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form-input&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Snippets ou Scripts&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form-submit&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form-submit&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Buscar&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span></pre></div></div><h2>Termo pr&eacute;-definido</h2><p>A express&atilde;o &#8220;termo pr&eacute;-definido&#8221; &eacute; mais adequada, j&aacute; que cada site pede um &#8220;label&#8221; de indica&ccedil;&atilde;o diferente, conforme as especifica&ccedil;&otilde;es e necessidades deste. Algumas pessoas preferem o termo &#8220;Buscar&#8221; ou &#8220;Procurar&#8221; com um bot&atilde;o de label &#8220;OK&#8221; ou &#8220;Vai&#8221;; j&aacute; alguns sites preferem explicitar a fun&ccedil;&atilde;o da busca com algo do tipo &#8220;Produtos ou Servi&ccedil;os&#8221;, acompanhado de um bot&atilde;o com o label &#8220;Buscar&#8221; (o que &eacute; uma abordagem bem interessante).</p><p>De uma maneira ou de outra, &eacute; preciso definir que termo ser&aacute; esse. Para nosso exemplo, vamos supor que seja um site voltado a <a
href="http://desenvolvimentoparaweb.com/">desenvolvimento web</a> e o termo pr&eacute;-definido ser&aacute; &#8220;<strong>Snippets ou Scripts</strong>&#8220;. Vamos criar uma express&atilde;o regular simples com uma parte do termo pr&eacute; definido:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">patt <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Snippets ou'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>E por que n&atilde;o colocar a express&atilde;o inteira? Tamb&eacute;m poderia ser feito, mas o &#8220;esfor&ccedil;o&#8221; para identificar o padr&atilde;o aumenta em rela&ccedil;&atilde;o ao tamanho/complexidade da mesma. Sinta-se &agrave; vontade para fazer v&aacute;rios testes.</p><h2>Melhorando a intera&ccedil;&atilde;o do formul&aacute;rio de busca</h2><p>A melhora da intera&ccedil;&atilde;o se de duas formas:</p><ul><li>Inter&ccedil;&atilde;o com o campo;</li><li>Intera&ccedil;&atilde;o com o bot&atilde;o;</li></ul><h3>Intera&ccedil;&atilde;o com o campo</h3><p>Segundo o planejamento, o que se pretende &eacute; &#8220;Quando o campo recebe o foco, caso tenha o termo pr&eacute;-definido, &eacute; limpo para a pessoa escrever o que pretende&#8221;. A l&oacute;gica &eacute; testar a express&atilde;o regular: caso o teste seja positivo, o campo &eacute; limpo e recebe o foco para a pessoa escrever. Ao perder o foco, &#8220;se o conte&uacute;do for o mesmo do termo pr&eacute;-definido (ou em branco), este termo reaparece&#8221;.</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>
.<span style="color: #000066;">focus</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>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>patt.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</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: #000066;">blur</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>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Snippets ou Scripts'</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></pre></div></div><h3>Intera&ccedil;&atilde;o com o bot&atilde;o</h3><p>A <strong>intera&ccedil;&atilde;o com o bot&atilde;o</strong> tamb&eacute;m &eacute; importante &#8211; e, infelizmente, &eacute; um ponto esquecido por muitos desenvolvedores. A ideia &eacute;, ao se clicar no bot&atilde;o, testar se a express&atilde;o &#8220;bate&#8221; ou o campo est&aacute; em branco e, caso seja um desses casos, dar o foco no campo.</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-submit'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</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>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>patt.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#busca-bottom'</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// Impede que o form seja submetido</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>N&atilde;o &eacute; necess&aacute;rio dar a instru&ccedil;&atilde;o de limpar o campo no foco porque a pe&ccedil;a de script anterior, sobre a intera&ccedil;&atilde;o com o campo, j&aacute; faz isso.</p><h3>JavaScript final</h3><p>Juntando os peda&ccedil;os de c&oacute;digos, j&aacute; devidamente explicados, tem-se o seguinte:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>
.<span style="color: #000066;">focus</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>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>patt.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</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: #000066;">blur</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>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Snippets ou Scripts'</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>
&nbsp;
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-submit'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</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>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>patt.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#form-input'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#busca-bottom'</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// Impede que o form seja submetido</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><h2>Conclus&atilde;o sobre a melhora da intera&ccedil;&atilde;o em formul&aacute;rios de busca</h2><p>Certamente essas n&atilde;o s&atilde;o as &uacute;nicas melhorias cab&iacute;veis para a <strong>melhoria de usabilidade</strong> e <strong>intera&ccedil;&atilde;o</strong> de um formul&aacute;rio de busca simples, mas, certamente, s&atilde;o 2 medidas muito bem-vindas para que a experi&ecirc;ncia e &#8220;agradabilidade&#8221; sejam melhoradas.</p><p>Poderia haver, por exemplo, uma <em>tooltip</em> com o que se pode encontrar no site e/ou fornecendo algum exemplo de termo; implementar uma solu&ccedil;&atilde;o de <em>autocomplete</em>; ou, ao inv&eacute;s de limpar o campo, apenas selecionar todo o termo para, j&aacute; digita&ccedil;&atilde;o, substitu&iacute;-lo pelo o que est&aacute; sendo digitado. Depende da necessidade do projeto.</p><p>E voc&ecirc;, tem alguma <strong>dica ou solu&ccedil;&atilde;o interessante</strong> para melhorar a intera&ccedil;&atilde;o em formul&aacute;rios de busca?</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><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/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/html/textarea-dicas-truques-textarea/" title="Textarea: dicas e truques que você sempre quis saber">Textarea: dicas e truques que você sempre quis saber</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/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/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/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/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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/tX669m2q6UXZosi8aedSNRBQ4hk/0/da"><img src="http://feedads.g.doubleclick.net/~a/tX669m2q6UXZosi8aedSNRBQ4hk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tX669m2q6UXZosi8aedSNRBQ4hk/1/da"><img src="http://feedads.g.doubleclick.net/~a/tX669m2q6UXZosi8aedSNRBQ4hk/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=5TEtyWe-Adw:UGYiOzOFiU8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=5TEtyWe-Adw:UGYiOzOFiU8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=5TEtyWe-Adw:UGYiOzOFiU8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=5TEtyWe-Adw:UGYiOzOFiU8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=5TEtyWe-Adw:UGYiOzOFiU8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=5TEtyWe-Adw:UGYiOzOFiU8:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/5TEtyWe-Adw" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/feed/</wfw:commentRss> <slash:comments>4</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/jquery/melhorando-interacao-formularios-busca/</feedburner:origLink></item> <item><title>Textarea: dicas e truques que você sempre quis saber</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/KG0igFNus6Y/</link> <comments>http://desenvolvimentoparaweb.com/html/textarea-dicas-truques-textarea/#comments</comments> <pubDate>Mon, 26 Jul 2010 13:00:34 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[HTML]]></category> <category><![CDATA[Interface]]></category> <category><![CDATA[Otimização]]></category> <category><![CDATA[UX]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=655</guid> <description><![CDATA[Textarea: dicas e truques para melhorar as intera&ccedil;&otilde;es com &aacute;reas de texto em suas p&aacute;ginas]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/07/textarea-dicas-truques-html-jquery.gif" alt="Textarea: dicas e truques" title="" width="250" height="250" class="aligncenter size-full wp-image-656" /></p><p><strong>Textarea</strong> &eacute; um elemento b&aacute;sico de (X)HTML (especialmente formul&aacute;rios). Mas, muitos desconhecem, <strong>textareas possuem muitas peculiaridades</strong>, dicas e truques que permitem efeitos e intera&ccedil;&otilde;es interessant&iacute;ssimas. Eis uma bela cole&ccedil;&atilde;o de 9 truques e dica simples que voc&ecirc; pode fazer com textareas. Aproveite!</p><div
class="artigo-traduzido">Este &eacute; um artigo traduzido do original &#8220;<a
href="http://css-tricks.com/textarea-tricks/">Textarea Tricks</a>&#8220;, do blog <a
href="http://css-tricks.com/" title="Visitar o CSS-Tricks.">CSS-Tricks</a>, a tradu&ccedil;&atilde;o foi feita com autoriza&ccedil;&atilde;o do <a
href="http://chriscoyier.net/" title="Visitar o web site de Chris Coyier.">autor</a> e sofreu pequenas modifica&ccedil;&otilde;es.</div><h2>Imagem como background da textarea (desaparece quando recebe foco)</h2><p>&Eacute; poss&iacute;vel adicionar uma imagem de fundo para um textarea (assim como quase para qualquer outro elemento). &Agrave;s vezes, por algum motivo qualquer, quando se adiciona um background, isso pode &#8220;quebrar&#8221; o estilo padr&atilde;o do navegador para o textarea: o estilo de borda padr&atilde;o &#8211; 1px s&oacute;lido &#8211; &eacute; substitu&iacute;do por uma espessa borda chanfrada. Para restaurar o padr&atilde;o do navegador, &eacute; poss&iacute;vel, apenas, reestilizar a textarea.</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;">textarea <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span><span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">img/textarea-background.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #993333;">center</span> <span style="color: #993333;">center</span> <span style="color: #993333;">no-repeat</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* &quot;Quebra&quot; o padrão de textarea */</span>
    <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#888</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* &quot;Restaura&quot; o padrão */</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><p>Essa imagem de fundo certamente ir&aacute; interferir com a legibilidade do texto quando as palavras come&ccedil;arem a &#8220;passar por cima&#8221;. Para resolver isso, basta uma solu&ccedil;&atilde;o simples (com <a
href="/categoria/jquery/">jQuery</a>) que faz o seguinte: retirar a imagem de background quando o textarea recebe foco e o coloca de volta no blur, caso nenhum texto tenha sido digitado.</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'textarea'</span><span style="color: #009900;">&#41;</span>
  .<span style="color: #000066;">focus</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> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'background'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'none'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
  .<span style="color: #000066;">blur</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> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</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: #660066;">value</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'background'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'url(img/textarea-background.png) center center no-repeat'</span><span style="color: #009900;">&#41;</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><h2>Texto com placeholder HTML5</h2><p>No HTML5, haver&aacute; um novo atributo: <em>placeholder</em>. Ele mostra um texto em cinza clarinho na &aacute;rea de texto que desaparece quando o textarea est&aacute; em foco ou tem algum valor.</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;">textarea</span> placeholder<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;A vingança nunca é plena, mata a alma e a envenena!&quot;</span> <span style="color: #000066;">cols</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;30&quot;</span> <span style="color: #000066;">rows</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;5&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">textarea</span>&gt;</span></pre></div></div><p>Texto via HTML5 placeholder funciona no Safari 5, Mobile Safari, Chrome 6 e Firefox 4 alpha.</p><h2>Texto com placeholder, HTML5 e jQuery</h2><p>&Eacute; poss&iacute;vel testar se um determinado elemento suporta um atributo, em particular, por meio de testes com JavaScript:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> elementSupportsAttribute<span style="color: #009900;">&#40;</span>element<span style="color: #339933;">,</span> attribute<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> test <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span>element<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>attribute <span style="color: #000066; font-weight: bold;">in</span> test<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</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; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div><p>Ent&atilde;o, d&aacute; para escrever o c&oacute;digo de modo que se o browser suporta o atributo <em>placeholder</em>, ele o usa; se n&atilde;o, seu comportamento &eacute; &#8220;imitado&#8221; atrav&eacute;s de jQuery:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>elementSupportsAttribute<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'textarea'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'placeholder'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #006600; font-style: italic;">// Fallback for browsers that don't support HTML5 placeholder attribute</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#example-three&quot;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;originalText&quot;</span><span style="color: #339933;">,</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#example-three&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;color&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#999&quot;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #000066;">focus</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>
        <span style="color: #003366; font-weight: bold;">var</span> $el <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">==</span> $el.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;originalText&quot;</span><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;">this</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</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: #000066;">blur</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>
      <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;originalText&quot;</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: #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;">// Browser does support HTML5 placeholder attribute, so use it.</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#example-three&quot;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;placeholder&quot;</span><span style="color: #339933;">,</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#example-three&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><h2>Remover o brilho azul</h2><p>Todos os browsers WebKit, o Firefox 3.6 e Opera 10 colocam uma borda azul brilhante <strong>ao redor de textareas</strong> quando est&atilde;o em foco. &Eacute; poss&iacute;vel remov&ecirc;-lo da seguinte forma:</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;">textarea <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">outline</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><p>Voc&ecirc; tamb&eacute;m pode aplicar &agrave; pseudo-classe <em>:focus</em> que vai funciona de qualquer maneira. Que saibamos, ainda n&atilde;o foi encontrada uma maneira de remover o brilho do Firefox e Opera. Se souber, por favor, comente!</p><h2>Remover resizer da textarea</h2><p>Navegadores baseados em WebKit colocam um pequeno elemento de UI no canto inferior direito das textareas para que os usu&aacute;rios possam redimensionar a &aacute;rea de texto. Se, por qualquer motivo, voc&ecirc; quiser remover isso, uma regra CSS simples &eacute; tudo o que voc&ecirc; precisa:</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;">textarea <span style="color: #00AA00;">&#123;</span>
resize<span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><h2>Adicionar resizer na textarea</h2><p>A <a
href="http://jqueryui.com/demos/resizable/" rel="nofollow">resizeable interaction do jQuery UI</a> pode ser usada em textareas. Ela funciona em todos os browsers e substitui a vers&atilde;o do WebKit nativa, j&aacute; que essa vers&atilde;o tem todos os tipos de coisas mirabolantes (como callbacks e anima&ccedil;&otilde;es).</p><p>Para usar a intera&ccedil;&atilde;o, &eacute; preciso carregar jQuery e jQuery UI em sua p&aacute;gina e usar o seguinte javascript:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;textarea&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">resizable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Fica a pergunta: usar jQuery e jQuery UI somente para adicionar o resize handle a suas textareas vale a pena? N&atilde;o uma &#8220;resposta certa&#8221; para a pergunta; s&oacute; voc&ecirc; pode julgar se isso &eacute; adequado &agrave;s necessidades e especifica&ccedil;&otilde;es de seu projeto.</p><h2>Auto-redimensionar conforme o conte&uacute;do</h2><p><a
href="http://james.padolsey.com/about/">James Padolsey</a> tem um script jQuery muito bom para <a
href="http://james.padolsey.com/javascript/jquery-plugin-autoresize/">auto redimensionar textareas conforme o conte&uacute;do</a>. A textarea come&ccedil;a com um tamanho normal razo&aacute;vel e, conforme voc&ecirc; digita mais e mais conte&uacute;do, ela se expande para incluir todo o texto, ao inv&eacute;s de mostrar a barra de rolagem padr&atilde;o.</p><p>O <em>plugin</em> tem uma variedade de op&ccedil;&otilde;es (<a
href="http://james.padolsey.com/javascript/jquery-plugin-autoresize/" rel="nofollow">confira</a>), mas, em sua forma mais simples de uso, basta carregar o arquivo do script e usar assim:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'textarea'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">autoResize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><h2>Nowrap (sem quebra de linha autom&aacute;tica)</h2><p>Para evitar a quebra de texto com CSS normalmente &eacute; usada a regra &#8220;<em>#seletor { white-space: nowrap; }</em>&#8220;. Mas, por alguma raz&atilde;o, isso n&atilde;o funciona com textareas. Se a intera&ccedil;&atilde;o que voc&ecirc; procura nas textareas &eacute; a linha n&atilde;o quebrar at&eacute; que o Enter seja pressionado, &eacute; preciso usar o atributo &#8220;wrap&#8221; com o valor &#8220;off&#8221;, da seguinte maneira:</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;">textarea</span> wrap<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;off&quot;</span> <span style="color: #000066;">cols</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;30&quot;</span> <span style="color: #000066;">rows</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;5&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">textarea</span>&gt;</span></pre></div></div><h2>Remover barra padr&atilde;o do Internet Explorer</h2><p>O infame Internet Explorer coloca uma barra de rolagem vertical por padr&atilde;o em <strong>todas as textareas</strong>. &Eacute; poss&iacute;vel ocultar isso com &#8220;overflow: hidden&#8221;, mas ser&aacute; um problema se a barra de rolagem realmente for necess&aacute;ria em fun&ccedil;&atilde;o da quantidade de texto digitada. Felizmente, a propriedade <em>overflow</em> tem o valor &#8220;auto&#8221;, que exibe a barra de rolagem somente quando esta se fizer necess&aacute;ria. Fica assim:</p><div
class="wp_syntax"><div
class="code"><pre class="css" style="font-family:monospace;">textarea <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span><span style="color: #993333;">auto</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div><h2>Conclus&atilde;o</h2><p>Voc&ecirc; j&aacute; tinha pensado que tantas <strong>intera&ccedil;&otilde;es</strong> e <strong>modifica&ccedil;&otilde;es</strong> fossem poss&iacute;vel em um elemento de HTML t&atilde;o b&aacute;sico como textarea? Se voc&ecirc; quiser ser ainda mais ousado, com javascript e CSS &eacute; poss&iacute;vel obter efeitos e intera&ccedil;&otilde;es ainda melhores! A prop&oacute;sito, os exemplos mostrados no artigo podem ser testados <a
href="http://css-tricks.com/examples/TextareaTricks/" rel="nofollow">nesta p&aacute;gina</a>.</p><p>Se tiver alguma outra dica e/ou quiser mostrar algo de interessante que tenha feito em textareas, <strong>comente</strong>!</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><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/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/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/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/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/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/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/javascript/melhores-editores-wysiwyg-para-seu-projeto/" title="Melhores editores WYSIWYG para seu projeto">Melhores editores WYSIWYG para seu projeto</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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/-Qf1nyKA6FIyExOjZ4mow-LMA38/0/da"><img src="http://feedads.g.doubleclick.net/~a/-Qf1nyKA6FIyExOjZ4mow-LMA38/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-Qf1nyKA6FIyExOjZ4mow-LMA38/1/da"><img src="http://feedads.g.doubleclick.net/~a/-Qf1nyKA6FIyExOjZ4mow-LMA38/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=KG0igFNus6Y:zO1OkeFDZc0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=KG0igFNus6Y:zO1OkeFDZc0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=KG0igFNus6Y:zO1OkeFDZc0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=KG0igFNus6Y:zO1OkeFDZc0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=KG0igFNus6Y:zO1OkeFDZc0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=KG0igFNus6Y:zO1OkeFDZc0:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/KG0igFNus6Y" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/html/textarea-dicas-truques-textarea/feed/</wfw:commentRss> <slash:comments>9</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/html/textarea-dicas-truques-textarea/</feedburner:origLink></item> <item><title>URLs amigáveis (slug) à WordPress</title><link>http://feedproxy.google.com/~r/desenvolvimentoparaweb/~3/Qh9rrb5t0V8/</link> <comments>http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/#comments</comments> <pubDate>Mon, 12 Jul 2010 14:40:36 +0000</pubDate> <dc:creator>Tárcio Zemel</dc:creator> <category><![CDATA[PHP]]></category> <category><![CDATA[WordPress]]></category> <category><![CDATA[Conteúdo]]></category> <category><![CDATA[Otimização]]></category> <guid isPermaLink="false">http://desenvolvimentoparaweb.com/?p=652</guid> <description><![CDATA[Apenda a gerar URLs amig&aacute;veis como &eacute; feito no WordPress e implemente em seu sistema PHP]]></description> <content:encoded><![CDATA[<p><img
src="http://desenvolvimentoparaweb.com/wp-content/uploads/2010/07/urls-amigaveis-slug-wordpress.jpg" alt="URLs amig&aacute;veis (slug) WordPress" title="" width="300" height="300" class="aligncenter size-full wp-image-653" /></p><p>O <strong>desenvolvimento web em WordPress</strong> &eacute; excelente! O CMS j&aacute; vem com diversas fun&ccedil;&otilde;es e funcionalidades para facilitar a vida de desenvolvedores e, at&eacute; mesmo, de pessoas que n&atilde;o tem o m&iacute;nimo conhecimento em programa&ccedil;&atilde;o (um dos objetivos &eacute; esse, mesmo).</p><p>Mas muitos desenvolvedores, principalmente os ainda incipientes, esquecem que o WordPress nada mais &eacute; do que <strong>PHP</strong>! Claro, o WP &eacute; nada mais, nada menos, que um sistema feito em PHP, como voc&ecirc; e eu poder&iacute;amos ter feito. Mas, por motivos que me fogem ao conhecimento, as pessoas esquecem isso&#8230; Talvez o n&iacute;vel de abstra&ccedil;&atilde;o em programa&ccedil;&atilde;o que o CMS proporcione seja o &#8220;culpado&#8221;, mas, sinceramente, n&atilde;o tenho certeza.</p><p>Ent&atilde;o, se voc&ecirc; tiver a curiosidade de vasculhar os arquivos PHP que fazem do WordPress o que ele &eacute;, vai ter uma grata surpresa e encontrar uma rica fonte de scripts, fun&ccedil;&otilde;es e funcionalidades que voc&ecirc; sempre quis implementar e n&atilde;o sabia como!  :-D</p><h2>URLs amig&aacute;ves &agrave; WordPress</h2><p>Por exemplo, muitos querem implementar uma estrutura de URLs amig&aacute;ves (gerar os famosos &#8220;slugs&#8221;) em sistemas desenvolvidos do zero  &#8211; seja atrav&eacute;s de frameworks ou em PHPU (&#8220;PHP Unha&#8221;) -, mas n&atilde;o sabem como. Ora, se sabemos que o WordPress possui um &oacute;timo sistema de gera&ccedil;&atilde;o de slugs e temos acesso a seu c&oacute;digo-fonte, tudo o que &eacute; preciso &eacute; vasculhar o c&oacute;digo-fonte e encontrar as fun&ccedil;&otilde;es certas.</p><p>Seguindo o exemplo de <strong>gerar slugs</strong>, procurando um pouco, &eacute; poss&iacute;vel saber que as fun&ccedil;&otilde;es necess&aacute;rias se encontram em <strong>/wp-includes/formatting.php</strong>. E, como era de se esperar, as fun&ccedil;&otilde;es est&atilde;o devidamente documentadas com seu escopo, par&acirc;metros e retorno. Precisa de mais?</p><p>Para gerar URLs amig&aacute;veis &agrave; WordPress, s&atilde;o necess&aacute;rias 4 fun&ccedil;&otilde;es. 3 &#8220;preliminares&#8221; que s&atilde;o:</p><p><iframe
src="http://pastebin.com/embed_iframe.php?i=qyxBjkTs" style="border:none;width:100%;height:300px;"></iframe></p><p><iframe
src="http://pastebin.com/embed_iframe.php?i=veqTMpYX" style="border:none;width:100%;height:300px;"></iframe></p><p><iframe
src="http://pastebin.com/embed_iframe.php?i=WpCkCLJF" style="border:none;width:100%;height:300px;"></iframe></p><p>E, com essas fun&ccedil;&otilde;es devidamente estabelecidas, a fun&ccedil;&atilde;o que gera os slugs, propriamente dita:</p><p><iframe
src="http://pastebin.com/embed_iframe.php?i=PDMZqzN8" style="border:none;width:100%;height:300px;"></iframe></p><p>Ent&atilde;o, para gerar um slug em seu pr&oacute;prio sistema depois de implementar as fun&ccedil;&otilde;es mostradas, basta escrever:</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
</pre></td><td
class="code"><pre class="php" style="font-family:monospace;">sanitize_title_with_dashes<span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>Achou o nome da fun&ccedil;&atilde;o grande ou feio? Voc&ecirc; tem o c&oacute;digo, altere como bem entender!</p><h2>Considera&ccedil;&otilde;es finais</h2><p>O WordPress &eacute; <strong>software livre</strong> (registrado sob a licen&ccedil;a <a
href="http://pt.wikipedia.org/wiki/GNU_General_Public_License">GPL</a>), ent&atilde;o voc&ecirc; pode pegar essas 4 fun&ccedil;&otilde;es e implementar em seu site/sistema/softwares sem o medo de receber uma cartinha do advogado da equipe WordPress amanh&atilde; ou depois.</p><p>Fica uma pergunta: voc&ecirc; tem um software livre &agrave; disposi&ccedil;&atilde;o e fica quebrando a cabe&ccedil;a em busca de solu&ccedil;&otilde;es de c&oacute;digo que j&aacute; existem e est&atilde;o implementadas nele? Vasculhe todo o c&oacute;digo fonte (veja alguns recursos que ajudam no artigo sobre <a
href="/indicacoes/ferramentas-e-recursos-para-desenvolvimento-web/">ferramentas e recursos para desenvolvimento web</a>) e procure por aquilo que vai lhe ser &uacute;til!</p><p>N&atilde;o seja t&iacute;mido!  ;-)</p><h3  class="related_post_title">Artigos Relacionados</h3><ul
class="related_post"><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/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/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/miscelanea/estrategia-de-conteudo-content-strategy/" title="Estratégia de Conteúdo ou Content Strategy">Estratégia de Conteúdo ou Content Strategy</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/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/urls-longas-apresentadas-corretamente-com-css/" title="URLs longas apresentadas corretamente com CSS">URLs longas apresentadas corretamente com CSS</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></ul>
<p><a href="http://feedads.g.doubleclick.net/~a/S5ZNa27dHHqmHaonZxym6YO8yXs/0/da"><img src="http://feedads.g.doubleclick.net/~a/S5ZNa27dHHqmHaonZxym6YO8yXs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/S5ZNa27dHHqmHaonZxym6YO8yXs/1/da"><img src="http://feedads.g.doubleclick.net/~a/S5ZNa27dHHqmHaonZxym6YO8yXs/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=Qh9rrb5t0V8:Rqpye0kVQMM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=Qh9rrb5t0V8:Rqpye0kVQMM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=Qh9rrb5t0V8:Rqpye0kVQMM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=Qh9rrb5t0V8:Rqpye0kVQMM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?a=Qh9rrb5t0V8:Rqpye0kVQMM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/desenvolvimentoparaweb?i=Qh9rrb5t0V8:Rqpye0kVQMM:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/desenvolvimentoparaweb/~4/Qh9rrb5t0V8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/feed/</wfw:commentRss> <slash:comments>21</slash:comments> <feedburner:origLink>http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/</feedburner:origLink></item> </channel> </rss><!-- Dynamic page generated in 5.263 seconds. --><!-- Cached page generated by WP Super-Cache on 2012-05-15 13:05:54 --><!-- super cache -->

