<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tableless &#187; desenvolvimento</title>
	<atom:link href="http://tableless.com.br/tag/desenvolvimento/feed/" rel="self" type="application/rss+xml" />
	<link>http://tableless.com.br</link>
	<description>Tableless - Desenvolvimento inteligente com padrões web</description>
	<lastBuildDate>Fri, 18 May 2012 12:22:56 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Sublime Text 2 &#8211; Meu novo editor</title>
		<link>http://tableless.com.br/sublime-text-2-meu-novo-editor/</link>
		<comments>http://tableless.com.br/sublime-text-2-meu-novo-editor/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 12:36:23 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[editores]]></category>
		<category><![CDATA[sublime]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5924</guid>
		<description><![CDATA[Entenda um pouco sobre o editor que está quebrando tudo.]]></description>
			<content:encoded><![CDATA[<p>Durante muito tempo eu fui apaixonado pelo Coda e pelo Textmate. Eu os utilizava praticamente todos os dias. O Coda tem um find/replace sensacional que funciona muito bem. O Textmate é ligeiro para a criação de snippets e outras tarefinhas automatizadas. Acontece que eu conheci o Sublime Text pelo <a href="http://marciotrindade.com/">Márcio Trindade</a>, que trabalha comigo e então eu me apaixonei. Não pelo Márcio, mas pelo Sublime (falá-se sublaime). <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h2>Sem frescura</h2>
<p>O que eu amava quando no Editplus do Windows era a interface limpa. Não quero ver iconezinhos bonitinhos, eu quero uma tela branca, pronta pra escrever. O problema é que eu não sou sadomasoquista suficiente para ficar usando o VI. O Textmate é muito parecido com o Editplus nesse quesito, assim como o Sublime. O Sublime é limpo e o code highlight padrão é muito confortável. Confesso que nunca fui fã de editores com o fundo escuro. Comecei a gostar depois do Sublime.</p>
<h2>Customização</h2>
<p>A customização do Textmate é sensacional. As possibilidades são muito maiores que a do Coda. Mas o Sublime consegue superar o Textmate. Ele guarda as configurações personalizadas em um arquivo separado com a sintaxe parecida com JSON. Você pode colocar esse arquivo no seu Dropbox e criar um link simbólico para o diretório do Sublime. Assim as suas configurações ficam iguais no trabalho e em casa.</p>
<p>Nesse arquivo você pode configurar tudo, desde o thema que será usado até as definições de word-wrap, tabs e espaços, tamanho de fonte, algumas configurações de busca e etc. Sensacional. Nunca mais perca tempo reconfigurando seu editor quando reinstalar o sistema.</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #3366CC;">&quot;indent_subsequent_lines&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;indent_to_bracket&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;line_numbers&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;line_padding_bottom&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;line_padding_top&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;margin&quot;</span><span style="color: #339933;">:</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;match_brackets&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;match_brackets_angle&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;match_brackets_braces&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;match_brackets_content&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;match_brackets_square&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;match_selection&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;match_tags&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;move_to_limit_on_up_down&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;open_files_in_new_window&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;overlay_scroll_bars&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;system&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;remember_open_files&quot;</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #3366CC;">&quot;rulers&quot;</span><span style="color: #339933;">:</span></div></td></tr></tbody></table></div>
<p>Como sou um cara solidário, coloquei <a href="https://github.com/tableless/Sublime/">meus arquivos de configuração do Sublime no Git</a>. Assim você consegue pegar emprestado e eu não perco toda vez que eu reinstalar o sistema.</p>
<h2>Plugins</h2>
<p>Os plugins são o filé do Sublime Text. Para começar instale o <a href="http://wbond.net/sublime_packages/package_control/installation">Sublime Package Control</a>. Este plugin te ajuda a descobrir, instalar e gerenciar pacotes e plugins do Sublime facilmente via comando de teclado.</p>
<p>Outro plugin muito útil é o <a href="https://github.com/titoBouzout/SideBarEnhancements">SideBarEnhancements</a>. Ele insere uma série de opções no menu contextual dos arquivos da sidebar. Você pode dizer: &#8220;O meu editor faz isso sem plugin&#8221;. Aí eu digo: &#8220;Você consegue customizar se quiser?&#8221;. </p>
<p>Existem outros plugins para integrar com o GIT, snippets para Bootstrap, SFTP, highlight, VI, SASS, LESS e outras coisas.</p>
<p>Descubra alguns <a href="http://wbond.net/sublime_packages/community">plugins disponíveis para o Sublime aqui</a>.</p>
<p>Você pode instalar esses plugins via o Package Control, que citamos anteriormente.</p>
<h2>Tarefas com o Teclado</h2>
<p>Quer encontrar uma função, classe ou id? Existe um atalho que se chama GoTo Anything. Aperte CMD+R ou CMD+P (CTRL+P), coloque um <strong>@</strong> e comece a digitar o nome da função. Quer ir para uma linha? Digite CTLR+G ou CMD+P, coloque <strong>:</strong> e diga o número da linha. </p>
<p>Dá uma olhada <a href="https://gist.github.com/1596897">nesses atalhos</a> básicos e nesse <a href="https://docs.google.com/spreadsheet/ccc?key=0AnLDKkpwS2wCdHVoRGdlZ2h0MVhjLXlVTVJFbVFCWWc&#038;hl=en_GB#gid=0">Sublime Cheet Sheet</a>.</p>
<p>Só o GoTo Anything quebra um galho danado.</p>
<p>A seleção por colunas funciona como no Textmate. E pra mim, uma novidade que eu só via no VI é a seleção por similaridade. Você consegue selecionar, via teclado mesmo, várias tags ou caractéres iguais. Por exemplo, suponha que você queira selecionar em um mesmo documento todas as tags &lt;p&gt;. Selecione primeiro a tag e depois aperte CMD+D. </p>
<h2>Find and Replace</h2>
<p>Find and Replace é coisa linda. Eu não vivo sem e provavelmente você também não. Você consegue procurar por arquivos e palavras em todos os documentos de uma pasta determinada, em arquivos abertos ou em pastas abertas. Aperte CMD+T e você consegue filtrar os arquivos que você precisa. Claro, que você também pode procurar arquivos via o GoTo Anything que já havíamos falado anteriormente via CMD+P.</p>
<p>SHIT+CMD+F você procura e substitui por arquivos dentro de uma determinada pasta.<br />
Com ALT(option)+CMD+F você tem o find/replace tradicional.</p>
<p>Nem preciso dizer do suporte a expressões regulares, né?</p>
<h2>Suporte</h2>
<p>O <a href="http://www.sublimetext.com/2">Sublime</a> tem versões para Windows, Linux e Mac.</p>
<h3>Mais para ler</h3>
<ul>
<li><a href="http://www.eclipsecolorthemes.org/?view=theme&#038;id=66">Eclipse Color Themes</a></li>
<li><a href="http://tutsmais.com.br/blog/2012/como-criar-snippets-no-sublime-text-2-rapido-pratico-util-e-sexy/">Como criar snippets no Sublime Text 2</a></li>
<li><a href="http://net.tutsplus.com/tutorials/tools-and-tips/sublime-text-2-tips-and-tricks/">Sublime Text 2 Tips and Tricks</a></li>
<li><a href="http://tarantsov.com/blog/2012/02/sublime-text-workflow-that-beats-coda-and-espresso/">Sublime Text Workflow</a></li>
<li><a href="http://1p1e1.tumblr.com/post/14262857223/9-reasons-you-must-install-sublime-text-2-code-like-a">Nove razões para você instalar Sublime</a></li>
<li><a href="http://danielfilho.info/blog/migrando-do-textmate-para-o-sublime-text-2/">Migrando do Textmate para o Sublime</a></li>
</ul>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/dicas-de-sobrevivencia-ie6/" title="Dicas de sobrevivência em uma era pós o IE6">Dicas de sobrevivência em uma era pós o IE6</a></li><li><a href="http://tableless.com.br/drops-7-voce-esta-fazendo-errado/" title="Drops 7 &#8211; Você está fazendo errado">Drops 7 &#8211; Você está fazendo errado</a></li><li><a href="http://tableless.com.br/usando-meta-box-em-seu-tema-wordpress/" title="Usando Meta Box em seu tema WordPress">Usando Meta Box em seu tema WordPress</a></li><li><a href="http://tableless.com.br/introducao-a-padroes-de-codificacao/" title="Introdução aos padrões de codificação">Introdução aos padrões de codificação</a></li><li><a href="http://tableless.com.br/biblioteca-css-ou-framework/" title="Biblioteca CSS ou Framework?">Biblioteca CSS ou Framework?</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/sublime-text-2-meu-novo-editor/feed/</wfw:commentRss>
		<slash:comments>55</slash:comments>
		</item>
		<item>
		<title>Dicas de sobrevivência em uma era pós o IE6</title>
		<link>http://tableless.com.br/dicas-de-sobrevivencia-ie6/</link>
		<comments>http://tableless.com.br/dicas-de-sobrevivencia-ie6/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 12:30:52 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5864</guid>
		<description><![CDATA[Confira algumas propriedades importantes do CSS que você não podia usar no IE6, mas pode usar hoje no IE7 ou superior.]]></description>
			<content:encoded><![CDATA[<p>Nós ficamos mal acostumados com o Internet Explorer 6&#8230; Digo isso por que tinhamos tantos problemas e limitações no tempo em que precisávamos suportá-lo, que até hoje nos privamos de algumas técnicas e propriedades do CSS que funcionam plenamente no IE8 e nos IEs mais novos. Quero confessar que eu estava até esses dias eu era prisioneiro da sombra do IE6.</p>
<p>Por isso, aqui vão algumas dicas de propriedades que você já deve conhecer, mas que não usa ainda por que acha que todos os IEs são iguais ao maldito IE6.</p>
<h3>:after</h3>
<p>Você deve usar alguma técnica de <strong>clearfix</strong> que você criou ou que você pegou de algum lugar. Eu usava muito jquery para criar um elemento vazio dinamicamente no final do elemento que necessita do clearfix para fazê-lo parar de sofrer influência dos floats dos elementos. Essa técnica aqui pode salvar sua vida:</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">div<span style="color: #3333ff;">:after </span><span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">content</span><span style="color: #00AA00;">:</span><span style="color: #ff0000;">&quot; &quot;</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">block</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">clear</span><span style="color: #00AA00;">:</span><span style="color: #993333;">both</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>O <strong>content</strong> pode ser usado para uma série de outras coisas, como por exemplo inserir um ícone, objeto ou até texto depois de um determinado elemento.</p>
<p>Nesse caso o IE7 fica de fora.</p>
<h3>first-child</h3>
<p>Sim. O First-child funciona no IE7 ou superior. Mas o last-child não. Sem chance.<br />
Isso já acaba com aqueles problemas de alinhamento de elementos em linha, onde você precisa tirar a margin, padding ou border do último (ou o primeiro) elemento para que eles fiquem alinhados corretamente.</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">div<span style="color: #3333ff;">:first-child </span><span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">margin-left</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">border-left</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<h3>Seletores complexos</h3>
<p>Olha só que maravilha, o IE7+ já suporta alguns <a href="http://tableless.com.br/seletores-complexos-do-css/" target="_blank">seletores complexos</a> como os descritos abaixo:</p>
<table summary="lista de seletores complexos">
<thead>
<tr>
<th>Seletor</th>
<th>Descrição</th>
</tr>
</thead>
<tbody>
<tr>
<td>input[type="text"]</td>
<td>Seleciona o elemento INPUT com o atributo TYPE cujo valor seja exatamente o valor TEXT</td>
</tr>
<tr>
<td>a[title]</td>
<td>Seleciona o elemento <strong>a</strong> que contenha o atributo <strong>type</strong>não importando o valor.</td>
</tr>
<tr>
<td>a[href$=html]</td>
<td>Seleciona elementos com atributos cujo seu valor temine com… Por exemplo, você poderia querer selecionar todos os links que apotam para um arquivo .pdf, ou .php etc.</td>
</tr>
<tr>
<td>a[href^="http://tableless.com.br/"]</td>
<td>Seleciona elementos com o atributos que comecem com… Você pode querer selecionar apenas os links que apontem para um site específico, por exemplo.</td>
</tr>
<tr>
<td>a[title~="tableless"]</td>
<td>Seleciona os elementos cujo o atributo tenha um valor que seja separado por espaços. No exemplo acima ele seleciona um link que contenha o atributo title e que em seu valor tenha a palavra “tableless” no meio.</td>
</tr>
<tr>
<td>a[hreflang|="pt"]</td>
<td>Seleciona o elemento <strong>a</strong> cujo o valor do atributo <strong>hreflang</strong> comece com PT. Ou seja valores como “pt-br” serão encontrados.</td>
</tr>
<tr>
<td>a[href="http://tableless.com.br/"]</td>
<td>Seleciona o elemento <strong>a</strong> cujo o valor do atributo <strong>href</strong> seja exatamente <b>http://tableless.com.br/</b>.</td>
</tr>
<tr>
<td>a[title*="artigo"]</td>
<td>Seleciona os elementos <strong>a</strong> cujo o valor tenha pelo menos uma ocorrência com a palavra “artigo”.</td>
</tr>
</tbody>
</table>
<p>Todos eles funcionam no IE7 ou superior. Só com estes seletores já economizamos uma penca de código Javascript.</p>
<h3>:first-letter e :first-line</h3>
<p>Formatar a primeira letra do parágrafo ou a primeira linha. Coisa linda.</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">p<span style="color: #3333ff;">:first-letter </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;">30px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #993333;">red</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
p<span style="color: #3333ff;">:first-line </span><span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span><span style="color: #993333;">bold</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<h3>word-wrap</h3>
<p>Essa propriedade é utilíssima. Você já deve ter escrito uma palavra muito grande ou uma URL, que geralmente não tem espaços, o que ocasionou da string ultrapassar a largura do objeto. A propriedade <strong>word-wrap</strong> faz com que essas strings muito grandes quebrem de linha assim que atingirem o limite do objeto.</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">p <span style="color: #00AA00;">&#123;</span>word-wrap<span style="color: #00AA00;">:</span> break-word<span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>Essa propriedade funciona desde o IE5. O.o</p>
<h3>max-height/width e min-height/width</h3>
<p>Essas aqui são essências para produzirmos layouts fluidos e responsivos. Funcionam a partir do IE7.</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">div <span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">min-width</span><span style="color: #00AA00;">:</span><span style="color: #933;">200px</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/** largura mínima **/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">max-width</span><span style="color: #00AA00;">:</span><span style="color: #933;">500px</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/** largura máxima **/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">min-height</span><span style="color: #00AA00;">:</span><span style="color: #933;">150px</span><span style="color: #00AA00;">;</span> &nbsp;<span style="color: #808080; font-style: italic;">/** altura mínima **/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">max-height</span><span style="color: #00AA00;">:</span><span style="color: #933;">300px</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/** altura máxima **/</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<h2>Tabela de referência</h2>
<p>O MSDN guarda uma <a href="http://msdn.microsoft.com/en-us/library/cc351024(v=vs.85).aspx#elementselectors" target="_blank">tabela de compatibilidade muito completa com propriedades do CSS</a> que os IEs suportam ou não. Vale a pena dar uma olhada e entender melhor o que você já pode usar nativamente do CSS em vez de sair escrevendo loucamente soluções JQuery.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/ferramentas-de-diagnostico/" title="Ferramentas de diagnóstico">Ferramentas de diagnóstico</a></li><li><a href="http://tableless.com.br/dev-ie6/" title="Desenvolvendo para IE6">Desenvolvendo para IE6</a></li><li><a href="http://tableless.com.br/ah-o-maravilhoso-mundo-real/" title="Ah, o maravilhoso mundo real">Ah, o maravilhoso mundo real</a></li><li><a href="http://tableless.com.br/ie8-o-sonho-nao-acabou/" title="IE8 &#8211; O sonho não acabou">IE8 &#8211; O sonho não acabou</a></li><li><a href="http://tableless.com.br/sobre-internet-explorer-para-mobile-breve-impressao/" title="Sobre Internet Explorer para Mobile &#8211; Breve impressão">Sobre Internet Explorer para Mobile &#8211; Breve impressão</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/dicas-de-sobrevivencia-ie6/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Drops 7 &#8211; Você está fazendo errado</title>
		<link>http://tableless.com.br/drops-7-voce-esta-fazendo-errado/</link>
		<comments>http://tableless.com.br/drops-7-voce-esta-fazendo-errado/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 04:14:02 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Drops]]></category>
		<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[drops]]></category>
		<category><![CDATA[mercado]]></category>
		<category><![CDATA[podcast]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5910</guid>
		<description><![CDATA[Cuidado, você pode estar fazendo alguma coisa muito errada. Na verdade foi mais um desabafo. ]]></description>
			<content:encoded><![CDATA[<p>Tem designers trabalhando com web que não entendem HTML/CSS. Tem programadores que ainda insistem em aprender apenas a linguagem server-side e ficam se lixando para HTML. Tem desenvolvedores de interface que não estão nem aí pra semântica, css bem escrito e caem na bobeira de ficar discutindo assuntos superficiais como abordar ou não abordar determinado browser, ou o Flash é melhor que HTML e vice-versa.</p>
<p><iframe width="100%" height="166" scrolling="no" frameborder="no" src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F42077637&#038;show_artwork=true"></iframe></p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/" title="Drops 9 &#8211; Préprocessadores, frameworks e bibliotecas">Drops 9 &#8211; Préprocessadores, frameworks e bibliotecas</a></li><li><a href="http://tableless.com.br/drops-8-o-que-o-dev-client-side-deve-saber/" title="Drops 8 &#8211; O que o dev client-side deve saber">Drops 8 &#8211; O que o dev client-side deve saber</a></li><li><a href="http://tableless.com.br/drops-6-acessibilidade/" title="Drops 6 &#8211; Acessibilidade">Drops 6 &#8211; Acessibilidade</a></li><li><a href="http://tableless.com.br/drops-4-validar-importante/" title="Drops 4 &#8211; Validar é importante?">Drops 4 &#8211; Validar é importante?</a></li><li><a href="http://tableless.com.br/drops-2-a-palavra-marcacao-do-html/" title="Drops 2 &#8211; A palavra Marcação do HTML">Drops 2 &#8211; A palavra Marcação do HTML</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/drops-7-voce-esta-fazendo-errado/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Usando Meta Box em seu tema WordPress</title>
		<link>http://tableless.com.br/usando-meta-box-em-seu-tema-wordpress/</link>
		<comments>http://tableless.com.br/usando-meta-box-em-seu-tema-wordpress/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 13:52:29 +0000</pubDate>
		<dc:creator>keppelen</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[Meta Box]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5161</guid>
		<description><![CDATA[Entenda como funcionam o Meta Box do Wordpress.]]></description>
			<content:encoded><![CDATA[<h2>O que são Meta Boxes?</h2>
<p>Os Meta Boxes (Caixas de informações) foi implementado a partir da versão 2.5 do CMS, os Meta Boxes são aquelas caixas arrastáveis que estão presente na Dashboard, edição de um post, páginas, além de outros locais na área administrativa do WordPress.</p>
<p>Os Meta Boxes é uma maneira atraente para a tela do editor de post e evita forçar os usuários a confiar em <a title="Custom Post Type" href="http://tableless.com.br/custom-post-types-wordpress/" target="_blank">campos personalizados</a>. Se você já criou algum tipo de campo personalizado no WordPress, você provavelmente gostaria de adicionar algum campo.</p>
<p>Com os Meta Box e mais fácil. Imagine que você esteja criando um tema para um cliente que precise catalogar sua coleção de vinil. Você começa imediatamente olhar para o WordPress para ver como isso pode ser feito. Cada Post representa um Vinil, que é perfeito para adicionar imagem, titulo e descrição. Podemos usar também as categorias e marcar dentro do WordPress para que os organize. Mas vamos supor que o cara queira acrescentar mais um dado para catalogação? O WordPress não te dar essa opção por padrão a não ser que usemos o grande Meta Box.</p>
<h2>Usando o Meta boxes</h2>
<p>Neste tutorial não iremos trabalhar em um arquivo functions.php. Que não é o lugar correto para ele. Se você está adicionando dados a uma mensagem, é provável que você quer que ele exista independentemente do seu projeto de front end. Como tal, você deve colocar esse código em algum lugar que não é dependente do seu design. Ex: Um arquivo de plugin.</p>
<p>Convenientemente o WordPress oferece uma função para adicionar os Meta Boxes a uma tela de administração, usando o seguinte &#8220;add_meta_box&#8221;. Abaixo um exemplo.</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> add_meta_box<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$title</span><span style="color: #339933;">,</span> <span style="color: #000088;">$callback</span><span style="color: #339933;">,</span> <span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$context</span><span style="color: #339933;">,</span> <span style="color: #000088;">$priority</span><span style="color: #339933;">,</span> <span style="color: #000088;">$callback_args</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<h3>Parâmetros</h3>
<ul>
<li>$id &#8211; (<a title="String" href="http://codex.wordpress.org/How_to_Pass_Tag_Parameters#String" target="_blank">String</a>) Identificador único (Obrigatório)</li>
<li>$title &#8211; (<a title="String" href="http://codex.wordpress.org/How_to_Pass_Tag_Parameters#String" target="_blank">String</a>) Titulo a ser exibido (Obrigatório)</li>
<li>$callback &#8211; (<a title="Callback" href="http://codex.wordpress.org/How_to_Pass_Tag_Parameters#Callback" target="_blank">Callback</a>) Função para exibir o conteúdo do Meta Boxes  (Obrigatório) <a title="Exemplo Callback" href="http://codex.wordpress.org/Function_Reference/add_meta_box#Example" target="_blank">Exemplo</a></li>
<li>$page &#8211; (<a title="String" href="http://codex.wordpress.org/How_to_Pass_Tag_Parameters#String" target="_blank">String</a>) Onde será exibido o Meta Boxes. Exemplos (<tt>'post'</tt>, <tt>'page'</tt>, <tt>'link'</tt>, or<tt>'custom_post_type' )</tt></li>
<li> $context (<a title="String" href="http://codex.wordpress.org/How_to_Pass_Tag_Parameters#String" target="_blank">String</a>) Tela onde o box vai ser inserido.</li>
<li>$priority (<a title="String" href="http://codex.wordpress.org/How_to_Pass_Tag_Parameters#String" target="_blank">String</a>) Prioridade de inserção da caixa em relação as demais.</li>
<li>$callback_args (<a title="Array" href="http://codex.wordpress.org/How_to_Pass_Tag_Parameters#Array" target="_blank">array</a>) Determina a passagem de parâmetros a função callback.</li>
</ul>
<p>Então, nosso <strong>add_meta_box </strong>será parecido com esse.</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> add_meta_box <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'my-meta-box-id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Meu primeiro Meta Box'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'vinil_meta_box_vinil'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'post'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'normal'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'high'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Não podemos simplesmente colocar em nosso arquivo plugin sozinho, se não vamos acabar na tela branca da morte ou o erro fatal PHP. Chamada para a função indefinida, por quê? Porque chamamos a função add_meta_box antes do WordPress ser carregado. Com isso precisamos fazer um gancho no WordPress, que faz parte da api de um plugin. Basicamente, as funções começam enganchando em uma ação do WordPress. Então vamos fazer nosso gancho add_meta_box em uma função, então conectar essa função ao add_meta_boxes, evitando o erro fatal. Nosso código para o Meta Boxes para tela de postagem ficará assim:</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'add_meta_boxes'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'vinil_meta_box_add'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">function</span> vinil_meta_box_add<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
add_meta_box<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'my-meta-box-id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Meu primeiro Meta Box'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'vinil_meta_box_vinil'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'post'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'normal'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'high'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<h2>Renderizando o Meta Box</h2>
<p>O código acima é o suficiente para adicionar o Meta Box, mas agora temos que tornar a coisa mais legal. Vamos adicionar campos, apenas um formulário HTML misturado com um pouco de PHP para exibir os dados salvos. Não precisamos incluir as tags de formulário pois o WordPress já faz isso para a gente.  :) Lembre que a string passada como o $callback em add_meta_box? Agora vamos criar um função com o mesmo nome.</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000000; font-weight: bold;">function</span> vinil_meta_box_vinil<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Conteúdo do meu primeiro Meta Box.'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Agora vamos fazer o formulário, vamos adicionar vários campos para este Meta Box, 1 input, 1 select, 1 checkbox. Vamos começar com o input.</p>
<p>Na função</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> vinil_meta_box_vinil<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Conteúdo do meu primeiro Meta Box.'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Vamos retirar o</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Conteúdo do meu primeiro Meta Box'</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Para começar a fazer o formulario do Meta Box, ficando da seguinte forma:</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">function vinil_meta_box_vinil()<br />
{<br />
?&gt;<br />
&lt;p&gt;<br />
&lt;label for=&quot;texto_meta_box&quot;&gt;Text Label&lt;/label&gt;<br />
&lt;input type=&quot;text&quot; name=&quot;texto_meta_box&quot; id=&quot;texto_meta_box&quot; /&gt;<br />
&lt;/p&gt;<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Mas e quanto a exibir os dados? Bem você verá a seguinte, vamos armazenar esses dados na tabela usando a função wp_postmeta update_post_meta. Essas funções tem duas irmãs chamada get_post_meta e get_post_custom, que pega os dados de wp_postmeta. O get_post_meta só peega dados de uma chave, enquanto get_post_custom pega tudo. Como estamos usando realmente apenas um campo, neste ponto, vamos usar o get_post_meta.</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">function vinil_meta_box_vinil()<br />
{<br />
$values = get_post_custom( $post-&gt;ID );<br />
$text = isset( $values['texto_meta_box'] ) ? esc_attr( $values['texto_meta_box'][0] ) : '';<br />
$selected = isset( $values['meta_box_select'] ) ? esc_attr( $values['meta_box_select'][0] ) : '';<br />
$check = isset( $values['meta_box_check'] ) ? esc_attr( $values['meta_box_check'][0] ) : '';<br />
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );<br />
?&gt;<br />
&lt;p&gt;<br />
&lt;label for=&quot;texto_meta_box&quot;&gt;Text Label&lt;/label&gt;<br />
&lt;input type=&quot;text&quot; name=&quot;texto_meta_box&quot; id=&quot;texto_meta_box&quot; /&gt;<br />
&lt;/p&gt;<br />
<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Agora vamos adicionar o DropDow em nosso Meta Box.</p>
<p>No drop-dow iremos usar uma das funções mais úteis no WordPress, o selected(). Ele compara o primeiro valor, os dados que salva, com o segundo atributo de valor, &lt;option&gt;. Se eles são os mesmos a função selected=&#8221;selected&#8221; que faz com o que o valor do drop down seja gravado. Mas você também pode usar o selected com botões de radio.</p>
<p>Ficando da seguinte forma:</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">function vinil_meta_box_vinil()<br />
{<br />
$values = get_post_custom( $post-&gt;ID );<br />
$text = isset( $values['texto_meta_box'] ) ? esc_attr( $values['texto_meta_box'][0] ) : '';<br />
$selected = isset( $values['meta_box_select'] ) ? esc_attr( $values['meta_box_select'][0] ) : '';<br />
$check = isset( $values['meta_box_check'] ) ? esc_attr( $values['meta_box_check'][0] ) : '';<br />
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );<br />
?&gt;<br />
&lt;p&gt;<br />
&lt;label for=&quot;texto_meta_box&quot;&gt;Text Label&lt;/label&gt;<br />
&lt;input type=&quot;text&quot; name=&quot;texto_meta_box&quot; id=&quot;texto_meta_box&quot; /&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&lt;label for=&quot;meta_box_select&quot;&gt;Color&lt;/label&gt;<br />
&lt;select name=&quot;meta_box_select&quot; id=&quot;meta_box_select&quot;&gt;<br />
&lt;option value=&quot;red&quot; <span style="color: #000000; font-weight: bold;">&lt;?php</span> selected<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$selected</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'red'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;Vermelho&lt;/option&gt;<br />
&lt;option value=&quot;blue&quot; <span style="color: #000000; font-weight: bold;">&lt;?php</span> selected<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$selected</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'blue'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;Azul&lt;/option&gt;<br />
&lt;/select&gt;<br />
&lt;/p&gt;<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<h3>Adicionando o Check box</h3>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">function vinil_meta_box_vinil()<br />
{<br />
$values = get_post_custom( $post-&gt;ID );<br />
$text = isset( $values['texto_meta_box'] ) ? esc_attr( $values['texto_meta_box'][0] ) : '';<br />
$selected = isset( $values['meta_box_select'] ) ? esc_attr( $values['meta_box_select'][0] ) : '';<br />
$check = isset( $values['meta_box_check'] ) ? esc_attr( $values['meta_box_check'][0] ) : '';<br />
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );<br />
?&gt;<br />
&lt;p&gt;<br />
&lt;label for=&quot;texto_meta_box&quot;&gt;Text Label&lt;/label&gt;<br />
&lt;input type=&quot;text&quot; name=&quot;texto_meta_box&quot; id=&quot;texto_meta_box&quot; /&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&lt;label for=&quot;meta_box_select&quot;&gt;Color&lt;/label&gt;<br />
&lt;select name=&quot;meta_box_select&quot; id=&quot;meta_box_select&quot;&gt;<br />
&lt;option value=&quot;red&quot; <span style="color: #000000; font-weight: bold;">&lt;?php</span> selected<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$selected</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'red'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;Vermelho&lt;/option&gt;<br />
&lt;option value=&quot;blue&quot; <span style="color: #000000; font-weight: bold;">&lt;?php</span> selected<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$selected</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'blue'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;Azul&lt;/option&gt;<br />
&lt;/select&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&lt;input type=&quot;checkbox&quot; name=&quot;meta_box_check&quot; id=&quot;meta_box_check&quot; <span style="color: #000000; font-weight: bold;">&lt;?php</span> checked<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$check</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'on'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span> /&gt;<br />
&lt;label for=&quot;meta_box_check&quot;&gt;Don't Check This.&lt;/label&gt;<br />
&lt;/p&gt;<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Novamente o WordPress fornece a função checked(). Ela funciona exatamente como selected() comparando o primeiro valor com o segundo valor e repetindo para checked=&#8221;checked&#8221; se eles são o mesmo.</p>
<h2>Para finalizar vamos salvar nosso Meta Box</h2>
<p>Para salvar nossos dados, vamos confiar em outro gancho: save_post. Isso funciona como o nosso gancho na ação acima:</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span> add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'save_post'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'vinil_meta_box_save'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>A função vinil_meta_box receberá um argumento, a ID do Post, e vai cuidar da limpeza e salvar todos os nossos dados.</p>
<p>Antes de podermos fazer qualquer coisa, no entanto, que temos que fazer 3 coisas: verificar se o Post esta auto salvando, verificar o valor único que criamos anteriormente, e verificar se o usuário atual pode realmente editar o post.</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'save_post'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'vinil_meta_box_save'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">function</span> vinil_meta_box_save<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span> <span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'DOING_AUTOSAVE'</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> DOING_AUTOSAVE <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_nonce'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>wp_verify_nonce<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_nonce'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my_meta_box_nonce'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>current_user_can<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'edit_post'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Agora as coisas divertidas: na verdade, salvar nossos dados. A regra número um, ao colocar qualquer coisa em seu banco de dados ou em seu site é não confiar no usuário. Mesmo se esse usuário é você. Para o efeito, antes de salvar os dados, queremos ter certeza de que não há nada malicioso lá. Felizmente WordPress fornece um monte de funções para validação de dados. Para isso vamos utilizar o esc_attr(). E também vamos usar a função update_post_meta para salvar os nossos dados. Leva três argumentos: a ID post, a chave de meta, e o valor.</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'save_post'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'vinil_meta_box_save'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">function</span> vinil_meta_box_save<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span> <span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'DOING_AUTOSAVE'</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> DOING_AUTOSAVE <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_nonce'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>wp_verify_nonce<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_nonce'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my_meta_box_nonce'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>current_user_can<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'edit_post'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000088;">$allowed</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
<span style="color: #0000ff;">'a'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
<span style="color: #0000ff;">'href'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'texto_meta_box'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><br />
update_post_meta<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'texto_meta_box'</span><span style="color: #339933;">,</span> wp_kses<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'texto_meta_box'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$allowed</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_select'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><br />
update_post_meta<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'meta_box_select'</span><span style="color: #339933;">,</span> esc_attr<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_select'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000088;">$chk</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_check'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_check'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">'on'</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'off'</span><span style="color: #339933;">;</span><br />
update_post_meta<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'meta_box_check'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$chk</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>É isso, agora você deve ter um Meta Boxes funcionando em seu WordPress.</p>
<h2>Nosso arquivo fica assim:</h2>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
Plugin Name: Meta Box<br />
Plugin URI: http://bygiovanni.com.br<br />
Description:<br />
Version: 1.0<br />
Author: Giovanni - Tableless<br />
Author URI: http://bygiovanni.com.br<br />
*/</span><br />
<br />
<span style="color: #666666; font-style: italic;">//ADICIONANDO O META BOX</span><br />
add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'add_meta_boxes'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'vinil_meta_box_add'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">function</span> vinil_meta_box_add<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
add_meta_box<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'my-meta-box-id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Meu primeiro Meta Box'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'vinil_meta_box_vinil'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'post'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'normal'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'high'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//FORMULARIO PARA SALVAS OS DADOS</span><br />
<span style="color: #000000; font-weight: bold;">function</span> vinil_meta_box_vinil<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #000088;">$values</span> <span style="color: #339933;">=</span> get_post_custom<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'texto_meta_box'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> ? esc_attr<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'texto_meta_box'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$selected</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_select'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> ? esc_attr<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_select'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$check</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_check'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> ? esc_attr<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_check'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
wp_nonce_field<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'my_meta_box_nonce'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'meta_box_nonce'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span><br />
&lt;p&gt;<br />
&lt;label for=&quot;texto_meta_box&quot;&gt;Text Label&lt;/label&gt;<br />
&lt;input type=&quot;text&quot; name=&quot;texto_meta_box&quot; id=&quot;texto_meta_box&quot; /&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&lt;label for=&quot;meta_box_select&quot;&gt;Color&lt;/label&gt;<br />
&lt;select name=&quot;meta_box_select&quot; id=&quot;meta_box_select&quot;&gt;<br />
&lt;option value=&quot;red&quot; <span style="color: #000000; font-weight: bold;">&lt;?php</span> selected<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$selected</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'red'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;Vermelho&lt;/option&gt;<br />
&lt;option value=&quot;blue&quot; <span style="color: #000000; font-weight: bold;">&lt;?php</span> selected<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$selected</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'blue'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&gt;Azul&lt;/option&gt;<br />
&lt;/select&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&lt;input type=&quot;checkbox&quot; name=&quot;meta_box_check&quot; id=&quot;meta_box_check&quot; <span style="color: #000000; font-weight: bold;">&lt;?php</span> checked<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$check</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'on'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span> /&gt;<br />
&lt;label for=&quot;meta_box_check&quot;&gt;Don't Check This.&lt;/label&gt;<br />
&lt;/p&gt;<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'save_post'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'vinil_meta_box_save'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">function</span> vinil_meta_box_save<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span> <span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'DOING_AUTOSAVE'</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> DOING_AUTOSAVE <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_nonce'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>wp_verify_nonce<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_nonce'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my_meta_box_nonce'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>current_user_can<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'edit_post'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000088;">$allowed</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
<span style="color: #0000ff;">'a'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
<span style="color: #0000ff;">'href'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'texto_meta_box'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><br />
update_post_meta<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'texto_meta_box'</span><span style="color: #339933;">,</span> wp_kses<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'texto_meta_box'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$allowed</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_select'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><br />
update_post_meta<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'meta_box_select'</span><span style="color: #339933;">,</span> esc_attr<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_select'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000088;">$chk</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_check'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meta_box_check'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">'on'</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'off'</span><span style="color: #339933;">;</span><br />
update_post_meta<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'meta_box_check'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$chk</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Para saber mais sobre os Meta Box podem ver no Codex que também é uma ótima fonte de estudo para o WP. <a href="http://codex.wordpress.org/Function_Reference/add_meta_box" target="_blank">http://codex.wordpress.org/Function_Reference/add_meta_box</a></p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/wordpress-include-tags/" title="Wordpress Include Tags">Wordpress Include Tags</a></li><li><a href="http://tableless.com.br/cuidado-com-invasoes-no-wordpress/" title="Cuidado com invasões no WordPress">Cuidado com invasões no WordPress</a></li><li><a href="http://tableless.com.br/sublime-text-2-meu-novo-editor/" title="Sublime Text 2 &#8211; Meu novo editor">Sublime Text 2 &#8211; Meu novo editor</a></li><li><a href="http://tableless.com.br/dicas-de-sobrevivencia-ie6/" title="Dicas de sobrevivência em uma era pós o IE6">Dicas de sobrevivência em uma era pós o IE6</a></li><li><a href="http://tableless.com.br/drops-7-voce-esta-fazendo-errado/" title="Drops 7 &#8211; Você está fazendo errado">Drops 7 &#8211; Você está fazendo errado</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/usando-meta-box-em-seu-tema-wordpress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Introdução aos padrões de codificação</title>
		<link>http://tableless.com.br/introducao-a-padroes-de-codificacao/</link>
		<comments>http://tableless.com.br/introducao-a-padroes-de-codificacao/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 11:28:41 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[cotidiano]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5286</guid>
		<description><![CDATA[É mais importante para o time concordar em um único estilo de código do que encontrar o estilo perfeito. ]]></description>
			<content:encoded><![CDATA[<p>Como os idiomas reais, cada linguagem de programação tem suas respectivas regras, individualidades, pontuações, pausas e pontos em comum com outras linguagens. Você precisa conhecer essas peculiaridades para falar fluentemente ou no mínimo ser entendido. Nas linguagens de para web ou qualquer outra linguagem de programação, precisamos seguir algumas regras básicas para que o código não vire uma língua estrangeira no meio do projeto.</p>
<p>Definir padrões é normal para que a equipe inteira escreva o código da mesma maneira. Esse assunto é longo e muito importante para todas as equipes de desenvolvimento. Programadores já quiseram me matar várias vezes porque eu uso TABS em vez de ESPAÇOS em arquivos Python/PHP. Programadores gostam de espaços. Eu não. Mas não é o nosso gosto que vai definir quais os padrões de código que devemos seguir.</p>
<p>Quando definimos padrões e boas práticas, garantimos que todos da equipe conseguirão ter o mínimo de entendimento do código daquele projeto que está na empresa a tempos. Se alguém da equipe adoecer ou precisar ir para o Canadá, outro integrante pode assumir o seu lugar sem precisar se preocupar em aprender novas regras, porque elas devem ser as mesmas do projeto anterior.</p>
<p>É importante que os integrantes da equipe sejam sempre fiéis aos acordos firmados no momento em que combinam esses padrões. É importante também que, caso eles encontrem um integrante fora da lei, que eles forcem o meliante a seguir as regras. Já vi gente perdendo o trabalho de uma semana por que estava trabalhando diretamente pelo FTP e o projeto não estava no GIT. O programador simplesmente APAGOU o projeto da pessoa. Nunca mais ela resolveu editar os arquivos fora do controle de versão. Esse tipo de atitude é perigosa mas muito necessárias às vezes. Devemos forçar as regras num ambiente onde todos devem quem, quando e como as linhas de código do projeto foram escritas.</p>
<p>Alguns pontos para se pensar e combinar:</p>
<h6>Identação</h6>
<p>Como devemos identar o código? Com espaços ou tabs? Se for com espaços quantos? </p>
<h6>Espaços em brancos (Whitespaces)</h6>
<p>Espaços devem ser incluídos depois de uma operação condicional? Espaços devem ser colocados entre o seletor e as chaves? E no final de cada linha, precisa?</p>
<h6>Nomenclatura</h6>
<p>Como as classes, ids e variáveis devem ser nomeadas? E as funções? Vamos usar <a href="http://en.wikipedia.org/wiki/CamelCase">CamelCase</a>?</p>
<h6>Comentários</h6>
<p>Como faremos com os comentários? Como serão os delimitadores do comentário? O comentário deve ser completo ou precisa ser algo mais resumido?</p>
<h6>Arquivos</h6>
<p>Como os arquivos, que não fazem parte da estrutura padrão do CMS, Framework e etc deverão ser chamados? E o nome das pastas? Como as páginas serão chamadas?</p>
<h6>Chaves e ponto/vírgula</h6>
<p>As chaves deverão ser abertas na mesma linha ou devemos quebrar linhas? Vamos sempre usar ponto/vírgula? Vamos usar o padrão <a href="http://en.wikipedia.org/wiki/Indent_style#K.26R_style">K&#038;R ou Allman</a>?</p>
<p>Quando definimos estas pequenas coisas, diminuímos muitos percalços no meio do caminho. Já vi projetos atrasarem meses por que um palerma abriu e salvou arquivos com o charset diferente do que já tinha sido combinado no início.</p>
<p>&#8220;It&#8217;s more important for people on a team to agree to a single coding style than it is to find the perfect style.&#8221; <a href="http://www.amazon.com/gp/product/0596102356/ref=as_li_ss_tl?ie=UTF8&#038;tag=tableless-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0596102356">Building Scalable Web Sites: Building, Scaling, and Optimizing the Next Generation of Web Applications</a><br />
Indico este livro sobre esse e outros assuntos sobre a construção, desenvolvimento e manutenção de websites</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/gomo-teste-seu-site-mobile/" title="GoMo &#8211; Teste seu site mobile">GoMo &#8211; Teste seu site mobile</a></li><li><a href="http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/" title="Agora é a vez dos desenvolvedores">Agora é a vez dos desenvolvedores</a></li><li><a href="http://tableless.com.br/estruturacao-de-client-side-preprocessadores-framewoks-e-bibliotecas-parte-1/" title="Estruturação de Client-side &#8211; Parte 1: Préprocessadores, Framewoks e Bibliotecas">Estruturação de Client-side &#8211; Parte 1: Préprocessadores, Framewoks e Bibliotecas</a></li><li><a href="http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/" title="ePub: Aprenda a criar um livro digital">ePub: Aprenda a criar um livro digital</a></li><li><a href="http://tableless.com.br/introducao-das-premissas-dos-controles-de-versao/" title="Introdução das premissas dos controles de versão">Introdução das premissas dos controles de versão</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/introducao-a-padroes-de-codificacao/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Biblioteca CSS ou Framework?</title>
		<link>http://tableless.com.br/biblioteca-css-ou-framework/</link>
		<comments>http://tableless.com.br/biblioteca-css-ou-framework/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 11:18:06 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[frameworks]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=4327</guid>
		<description><![CDATA[O que é melhor utilizar: biblioteca de CSS ou um Framework?]]></description>
			<content:encoded><![CDATA[<p>Primeiro você precisa entender a diferença entre os dois. A <a href="http://tableless.com.br/?author=8">Talita Pagani</a> <a href="http://bit.ly/qbkeRb">em um dos seus artigos</a> descreve o que é um framework assim:</p>
<blockquote><p>Framework é um conjunto de componentes que provêm uma estrutura básica de elementos reutilizáveis, tendo uma arquitetura consistente de funcionalidade genérica sob a qual a aplicação será construída.</p></blockquote>
<p>O uso de uma Biblioteca (CSS, Javascript, etc) é bastante parecido com a utilização de um framework. Eu prefiro a utilização de uma biblioteca por ser menos instrusiva e muito mais personalizável. Existem algumas diferenças que você deve prestar sua atenção para entender qual das duas formas é melhor para o projeto. </p>
<h3>Modificação visual</h3>
<p>Enquanto o framework modifica as características visuais, a biblioteca se restringe manipulando a diagramação ou a posição dos elementos. </p>
<p>Na grande maioria, os frameworks modificam automaticamente o visual de alguns elementos, gerando um certo retrabalho, porque geralmente o design aplicado não é o design aprovado pelo cliente ou pelo designer do projeto. Veja por exemplo o <a href="http://twitter.github.com/bootstrap/">Bootstrap</a> feito pelo pessoal do Twitter. Assim que linkado em seu código, os elementos como os campos de formulários e parágrafos tem suas características visuais modificadas para seguir um design pré definido pelos donos do framework &#8211; diga-se de passagem, o trabalho de design feito pelo pessoal do Bootstrap é muito bacana. Já as bibliotecas, na maioria das vezes, não faz nenhuma modificação no design ou na posição dos elementos sem a inserção de Classe ou ID. Geralmente as bibliotecas são restritas para manipular a posição e as dimensões dos elementos, facilitando a diagramação de layouts, sem modificar as características visuais, já que os layouts de cada site tem o design diferente. É por isso que eu gosto de definir que frameworks são ótimos para construir sistemas, já as bibliotecas ajudam muito mais ao construir websites. Sistemas tem muitos formulários, botões de ação, pouco texto e etc. A utilização de um framework é muito interessante nesse caso porque não perdemos tempo manipulando e definindo um padrão visual para estes elementos &#8211; como os tamanhos dos campos de formulário de texto.</p>
<p>Já a biblioteca é muito útil para definir quando os elementos terão float, position, largura variável e etc. São características de posição e diagramação, que não afetam a questão do design. </p>
<h3>Quantidade de código não utilizado</h3>
<p>Geralmente ao utilizar uma biblioteca, talvez você estará linkando mais código do que o necessário para o seu projeto. Você pode não utilizar todas essas classes/ids pré definidos pelo autor da biblioteca, o que é normal dependendo do projeto e do design criado. Este risco diminui quando utilizamos frameworks, já que eles modificam as características de todos os elementos principais do projeto. Praticamente todo o código estará do framework estará sendo usado porque eles são aplicados nos elementos assim que o framework é linkado no código. Porém, com a biblioteca, é fácil mapearmos quais as classes utilizadas e excluir o código que não está sendo usado para diminuir o tamanho dos arquivos e do código.</p>
<h3>Personalização e criação</h3>
<p>A personalização ou criação de uma biblioteca CSS é muito mais fácil do que se resolvermos criar do zero um framework. Você consegue facilmente criar uma biblioteca de CSS contendo algumas classes úteis para qualquer projeto, por exemplo:</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #00AA00;">*</span> <span style="color: #00AA00;">&#123;</span><br />
&nbsp; <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><br />
&nbsp; <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><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
<span style="color: #6666ff;">.fLeft</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">&#125;</span><br />
<span style="color: #6666ff;">.fRight</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<span style="color: #6666ff;">.fNone</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<br />
<span style="color: #6666ff;">.dBlock</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">block</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<span style="color: #6666ff;">.dInline</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">inline</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<span style="color: #6666ff;">.dInlineBlock</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> inline-<span style="color: #993333;">block</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<span style="color: #6666ff;">.dNone</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<br />
<span style="color: #6666ff;">.pAbsolute</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<span style="color: #6666ff;">.pRelative</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">relative</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<br />
<span style="color: #6666ff;">.cBoth</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">clear</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">both</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<span style="color: #6666ff;">.cLeft</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">clear</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span><br />
<span style="color: #6666ff;">.cRight</span> <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">clear</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>O código acima é um bom começo para uma biblioteca CSS personalizada. Contém ali classes básicas que se combinadas dão diferentes características para um determinado elemento. Essas classes também se mostram muito úteis se reutilizarmos no código javascript do projeto.</p>
<h3>Sistema e Site</h3>
<p>Design de sistemas são sempre parecidos. Todos eles tem muitos campus de formulário, checkboxes, combos, radio buttons e etc. É basicamente manipulação de formulários, alertas de erro e mensagens para o usuário, manipulação de botões de ação e etc. Não foge muito disso.<br />
Já o design de sites são todos bem diferentes. Por isso que a manipulação visual dos frameworks se torna inútil e gera muito retrabalho. </p>
<p>Eu prefiro utilizar bibliotecas para a criação de sites. Para o desenvolvimento de sistemas, prefiro utilizar framworks.</p>
<p>Mas tenha em mente: se for decidir utilizar qualquer um dos dois, é bom que essa decisão seja feita logo no começo do projeto. Aplicar um framework no meio de um projeto pode dar muitos problemas e tomar muito tempo. Por isso é importante que essa decisão seja feita no início do projeto.</p>
<h3>Concluindo</h3>
<p>Entenda que um framework pode ter uma biblioteca de CSS embutida em seu core. Tendo também a possibilidade de manipular o visual dos elementos, o framework se mostra muito mais completo que uma biblioteca CSS, embora a bilioteca ganhe por ser mais fácil de personalizar e por não manipular o visual dos elementos, te deixando livre para formatar da forma que você bem entender. </p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/dicas-de-sobrevivencia-ie6/" title="Dicas de sobrevivência em uma era pós o IE6">Dicas de sobrevivência em uma era pós o IE6</a></li><li><a href="http://tableless.com.br/experiencia-cross-device/" title="Experiência cross-device">Experiência cross-device</a></li><li><a href="http://tableless.com.br/introducao-ao-css-3d-flip-card/" title="Introdução ao CSS 3D &#8211; Flip Card">Introdução ao CSS 3D &#8211; Flip Card</a></li><li><a href="http://tableless.com.br/oocss-ou-css-do-jeito-certo/" title="OOCSS ou CSS do jeito certo">OOCSS ou CSS do jeito certo</a></li><li><a href="http://tableless.com.br/css3-animation-keyframe/" title="CSS3 &#8211; Animation e regra keyframe">CSS3 &#8211; Animation e regra keyframe</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/biblioteca-css-ou-framework/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Entendendo os Reflows</title>
		<link>http://tableless.com.br/entendendo-os-reflows-2/</link>
		<comments>http://tableless.com.br/entendendo-os-reflows-2/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 13:00:02 +0000</pubDate>
		<dc:creator>Alysson Franklin</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[navegadores]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[reflow]]></category>
		<category><![CDATA[render tree]]></category>
		<category><![CDATA[repaint]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=3940</guid>
		<description><![CDATA[O que são e como os Reflows podem ser otimizados para aplicações ficarem ainda mais rápidas.]]></description>
			<content:encoded><![CDATA[<p>Reflow é um assunto extenso e necessário. Ele sempre vai existir nos navegadores, então temos que entendê-lo para saber como utilizá-lo de maneira racional. O mais legal é entender todo o contexto sobre o que são e como funcionam, para a partir daí repensar o código que renderizamos no navegador para obtermos maior performance.</p>
<p><strong>Reflow é o resultado de um evento que desencadeia mudanças no jeito que a pagina deve ser renderizada, tomando tempo para cálculo e reposicionamento de elementos.</strong></p>
<p>Para explicar como isso acontece, o importante é entender como um navegador renderiza uma página web.</p>
<h2>DOM</h2>
<p>Document Object Model (DOM) é uma interface independente de linguagem e plataforma para representar e interagir com objetos em HTML, XHTML e XML. Mas o DOM é mais que isso; toda linguagem estruturada tem uma arvore DOM.</p>
<div id="attachment_3941" class="wp-caption alignleft" style="width: 490px"><a href="http://tableless.com.br/wp-content/uploads/2011/07/DOMTree.gif"><img class="size-full wp-image-3941 " src="http://tableless.com.br/wp-content/uploads/2011/07/DOMTree.gif" alt="Exemplo de arvore DOM para documento HTML" width="480" height="212" /></a><p class="wp-caption-text">Exemplo de arvore DOM para documento HTML</p></div>
<p>Mas sobre o DOM podemos dizer que programas ou scripts podem dinamicamente acessar elementos na árvore DOM e alterar seu conteúdo, estrutura e estilo. Adicional ao estado inicial da pagina, estas alterações são agregadas a árvore DOM. O resultado é a renderização - o que nós vemos em um navegador. Mas a nossa <em>Render Tree </em>tem mais que isso:</p>
<h2>Render Tree e como realmente entender display X visibility</h2>
<div id="attachment_3942" class="wp-caption alignnone" style="width: 514px"><a href="http://tableless.com.br/wp-content/uploads/2011/07/render.png"><img class="size-full wp-image-3942 " src="http://tableless.com.br/wp-content/uploads/2011/07/render.png" alt="Como a render tree e montada" width="504" height="234" /></a><p class="wp-caption-text">Como a render tree é montada</p></div>
<p>O DOM é resultado do parse do markup HTML que você montou dentro de um navegador. Só que dentro de um HTML você não tem apenas a estrutura do documento, estilos em CSS e funcionalidades em javascript também estarão no seu markup. E a Render tree é a soma de DOM mais estilos, que depois podem ser manipulados (seus scripts).</p>
<p>Pode parecer estranho, mas para mim a melhor maneira de entender as diferencas entre DOM e Render Tree é encarar esta última como um <span class="c17">individuo narcisista</span>. Isso mesmo: A Render Tree gosta de aparecer, é o que vemos no browser. O DOM acontece por trás das cortinas. <em>À Render tree, o palco</em>. (<a href="http://tableless.com.br/tenha-o-dom" title="Tenha o DOM">Para saber mais sobre o DOM, veja este outro artigo</a>)</p>
<p>Uma página que tem controles de show/hide mostra isso muito bem. Enquanto todo o conteúdo da página está presente na árvore DOM, apenas alguns itens estarão disponíveis na Render Tree &#8211; os visíveis na página (display:block). Alterar os elementos display:none vão disparar mudanças na render tree, e não na árvore DOM.</p>
<p>Já tentou entender as diferenças entre display:none e visibility:hidden? A maioria das explicações que vemos é que um “deixa de mostrar o elemento totalmente, incluindo seu espaço em tela” e o outro “deixa de mostrar o elemento visual, mas sua área de exibição continua sendo utilizada”. Esta explicação não está incorreta, mas seria melhor dizer que a propriedade display altera a estrutura da render tree, adicionando algo que antes não estava ali, enquanto visibility não faz alterações, apenas o câmbio de mostrar ou não um elemento que já esta na render tree.</p>
<h2>Repaint</h2>
<p>Entendido as diferenças entre display e visibility, além do contexto de área do elemento, conseguimos explicar o Repaint. Uma ação que faça alteração de propriedades de background <strong>sem alterar dimensões ou outras propriedades do elemento</strong> não causam o reflow, apenas o repaint, que seria a atualização da propriedade de cor ou da imagem &#8211; literalmente pintar novamente o elemento. Repaints gastam menos CPU que reflows.</p>
<h2>Como um navegador monta seu documento HTML</h2>
<p>Esses vídeos são sensacionais. Eles explicam o que são os reflows e dai como minimizá-los durante a fase de desenvolvimento do documento (sempre usando <span class="c9"><a class="c7" href="http://tableless.com.br/bem-vindo-a-xangrila-parte-1">Progressive Enhancement</a></span> quando possível) é mais fácil..</p>
<span style="text-align:center; display: block;"><a href="http://tableless.com.br/entendendo-os-reflows-2/"><img src="http://img.youtube.com/vi/ZTnIxIA5KGw/2.jpg" alt="" /></a></span>
<p class="c6 anotacao">Esta é uma representação de como a página da Mozilla é montada. Quer mais? Veja também como a <span class="c9"><a class="c7" href="http://video.google.com/videoplay?docid=-5863446593724321515">Wikipedia</a></span> e a página do <span class="c9"><a class="c7" href="http://video.google.com/videoplay?docid=-1471976166301235697">Google</a></span> no Japão são renderizadas.</p>
<p>Analisando o primeiro vídeo, perceba que ao finalizar a montagem do rodapé, “algo mais” acontece (a partir de 12seg). São os Reflows. A maioria dos elementos são recalculados e reposicionados. Se ponderarmos que o rodapé acaba de ser montado aos 14 segundos e a renderização termina aos 26 segundos da pagina, estamos falando quase de 50% do tempo de renderização sendo gasto com Reflows, o que é muito, dependendo do que a sua página deve fazer.</p>
<h3>O que causam exatamente os reflows?</h3>
<h5>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">var bstyle = document.body.style; // cache<br />
bstyle.padding = &quot;20px&quot;; // reflow, repaint<br />
bstyle.border = &quot;10px solid red&quot;; // outro reflow e repaint<br />
bstyle.color = &quot;blue&quot;; // repaint<br />
bstyle.backgroundColor = &quot;#fad&quot;; // repaint<br />
bstyle.fontSize = &quot;2em&quot;; // reflow, repaint<br />
// novo elemento DOM - reflow, repaint<br />
document.body.appendChild(document.createTextNode('Leeento'));</div></td></tr></tbody></table></div>
</h5>
<p>Reflows são excessivamente pesados e para reduzir efeitos uma das táticas que navegadores usam é processar nossos scripts em lote. Uma fila é criada para todos os comandos que causam reflow sejam processados de uma única vez. Porém o foco é entender o que causa um reflow e tentar minimizar o seu uso para ganhar performance na aplicação.</p>
<p>Este assunto é novo, e com certeza, A lista que mostro abaixo deve crescer. É importante mantermos a atenção a este assunto porque pequenos cuidados podem significar muito. Em um site web visualizado em desktops a diferença é óbvia sobre o tempo de renderização. Mas isso implica em outras coisas, que podem fazer a diferença não apenas em montar uma página mais rápido, mas também para menor gasto de processamento, o que garante também mais tempo de bateria em mobiles e tablets por exemplo.</p>
<ol start="1">
<li>Adicionar, remover ou atualizar o DOM;</li>
<li>Esconder nós do DOM usando display:none;</li>
<li>Mover e animar o DOM na página;</li>
<li>Adicionar folhas de estilo on-the-fly que mudem o comportamento dos elementos;</li>
<li>Redimensionar janelas;</li>
<li>Alterar tamanho de fontes;</li>
<li class="c6 c15">Scroll de página;</li>
</ol>
<p>Em um dos posts sobre o assunto, Tony G mapeou pesquisas prévias e montou a seguinte tabela, que também está sendo constantemente atualizada.</p>
<table class="c16" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<h4><strong>Element</strong></h4>
</td>
<td>
<h4><strong>Frame, Image</strong></h4>
</td>
<td>
<h4><strong>Range</strong></h4>
</td>
<td>
<h4><strong>SVGLocatable</strong></h4>
</td>
<td>
<h4><strong>SVGTextContent</strong></h4>
</td>
<td>
<h4><strong>SVGUse</strong></h4>
</td>
<td>
<h4><strong>window</strong></h4>
</td>
</tr>
<tr>
<td><span class="c0">clientHeight,<br />
</span><span class="c0">clientLeft,<br />
</span><span class="c0">clientTop,<br />
</span><span class="c0">clientWidth,<br />
focus(), getBoundingClientRect(), getClientRects(), innerText,<br />
offsetHeight,<br />
offsetLeft,<br />
offsetParent,<br />
offsetTop,<br />
offsetWidth,<br />
outerText,<br />
scrollByLines(), scrollByPages(), scrollHeight, scrollIntoView(), scrollIntoViewIfNeeded(), scrollLeft,<br />
scrollTop,<br />
</span>scrollWidth</td>
<td><span class="c0">height, width</span></td>
<td><span class="c0">getBoundingClientRect(), getClientRects()</span></td>
<td><span class="c0">computeCTM(), getBBox()</span></p>
<p class="c5">
</td>
<td><span class="c0">getCharNumAtPosition(), getComputedTextLength(), getEndPositionOfChar(), getExtentOfChar(), getNumberOfChars(), getRotationOfChar(), getStartPositionOfChar(), getSubStringLength(), selectSubString()</span></td>
<td><span class="c0">instanceRoot</span></td>
<td><span class="c0">getComputedStyle(),<br />
scrollBy(),<br />
scrollTo(),<br />
scrollX,<br />
scrollY, webkitConvertPointFromNodeToPage(), webkitConvertPointFromPageToNode()</span></td>
</tr>
</tbody>
</table>
<h2>Como melhorar o meu código para minimizar os reflows?</h2>
<p>É simples. Basta minimizar o uso de requisições de estilo, que façam o navegador executar reflows ou repaints.</p>
<ol start="1">
<li><span class="c11">Planejar a sua aplicação e entender como plugins e scripts criados vão se comportar em relação a reflow e repaints. Arquitetar o uso de plugins de acordo com a personalização que deve ser feita. Minimize o uso de alteração de estilos on-the-fly.</span></li>
<li><span class="c11">Quando precisar alterar a propriedade de um estilo, troque o nome da classe, planeje a existência deste estado e adicione-o ao CSS previamente. Se o valor desta nova classe for dinâmica, use cssText. Evite alterar a propriedade diretamente para qualquer mudança.</span></li>
<li><span class="c0">Pense como suas mudanças afetam a render tree e o quanto precisará ser revalidado depois desta mudanca. Se você usa position:absolute em um elemento, ele deixa de pertencer ao nó que está, e passa a ser filho do BODY. Alterá-lo então, não será tão custoso em termos de performance. Mesmo que alterações neste nó sobreponha outras areas, o reflow acontecerá apenas neste nó, e não em toda a render tree. </span></li>
<li><span class="c11">Limpe seu CSS. Classes não utilizadas devem ser removidas.</span></li>
<li><span class="c11">Reduza o número de mudanças no DOM. Ele vai causar mudanças estruturais em todas as outras etapas. E mais tempo de reflow. </span></li>
<li><span class="c11">Animações na página, transições? Pondere sobre posicioná-la de maneira absoluta e trabalhar com ela a partir do BODY.</span></li>
<li><span class="c11">Vá com calma nos seletores CSS &#8211; os descendentes em particular &#8211; pois usam maior poder de CPU para executar a tarefa (CPU = Bateria).</span></li>
</ol>
<h2>Referências</h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Document_Object_Model">DOM</a> pela wikipedia</li>
<li><a href="http://video.google.com/videoplay?docid=-1471976166301235697#docid=1020647662203348823">Gecko Reflow</a></li>
<li><a href="http://paulirish.com/2011/dom-html5-css3-performance/">DOM, HTML5, CSS3 e Performance</a> &#8211; <a href="http://dl.dropbox.com/u/39519/talks/gperf/index.html">Slides</a> por Paul Irish</li>
<li><a href="http://www.mozilla.org/newlayout/doc/reflow.html">Reflow</a> pelo Mozilla Labs</li>
<li><a href="http://ajaxian.com/archives/browser-reflows-how-do-they-affect-performance">Reflow e Repaint</a> na Ajaxian</li>
<li><a href="http://code.google.com/speed/articles/reflow.html">Reflow</a> pelo Google Code</li>
<li><a href="http://www.w3.org/DOM/">W3C Overview do DOM</a></li>
<li><a href="http://www.dayofjs.com/videos/22158462/web-browsers_alex-russel">1 dia de javascript com Alex Russel: Como Navegadores Veem as suas Apps</a></li>
<li><a href="http://gent.ilcore.com/2011/03/how-not-to-trigger-layout-in-webkit.html">Como (não) criar um layout no webkit por Tony G</a></li>
<li><a href="http://www.webkit.org/blog/1091/more-web-inspector-updates/#timeline_panel">Usando a timeline panel em navegadores webkit</a></li>
<li><a href="http://www.bookofspeed.com/">The book of Speed</a></li>
<li><a href="http://www.phpied.com/rendering-repaint-reflowrelayout-restyle/">Reflow/Repaint</a> por Stoyan Stefanov</li>
<li><a href="http://calendar.perfplanet.com/2009/the-new-game-show-will-it-reflow/">Inconsistências dos navegadores em Reflows</a> por Stoyan Stefanov</li>
<li><a href="http://www.browserscope.org/?category=reflow">BrowserScope tests para reflows</a></li>
<li><a href="http://www.youtube.com/watch?v=a2_6bGNZ7bA">Browsers para Web Developers</a> David Baron da Mozilla labs</li>
<li><a href="http://www.webkit.org/blog/114/webcore-rendering-i-the-basics/">Renderização no webkit, o básico</a></li>
</ul>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/tenha-o-dom/" title="Tenha o DOM">Tenha o DOM</a></li><li><a href="http://tableless.com.br/vote-no-especialista-em-usabilidade-para-presidente/" title="Vote no Especialista em Usabilidade para Presidente">Vote no Especialista em Usabilidade para Presidente</a></li><li><a href="http://tableless.com.br/dicas-de-sobrevivencia-ie6/" title="Dicas de sobrevivência em uma era pós o IE6">Dicas de sobrevivência em uma era pós o IE6</a></li><li><a href="http://tableless.com.br/javascript-com-cafe/" title="JavaScript com café">JavaScript com café</a></li><li><a href="http://tableless.com.br/jquery-conheca-os-metodos-on-e-off/" title="jQuery: conheça os métodos on() e off()">jQuery: conheça os métodos on() e off()</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/entendendo-os-reflows-2/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Ferramentas de diagnóstico</title>
		<link>http://tableless.com.br/ferramentas-de-diagnostico/</link>
		<comments>http://tableless.com.br/ferramentas-de-diagnostico/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 16:46:49 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[Na Prática]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=3513</guid>
		<description><![CDATA[Quando algo de estranho acontece, é bom estar preparado. ]]></description>
			<content:encoded><![CDATA[<p>Se você escreve CSS e HTML provavelmente tem problemas de compatibilidade e visualização. Isso é normal, acontece com os melhores desenvolvedores. Quando isso acontece, o melhor a se fazer é um trabalho investigativo. Esse trabalho normalmente é ingrato porque você demora horas investigando o seu código para encontrar o erro e geralmente esse erro é solucionado com uma linha de código. Para você descobrir qual é essa linha, você precisa de ferramentas que te ajudem a decifrar todo o problema. Vou indicar algumas aqui que você já deve conhecer.</p>
<h4>Ferramentas de Inspeção</h4>
<p>Hoje a maioria dos browsers tem sua própria ferramenta de inspeção. O Firefox incorporou a <a href="https://addons.mozilla.org/pt-br/firefox/addon/firebug/">Firebug</a>, o IE tem a <a href="http://msdn.microsoft.com/en-us/library/dd565628(v=vs.85).aspx" rel="external">Developer Tool</a>, o Chrome e o Safari tem o <a href="http://trac.webkit.org/wiki/WebInspector">web inspector</a> do próprio Webkit. O Opera usa o <a href="http://www.opera.com/dragonfly/">Dragonfly</a>.</p>
<p>Com estas ferramentas você consegue facilmente encontrar o elemento, verificar o seu estilo CSS e entender qual das propriedades está causando o problema. Você consegue editar essas propriedades e ver o resultado ali mesmo.<br />
Entenda que essas ferramentas não são utilizadas para salvar seu CSS diretamente servem apenas para fazer o trabalho investigativo.</p>
<p>Além de nos ajudar com HTML e CSS, os &#8220;inspectors&#8221; nos ajudam muito com debugging de Javascript. Você consegue localizar exatamente um determinado problema adicionando observer points para verificar o funcionamento de partes do script.</p>
<h4>XRAY</h4>
<p>O <a href="http://www.westciv.com/xray/" rel="external">XRAY</a> é um bookmarklet que te mostra as informações sobre um determinado elemento apenas clicando em cima dele. Você salva o bookmarklet e pronto. Clicando em qualquer elemento, você consegue informações como tamanho, nome da classe e do id, hierarquia, margens e qualquer outro estilo relacionado ao elemento.</p>
<h4>SelectORacle</h4>
<p>Você já deve ter visto algum seletor muito, mas muito complexo e difícil de se entender. Algo do tipo:</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">body <span style="color: #00AA00;">&gt;</span> ol <span style="color: #00AA00;">&gt;</span> li p<span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span>a<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
p<span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span>.section<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
body <span style="color: #00AA00;">&gt;</span> h2<span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span><span style="color: #3333ff;">:first-of-</span>type<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span><span style="color: #3333ff;">:last-of-</span>type<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
ul li<span style="color: #3333ff;">:nth-</span>child<span style="color: #00AA00;">&#40;</span>2n<span style="color: #00AA00;">+</span><span style="color: #cc66cc;">3</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span><span style="color: #3333ff;">:last-</span>child<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
ol li<span style="color: #3333ff;">:nth-</span>child<span style="color: #00AA00;">&#40;</span>-3n<span style="color: #00AA00;">+</span><span style="color: #cc66cc;">9</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
ol li<span style="color: #3333ff;">:nth-</span>child<span style="color: #00AA00;">&#40;</span>7n-<span style="color: #cc66cc;">3</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
button<span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span><span style="color: #00AA00;">&#91;</span>DISABLED<span style="color: #00AA00;">&#93;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
html|<span style="color: #00AA00;">*:</span>not<span style="color: #00AA00;">&#40;</span><span style="color: #00AA00;">:</span>link<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span></div></td></tr></tbody></table></div>
<p>Se você parar alguns preciosos minutos você consegue entender exatamente o que cada um dos seletores quer dizer. O <a href="http://gallery.theopalgroup.com/selectoracle/" rel="external">SelectORacle</a> te fala em segundos o que cada um dos seletores quer dizer, explicando em poucas palavras cada uma das funções.</p>
<h4>Validadores de HTML e CSS</h4>
<p>Validar seu HTML e CSS não é ponto crucial para a aprovação do código pelo cliente, mas ele validar o código é muito importante para que ele não vá para a produção com erros de sintaxe. Estes erros podem causar grande parte dos erros visuais de crossbrowser. Cada browser se comporta diferente ao encontrar uma tag aberta ou colocada no lugar errado. Se o IE quebra o layout porque a tag não está fechada da forma correta, mas nos outros browsers o visual da página aparece normalmente, você logo fará um Hack para consertar o problema no IE.<br />
Por isso é interssante que antes de incluir um CSS Hack em seu código, procure a SOLUÇÃO do problema antes de fazer um &#8220;workaround&#8221;.</p>
<p>O W3C disponibiliza o <a href="http://validator.w3.org/" rel="external">validador de HTML</a>, que já está entendendo algumas coisas de HTML5. E o <a href="http://jigsaw.w3.org/css-validator/" rel="external">validador de CSS</a>, que ainda não entende CSS3.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/parser-html5-firefox4/" title="Novo parser HTML5 &#8211; FF4">Novo parser HTML5 &#8211; FF4</a></li><li><a href="http://tableless.com.br/dicas-de-sobrevivencia-ie6/" title="Dicas de sobrevivência em uma era pós o IE6">Dicas de sobrevivência em uma era pós o IE6</a></li><li><a href="http://tableless.com.br/experiencia-deve-ter-comeco-meio-e-fim/" title="Experiência deve ter começo, meio e fim">Experiência deve ter começo, meio e fim</a></li><li><a href="http://tableless.com.br/ah-o-maravilhoso-mundo-real/" title="Ah, o maravilhoso mundo real">Ah, o maravilhoso mundo real</a></li><li><a href="http://tableless.com.br/web-standards-project-wasp/" title="Web Standards Project – WaSP">Web Standards Project – WaSP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/ferramentas-de-diagnostico/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Múltiplos backgrounds com CSS</title>
		<link>http://tableless.com.br/multiplos-backgrounds-com-css/</link>
		<comments>http://tableless.com.br/multiplos-backgrounds-com-css/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 18:52:56 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[tecnicascss]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=3309</guid>
		<description><![CDATA[Testando múltiplos backgrounds no CSS3. Isso realmente funciona! ;-)]]></description>
			<content:encoded><![CDATA[<p>Uma das features mais esperadas por mim é sem dúvida a possibilidade de podermos definir múltiplos backgrounds via CSS. Chega de elementos extras e gambiarras. No CSS3 a propriedade background ganha várias funções, dentro elas a possibilidade de definirmos várias imagens como background em um único elemento.</p>
<p>A sintaxe é muito simples. Na verdade, é idêntica a sintaxe existente. Segue abaixo:</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">div <span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">600px</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;">500px</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <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: #000000; font-weight: bold;">black</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <br />
&nbsp; &nbsp; <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">gradiente-top.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #000000; font-weight: bold;">top</span> <span style="color: #000000; font-weight: bold;">left</span> repeat-X<span style="color: #00AA00;">,</span> <br />
&nbsp; &nbsp; <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">gradiente-baixo.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #000000; font-weight: bold;">bottom</span> <span style="color: #000000; font-weight: bold;">left</span> repeat-X<span style="color: #00AA00;">,</span> <br />
&nbsp; &nbsp; <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">gradiente-esquerda.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #000000; font-weight: bold;">top</span> <span style="color: #000000; font-weight: bold;">left</span> repeat-Y<span style="color: #00AA00;">,</span> <br />
&nbsp; &nbsp; <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">gradiente-direita.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #000000; font-weight: bold;">top</span> <span style="color: #000000; font-weight: bold;">right</span> repeat-Y<span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>Veja que basta definirmos diversas vezes a propriedade URL com as imagens que escolher e pronto. Os atributos de posição e repetição continuam iguais!<br />
É tão simples que dispensa grandes explicações. No exemplo acima usei 4 imagens em gradiente transparente. Duas para os lados e as outras duas para o topo e baixo. </p>
<p><a href="http://tableless.github.com/exemplos/multiple-background/index.html" rel="external">Testando com o HTML</a></p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/introducao-ao-css-3d-flip-card/" title="Introdução ao CSS 3D &#8211; Flip Card">Introdução ao CSS 3D &#8211; Flip Card</a></li><li><a href="http://tableless.com.br/css3-sombras-em-textos-e-elementos/" title="CSS3 &#8211; Sombras em textos e elementos">CSS3 &#8211; Sombras em textos e elementos</a></li><li><a href="http://tableless.com.br/css3-animation-keyframe/" title="CSS3 &#8211; Animation e regra keyframe">CSS3 &#8211; Animation e regra keyframe</a></li><li><a href="http://tableless.com.br/css3-abas-com-a-pseudo-classe-target/" title="CSS3 &#8211; Abas com a pseudo-classe :target">CSS3 &#8211; Abas com a pseudo-classe :target</a></li><li><a href="http://tableless.com.br/oocss-ou-css-do-jeito-certo/" title="OOCSS ou CSS do jeito certo">OOCSS ou CSS do jeito certo</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/multiplos-backgrounds-com-css/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Para iniciantes: O que é HTML?</title>
		<link>http://tableless.com.br/o-que-html-basico/</link>
		<comments>http://tableless.com.br/o-que-html-basico/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 02:26:24 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[O Básico]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[padroes web]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=4911</guid>
		<description><![CDATA[HTML é uma das linguagens que utilizamos para desenvolver websites. O acrônimo HTML vem do inglês e significa Hypertext Markup Language ou em português Linguagem de Marcação de Hipertexto. O HTML é a liguagem base da internet. Foi criada para &#8230;]]></description>
			<content:encoded><![CDATA[<p>HTML é uma das linguagens que utilizamos para desenvolver websites. O acrônimo HTML vem do inglês e significa Hypertext Markup Language ou em português Linguagem de Marcação de Hipertexto.</p>
<p>O HTML é a liguagem base da internet. Foi criada para ser de fácil entendimento por seres humanos e também por máquinas, como por exemplo o Google ou outros sistemas que percorrem a internet capturando informação.</p>
<h3>Quem criou o HTML?</h3>
<p>Tim Berners-Lee. Esse é o nome do homem que criou o HTML. Ele criou o HTML para a comunicação e disseminação de pesquisas entre ele e seu grupo de colegas. O HTML ficou bastante conhecido quando começou a ser utilizada para formar a rede pública daquela época, o que se tornaria mais tarde a internet que conhecemos hoje.</p>
<h3>O que são as tags do HTML?</h3>
<p>O HTML é uma linguagem baseada em marcação. Nós marcamos os elementos para mostrar quais informações a página exibe. Por exemplo, um título importante. Aquele título do artigo, da manchete do site, nós marcamos com uma tag/elemento chamado H1. Veja um exemplo:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a>&gt;</span>Aqui vai o texto do título<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>Perceba que o texto está entre duas marcações. Essas marcações são chamadas de TAGS. As tags são abertas e depois fechadas. No exemplo acima abrimos a tag com <strong>&lt;h1&gt;</strong> e fechamos com <strong>&lt;/h1&gt;</strong>. O que está dentro é o conteúdo mostrado para o usuário.</p>
<p>O parágrafos são marcados com a tag P. Assim:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;</span>Aqui vai o texto do parágrafo. <br />
Geralmente parágrafos tem muitas palavras, <br />
letras menores que as do título<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>Utilizando as tags, nós dizemos para o navegador o que é cada informação. O que é um título, o que é um parágrafo, o que é um botão, um formulário etc. Dizemos também o que é cada coisa para os sistemas de busca, como o Google. O Google, nesse caso, para exibir os resultados de busca, ele precisa saber o que é um parágrafo e o que é um título. Ele sabe disso através das tags.</p>
<h3>A estrutura básica</h3>
<p>Todo HTML começa do mesmo jeito. Não há segredos aqui. Você pode simplesmente copiar em algum lugar para usar esse código toda vez iniciar um novo HTML.</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #00bbdd;">&lt;!DOCTYPE html&gt;</span><br />
<br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pt-br&quot;</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">charset</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span>Título da página<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span><br />
&nbsp;... aqui vai todo o codigo HTML que faz seu site...<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>A primeira linha se chamada DOCTYPE. O Doctype avisa aos browsers, robôs de busca, leitores de tela e outras coisas que tipo de documento e aquele que eles estao prestes a carregar. Existem outros códigos que podemos carregar, por exemplo XML. Por isso o Doctype avisa o browser para que ele saiba como se comportar ao ler o código.</p>
<p>Depois começamos com a Tag HTML. Isso quer dizer que todo o que estiver entre as tags &lt;html&gt;&lt;/html&gt; é escrito em HTML. Ao lado da palavra HTML tem um atributo (explico o que são atributos mais pra frente) chamado lang, onde indicamos qual o idioma do texto que escreveremos.</p>
<p>Logo após a tag html temos a tag &lt;head&gt;. Na tag Head nós indicamos o título do documento e indicamos a tabela de caractéres que o browser deve usar para renderizar seu texto. Também não se preocupe com isso agora.<br />
A tag &#038;lttitle&gt; é muito importante. É com ela que você indica o título do documento. O Google e outros sistemas de busca utilizam essa tag para indicar em suas buscas o título da págin. Isso é muito importante para que você apareça bem nas buscas.</p>
<p>Logo depois da tag de fechamento &lt;/head&gt; começamos a tag &lt;body&gt;. Dentro deste elemento é que vamos escrever todo o código HTML do resto do site.</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #00bbdd;">&lt;!DOCTYPE html&gt;</span><br />
<br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pt-br&quot;</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">charset</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span>Título da página<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a>&gt;</span>Aqui vai o texto do título<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a>&gt;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;</span>Aqui vai o texto do parágrafo. <br />
&nbsp; &nbsp;Geralmente parágrafos tem muitas palavras, letras menores que as do título<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<h3>Criando seu primeiro HTML</h3>
<p>Para criar seu HTML é muito simples. Primeiro, abra e crie um arquivo vazio, sem texto, com o nome <strong>index.html</strong>. Utilize o Notepad (se estiver no windows) ou o TextEdit (se estiver no Mac).<br />
Perceba que a extensão do seu arquivo é <strong>.html</strong> e não <strong>.txt</strong></p>
<p>Feito isso, copie o código utilizado no exemplo acima e cole neste documento. Salve e abra no seu navegador. Voilá! Você fez seu primeiro arquivo HTML</p>
<h3>Um pouco avançado: Desenvolvimento em Camadas</h3>
<p>Um dos principais problemas no desenvolvimento para internet é a mistura dos diversos códigos. Nós não usamos apenas o HTML para fazer sites. Além do HTML, utilizamos ainda o CSS, que é uma linguagem para configurarmos o visual das páginas e o Javascript, que vai cuidar do comportamento da página, por exemplo, o que acontece quando o usuário clica em um botão.<br />
Há também as linguagens chamadas Linguagens Server-Side, que são linguagens como PHP, Python, Ruby, ASP e etc. Essas linguagens fazem tudo funcionar. Elas fazem os cálculos nos servidores e dão a resposta para o navegador do usuário.</p>
<p>Para que os códigos não se misturem, nós os separamos em diversas camadas. Para ficar mais fácil de entender, imagine que o HTML é sempre o esqueleto do site. É com ele que vamos fazer toda a estrutura de código, onde iremos dizer o que é um título, o que é um parágrafo, uma imagem e etc. O CSS será a parte externa do corpo. É o que deixará o esqueleto bonito. É com o CSS que iremos dar cor para o título, configurar o tamanho do texto, largura das colunas e etc.</p>
<p>Dessa forma nós não misturamos o código HTML e o código CSS. Utilizamos a mesma ideia para separar os outros códigos citados acima.</p>
<p>Este é o básico. É conceito puro, por que você precisa começar de algum lugar. <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Mais referências:</p>
<ul>
<li><a title="aula particular de html" href="http://tableless.com.br/aula-particular/">Quer aprender HTML? Faça aulas particulares conosco.</a></li>
<li><a href="http://campus.tableless.com.br/?utm_source=Tableless&amp;utm_medium=linkMenu&amp;utm_campaign=linkCampusOnline">Videos tutoriais sobre desenvolvimento web</a></li>
<li><a href="http://pt.wikipedia.org/wiki/HTML">Um artigo muito completo no Wikipedia</a></li>
<li><a href="http://wp.me/p1vY5N-kS">Sobre o desenvolvimento web em camadas.</a></li>
<li><a title="Drops 2 – A palavra Marcação do HTML" href="http://tableless.com.br/drops-2-a-palavra-marcacao-do-html/">Áudio: Sobre marcação HTML</a></li>
</ul>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/experiencia-deve-ter-comeco-meio-e-fim/" title="Experiência deve ter começo, meio e fim">Experiência deve ter começo, meio e fim</a></li><li><a href="http://tableless.com.br/biblioteca-css-ou-framework/" title="Biblioteca CSS ou Framework?">Biblioteca CSS ou Framework?</a></li><li><a href="http://tableless.com.br/css3-breve-introducao-a-rgba/" title="CSS3 &#8211; Breve introdução ao RGBA">CSS3 &#8211; Breve introdução ao RGBA</a></li><li><a href="http://tableless.com.br/ferramentas-de-diagnostico/" title="Ferramentas de diagnóstico">Ferramentas de diagnóstico</a></li><li><a href="http://tableless.com.br/parser-html5-firefox4/" title="Novo parser HTML5 &#8211; FF4">Novo parser HTML5 &#8211; FF4</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/o-que-html-basico/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

