<?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>Klaus Paiva &#187; CSS</title>
	<atom:link href="http://blog.klaus.pro.br/tags/css/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.klaus.pro.br</link>
	<description>Idéias e desventuras de Klaus Paiva</description>
	<lastBuildDate>Mon, 12 Jul 2010 20:26:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Entendendo a pseudo classe :target</title>
		<link>http://blog.klaus.pro.br/2010/ler/entendendo-a-pseudo-classe-target/index.html</link>
		<comments>http://blog.klaus.pro.br/2010/ler/entendendo-a-pseudo-classe-target/index.html#comments</comments>
		<pubDate>Mon, 12 Jul 2010 20:25:58 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[:target]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=427</guid>
		<description><![CDATA[Hoje eu estava lendo alguns feeds RSS quando acabei navegando até essa página aqui: https://developer.mozilla.org/En/Using_the_:target_selector Nela é possível ver várias formas de utilização da pseudo-classe :target. Essa pseudo classe pode ser usada nos seus arquivos CSS quando um elemento é referenciado pela âncora lá na URL. Ou seja, http://example.com/#isso_aqui_eh_a_ancora Dessa forma, você pode obter alguns [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje eu estava lendo alguns <em>feeds</em> RSS quando acabei navegando até essa página aqui: <a href="https://developer.mozilla.org/En/Using_the_:target_selector">https://developer.mozilla.org/En/Using_the_:target_selector</a></p>
<p>Nela é possível ver várias formas de utilização da <a href="http://www.w3.org/TR/css3-selectors/#target-pseudo">pseudo-classe :target</a>. Essa pseudo classe pode ser usada nos seus arquivos CSS quando um elemento é referenciado pela âncora lá na URL.</p>
<p>Ou seja, <a href="http://example.com/#isso_aqui_eh_a_ancora">http://example.com/<strong>#isso_aqui_eh_a_ancora</strong></a></p>
<p>Dessa forma, você pode obter alguns <strong>comportamentos dinâmicos utilizando apenas CSS</strong>. Comportamentos tipicamente feitos por JavasScript, como destacar uma foto ao clicar sobre sua imagem menor, podem ser feitos sem problemas utilizando-se esta técnica.</p>
<p>Ainda não ficou muito claro, né? <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Para facilitar as coisas, veja este <strong><a href="http://www.klaus.pro.br/projects/css-target/index.html#imagem-1">exemplo funcional</a></strong>.</p>
<p>Experimente clicar nos <em>links</em> disponíveis abaixo da foto. Note que clicando em qualquer um deles a imagem é alterada. <strong>A &#8220;mágica&#8221;está lá no arquivo CSS</strong>:</p>
<pre class="css"><code><span class="coMULTI">/* esconde as imagens por padrão */</span>
<span class="re0">#imagens</span> img <span class="br0">{</span>
	<span class="kw1">display</span>: <span class="kw2">none</span>;
<span class="br0">}</span>
<span class="re0">#imagens</span> <span class="re0">#imagem<span class="nu0">-1</span></span><span class="re2">:target</span>,
<span class="re0">#imagens</span> <span class="re0">#imagem<span class="nu0">-2</span></span><span class="re2">:target</span>,
<span class="re0">#imagens</span> <span class="re0">#imagem<span class="nu0">-3</span></span><span class="re2">:target</span>,
<span class="re0">#imagens</span> <span class="re0">#imagem<span class="nu0">-4</span></span><span class="re2">:target</span>,
<span class="re0">#imagens</span> <span class="re0">#imagem<span class="nu0">-5</span></span><span class="re2">:target</span>,
<span class="re0">#imagens</span> <span class="re0">#imagem<span class="nu0">-6</span></span><span class="re2">:target</span> <span class="br0">{</span>
	<span class="kw1">display</span>: <span class="kw2">block</span>;
<span class="br0">}</span>
</code></pre>
<p>Ou seja, o pseudo seletor :target só será ativado quando a âncora na URL casar com o elemento respectivo, <strong>tornando a imagem selecionada visível</strong> (e as demais invisíveis).</p>
<p>Em termos de compatibilidade, este exemplo foi testado e funciona em: Firefox 3.6, Chrome 5.0, Opera 10.60 e Safari 5.0.</p>
<p>E <strong>funciona no IE</strong>? Talvez&#8230; talvez no IE 9! <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  (<em><a href="http://en.wikipedia.org/wiki/Evil_laugh">evil laugh</a> here mwhaha!</em>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2010/ler/entendendo-a-pseudo-classe-target/index.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Curso de desenvolvimento de front-end web</title>
		<link>http://blog.klaus.pro.br/2010/ler/curso-de-desenvolvimento-de-front-end-web/index.html</link>
		<comments>http://blog.klaus.pro.br/2010/ler/curso-de-desenvolvimento-de-front-end-web/index.html#comments</comments>
		<pubDate>Thu, 17 Jun 2010 17:35:00 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Cursos]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=419</guid>
		<description><![CDATA[Já recebi vários e-mails através do formulário de contato deste blog me perguntando sobre cursos de web standards, HTML, CSS, Javascript e afins. Em termos de cursos disponíveis gratuitamente na web, eu sempre recomendei o conteúdo disponível no site W3Schools. Porém, além desse curso, essa semana eu recebi um e-mail aqui no trabalho comentando sobre [...]]]></description>
			<content:encoded><![CDATA[<p>Já recebi vários e-mails através do formulário de contato deste blog me perguntando sobre cursos de web standards, HTML, CSS, Javascript e afins. Em termos de cursos disponíveis gratuitamente na web, eu sempre recomendei o conteúdo disponível no site <a href="http://www.w3schools.com/">W3Schools</a>.</p>
<p>Porém, além desse curso, essa semana eu recebi um <em>e-mail</em> aqui no trabalho comentando sobre um curso oferecido pela <strong>Opera</strong> (sim, aquela do <a href="http://www.opera.com/">navegador Opera</a>). Dei uma olhada geral sobre o conteúdo e parece ser bem interessante, além de abordar a maioria dos tópicos usados no dia-a-dia de quem trabalha e desenvolve interfaces <em>web</em>.</p>
<p>Sendo assim, se você está interessado num <a href="http://www.opera.com/company/education/curriculum/">curso de desenvolvimento de front-end gratuito</a>, esta é também uma excelente opção. Bons estudos!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2010/ler/curso-de-desenvolvimento-de-front-end-web/index.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fazendo uma faxina nos seus arquivos CSS</title>
		<link>http://blog.klaus.pro.br/2010/ler/fazendo-uma-faxina-nos-seus-arquivos-css/index.html</link>
		<comments>http://blog.klaus.pro.br/2010/ler/fazendo-uma-faxina-nos-seus-arquivos-css/index.html#comments</comments>
		<pubDate>Wed, 03 Feb 2010 12:36:50 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=390</guid>
		<description><![CDATA[Todo mundo que já mexeu em um arquivo CSS &#8220;legado&#8221; vai saber do que estou falando: adicionar novas regras a um arquivo CSS é fácil, difícil é remover as regras que não são mais usadas. A dúvida é sempre a mesma: &#8220;será que não tem nenhuma &#8216;tela&#8217; que usa essas regras?&#8221;. E como a resposta [...]]]></description>
			<content:encoded><![CDATA[<p>Todo mundo que já mexeu em um arquivo CSS &#8220;legado&#8221; vai saber do que estou falando: adicionar novas regras a um arquivo CSS é fácil, difícil é remover as regras que não são mais usadas.</p>
<p>A dúvida é sempre a mesma: &#8220;será que não tem nenhuma &#8216;tela&#8217; que usa essas regras?&#8221;. E como a resposta nem sempre é fácil de se descobrir, deixo aqui uma dica de ferramenta que pode ajudar nessa tarefa.</p>
<p>Trata-se da extensão de <a href="http://www.getfirefox.com/">Firefox</a> de nome &#8220;<a href="https://addons.mozilla.org/en-US/firefox/addon/10704"><strong>CSS Usage</strong></a>&#8220;. O que ela faz, conforme o nome já sugere, é identificar quais regras na folha de estilo de um site que estão em uso e quais não estão. Com base nessas informações você pode reduzir seu arquivo CSS sem medo!</p>
<p>Após instalar a extensão, basta abrir o <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a> e você verá uma aba &#8220;<strong>CSS Usage</strong>&#8220;. Entrando nela você pode iniciar o processo e verificar a utilização dos seletores. Depois disso é só fazer a limpeza, conforme você achar melhor.</p>
<p>Para que o efeito da extensão seja o esperado, é importante que você navegue no máximo de páginas possíveis de seu site para garantir que todas as &#8220;telas&#8221; serão testadas de acordo com as regras na sua folha de estilos. E se você acha que dá muito trabalho ter de navegar em todas as páginas sempre que quiser limpar seu CSS, acho que é hora de você conhecer o <a href="http://www.seuenium.com.br/">Selenium</a>!</p>
<p>Aqui tem uma <a href="http://blog.klaus.pro.br/wp-content/uploads/2010/02/css-usage.png">figura de exemplo</a> com os resultados da extensão obtidos após uma navegação no <a href="http://www.taperas.com/">Taperás</a>.</p>
<p>Via <a href="http://twitter.com/smashingmag/status/8580942768">Smashing Magazine no Twitter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2010/ler/fazendo-uma-faxina-nos-seus-arquivos-css/index.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>text-overflow para múltiplas linhas</title>
		<link>http://blog.klaus.pro.br/2009/ler/text-overflow-para-multiplas-linhas/index.html</link>
		<comments>http://blog.klaus.pro.br/2009/ler/text-overflow-para-multiplas-linhas/index.html#comments</comments>
		<pubDate>Mon, 26 Oct 2009 18:04:35 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[text-overflow]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=360</guid>
		<description><![CDATA[Esse texto surgiu de uma necessidade que é bastante comum pra nós, seres programadores de interfaces web. Sabe quando o webdesigner desenha uma caixa de tamanho fixo (e largura variável, pra complicar um pouco), em que o texto deverá ficar contido ali dentro da caixa, e no caso do texto ser maior que o tamanho [...]]]></description>
			<content:encoded><![CDATA[<p>Esse texto surgiu de uma necessidade que é bastante comum pra nós, seres programadores de interfaces <em>web</em>. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Sabe quando o <em>webdesigner</em> desenha uma caixa de tamanho fixo (e largura variável, pra complicar um pouco), em que o texto deverá ficar contido ali dentro da caixa, e no caso do texto ser maior que o tamanho disponível, os famosos &#8220;três pontinhos&#8221; devem aparecer?</p>
<p>Pra ilustrar isso melhor, veja a imagem abaixo:</p>
<dl class="images">
<dt><img src="http://blog.klaus.pro.br/wp-content/uploads/2009/10/text-overflow-exemplo.png" alt="Caixa com dimensões fixas e conteúdo &quot;ajustado&quot; para caber" /></dt>
<dd>Caixa com dimensões fixas e conteúdo &#8220;ajustado&#8221; para caber</dd>
</dl>
<p>Um método comum de se fazer isso é contar o número de caracteres e colocar &#8220;&#8230;&#8221;, caso o número de caracteres ultrapasse o número máximo de caracteres que ficarão visíveis. Claro que esse número máximo é uma estimativa e nem sempre o resultado fica bom. Além disso, pode acontecer do &#8220;corte&#8221; no texto acontecer no meio de uma palavra, gerando um resultado estranho ao visitante, &#8220;tipo isso aq&#8230;&#8221;.</p>
<p>Nas CSS existe uma propriedade chamada &#8220;text-overflow&#8221; que, sob certas circustâncias, adiciona automagicamente &#8220;&#8230;&#8221; ao final do texto que não coube na área visível. OK! Problema resolvido então? Não exatamente&#8230; <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>O problema não está resolvido por conta de duas outras questões. Uma delas é que o Firefox ainda não implementa essa propriedade (sim, o IE tem! Moderno hein? <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). A outra questão é que essa propriedade não se aplica nos casos em que o texto ocuparia mais de uma linha.</p>
<p>Se você quiser uma explicação mais detalhada (e exemplos) sobre a propriedade &#8220;text-overflow&#8221;, <a href="http://www.quirksmode.org/css/textoverflow.html">acesse este texto no blog do PPK</a>.</p>
<p>Voltando ao assunto original, agora precisamos resolver aquelas duas questões. Felizmente, com algum tempo de Google e mais algum tempo de pesquisa em fóruns, consegui encontrar algo capaz de ajudar nesta tarefa: o <a href="http://jquerytextoverflow.ipdemo.nl/">jQuery textOverflow Plugin</a>.</p>
<p>O código é relativamente simples e oferece várias opções de customização. Aqui tem uma página de exemplo (<a href="http://www.klaus.pro.br/projects/text-overflow/teste1.php">exemplo 1</a>) gerando algo similar ao que foi mostrado na imagem acima.</p>
<p>Caso você tenha vários elementos na página que vão receber esse tratamento, deixo uma dica: tome cuidado com a performance! Como é uma operação intensiva no DOM, a chance desse código deixar o navegador bastante lento é bastante alta.</p>
<p>Pra esses casos, se você realmente precisa dos &#8220;&#8230;&#8221;, acho que vale a pena tentar juntar esse código com a solução de &#8220;<a href="http://www.nczonline.net/blog/2009/08/11/timed-array-processing-in-javascript/">execução de Javascript com pausas</a>&#8220;, proposta pelo <a href="http://www.nczonline.net/">Nicholas Zakas</a>.</p>
<p>Fiz uma proposta com essa combinação. Ela pode ser vista aqui no <a href="http://www.klaus.pro.br/projects/text-overflow/teste2.php">exemplo 2</a> (com 100 elementos). Embora seja visualmente mais lenta, ela não trava o navegador em momento algum, mesmo no IE 6. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bom, o texto ficou bem longo&#8230; mas acho que deu pra passar bem a ideia. Sugestões ou comentários, é só usar o formulário abaixo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2009/ler/text-overflow-para-multiplas-linhas/index.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O progresso dos novos navegadores</title>
		<link>http://blog.klaus.pro.br/2009/ler/o-progresso-dos-novos-navegadores/index.html</link>
		<comments>http://blog.klaus.pro.br/2009/ler/o-progresso-dos-novos-navegadores/index.html#comments</comments>
		<pubDate>Mon, 02 Mar 2009 22:54:58 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desempenho]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Navegadores]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Vídeos]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=219</guid>
		<description><![CDATA[Este texto é baseado (uma nota mental pública e estruturada, digamos) na apresentação &#8220;Performance Improvements in Browsers&#8221; feita por &#8220;John Resig&#8220;, que é ninguém menos que o pai da famosa biblioteca jQuery. Abaixo está o vídeo com a apresentação feita (aproximadamente 1h) e na sequência algumas notas e comentários sobre os temas apresentados. Abas separadas [...]]]></description>
			<content:encoded><![CDATA[<p>Este texto é baseado (uma nota mental pública e estruturada, digamos) na apresentação &#8220;<a href="http://ejohn.org/blog/talk-performance-improvements-in-browsers/"><em>Performance Improvements in Browsers</em></a>&#8221; feita por &#8220;<a href="http://ejohn.org/">John Resig</a>&#8220;, que é ninguém menos que o pai da famosa biblioteca <a href="http://jquery.com/">jQuery</a>.</p>
<p>Abaixo está o <a href="http://www.youtube.com/watch?v=13-3VMzfU3Y">vídeo com a apresentação</a> feita (aproximadamente 1h) e na sequência algumas <strong>notas e comentários sobre os temas apresentados</strong>.</p>
<div class="videos"><object width="425" height="344" data="http://www.youtube.com/v/13-3VMzfU3Y&amp;hl=pt-br&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/13-3VMzfU3Y&amp;hl=pt-br&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></div>
<h3 class="subtitles">Abas separadas por processos</h3>
<p>Este é um fato que certamente você deve conhecer. Você está lá navegando tranquilamente com uma <strong>dezena (ou mais =) de abas abertas</strong>&#8230; Daí que você resolve acessar um site com um Javascript mal escrito, com uma animação em que o <a href="http://www.adobe.com/products/flashplayer/">Flash Player</a> se revolta e lá foi, o navegador inteiro congela e não resta outra opção senão matar o processo. Claro que a maioria dos navegadores traz opções para <strong>restaurar a seção anterior</strong> mas não deixa de ser bastante incômodo.</p>
<p>A separação das abas por processos permitiria <strong>matar (encerrar) apenas a aba problemática</strong>, mantendo as outras abas isoladas. Isso por si só já seria uma grande vantagem da separação por abas mas ainda há uma segunda vantagem também bastante interessante! =)</p>
<p>Com a separação em diversos processos o sistema operacional pode <strong>gerenciar melhor o processamento</strong>, alocando mais recursos para as partes onde é realmente necessário, sem congelar as outras partes do navegador.</p>
<p>Vale notar que essa divisão em processos distintos causa um aumento do consumo do memória sim mas, como a quantidade de memória disponível nos PCs atuais (mesmo para os &#8220;PCs de prateleira&#8221;) está deixando de ser um gargalo para o desempenho dos computadores, é de se esperar que os programas passem a fazer alocações maiores de memória. Mais ou menos como o princípio da <strong>lei da oferta e da demanda</strong>.</p>
<h3 class="subtitles">Linearização das instruções de funções</h3>
<p>O termo em inglês acho que permite um entendimento melhor: &#8220;<strong>&#8216;<a href="http://en.wikipedia.org/wiki/Inline_function">function inlining</a></strong>&#8220;. Essa é uma característica que, por exemplo, C++ possui. Usando essa propriedade o compilador pode trocar a chamada de uma função pelo corpo da função, fazendo com que a execução das instruções ocorra <strong>sem o <em>overhead</em> de chamar uma função</strong>.</p>
<p>Além disso, pelo código exibido nos <em>slides</em> parece que, diferentemente do C++, você não precisa dar uma dica para o compilador na hora de escrever a função indicando que a função é candidata ao &#8220;<em>inlining</em>&#8220;.</p>
<h3 class="subtitles">Rede</h3>
<p>Aqui vale destacar o <strong>aumento do número de <em>downloads</em> simultâneos para um mesmo domínio</strong>. Com o IE 7 ainda temos o limite de dois downloads mas, felizmente o IE 8 (beta) já tratá um <strong>limite três vezes maior</strong>, de <a href="http://www.microsoft.com/windows/internet-explorer/beta/readiness/developers-new.aspx#ajax">seis <em>downloads</em> simultâneos para o mesmo domínio</a>. A última versão dos demais navegadores já possui um valor de seis ou sete <em>downloads</em>.</p>
<p>Outro recurso bem legal, e este é uma boa ideia da Microsoft, é o <strong>atributo &#8220;defer&#8221; para a <em>tag</em> &lt;script&gt;</strong>. Esse atributo indica para o navegador que ele pode continuar a <strong>renderizar a página sem esperar o arquivo Javascript</strong> referenciado carregar. O atributo já funcionava no IE e vai funcionar nas novas versões do Firefox e Opera.</p>
<h3 class="subtitles">window.postMessage</h3>
<p>O método <strong>window.postMessage</strong> me chamou a atenção. Com ele será possível a <strong>comunicação entre páginas de domínios distintos</strong> de forma bem simples. O princípio é o seguinte: a página remetente da mensagem irá tentar enviar a mensagem para, por exemplo, um <em>iframe</em> destinatário. Este <em>iframe</em> irá verificar se o remetente é alguém que ele conhece para então aceitar a mensagem e executar alguma ação.</p>
<p>A página que receberá as mensagens pode &#8220;ouvir&#8221; os <strong>eventos de mensagens</strong> usando o tradicional método <a href="https://developer.mozilla.org/En/DOM/Element.addEventListener">addEventListener</a>. Verificando a propriedade <em>origin</em>, a página receptora pode <strong>descobrir pelo domínio se a mensagem está vindo de um destinatário conhecido ou não</strong>.</p>
<h3 class="subtitles">Ajax entre domínios diferentes</h3>
<p>Aquele sonho de fazer requisições Ajax entre os N domínios da sua aplicação está prestes a se realizar. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Adicionando um cabeçalho (<em>header</em>) na resposta da requisição Ajax é possível especificar uma origem (além do próprio domínio) de onde aquela requisição pode ser atendida com segurança. O nome deste cabeçalho é &#8220;<strong>Access-Control-Allow-Origin</strong>&#8221; e está <a href="https://developer.mozilla.org/En/HTTP_Access_Control">melhor descrito nesta página</a>.</p>
<h3 class="subtitles">document.querySelectorAll</h3>
<p>Se você já usou a jQuery sabe como <strong>é prático encontrar os elementos da página usando a sintaxe de CSS</strong>. Melhor ainda se encontrar esses elementos usando a sintaxe de CSS seja possível de ser <strong>feito usando um método nativo do navegador</strong>. É isso que o método <a href="https://developer.mozilla.org/En/DOM/Document.querySelectorAll">document.querySelectorAll</a> permitirá. O melhor de tudo é que as próximas versões do IE, Firefox, Opera e Safari já trarão este método disponível.</p>
<h3 class="subtitles">Visual e CSS</h3>
<p>Adoradas por 10 em cada 10 <em>webdesigners</em>, as <strong>bordas redondas vieram pra ficar</strong>. =) Apesar de os navegadores trazerem implementações com nomes diferentes, todas as implementações funcionam bem. Ou seja, juntando essas propriedades: -moz-border-radius, -webkit-border-radius, -khtml-border-radius e <a href="http://www.w3.org/TR/css3-background/#the-border-radius">border-radius</a> as bordas redondas saem com facilidade.</p>
<p><strong>Sombras também estarão disponíveis</strong>. Nesta página há vários <a href="http://maettig.com/code/css/text-shadow.html">exemplos de uso da propriedade text-shadow</a>.</p>
<p>Outro recurso que certamente vai ser muito usado (e provavelmente muito mal usado também <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) é a possibilidade de se usar <strong><a href="http://ejohn.org/apps/fontface/blok.html">fontes personalizadas na página</a></strong>. Por fontes personalizadas entenda fontes que não estão instaladas na sua máquina. Coisa que já era possível de se fazer no Flash, agora também com CSS.</p>
<p>Além disso, há uma série de <a href="http://www.the-art-of-web.com/css/css-animation/">animações</a> que estarão disponíveis, por enquanto, para Firefox e Safari.</p>
<h3 class="subtitles">Desenho</h3>
<p>O objeto Canvas permite a renderização de elementos numa superfície 2D usando retas, curvas, arcos e/ou círculos. No <a href="https://developer.mozilla.org/">MDC</a> tem um <a href="https://developer.mozilla.org/En/Canvas_tutorial">tutorial bem bacana sobre Canvas</a>. Até me arrisquei a fazer uma &#8220;arte&#8221;: =)</p>
<pre class="javascript"><code><span class="co1">// &lt;canvas id="draw-area" width="150" height="150"&gt;&lt;/canvas&gt; no HTML</span>
<span class="kw2">var</span> canvas = document.<span class="me1">getElementById</span><span class="br0">(</span> <span class="st0">"draw-area"</span> <span class="br0">)</span>;
<span class="kw1">if</span><span class="br0">(</span> !canvas.<span class="me1">getContext</span> <span class="br0">)</span>
<span class="br0">{</span>
  <span class="kw1">return</span>;
<span class="br0">}</span>
<span class="kw2">var</span> context = canvas.<span class="me1">getContext</span><span class="br0">(</span> <span class="st0">"2d"</span> <span class="br0">)</span>;

context.<span class="me1">beginPath</span><span class="br0">(</span><span class="br0">)</span>;
<span class="kw2">var</span> side = <span class="nu0">150</span>;
<span class="kw2">var</span> offset = <span class="nu0">-4</span>;
<span class="kw2">var</span> i = <span class="nu0">0</span>;
<span class="kw1">while</span><span class="br0">(</span> <span class="kw2">true</span> <span class="br0">)</span>
<span class="br0">{</span>
  <span class="kw1">if</span><span class="br0">(</span> i % <span class="nu0">4</span> == <span class="nu0">0</span> <span class="br0">)</span>
  <span class="br0">{</span>
    <span class="kw2">var</span> x = offset + <span class="nu0">4</span>;
    context.<span class="me1">lineTo</span><span class="br0">(</span> x, offset <span class="br0">)</span>;
    offset = x;
    <span class="kw1">if</span><span class="br0">(</span> offset + <span class="nu0">4</span> &gt; <span class="nu0">78</span> <span class="br0">)</span> <span class="co1">// hard-coded mesmo ;P</span>
    <span class="br0">{</span>
      <span class="kw1">break</span>;
    <span class="br0">}</span>
  <span class="br0">}</span>
  <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> i % <span class="nu0">4</span> == <span class="nu0">1</span> <span class="br0">)</span>
  <span class="br0">{</span>
    context.<span class="me1">lineTo</span><span class="br0">(</span> offset, side - offset <span class="br0">)</span>;
  <span class="br0">}</span>
  <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> i % <span class="nu0">4</span> == <span class="nu0">2</span> <span class="br0">)</span>
  <span class="br0">{</span>
    context.<span class="me1">lineTo</span><span class="br0">(</span> side - offset, side - offset <span class="br0">)</span>;
  <span class="br0">}</span>
  <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> i % <span class="nu0">4</span> == <span class="nu0">3</span> <span class="br0">)</span>
  <span class="br0">{</span>
    context.<span class="me1">lineTo</span><span class="br0">(</span> side - offset, offset <span class="br0">)</span>;
  <span class="br0">}</span>
  i++;
<span class="br0">}</span>
<span class="co1">//context.closePath();</span>
context.<span class="me1">stroke</span><span class="br0">(</span><span class="br0">)</span>;</code></pre>
<p>Outro detalhe importante é que o Canvas permitirá também a <strong>inserção de vídeos dentro dele</strong>.</p>
<h3 class="subtitles">JSON nativo</h3>
<p>Atualmente, ao receber uma <em>string</em> em <a href="https://developer.mozilla.org/En/JSON">JSON</a> você precisa usar um <a href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval#section_6">eval</a> para recuperar o objeto original. <strong>O eval é conhecidamente lento</strong>, até pelo fato de ser um método genérico, mas era a melhor saída para se ter acesso às informações contidas na <em>string</em> JSON mas, isso vai mudar!</p>
<p>Agora teremos métodos nativos para codificação e decodificação no formato JSON. A única dúvida que me restou é sobre o nome dos métodos. Nos slides os métodos se chamam <strong>encode e decode</strong>, já na <a href="https://developer.mozilla.org/En/Using_JSON_in_Firefox">página do MDC</a> e no <a href="http://wiki.ecmascript.org/doku.php?id=es3.1:json_support">wiki do ECMAScript</a> os métodos se chamam <strong>parse e stringify</strong>, respectivamente.</p>
<h3 class="subtitles">E por fim&#8230;</h3>
<p>&#8230; fico na torcida pra que as novas versões desses navegadores tenham uma rápida adoção por parte dos usuários. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2009/ler/o-progresso-dos-novos-navegadores/index.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Oficina de inverno no Senac e final de semestre</title>
		<link>http://blog.klaus.pro.br/2008/ler/oficina-de-inverno-no-senac-e-final-de-semestre/index.html</link>
		<comments>http://blog.klaus.pro.br/2008/ler/oficina-de-inverno-no-senac-e-final-de-semestre/index.html#comments</comments>
		<pubDate>Tue, 17 Jun 2008 21:39:29 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Cursos]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Senac]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=76</guid>
		<description><![CDATA[As férias escolares agora do meio do ano prometem um novo desafio: vou ministrar uma oficina sobre Javascript e Ajax no Senac. Tecnicamente é uma continuação da oficina de verão que ministrei no começo do ano sobre WebStandards (XHTML e CSS). A oficina terá duração de 30 horas, no período da manhã. É uma pena [...]]]></description>
			<content:encoded><![CDATA[<p>As férias escolares agora do meio do ano prometem um novo desafio: vou ministrar uma oficina sobre Javascript e Ajax no <a href="http://www.sp.senac.br/jsp/default.jsp?newsID=a3663.htm&amp;testeira=727&amp;unit=CAS&amp;sub=1">Senac</a>. Tecnicamente é uma continuação da oficina de verão que ministrei no começo do ano sobre <a href="http://www.tableless.com.br/"><em><strong>WebStandards</strong></em></a> (XHTML e CSS).</p>
<p>A oficina terá duração de 30 horas, no período da manhã. É uma pena que apenas alunos do Senac possam participar. =(</p>
<p>Como conteúdo pretendo mostrar os conceitos básicos da linguagem Javascript, mostrar suas estruturas e funcionamento. Daí vou partir para a parte de eventos e interação com o <em>browser</em>. E no final, se tudo correr bem =), <strong>Ajax</strong>!</p>
<p>Mas como nem tudo são flores, o semestre letivo ainda não acabou. Amanhã tenho a prova final de <strong>Linguagens Formais e Autômatos</strong>. Uma disciplina bem legal, devo concordar, mas que está consumindo mais alguns dos meus já escassos cabelos. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><strong>Atualização</strong>: Consegui! Fechei a disciplina com 7,5. Foi minha pior média do semestre mas&#8230; &#8220;bota na conta do Papa&#8221;. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2008/ler/oficina-de-inverno-no-senac-e-final-de-semestre/index.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ferramentas e sites úteis para desenvolvimento web</title>
		<link>http://blog.klaus.pro.br/2007/ler/lista-de-links-sobre-ajax-javascript-css-ruby-on-rails-php-editores-2/index.html</link>
		<comments>http://blog.klaus.pro.br/2007/ler/lista-de-links-sobre-ajax-javascript-css-ruby-on-rails-php-editores-2/index.html#comments</comments>
		<pubDate>Thu, 18 Oct 2007 20:51:10 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[Cheat Sheets]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://wp.blog.klaus.pro.br/?p=57</guid>
		<description><![CDATA[O Mashable divulgou uma lista bastante completa, com mais de 250 links, sobre Ajax, Javascript, CSS, XHTML, Ruby on Rails, Python, PHP, Java, SQL e ainda mais. Desta lista, vou destacar os endereços que uso regularmente e alguns outros endereços que considero também boas ferramentas ou boas fontes de informações. Na parte de Javascript e [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://mashable.com/">Mashable</a> divulgou uma <a href="http://mashable.com/2007/10/14/web-coding/">lista bastante completa</a>, com mais de 250 <em>links</em>, sobre Ajax, Javascript, CSS, XHTML, Ruby on Rails, Python, PHP, Java, SQL e ainda mais. Desta lista, vou destacar os endereços que uso regularmente e alguns outros endereços que considero também boas ferramentas ou boas fontes de informações.</p>
<p>Na parte de Javascript e Ajax, há <em>links</em> para páginas de ótimas bibliotecas como a <a href="http://jquery.com/">jQuery</a> e o <a href="http://script.aculo.us/">script.aculo.us</a>. Além de boas referências sobre a linguagem como: <a href="http://www.quirksmode.org/">QuirksMode.org</a> e o <a href="http://www.devguru.com/technologies/javascript/index.asp">DevGuru</a>.</p>
<p>A listagem sobre CSS é boa, mas eu senti falta de alguns sites importantes como o <a href="http://positioniseverything.net/">Position is Everything</a> e também dos <a href="http://blog.html.it/layoutgala/">Layouts Gala</a>.</p>
<p>Em <em>Tools</em> (ferramentas), além das boas dicas sobre editores, duas adições interessantes seriam os editores <a href="http://www.scintilla.org/SciTE.html">SciTE</a> e o <a href="http://jedit.sourceforge.net/">jEdit</a>. Tenho usado bastante o jEdit nos últimos tempos e ele tem se mostrado um editor bem versátil, principalmente com o suporte a <em>snippets</em>.</p>
<p>Para PHP, embora faça um bom tempo que eu não trabalho com a linguagem, continuo vendo alguns lançamentos e notícias relacionados à linguagem. O <em>framework</em> <a href="http://www.akelos.org/">Akelos</a>, que não está na lista, segue a mesma linha de funcionamento do <a href="http://rubyonrails.org/">Rails</a> (Ruby on Rails), sendo uma boa opção para desenvolvimento ágil.</p>
<p>Nos links de Rails, recomendo ainda o <a href="http://www.railscasts.com/">Railscasts</a> que possui uma grande variedade de <em>screencasts</em>, todos voltados para Rails e explicando vários truques interessantes do <em>framework</em>.</p>
<p>Ufa! Quantos <em>links</em>! <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Agora é a sua vez, tem algum site que você usa e acha interessante que ficou faltando nas listas?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2007/ler/lista-de-links-sobre-ajax-javascript-css-ruby-on-rails-php-editores-2/index.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Centralizando floats com largura variável e um bug no IE 7</title>
		<link>http://blog.klaus.pro.br/2007/ler/centralizando-floats-com-largura-variavel-e-um-bug-no-ie7-com-position-e-overflow/index.html</link>
		<comments>http://blog.klaus.pro.br/2007/ler/centralizando-floats-com-largura-variavel-e-um-bug-no-ie7-com-position-e-overflow/index.html#comments</comments>
		<pubDate>Mon, 24 Sep 2007 19:43:10 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Floats]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://wp.blog.klaus.pro.br/2007/ler/centralizando-floats-com-largura-variavel-e-um-bug-no-ie7-com-position-e-overflow/index.html</guid>
		<description><![CDATA[Trabalhar com elementos com float nas páginas é uma tarefa bastante comum. A idéia do float, como podemos deduzir dos seus valores possíveis, é posicionar objetos à esquerda ou à direita. Porém, nem sempre temos esta intenção ao usar floats. Um caso bastante típico é quando usamos float apenas para poder colocar altura, largura ou [...]]]></description>
			<content:encoded><![CDATA[<p>Trabalhar com elementos com <em>float</em> nas páginas é uma tarefa bastante comum. A idéia do <em>float</em>, como podemos deduzir dos seus valores possíveis, é posicionar objetos à esquerda ou à direita. Porém, nem sempre temos esta intenção ao usar <em>floats</em>.</p>
<p>Um caso bastante típico é quando usamos <em>float</em> apenas para poder colocar altura, largura ou margens verticais num elemento. Como o <em>float</em> força um <em>display: block</em>, podemos aplicar <em>height</em>, <em>width</em> e <em>padding</em> (vertical) neste elemento.</p>
<p>Num segundo cenário, já encontrei casos em que tenho um elemento de largura variável e não previsível e, que tenho também de deixá-lo centralizado na página ou em relação a um outro elemento pai. Este é um dos casos onde precisamos <strong>centralizar <em>floats</em></strong>.</p>
<p>Eu já conhecia <a href="http://www.cssplay.co.uk/menus/centered.html">esta técnica aqui</a> do <a href="http://www.cssplay.co.uk/">Stu Nicholls</a> em seu site CSSplay. Já usei este método e sei que ele funciona bem. Tudo bem que ele usa uma <em>tag</em> <var>del</var> (pode ser uma <var>ins</var> também) sem necessidade&#8230; mas, com <a href="http://msdn2.microsoft.com/en-us/library/ms537512.aspx">comentários condicionais</a> podemos esconder ela dos navegadores atualizados e deixá-la visível apenas para o Internet Explorer (sim, como já era de se imaginar, a <em>tag</em> é necessária apenas para o IE).</p>
<p>Lendo o <a href="http://doggdot.us/">doggdot.us</a> hoje, achei uma referência para outro artigo que descreve uma <a href="http://www.search-this.com/2007/09/19/when-is-a-float-not-a-float/">segunda técnica</a>, mais simples e objetiva. Testei o <a href="http://www.pmob.co.uk/temp/centred-float4.htm">exemplo disponível</a> e funcionou no Firefox, IE 7 e 6. Apenas no IE 7 é que surgiu a barra de rolagem horizontal. Nada muito complicado de se resolver.</p>
<p>O IE 7 tem um <em>bug</em> (certo, muitos <em>bugs</em>, mas vamos falar só desse) que um elemento pai com <em>overflow: hidden</em> e um filho com <em>position: relative</em>, faz com que o efeito do <em>overflow</em> não funcione. Se você adicionar <em>position: relative</em> no pai também, terá o resultado esperado. Acabei de deixar um comentário ao autor sobre esta correção. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <a href="http://snook.ca/archives/html_and_css/position_relative_overflow_ie/">Veja mais sobre este <em>bug</em></a>.</p>
<p>Ficam aí as dicas para quando você precisa centralizar elementos com <em>float</em> ou se deparar com este <em>bug</em> do IE 7, bom proveito! =)</p>
<dl id="refencias" class="references">
<dt>Referências</dt>
<dd> <a href="http://www.search-this.com/2007/09/19/when-is-a-float-not-a-float/">Centralizando <em>floats</em></a> &#8211; Método simples </dd>
<dd> <a href="http://www.cssplay.co.uk/menus/centered.html">Centralizando <em>floats</em></a> &#8211; Método do <a href="http://www.cssplay.co.uk/">Stu Nicholls</a> </dd>
<dd> <a href="http://msdn2.microsoft.com/en-us/library/ms537512.aspx">Comentários condicionais</a> (conditional comments) </dd>
<dd> <a href="http://snook.ca/archives/html_and_css/position_relative_overflow_ie/"><em>Bug</em> do IE 7 com <em>overflow</em> e <em>position</em></a> </dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2007/ler/centralizando-floats-com-largura-variavel-e-um-bug-no-ie7-com-position-e-overflow/index.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Global White Space Reset, chega de margens inconsistentes</title>
		<link>http://blog.klaus.pro.br/2007/ler/global-whitespace-reset-chega-de-margens-inconsistentes/index.html</link>
		<comments>http://blog.klaus.pro.br/2007/ler/global-whitespace-reset-chega-de-margens-inconsistentes/index.html#comments</comments>
		<pubDate>Sat, 28 Jul 2007 19:30:04 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://wp.blog.klaus.pro.br/2007/ler/global-whitespace-reset-chega-de-margens-inconsistentes/index.html</guid>
		<description><![CDATA[Este é um dica de CSS, tão simples e tão prática, que se você não conhecia, vai adorar conhecer. Sabe aquela margem padrão (margin ou padding) que os muitos dos elementos (X)HTML possuem? Vamos remover essas margens! O que há de errado com a margem padrão? A questão aqui é muito simples: ela é inconsistente [...]]]></description>
			<content:encoded><![CDATA[<p>Este é um dica de CSS, tão simples e tão prática, que se você não conhecia, vai adorar conhecer. Sabe aquela margem padrão (<em>margin</em> ou <em>padding</em>) que os muitos dos elementos (X)HTML possuem? Vamos remover essas margens! <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h3 id="por-que" class="subtitles">O que há de errado com a margem padrão?</h3>
<p>A questão aqui é muito simples: ela é inconsistente entre alguns navegadores. Alguns elementos aparecem com <em>padding</em> num navegador, outros usam <em>margin</em>, em alguns o valor é X, em outros o valor é Y&#8230; Aí já viu, bobeou e é um festival de pequenas diferenças nos seus <em>layouts</em>.</p>
<p>A solução para este problema é bastante simples, para não dizer óbvia:</p>
<p><code class="css">* <span class="br0">{</span><br />
<span class="kw1">margin</span>: <span class="nu0">0</span>;<br />
<span class="kw1">padding</span>: <span class="nu0">0</span>;<br />
<span class="br0">}</span></code></p>
<p>Usando o seletor universal &#8220;*&#8221; zeramos os valores de <em>margin</em> e <em>padding</em> em <strong>todos</strong> os elementos da página</p>
<p>Desta forma, um elemento só vai ter margem (interna ou externa) se você especificar, o que no final das contas facilita sua vida pois você não vai precisar ficar lembrando onde estão as inconsistências de cada elemento em cada navegador.</p>
<h3 id="seletor-universal" class="subtitles">Não gostei desse seletor universal aí&#8230;</h3>
<p>É, nem todo mundo se sente confortável com um seletor universal na página. Se você preferir, o <a href="http://tantek.com/">Tantek Çelik</a> tem uma solução alternativa também muito boa. É o <a href="http://tantek.com/log/2004/09.html#d06t2354">undohtml.css</a>. Coloquei abaixo uma cópia do original:</p>
<p><code class="css"><span class="coMULTI">/* undohtml.css */</span><br />
<span class="coMULTI">/* (CC) 2004 Tantek Celik. Some Rights Reserved.             */</span><br />
<span class="coMULTI">/*   http://creativecommons.org/licenses/by/2.0                   */</span><br />
<span class="coMULTI">/* This style sheet is licensed under a Creative Commons License. */</span></code></p>
<p><span class="coMULTI">/* Purpose: undo some of the default styling of common (X)HTML browsers */</span></p>
<p><span class="coMULTI">/* link underlines tend to make hypertext less readable,<br />
because underlines obscure the shapes of the lower halves of words */</span><br />
<span class="re2">:link</span>,<span class="re2">:visited</span> <span class="br0">{</span> text-decoration<span class="re2">:none</span> <span class="br0">}</span></p>
<p><span class="coMULTI">/* no list-markers by default, since lists are used more often for semantics */</span><br />
ul,ol <span class="br0">{</span> list-style<span class="re2">:none</span> <span class="br0">}</span></p>
<p><span class="coMULTI">/* avoid browser default inconsistent heading font-sizes */</span><br />
<span class="coMULTI">/* and pre/code too */</span><br />
h1,h2,h3,h4,h5,h6,pre,code <span class="br0">{</span> font-size<span class="re2">:<span class="re3">1em</span></span>; <span class="br0">}</span></p>
<p><span class="coMULTI">/* remove the inconsistent (among browsers) default ul,ol padding or margin  */</span><br />
<span class="coMULTI">/* the default spacing on headings does not match nor align with<br />
normal interline spacing at all, so let&#8217;s get rid of it. */</span><br />
<span class="coMULTI">/* zero out the spacing around pre, form, body, html, p, blockquote as well */</span><br />
<span class="coMULTI">/* form elements are oddly inconsistent, and not quite CSS emulatable. */</span><br />
<span class="coMULTI">/*  nonetheless strip their margin and padding as well */</span><br />
ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,body,html,p,blockquote,fieldset,input<br />
<span class="br0">{</span> margin<span class="re2">:<span class="nu0">0</span></span>; padding<span class="re2">:<span class="nu0">0</span></span> <span class="br0">}</span></p>
<p><span class="coMULTI">/* whoever thought blue linked image borders were a good idea? */</span><br />
a img,<span class="re2">:link</span> img,<span class="re2">:visited</span> img <span class="br0">{</span> border<span class="re2">:none</span> <span class="br0">}</span></p>
<p><span class="coMULTI">/* de-italicize address */</span><br />
address <span class="br0">{</span> font-style<span class="re2">:normal</span> <span class="br0">}</span></p>
<p><span class="coMULTI">/* more varnish stripping as necessary&#8230; */</span></p>
<p>Um CSS com seletores básicos, bem fácil de ser entendido.</p>
<h3 id="novo-projeto" class="subtitles">Faça o teste!</h3>
<p>Experimente começar um novo projeto usando umas das duas formas propostas acima. Posso te garantir que você não vai se arrepender! <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2007/ler/global-whitespace-reset-chega-de-margens-inconsistentes/index.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript é com jQuery</title>
		<link>http://blog.klaus.pro.br/2007/ler/javascript-e-com-jquery/index.html</link>
		<comments>http://blog.klaus.pro.br/2007/ler/javascript-e-com-jquery/index.html#comments</comments>
		<pubDate>Wed, 04 Apr 2007 23:05:40 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://wp.blog.klaus.pro.br/2007/ler/javascript-e-com-jquery/index.html</guid>
		<description><![CDATA[Se você programa ou já programou em Javascript sabe que, entre as maiores dores de cabeça na hora de codificar temos: a incompatibilidade entre navegadores distintos ou mesmo um comportamento inesperado naquele navegador de ícone azul. =) Já há algum tempo que eu tenho feito vários códigos usando uma biblioteca leve e poderosa chamada jQuery. [...]]]></description>
			<content:encoded><![CDATA[<p>Se você programa ou já programou em Javascript sabe que, entre as maiores dores de cabeça na hora de codificar temos: a incompatibilidade entre navegadores distintos ou mesmo um comportamento inesperado naquele navegador de ícone azul. =)</p>
<p>Já há algum tempo que eu tenho feito vários códigos usando uma biblioteca leve e poderosa chamada <a href="http://www.jquery.com">jQuery</a>. Ela é uma ferramenta muito versátil, que vai te ajudar a se concentrar mais no que realmente importa: <strong>a lógica para implementar a solução</strong>.</p>
<h3 id="funcionamento" class="subtitles">E como essa jQuery, basicamente, funciona?</h3>
<p>Um dos grandes trunfos, e talvez o principal, é o modo com que você consegue acessar os elementos da sua página. Usando <a href="http://www.w3.org/TR/CSS21/selector.html">seletores CSS</a> e/ou <a href="http://www.w3.org/TR/xpath#location-paths">seleção por XPath</a> você consegue alcançar quaisquer combinações de elementos, ou elementos isolados, em sua página.</p>
<p>Feita a seleção dos elementos, a jQuery vai, digamos, encapsular cada um dos elementos e te dar um leque grande, realmente grande, de <a href="http://www.visualjquery.com/1.1.1.html">métodos diversos</a> extremamente úteis.</p>
<p>Como os métodos estão todos concentrados na jQuery e já possuem os devidos tratamentos para um suporte amplo <em>cross-browser</em>, sua única preocupação será implementar a lógica do código. Muito bom!</p>
<h3 id="selecionando" class="subtitles">Selecionando</h3>
<p>OK, até agora muita teoria e entusiasmo mas nenhum código. Que tal uns exemplos? <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Primeiramente, vamos selecionar todos os elementos &#8220;p&#8221; de nossa página. Não vamos fazer nada com eles, ainda:</p>
<p><code class="javascript">$<span class="br0">(</span> <span class="st0">"p"</span> <span class="br0">)</span>;</code></p>
<p>Só isso! Agora imagine que você gostaria de esconder todos esses elementos &#8220;p&#8221; que selecionamos. Nosso código ficaria:</p>
<p><code class="javascript">$<span class="br0">(</span> <span class="st0">"p"</span> <span class="br0">)</span>.<span class="me1">hide</span><span class="br0">(</span><span class="br0">)</span>;</code></p>
<p>Fácil, não? Porém, suponha que esconder todos os &#8220;p&#8221;&#8216;s não é o que queremos realmente, seria bom esconder apenas os &#8220;p&#8221;&#8216;s de uma &#8220;div#menu&#8221;. Veja:</p>
<p><code class="javascript">$<span class="br0">(</span> <span class="st0">"p"</span>, <span class="st0">"div#menu"</span> <span class="br0">)</span>.<span class="me1">hide</span><span class="br0">(</span><span class="br0">)</span>;</code></p>
<h3 id="markup" class="subtitles">Adicionando e modificando conteúdo na página</h3>
<p>Modificar o conteúdo de um elemento já é, de certa forma, fácil se você usar o <em>innerHTML</em> comum. Mas, como você já deve imaginar, com jQuery é muito mais:</p>
<p><code class="javascript">$<span class="br0">(</span> <span class="st0">"p#exemplo"</span> <span class="br0">)</span>.<span class="me1">html</span><span class="br0">(</span> <span class="st0">"&lt;strong&gt;Novo&lt;/strong&gt; conteúdo!"</span> <span class="br0">)</span>;</code></p>
<p>O pequeno código acima vai acessar um &#8220;p#exemplo&#8221; e alterar seu <em>markup</em> interno por aquele outro, passado como parâmetro à função. Se você quiser apenas saber qual o <em>markup</em> atual do elemento:</p>
<p><code class="javascript">$<span class="br0">(</span> <span class="st0">"p#exemplo"</span> <span class="br0">)</span>.<span class="me1">html</span><span class="br0">(</span><span class="br0">)</span>;</code></p>
<p>E que tal adicionar um novo elemento após nosso &#8220;p&#8221; de exemplo? Veja:</p>
<p><code class="javascript">$<span class="br0">(</span> <span class="st0">"p#exemplo"</span> <span class="br0">)</span>.<span class="me1">after</span><span class="br0">(</span> <span class="st0">"&lt;p&gt;Um elemento depois!&lt;/p&gt;"</span> <span class="br0">)</span>;</code></p>
<p>Ou seja, usando o método intuitivo <em>after</em> conseguimos adicionar elementos <strong>após</strong> o nosso elemento original. Se você está pensando que podemos inserir elementos antes usando o método análogo <em>before</em>:</p>
<p><code class="javascript">$<span class="br0">(</span> <span class="st0">"p#exemplo"</span> <span class="br0">)</span>.<span class="me1">before</span><span class="br0">(</span> <span class="st0">"&lt;p&gt;Um elemento antes!&lt;/p&gt;"</span> <span class="br0">)</span>;</code></p>
<p>Acertou! Simples e intuitivo, não? =)</p>
<h3 id="mais" class="subtitles">E o que mais?</h3>
<p>Acesse a página com uma <a href="http://www.visualjquery.com/1.1.1.html">visão geral dos métodos</a> e veja quantas outras coisas o jQuery ainda pode fazer por você. AJAX, animações, tratamento de eventos, só pra citar algumas delas.</p>
<p>Além disso, a jQuery possui uma boa <a href="http://docs.jquery.com/Main_Page">documentação</a> e uma comunidade ativa, que pode interagir diretamente com a biblioteca através de <em>plugins</em>. Ah sim, você pode adicionar novos comportamentos com <em>plugins</em>. =)</p>
<dl class="references">
<dt>Referências</dt>
<dd> <a href="http://jquery.com/">jQuery</a> </dd>
<dd> <a href="http://15daysofjquery.com/">15 dias de jQuery</a> &#8211; Uma visão geral sobre o poder da jQuery </dd>
<dd> <a href="http://www.w3.org/TR/CSS21/selector.html">Seletores CSS</a> </dd>
<dd> <a href="http://www.w3.org/TR/xpath#location-paths">Seleção por XPath</a> </dd>
<dd> <a href="http://www.visualjquery.com/1.1.1.html">Métodos diversos da jQuery</a> </dd>
<dd> <a href="http://docs.jquery.com/Main_Page">Documentação da jQuery</a> </dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2007/ler/javascript-e-com-jquery/index.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
