<?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; Na Prática</title>
	<atom:link href="http://tableless.com.br/categoria/napratica/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>Estruturação de Client-side – Parte 2: Designers e Programadores</title>
		<link>http://tableless.com.br/estruturacao-de-client-side-designers-e-programadores-parte-2/</link>
		<comments>http://tableless.com.br/estruturacao-de-client-side-designers-e-programadores-parte-2/#comments</comments>
		<pubDate>Mon, 14 May 2012 22:42:44 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[front-end]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6121</guid>
		<description><![CDATA[Entendendo e sincronizando as necessidades dos designers e programadores.]]></description>
			<content:encoded><![CDATA[<p>Se dividirmos as áreas de desenvolvimento, chegaremos a 3 grandes grupos, totalmente distintos que são: designers, programadores e nós, front-end.</p>
<p>Nós estamos no meio dos dois grupos. Nós nos relacionamos diretamente com os dois profissionais, fazendo uma ponte e tentando adequar as necessidades de cada um durante o projeto. E é aí que entra o problema.</p>
<p>Os dois mundos são totalmente diferentes. O designer se preocupa em deixar o sistema lindo, maravilhoso, fácil de usar, vendável e etc. O programador faz com que tudo funcione. O cliente tem que conseguir comprar quando clicar no botão. Nosso trabalho é fazer com que a beleza não estrague a funcionalidade. É fazer com que as necessidades do programador não entrem em conflito com as necessidades do designer. Nesse meio entra o seu trabalho. Sua obrigação é deixar o site acessível, com código de fácil indexação e escalonável ao mesmo tempo que você deixa o layout do designer fiel ao original do Photoshop.</p>
<h3>Necessidades dos Designers</h3>
<p>Os designers precisam de liberdade para criar. Isso sempre foi muito difícil na web e por isso o Flash ganhou tanta atenção. Se antes só podíamos fazer coisas básicas utilizando CSS, o Flash dava ao designer acesso a um mundo de possibilidades. Atualmente isso mudou muito graças ao Santo protetor dos desenvolvedores front-end.</p>
<p>Com a vinda das features do CSS3, boa parte das funcionalidades que antes tínhamos que fazer gambiarras com imagens, hoje podemos fazer com apenas uma propriedade. Quem nunca passou horas recortando imagens de bordas arredondadas, sombrinhas e degrades? Hoje resolvemos tudo diretamente pelo CSS, que roda mais rápido e é muito mais flexível.</p>
<p>A ideia é transportar fielmente a arte que o designer criou no editor gráfico, para código HTML/CSS. Nesse momento você precisa se preocupar com duas coisas: fidelidade de layout e semântica de código. </p>
<p>O código HTML irá refletir os elementos do layout, traduzindo a informação visual, para informação em código semântico de forma que os dispositivos, robôs de busca, scripts e afins acessem esse código e executem suas tarefas. O Google precisa saber o que é um link e um botão. Mesmo que eles tenham o mesmo design. O leitor de tela precisa entender o que é um título e um parágrafo. Isso tudo aliado com os detalhes visuais que o designer desenhou, como sombras, degrades, transparências, bordar arredondadas e etc.</p>
<p>Esse processo inicia a fase de código do projeto. Estamos criando uma estrutura que vai perdurar o projeto inteiro. Os programadores, posteriormente, irão produzir o sistema em cima deste código. Por isso é muito importante que sua base seja bem estruturada mas ao mesmo tempo super flexível para mantermos o layout da maneira correta.</p>
<h3>Necessidades dos Programadores</h3>
<p>Os programadores precisam automatizar coisas. O projeto precisa que as tarefas sejam automatizadas para que o projeto funcione de forma escalonável e sem a necessidade de replicação de código desnecessariamente. Essas tarefas vão desde a criação de formulários até comunicação com o servidor.</p>
<p>O problema é que a maioria das vezes essas tarefas automatizadas não são criadas pelos programadores da equipe. São plugins, scripts e etc que foram criados pela comunidade. Não estou dizendo aqui que isso é ruim, por favor. Na verdade, é o certo. Não tem sentido recriarmos algo que já existe e que funciona muito bem. Esses plugins, scripts e etc foram criados por outros programadores que um dia tiveram a mesma necessidade que os programadores do seu projeto e por isso, nada mais sensato do que criar um plugin para ajudar outros devs com a mesma necessidade. Acontece que programadores, são programadores. Eles não tratam o HTML com o mesmo carinho que nós.</p>
<p>Vamos pegar um exemplo de formulários. Os programadores aqui onde trabalho programam em RUBY, utilizando Rails. Há uma GEM que cria e gerencia formulários no projeto. O código que esta GEM gera por default não é legal e o pior, é totalmente diferente do código que você usaria ou usou no projeto &#8211; Por isso é interessante entender quais ferramentas os programadores utilizarão antes de iniciarmos nosso código HTML. Assim podemos adaptar o que for preciso para códigos que fujam do seu padrão pessoal.</p>
<p>Você não pode obrigar os programadores a fazerem tudo na mão. Se você conseguir, ótimo. Essa é sempre a minha primeira opção&#8230; Mas caso isso seja impossível, sugiro que sente e tente entender o maldito plugin. Converse com o programador e tente mostrar as desvantagens para o projeto caso continuem a utilizar o código default. Veja se não há a possibilidade de modificar esse código. Na maioria das vezes há. Caso não dê, estude a possibilidade de trocarem para um plugin que dê.</p>
<p>Existem frameworks &#8211; como o Web2Py &#8211; que ainda utilizam tabelas para exibir formulários. Chorei sangue quando eu vi pela primeira vez e chorei mais ainda ao descobrir que não é algo muito fácil customizar eses código para que ele entregasse o HTML que eu queria. Paciência.</p>
<h3>Sincronizando as necessidades</h3>
<p>O encontro de dois mundos gera o problema. Sincronizar as necessidades visuais dos designers com as necessidades de código dos programadores é algo que geralmente deixa traumas em qualquer dev front-end.</p>
<p>O programador precisa usar ferramentas que os ajudam a executar tarefas complexas, mas que adulteram demais o código. O designer precisa que seu layout seja fielmente seguido, ou seja, todas as firulas visuais como sombras, degrades, bordas, backgrounds e etc permaneçam intactas. Como você pode manter o padrão de qualidade se o código manipulado não é o seu, mas o do plugin? É aqui que os front-ends maricas pedem arrego. </p>
<p>Cada efeito visual, cada estrutura, cada necessidade de layout determinam com que o HTML será escrito. Se o HTML é criado automaticamente por um plugin ou algo parecido, como você faz? Entende a questão?<br />
Você até faz o layout ficar igual ao planejado, mas e a semântica? O design, a funcionalidade e a semântica precisam coexistir. Essa é a essência da responsabilidade do profissional client-side.</p>
<p>Não há mágica que faça isso tudo acontecer. Você precisa sentar e conversar. Eu costumo chamar o designer e o programador e explicar minhas limitações. Eles entendem e cada um abre mão de algo que pode me ajudar. O designer tira aquele efeito visual desnecessário e o programador tenta colocar aquela classe importante e retirar um ou outro código automático. A opção de conversar com os dois é melhor do que você criar uma solução com Javascript. Para retirar ou inserir as tags ou classes que você precisa. O código fica mais feio e seu site perde performance. Sem contar que para resolver suas pendências manipulando o DOM com Javascript, é pior para o Google, para os leitores de telas e para os robôs em geral.</p>
<h3>Padronizando tudo</h3>
<p>Uma outra solução que eu cheguei é mais complicada, mas sem dúvida a mais duradoura. Começamos a criar dentro da empresa uma biblioteca que une código HTML/CSS semântico com o visual predefinido dos designers e que contemple as necessidades de funcionalidades dos programadores.</p>
<p>Assim, começamos a criar uma <strong>cultura</strong> de padronização de código que vai perdurar por várias gerações de serviços e acima de tudo, não quebra a linearidade dos produtos em si. Manteremos a uniformidade de código com a a uniformidade de identidade visual dos sistemas. Não estamos engessando a criação, pelo contrário, estamos criando uma base sólida que poderá ser reutilizada em toda a empresa, em larga escala e independente.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/drops-5-responsabilidade-dev-front-end/" title="Drops 5 &#8211; Responsabilidade Dev Front-end">Drops 5 &#8211; Responsabilidade Dev Front-end</a></li><li><a href="http://tableless.com.br/adobe-the-expressive-web/" title="Adobe: The Expressive Web">Adobe: The Expressive Web</a></li><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/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/o-dev-front-end-podcast-1/" title="O dev front-end &#8211; Podcast #1">O dev front-end &#8211; Podcast #1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/estruturacao-de-client-side-designers-e-programadores-parte-2/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Drops 9 &#8211; Préprocessadores, frameworks e bibliotecas</title>
		<link>http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/</link>
		<comments>http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/#comments</comments>
		<pubDate>Fri, 11 May 2012 03:13:13 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Drops]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[O Básico]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[drops]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[less]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[sass]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6114</guid>
		<description><![CDATA[Entenda a diferença entre pré-processadores, frameworks e bibliotecas de CSS.
Essa é a primeira parte sobre como estruturar uma área de client-side.]]></description>
			<content:encoded><![CDATA[<p>Uma continuação do post que escrevi sobre o assunto e a primeira parte de uma série de artigos com dicas sobre como estruturar uma área client-side.</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%2F46006133&#038;show_artwork=true"></iframe></p>
<p><a href="http://tableless.com.br/podcast/drops9-frameworks-bibliotecas-preprocessadores.mp3">Arquivo Mp3</a>.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><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-5-responsabilidade-dev-front-end/" title="Drops 5 &#8211; Responsabilidade Dev Front-end">Drops 5 &#8211; Responsabilidade Dev Front-end</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><li><a href="http://tableless.com.br/adobe-e-os-padroes-web/" title="Adobe e os Padrões Web">Adobe e os Padrões Web</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></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://tableless.com.br/podcast/drops9-frameworks-bibliotecas-preprocessadores.mp3" length="2375680" type="audio/mpeg" />
		</item>
		<item>
		<title>Estruturação de Client-side &#8211; Parte 1: Préprocessadores, Framewoks e Bibliotecas</title>
		<link>http://tableless.com.br/estruturacao-de-client-side-preprocessadores-framewoks-e-bibliotecas-parte-1/</link>
		<comments>http://tableless.com.br/estruturacao-de-client-side-preprocessadores-framewoks-e-bibliotecas-parte-1/#comments</comments>
		<pubDate>Wed, 09 May 2012 16:53:47 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[O Básico]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[tableless]]></category>
		<category><![CDATA[tecnicascss]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6094</guid>
		<description><![CDATA[Entenda a diferença entre préprocessadores, frameworks e bibliotecas de client-side. Saiba o que usar em seus projetos e quais as suas particularidades.]]></description>
			<content:encoded><![CDATA[<p>Existem três categorias de &#8220;ferramentas&#8221; que nos ajudam a desenvolver um projeto client-side: Préprocessadores, Frameworks e Bibliotecas.</p>
<h3>Préprocessadores</h3>
<p>Préprocessadores são ferramentas onde você escreve CSS de uma determinada forma, modificando sua sintaxe, fazendo com que na hora de sua utilização o código CSS precise ser préprocessado para que o código escrito seja transformado em código CSS puro e assim então os browsers consigam entender.</p>
<p>Existem muitos préprocessadores no mercado como <a href="http://lesscss.org/">Less</a>, <a href="http://sass-lang.com/">Sass</a>, <a href="http://turbine.peterkroener.de/index.php">Turbine</a>, <a href="http://sourceforge.net/projects/switchcss/">Switch CSS</a> e outros. </p>
<p>Particularmente eu não gosto de usar préprocessadores. Para começar é necessário que você aprenda a linguagem de cada um e a ideia de que seu CSS precisa ser compilado para poder funcionar não me agrada muito. O CSS é simples demais para complicarmos desse jeito. Entretanto, há uma série de coisas interessantes que podemos fazer com os préprocessadores como variáveis, funções, operações e etc que demorarão um pouco (ou não) para fazerem parte do core definitivo da linguagem. Mesmo assim, pessoalmente, para a maioria dos projetos, não vale a pena.</p>
<h3>Frameworks</h3>
<p>Frameworks são diferentes de préprocessadores mas são muito parecidos com Bibliotecas. Um Framework disponibiliza para o dev um conjunto de estilos e estruturas prontas para a utilização em projetos de forma escalável e uniforme. Normalmente os frameworks te dão uma coleção de componentes para que sejam usadas por todo o projeto. Esses componentes na maioria das vezes já vem com estilos visuais aplicados, bem como a estrutura. Veja por exemplo o <a href="http://twitter.github.com/bootstrap">Bootstrap</a> ou o <a href="http://blueprintcss.org">Blueprint</a>.</p>
<p>Com o Bootstrap você consegue, rapidamente, fazer um protótipo simples ou uma estrutura básica de sistema. É o preferido dos programadores. Os elementos visuais já foram criados e desenhados. Talvez não seja uma boa ideia você utilizar um framework em um projeto cujo design já esteja aprovado. Você teria muito retrabalho para &#8220;zerar&#8221; o estilo visual de cada elemento para depois reconstruí-lo utilizando o seu design.</p>
<p>É muito importante que o uso de um framework CSS/Javascript seja aprovado no início de um grande projeto. Mesmo que você planeje criar um framework do zero, específico para seu projeto. O que na maioria das vezes não vale a pena.</p>
<h3>Bibliotecas</h3>
<p>Bibliotecas CSS geralmente não modificam o visual como os Frameworks fazem, mas eles disponibilizam uma coleção de classes, reutilizáveis e o melhor, combinatórias, para que se adeque a diversos cenários do seu projeto. Como essas classes não estão ligadas a nenhuma formatação visual, você consegue combinar sem grandes problemas com suas classes e IDs, modificando a hora que quiser a formatação visual dos elementos.</p>
<p>As bibliotecas são indicadas para projetos mais simples, sem grandes apetrechos técnicos, como um site ou algo parecido. Para fazer um sistema, as bibliotecas irão reforçar os Frameworks, facilitando a organização e formatação da estrutura do site. A biblioteca também ajuda na manipulação dos elementos via Javascript se baseando por estas classes prontas. </p>
<p>A verdade é que hoje é muito difícil diferenciar uma biblioteca de um framework.</p>
<h3>Como todos eles trabalham juntos?</h3>
<p>Você pode usar todos os três ao mesmo tempo em um projeto. Mas não é muito inteligente, já que se você estiver utilizando um framework, muito provavelmente ele terá uma &#8220;biblioteca&#8221; em sua base. Imagine que a biblioteca pode ser específica de estrutura ou formatação visual. O Framework, basicamente, junta os dois. Obviamente há mais coisas envolvidas. Mas para simplificarmos a explicação, imagine que um Framework é a mistura dessas duas bibliotecas.</p>
<p>O Preprocessador é independente do Framework e da Biblioteca. O seu ganho está ao escrever um código mais escalável, muitas vezes melhorando ou piorando a sintaxe do código. É pura sintaxe, não são classes prédefinidas. Mesmo assim você pode basear seu Framework/Biblioteca em um Préprocessador. O Bootstrap faz isso para facilitar features dinâmicas como grids, cores e etc.</p>
<p>Como eu disse, eu não gosto de misturar as coisas. Prefiro utilizar o Bootstrap puro, sem a interferência de nenhum préprocessador. Mas, há gosto para tudo. <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Qual deles é melhor para o meu projeto</h3>
<p>Eu não sugiro que você utilize um framework para criar websites institucionais. Websites geralmente não usam os mesmos elementos, nem as mesmas estruturas, nem o mesmo design. Logo, se você utilizasse um framework como o Bootstrap, ou o JQuery UI, você acabaria gastando mais tempo reestilizando e brigando com o CSS já criado dos frameworks do que fazendo o que realmente importa: o seu trabalho.<br />
Logo, para projetos de pequeno porte eu sugiro que você utilize uma biblioteca simples. Sugiro ainda que essa biblioteca seja criada por você.</p>
<p>Não precisa de muito. Em uma biblioteca você só precisa ter algumas propriedades que fazem tarefas básicas, como fazer o elemento flutuar para a esquerda, para direita, clear, retirar margens e etc. Normalmente eu utilizo um reset chamado <a href="http://necolas.github.com/normalize.css/">Normalize</a>. Ele já reseta meu CSS inteiro e então eu me foco apenas nas propriedades que eu reutilizarei no resto do projeto.</p>
<p>Se seu projeto for médio ou grande, você já pode pensar em utilizar um Framework. Principalmente se seu projeto for um sistema. Você já vai ter à disposição estilos para formulários (que são um saco pra fazer), botões, grids, reset CSS e outras coisas. O trabalho fica mais fácil por que você tem menos arestas para acertar. Ainda mais se o designer aceitar utilizar alguns dos estilos já prontos do Framework, assim você não precisa reconfigurar formatações visuais e etc.</p>
<p>A utilização do Préprocessadores é totalmente opcional. Mas se você decidir utilizá-lo juntamente com algum Framework, procure saber se o Framework escolhido suporta algum tipo de préprocessador. O Bootstrap, por exemplo, tem uma versão para LESS.</p>
<p>No próximo artigo vou contar como estamos fazendo aqui na Locaweb. Estamos criando uma grande biblioteca visual e de front-end que será utilizado por todos os serviços. Os programadores conseguem subir um sistema sem precisar esperar um código HTML definitivo, utilizando os módulos dessa biblioteca. A galera de design faz todos os layouts padronizados visualmente, garantindo a uniformidade de todos os sistemas. E o pessoal de front? Bom o pessoal de front cuida para que tudo isso funcione. <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/" title="Qualidade de Imagens e densidade de pixels">Qualidade de Imagens e densidade de pixels</a></li><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/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-a-padroes-de-codificacao/" title="Introdução aos padrões de codificação">Introdução aos padrões de codificação</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/estruturacao-de-client-side-preprocessadores-framewoks-e-bibliotecas-parte-1/feed/</wfw:commentRss>
		<slash:comments>11</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>Qualidade de Imagens e densidade de pixels</title>
		<link>http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/</link>
		<comments>http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 13:13:42 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Internet Móvel]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[dispositivos moveis]]></category>
		<category><![CDATA[tableless]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5781</guid>
		<description><![CDATA[Entenda melhor sobre densidade de pixels em aparelhos como o iPhone 4 e outros dispositivos que carregam Android.]]></description>
			<content:encoded><![CDATA[<p>Você se lembra quando planejavamos nossos layouts para resoluções acima de 1024? Chega ser engraçado lembrar que um dia fizemos websites para 640&#215;480, pensando que a resolução de 1024&#215;768 eram a minoria dos usuários. Os tempos mudaram e naturalmente diversas outras resoluções apareceram por conta de novos dispositivos, melhores monitores e etc. Acontece que na web nada é tão fácil assim. A gente se livra de um problema, mas aparece outro no lugar.</p>
<p>Este ano eu estou trabalhando a maior parte do tempo em um monitor fullHD. Notei uma diferença gritante ao digitar código pela primeira vez em um monitor desses. E não são apenas os monitores que estão mudando para uma resolução decente. Também, seguindo o ciclo natural, dispositivos menores estão recebendo a dádiva de ter a alta resolução em suas telas. E isso, meu caro, é uma dádiva para o usuário, para você é mais trabalho. <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Pixels não são mais como eram antigamente</h3>
<p>Na minha época de escola &#8211; nem tanto tempo assim &#8211; os professores me ensinaram que o átomo era indivisível. Era incrível por que eu, como criança, me divertia tentando entender como algo poderia ser tão pequeno que não pudesse ser partido ao meio, ficando menor&#8230; Mas aí eu descobri que os prótons, os elentrons e outras partículas subatomicas existiam também&#8230; </p>
<p>A mesma coisa aconteceu com o pixel. O pixel sempre representou a menor unidade da sua tela. Para os designers, o pixel é a unidade central. É onde tudo se baseia: medidas, tamanhos, alinhamentos etc&#8230; Mas o pixel não é mais como era antigamente.</p>
<p>Com o advento das telas HD em aparelhos móveis, o conceito de pixel mudou um <del>pouco</del> muito. Quando a tela retina display do iPhone 4 foi lançada o queixo de todo mundo caiu. A Apple conseguiu apertar quatro pixels onde apenas caberia um. Logo o pixel pode ser definido como a menor unidade na tela, como você já conhece ou pode ser baseada em uma unidade chamada hoje em dia de &#8220;pixel referência&#8221; ou do inglês <strong><a href="http://www.alistapart.com/articles/a-pixel-identity-crisis/?utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">reference pixel</a></strong>: que significa que esse novo &#8220;pixel&#8221; é uma <strong>referência ótica</strong> de unidade.</p>
<p>Para entrar em detalhes, leia <a href="http://en.wikipedia.org/wiki/Pixel">o que é um pixel</a>. Vai te ajudar a entender melhor.</p>
<h3>Densidade de pixels</h3>
<p>A sigla <a href="http://en.wikipedia.org/wiki/Dots_per_inch">DPI</a> significa <strong>Dots Per Inch</strong>, ou seja, é o número de pixels que seu dispositivo pode conter em uma polegada. Quanto mais pixels em uma polegada, mais nítida a imagem é. </p>
<p>Os aparelhos como o iPhone 4 e outros que carregam Android tem uma densidade de pixels muito alta. Ou seja, eles conseguem comprimir um grande número de pixels em suas telas, tornando as imagens melhores. O problema é que as imagens que criamos hoje podem parecer ruins nesses dispositivos. Algo parecido como aumentar uma imagem pequena no Photoshop, entende? Ela fica toda pixelada, sem qualidade nenhuma. Isso por que você está aumentando o tamanho de uma imagem que é pequena e não tem pixels suficientes para dividir pelo tamanho que você definiu. </p>
<p>Entenda fazendo um teste: Vá até o site da Apple utilizando SAFARI. Agora, dê um zoom em alguma imagem. Veja como ela parece pixelada por causa do zoom. Agora abra o Inspector do seu navegador, vá até o console e coloque as duas linhas abaixo:</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 /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">AC.<span style="color: #660066;">ImageReplacer</span>._devicePixelRatio <span style="color: #339933;">=</span> <span style="color: #CC0000;">2</span><br />
<span style="color: #003366; font-weight: bold;">new</span> AC.<span style="color: #660066;">ImageReplacer</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
<p>A imagem foi trocada para uma imagem com o dobro de tamanho da imagem original para que ela ficasse melhor em telas com alta densidade de pixels&#8230; <a href="http://tableless.com.br/wp-content/uploads/2012/03/retina.jpg">Veja a diferença</a>. <a href="http://www.appleinsider.com/articles/12/03/13/how_to_preview_the_retina_display_enhanced_applecom_in_safari_on_mac_or_pc.html">Eu vi esse truque aqui</a>.</p>
<h3>Ações para otimizar</h3>
<p>Existem algumas atitudes que vocês já pode tomar agora para poder chavear estes aparelhos e entregar uma experiência melhor para seus usuários.</p>
<h4>Utilize media queries</h4>
<p><a href="http://tableless.com.br/introducao-sobre-media-queries/">Media Queries são um chuchuzinho</a>. Você pode utilizar uma regra chamada <strong>device-pixel-ratio</strong> para detectar qual CSS servir dependendo do pixel-ratio do dispositivo. Não precisa ser maníaco e servir vários CSS para vários pixel-ratios&#8230; Você vai ficar doido se fizer isso.</p>
<p>Abaixo veja uma tabela de exemplos de aparelhos com seus valores de pixel-ratios:</p>
<table style="margin: auto">
<thead>
<tr>
<td width="200px"><strong>Dispositivo</strong></td>
<td width="100px"><strong>Resolução</strong></td>
<td width="150px"><strong>device-pixel-ratio</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td>Android LDPI</td>
<td>320×240</td>
<td>0.75</td>
</tr>
<tr>
<td>Iphone 3 &amp; Android MDPI</td>
<td>320×480</td>
<td>1</td>
</tr>
<tr>
<td>Android HDPI</td>
<td>480×800</td>
<td>1.5</td>
</tr>
<tr>
<td>Iphone 4</td>
<td>960×640</td>
<td>2.0</td>
</tr>
</tbody>
</table>
<p>Agora, como seria o CSS:</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 /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;link rel<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> media<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;screen and (-webkit-device-pixel-ratio: 0.75)&quot;</span> href<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;low-dpi.css&quot;</span> /<span style="color: #00AA00;">&gt;</span><br />
&lt;link rel<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> media<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;screen and (-webkit-device-pixel-ratio: 1.0)&quot;</span> href<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;medium-dpi.css&quot;</span> /<span style="color: #00AA00;">&gt;</span><br />
&lt;link rel<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> media<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;screen and (-webkit-device-pixel-ratio: 1.5)&quot;</span> href<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;high-dpi.css&quot;</span> /<span style="color: #00AA00;">&gt;</span><br />
&lt;link rel<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> media<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;screen and (-webkit-device-pixel-ratio: 2.0)&quot;</span> href<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;retina.css&quot;</span> /<span style="color: #00AA00;">&gt;</span></div></td></tr></tbody></table></div>
<p>Eu sugiro que você se limite apenas para o pixel-ratio 2. Do jeito que as coisas estão andando, os aparelhos de pixel-ratio menor do que 2 desaparecerão logo e os aparelhos com pixel-ratio igual a 1 são maioria e você já faz versões para eles, já que não precisam de fallbacks.</p>
<h4>Considere chavear versões de imagens</h4>
<p>Este é um problema que ainda não existe uma solução inteligente e definitiva.<br />
A ideia é tentar evitar que o usuário baixe duas imagens iguais, mas de tamanhos diferentes para cada tipo de necessidade. Logo, existem vários fallbacks, em Javascript ou linguagens server-side para servir apenas a imagem necessária.</p>
<p>O pessoal da Clound Four escreveu <a href="http://cloudfour.com/how-apple-com-will-serve-retina-images-to-new-ipads/?utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">um artigo muito interessante sobre isso</a>.</p>
<p>Há outros artigos bons por aí. Eu estou dando uma lida em vários para tentar escrever um artigo mais simples aqui no Tableless. Mas o assunto é muito vasto e ninguém tem uma opinião definida ainda. Isso não é útil apenas para a situação dos aparelhos hires, mas também para encontrarmos maneiras de servir imagens menores para versões de sites mobiles.</p>
<h4>Text rendering</h4>
<p>Você consegue melhorar muito a leitura dos usuários utilizando a propriedade <strong>text-rendering</strong>.</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">h1<span style="color: #00AA00;">,</span> h2<span style="color: #00AA00;">,</span> h3 <span style="color: #00AA00;">&#123;</span> text-rendering<span style="color: #00AA00;">:</span> optimizeLegibility<span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>Esta propriedade melhora muito a leitura quando o usuário dá o zoom nos aparelhos móveis e também corrige suporte de ligaduras e kerning. Coisa linda.</p>
<h4>Text Smoothing</h4>
<p>A propriedade <strong>font-smoothing</strong> é útil agora! A leitura melhora demais em monitores normais e previne serrilhamentos ocasionais quando utilizandos @font-face.</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 /></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;">*</span> <span style="color: #00AA00;">&#123;</span><br />
-webkit-font-smoothing<span style="color: #00AA00;">:</span> antialiased<span style="color: #00AA00;">;</span><br />
-moz-font-smoothing<span style="color: #00AA00;">:</span> antialiased<span style="color: #00AA00;">;</span><br />
-o-font-smoothing<span style="color: #00AA00;">:</span> antialiased<span style="color: #00AA00;">;</span><br />
-ms-font-smoothing<span style="color: #00AA00;">:</span> antialiased<span style="color: #00AA00;">;</span><br />
font-smoothing<span style="color: #00AA00;">:</span> antialiased<span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<h4>Tente usar CSS3</h4>
<p>Tente usar e abusar dos efeitos do CSS como sombras, gradientes, bordas arredondadas e etc. Além de facilitarem sua vida evitando a criação de imagens desnecessárias, elas ajudam na velocidade de carregamento do site.</p>
<h4>Considere utilizar SVG</h4>
<p>Já tem alguns que estão começando a utilizar SVG para facilitar a vida. Para ícones, SVG é ótimo. Você consegue reutilizá-los em diversos tamanhos, aumentando o diminuindo de acordo com a sua necessidade e também do aparelho. Veja um exemplo que a <a href="http://coding.smashingmagazine.com/2012/01/16/resolution-independence-with-svg/?utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">Smashing Magazine escreveu</a>.</p>
<h4>Novo elemento HTML</h4>
<p>O W3C já criou um grupo chamado <a href="http://www.w3.org/community/respimg/">Responsive Images Community Group</a> para a criação de elementos do HTML que facilitam a entrega de assets dependendo do contexto. Eles estão propondo um novo elemento que identifica as dimensões do dispositivo, velocidade de rede, densidade de pixels e outros pontos para servir melhor imagens e outros assets dependendo do contexto.</p>
<h3>Muitos artigos para ler</h3>
<ul>
<li><a href="http://aralbalkan.com/3331?utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">How to make your web content look stunning on the iPhone 4&#8242;s new Retina Display</a>
</li>
<li><a href="http://www.weedygarden.net/2010/10/13/retina-display-and-css-background-images/?utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">Retina Display and CSS Background Images</a>
</li>
<li><a href="http://www.lukew.com/ff/entry.asp?1142&#038;utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">Designing for the Retina Display (326ppi)</a>
</li>
<li><a href="http://eisabainyo.net/weblog/2011/06/07/how-to-use-hi-res-images-for-web-apps-in-iphone4/?utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">How to use hi-res images in web apps for iPhone4 </a>
</li>
<li><a href="http://www.fiveminutes.eu/targeting-hight-screen-densities-with-css-media-queries/?utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">Targeting High Screen Densities with CSS Media Queries</a>
</li>
<li><a href="http://www.alistapart.com/articles/a-pixel-identity-crisis/?utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">A Pixel Identity Crisis</a>
</li>
<li><a href="http://bradfrostweb.com/blog/mobile/hi-res-optimization/?utm_source=TablelessComBr&#038;utm_medium=PostLink&#038;utm_campaign=TablelessComBr&#038;utm_nooverride=1">optimizing web experiences for high resolution screens</a>
</li>
</ul>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><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/boas-praticas-de-acessibilidade/" title="Boas práticas de Acessibilidade">Boas práticas de Acessibilidade</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/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/adobe-e-os-padroes-web/" title="Adobe e os Padrões Web">Adobe e os Padrões Web</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Responsive Web Design &#8211; focando a coisa certa</title>
		<link>http://tableless.com.br/responsive-web-design-voce-esta-fazendo-isso-errado/</link>
		<comments>http://tableless.com.br/responsive-web-design-voce-esta-fazendo-isso-errado/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 12:58:46 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Internet Móvel]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[dispositivos moveis]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[internetmovel]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5718</guid>
		<description><![CDATA[Será que todo mundo precisa de um design responsivo? Você pode não estar dando atenção para o que realmente importa.]]></description>
			<content:encoded><![CDATA[<p>Eu andei pensando em um assunto e procurando sobre <a href="http://bit.ly/GAQ3RX">encontrei um artigo</a>, fresquinho, no <a href="http://twitter.com/#!/brad_frost">Brad Frost</a> que veio de encontro ao que eu estava matutando. Eu escrevi em tempos passados um artigo sobre <a href="http://tableless.com.br/porque-so-para-o-iphone/">por que estávamos desenvolvendo apenas para iPhone</a>. Foi aí que começamos a pensar em versões mobiles. Mas fazíamos versões mobiles dos nossos sistemas e websites simplesmente sem entender quando a necessidade de ter um site mobile era real. Muitas empresas gastaram uma boa grana para ter sua versão mobile, mas apenas para se manter na moda.</p>
<p>Agora, a bola da vez é <a href="http://wp.me/p1vY5N-12Z">criar designs responsivos</a> como se não houvesse o amanhã. É aí que entra a pergunta: você precisa de um design responsivo?</p>
<p>A maioria dos browsers para dispositivos móveis fazem um bom trabalho em websites que não tem versão específica para mobiles. Desde a vinda do iPhone, todos os browsers para mobiles se adequaram de uma forma que antes apenas o Opera abordava. Hoje, quando navegamos em qualquer website, tendo ou não versão para mobile, temos uma boa experiência. Aí vem o ponto: será que criar um site responsivo é o mais importante para o negócio do seu cliente? Produzir um website mobile friendly não é apenas modificar sua carinha, colocar ícones bonitinhos e pronto. Há outros pontos a serem abordados que são tão ou mais importantes que este.</p>
<p>Veja um comentário do Brad Frost em seu artigo:</p>
<blockquote lang="en"><p><strong>Your visitors don’t give a shit if your site is responsive.</strong> They don’t care if it’s a separate mobile site. They don’t care if it’s just a plain ol’ desktop site. They <strong>do</strong> give a shit if they can’t get done what they need to get done. They <strong>do</strong> give a shit when your site takes 20 seconds to load. They do care when interactions are awkward and broken.</p></blockquote>
<p>Entende o que eu quero dizer? Um dispositivo móvel já é mais dinâmico por natureza que os desktops. Os aparelhos móveis de hoje em dia nos fazem querer os resultados mais rapidamente. Se você tiver um website desenhado apenas para desktops, mas mesmo assim ele é rápido, os usuários de mobile vão agradecer. Já vi muitos websites mobiles que foram apenas adequados&#8230; Isso não é produzir um site mobile. Se seu site é bem desenhado e sua usabilidade impecável, ter um design responsivo passa a ser secundário e você passa a dar atenção coisas mais importantes, por que mesmo sendo uma versão desktop, o usuário conseguirá navegar sem muitos problemas.</p>
<h3>Mas você quer dizer que sites mobile não importam?</h3>
<p>Não, não quero dizer isso. Pelo contrário, eles importam e muito. <strong>A experiência do usuário é muito melhor se houver uma versão mobile</strong>, sem sombra de dúvida. Mas do que adianta ter uma versão mobile se o site demora 20 segundos para carregar? O dev cria a versão mobile, mas ele não faz adaptação nenhuma nas imagens (e não estou falando apenas de mudar a dimensão dela), não usa com inteligência o font-face, que embora seja maravilhoso, come muita banda&#8230; Acontece que ter carinha bonita não quer dizer que é fácil de usar.</p>
<h3>Experiência de usuário é o foco</h3>
<p>O foco é buscar a melhor experiência possível que o usuário pode ter em seu dispositivo. Nós usamos responsive web design para levar a experiência do usuário para outro nível. Não apenas por que está todo mundo fazendo. Você não precisa fazer seu site se adequar ao redimensionar a janela. É bonito? Sim, claro, mas só pra impressionar, porque não é muito útil se você parar para pensar. </p>
<p>No front-end, a experiência do usuário vai muito além do design. Responsive web design não é uma modinha é mais uma ferramenta para usarmos em pról da boa experiência do usuário. É por isso que na construção dos nossos projetos, <a href="http://tableless.com.br/mobile-first-a-arte-de-pensar-com-foco/">podemos iniciar o trabalho pensando primeiramente nos mobiles</a> e depois nos desktops. Isso nos faz mirar em objetivos mais importantes, não apenas para mobiles, mas para os desktops também, bem como tablets, tvs e todo o resto que vem por aí.</p>
<p>Alguns artigos para você dar uma olhada:</p>
<ul>
<li><a href="http://kolakube.com/responsive-design-big-deal/">Why is Responsive Web Design Such A Big Deal? Seriously…You Tell Me</a></li>
<li><a href="http://bradfrostweb.com/blog/web/responsive-web-design-missing-the-point/?utm_source=feedburner&#038;utm_medium=feed&#038;utm_campaign=Feed%3A+brad-frosts-blog+%28Brad+Frost+Web%29">responsive web design: missing the point</a></li>
<li><a href="http://www.lukew.com/ff/entry.asp?1509">Which One: Responsive Design, Device Experiences, or RESS?</a></li>
<li><a href="http://tableless.com.br/mobile-first-a-arte-de-pensar-com-foco/">Mobile First – A arte de pensar com foco</a></li>
<li><a href="http://tableless.com.br/a-usabilidade-deve-ser-pensada-por-todos/">A usabilidade deve ser pensada por todos</a></li>
</ul>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/" title="Qualidade de Imagens e densidade de pixels">Qualidade de Imagens e densidade de pixels</a></li><li><a href="http://tableless.com.br/utilizando-apps-em-vez-de-browsers/" title="Utilizando APPs em vez de browsers">Utilizando APPs em vez de browsers</a></li><li><a href="http://tableless.com.br/mobile-first-a-arte-de-pensar-com-foco/" title="Mobile First &#8211; A arte de pensar com foco">Mobile First &#8211; A arte de pensar com foco</a></li><li><a href="http://tableless.com.br/sites-para-dispositivos-moveis-mediatype/" title="Sites para Dispositivos Móveis &#8211; MediaType">Sites para Dispositivos Móveis &#8211; MediaType</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/responsive-web-design-voce-esta-fazendo-isso-errado/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>CSS3 – Texturizando textos</title>
		<link>http://tableless.com.br/css3-texturizando-textos/</link>
		<comments>http://tableless.com.br/css3-texturizando-textos/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 12:22:29 +0000</pubDate>
		<dc:creator>Thaiana Poplade</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[html. css3]]></category>
		<category><![CDATA[tecnicascss]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5542</guid>
		<description><![CDATA[Com funcionalidades que apoiam resultados visuais exclusivamente à folhas de estilo, o CSS3 está sendo criado para otimizar fluxo e ritmo de trabalho, além de aproximar ainda mais Designers de Interfaces à profissionais Front-End. Com vocês, a texturização de textos via CSS3.]]></description>
			<content:encoded><![CDATA[<p>Com o uso da versão 3, já podemos tornar possível a criação de sombra em textos e boxes, arredondamento de bordas, múltiplos backgrounds, etc; objetivando reduzir o tempo de carregamento da página e estimulando o cuidado na utilização de códigos e textos limpos que servirão de comunicação para robôs de busca ou favorecerão a acessibilidade do website.</p>
<p>A exemplo de mais uma das vantagens do CSS3, vamos conhecer melhor como aplicar uma imagem de textura ao preenchimento de um texto, utilizando apenas declarações &#8220;fonts&#8221; na folha de estilo.</p>
<p>Vale ressaltar que o exemplo abaixo funcionará, neste momento, exclusivamente no Chrome e no Safari em suas últimas versões. E antes que você pense: “então, não poderei aplicar aos meus projetos&#8230;”, te tranquilizo; talvez você não possa aplicar aos projetos para web em desktop e diversos tipos de outros navegadores, mas você poderá aplicar a seus projetos mobile ou para tablets.  Pense nisso! <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Então, vamos lá!</p>
<p>Crie um novo documento html com a seguinte marcação:</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">&lt;body<span style="color: #00AA00;">&gt;</span><br />
&nbsp; &nbsp;&lt;header<span style="color: #00AA00;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &lt;h1<span style="color: #00AA00;">&gt;</span>Wood&lt;/h1<span style="color: #00AA00;">&gt;</span><br />
&nbsp; &nbsp;&lt;/header<span style="color: #00AA00;">&gt;</span><br />
&lt;/body<span style="color: #00AA00;">&gt;</span></div></td></tr></tbody></table></div>
<p>Após, adicione as características de estilo (uso aqui a aplicação incorporada para facilitar os testes):</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 /></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;">&#123;</span><span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#fff</span><span style="color: #00AA00;">&#125;</span><br />
h1<span style="color: #00AA00;">&#123;</span>      <br />
<span style="color: #000000; font-weight: bold;">font</span><span style="color: #00AA00;">:</span><span style="color: #933;">72px</span> <span style="color: #993333;">bold</span> <span style="color: #ff0000;">&quot;Arial Black&quot;</span><span style="color: #00AA00;">,</span> Gadget<span style="color: #00AA00;">,</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>     <br />
<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#930</span><span style="color: #00AA00;">;</span>     <br />
<span style="color: #000000; font-weight: bold;">text-transform</span><span style="color: #00AA00;">:</span><span style="color: #993333;">uppercase</span><span style="color: #00AA00;">;</span>     <br />
<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #993333;">solid</span> <span style="color: #933;">20px</span> <span style="color: #cc00cc;">#930</span><span style="color: #00AA00;">;</span>     <br />
<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">10px</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>A princípio, seu texto está assim:</p>
<p><a href="http://tableless.com.br/wp-content/uploads/2012/02/img1.png"><img class="alignnone size-medium wp-image-5549" src="http://tableless.com.br/wp-content/uploads/2012/02/img1.png" alt="" width="300" height="151" /></a></p>
<p>Agora, vamos abrir um dos editores de imagem – Photoshop ou Fireworks – e criar uma <strong>imagem PNG</strong> com a nossa textura. Em meu teste inicial, eu utilizei uma imagem de textura pronta, mas o resultado não ficou como esperado, então aconselho colocar seus dotes de criação em atividade e realmente criar a textura.<br />
Abaixo uma breve explicação da textura que criei no Fireworks.</p>
<p>Utilizando o Fireworks, crie um novo documento (1900&#215;200), selecione a ferramenta pincel, depois aplique as seguintes características (barra de ferramentas inferior): <strong>Tip size – 300 | Stroke Category – Pencil Pixel Soft | Texture – Line vertical e Burlap.</strong></p>
<p><strong><a href="http://tableless.com.br/wp-content/uploads/2012/02/img2.png"><img class="size-medium wp-image-5550 alignleft" style="margin-right: 10px" src="http://tableless.com.br/wp-content/uploads/2012/02/img2.png" alt="" width="300" height="269" /></a></strong></p>
<p>Na hora de escolher a melhor forma de exportar sua imagem, o cuidado com o peso em kb continua valendo. Em se tratando de PNG, é muito fácil um simples arquivo ficar com mais de 500kb, por isso, em meus testes observei que exportando em PNG8 você vai ter um arquivo de 52kb com uma qualidade visual menor, mas que dependendo do estilo de textura é perfeitamente aplicável, ou exportando em PNG32 você preza por uma qualidade visual melhor, mas ao custo de um arquivo de 200kb. A escolha vai depender da velocidade de conexão ao qual você vai estabelecer para esta aplicação e do resultado visual que você julgar aceitável.</p>
<p>Criada a imagem, vamos incluir ao style do texto o atributo <strong>“mask-image”</strong> que definem a textura no texto.</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 /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">h1<span style="color: #00AA00;">&#123;</span>      <br />
<span style="color: #000000; font-weight: bold;">font</span><span style="color: #00AA00;">:</span><span style="color: #933;">72px</span> <span style="color: #993333;">bold</span> <span style="color: #ff0000;">&quot;Arial Black&quot;</span><span style="color: #00AA00;">,</span> Gadget<span style="color: #00AA00;">,</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>     <br />
<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#930</span><span style="color: #00AA00;">;</span><br />
<span style="color: #000000; font-weight: bold;">text-transform</span><span style="color: #00AA00;">:</span><span style="color: #993333;">uppercase</span><span style="color: #00AA00;">;</span>     <br />
<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #993333;">solid</span> <span style="color: #933;">20px</span> <span style="color: #cc00cc;">#930</span><span style="color: #00AA00;">;</span>     <br />
<span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>     <br />
<br />
-webkit-mask-image<span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span>text2.png<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
-o-mask-image<span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span>text2.png<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
-moz-mask-image<span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span>text2.png<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
mask-image<span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span>text2.png<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>Reload no navegador&#8230; e voilá! Um texto com um preenchimento texturizado.</p>
<p><a href="http://tableless.com.br/wp-content/uploads/2012/02/img3.png"><img class="alignnone size-medium wp-image-5553" src="http://tableless.com.br/wp-content/uploads/2012/02/img3.png" alt="" width="300" height="117" /></a></p>
<p>Daí para frente você pode incrementar utilizando <a title="Propriedade @font-face CSS – Fonts externas na web" href="http://tableless.com.br/font-face-fonts-externas-na-web/" target="_blank">font-face</a>, <a title="CSS3 – Sombras em textos e elementos" href="http://tableless.com.br/css3-sombras-em-textos-e-elementos/" target="_blank">text-shadow</a> ou outras texturas. Fica a critério da sua criatividade.</p>
<p>Até a próxima!</p>
<p> <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><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/propriedade-background-clip/" title="Propriedade background-clip">Propriedade background-clip</a></li><li><a href="http://tableless.com.br/cut-the-rope/" title="Cut the Rope">Cut the Rope</a></li><li><a href="http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/" title="Qualidade de Imagens e densidade de pixels">Qualidade de Imagens e densidade de pixels</a></li><li><a href="http://tableless.com.br/seu-lugar-ao-sol/" title="Seu lugar ao sol">Seu lugar ao sol</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/css3-texturizando-textos/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>ePub: Aprenda a criar um livro digital</title>
		<link>http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/</link>
		<comments>http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 12:13:28 +0000</pubDate>
		<dc:creator>Dani Guerrato</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[ePub]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5346</guid>
		<description><![CDATA[Conheça as vantagens do formato, aprenda a criar um livro do zero, descubra as melhores práticas e porquê você deve correr dos geradores automáticos.
]]></description>
			<content:encoded><![CDATA[<h2>Introdução</h2>
<p>Com a crescente popularização de tablets e leitores digitais não há dúvida de que os livros eletrônicos vieram para ficar. O formato ePub vem cada vez mais se consolidando como o padrão definitivo para eBooks. As editoras procuram profissionais especializados, mas, aqui no Brasil não existem muitos que de fato possuem o know-how necessário para desenvolver livros no padrão. Na verdade o que acontece é que as editoras estão alocando o tipo de profissional errado para a função. Um diagramador padrão, acostumado com editoração impressa via softwares visuais como Indesign vai ter problemas ao tentar lidar com linhas de código. Já um desenvolvedor front-end vai se sentir em casa já que criar e editar um livro digital é basicamente lidar com XHTML e folhas de estilo em CSS. Neste artigo vou comentar sobre as vantagens (e desvantagens) deste padrão e como com algumas poucas dicas você poderá editar um livro digital.</p>
<h2>Por que não usar PDF?</h2>
<p>O PDF tem muitas vantagens. Até a sua tia que te liga toda semana para perguntar de novo como faz para ler o resultado da Megasena na internet sabe como abrir um PDF. E do ponto de vista do design é ótimo. Hey, você tem muito mais controle do layout! Você pode colocar imagens e textos como quiser sem se preocupar com nada. Exceto… Você já tentou ler um PDF em um smartphone? É simplesmente agonizante. É necessário dar zoom in e out a cada frase diferente. Ou tentar ler tudo em um tamanho de letra absurdamente pequeno…</p>
<p>Isto acontece por que o PDF é baseado no suporte físico de uma folha, o que simplesmente não faz sentido no mundo digital. Vou explicar: um artista que pretende pintar uma nova obra de arte precisa saber o tamanho da tela. Da mesma maneira, ao editar um livro, ou qualquer outro tipo de documento para a impressão, é necessário saber o tamanho da folha para aí então fazermos toda a diagramação. O problema é que em um ambiente digital não existe uma folha. Existe um viewport (ou seja, área de visualização) que pode ser, bem, do tamanho que o usuário quiser! Se ele for ler o seu livro no browser pode aumentar e diminuir o tamanho da janela até a resolução máxima do monitor. Ou pode optar por ler em um tablet, smartphone, eReader… Enfim, a questão é que não temos como determinar a medida de altura e largura da mesma maneira que fazíamos com o papel. E o PDF, como foi pensado para ser impresso, precisa desta medida fixa.</p>
<h2>Sobre o ePub</h2>
<p>ePub é abreviação de Eletronic Publication, ou seja, Publicação Eletrônica. É um formato de livro aberto e gratuito criado pelo <a title="IDPF" href="http://idpf.org/">IDPF</a>, um fórum internacional de publicação digital. Os livros deste formato são fluidos, o que permite que a experiência de leitura seja legal em qualquer tamanho da tela, sistema operacional ou dispositivo que você escolher. Desde que você tenha um app para isto, é claro. Mas isto não é muita preocupação. Existem leitores gratuitos para quase todos os aparelhos e sistemas operacionais (se você não conhece nenhum dê uma olhadinha no final do texto). Outro aspecto bacana do ePub é o controle que ele dá ao usuário. É possível realizar buscas, navegar através de links, aumentar e diminuir o tamanho da letra, trocar as fontes, a paleta de cores, etc. Sim, isto significa que se o cara quiser ler o livro inteiro em Comics Sans ele pode! Mas se isto deixar o usuário feliz quem somos nós para dizer não?</p>
<h2>Como editar</h2>
<p>Bem, agora que você já sabe como ler e por que usar, vamos descobrir como é um livro digital por dentro! Criei um livro de exemplo para utilizar neste tutorial. <a href="http://tableless.com.br/wp-content/uploads/2012/01/meulivro.epub_.zip">Você pode baixa-lo aqui</a>. Mas qualquer outro livro que você tiver neste formato vai servir para o nosso experimento.</p>
<p>A extensão ePub é um formato de livros compactado. Faça um teste: renomeie o arquivo deste tutorial de meulivro.epub para meulivro.zip ou meulivro.rar que você poderá ver o conteúdo do pacote. No entanto, uma coisa importante de se ter em mente é que não são todos os softwares editores que estão preparados para salvar neste formato. Até dá para ler os arquivos XHTML separados, mas você teria que abrir manualmente, editar e recompactar a cada mudança de volta para ePub o que não seria nada prático. Felizmente existem alguns softwares como <a title="Sigil" href="http://code.google.com/p/sigil/">Sigil</a> que são específicos para a edição de código de ePubs. Eles não tem um visual muito bonito mas cumprem com a função direitinho. Bem, vamos explorar os arquivos…</p>
<p><strong>Obs.</strong> Existem outras especificações opcionais, mas vou me manter dentro do fundamental.<br />
<strong>Obs.2</strong> Os nomes dos arquivos são case sensitive.</p>
<h2>A Estrutura</h2>
<p>Vamos voltar ao nosso ePub! Ao descompactar a pasta você vai ter o seguinte:</p>
<p>arquivo mimetype<br />
pasta META-INF</p>
<ul>
<li>container.xml</li>
</ul>
<p>pasta OEBPS</p>
<ul>
<li>content.opf</li>
<li>toc.ncx</li>
<li>style.css</li>
<li>titulo.html</li>
<li>capitulo1.html</li>
<li>capitulo2.html</li>
</ul>
<h2>Para que serve tudo isso e como eu crio sozinho?</h2>
<h4>Mimetype</h4>
<p>A função do mimetype é informar ao sistema operacional qual é o tipo do arquivo. O mimetype é um simples arquivo de texto ASCII.  Para criar um mimetype basta abrir qualquer editor (ou até mesmo o bloco de notas) e escrever esta linha de código:</p>
<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 /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">application/epub+zip</div></td></tr></tbody></table></div>
<p>Salve como mimetype (sem nenhuma extensão) e pronto. Está feito! O mimetype é igual para qualquer ePub. Então copiar de um outro ePub da certo também.</p>
<h4>Container.xml</h4>
<p>Deve ficar dentro da pasta  META-INF. A função deste arquivo é agregar todos os outros. Bora criar um!</p>
<div class="codecolorer-container xml 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="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;container</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;urn:oasis:names:tc:opendocument:xmlns:container&quot;</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rootfiles<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rootfile</span> <span style="color: #000066;">full-path</span>=<span style="color: #ff0000;">&quot;OEBPS/content.opf&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/oebps-package+xml&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rootfiles<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/container<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Content.opf</h4>
<p>Descreve o conteúdo de todos os arquivos. Apesar da extensão esquisita é só criar um xml e depois salvar como .opf É composto das seguintes partes: metadata, manifest e spine. O esqueleto dele é assim:</p>
<div class="codecolorer-container xml 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 /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;package</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.idpf.org/2007/opf&quot;</span> <span style="color: #000066;">unique-identifier</span>=<span style="color: #ff0000;">&quot;EPB-UUID&quot;</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;2.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #808080; font-style: italic;">&lt;!-- insira os parâmetros aqui --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/package<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Metadata</h4>
<p>Não tem muito segredo aqui. São as informações do seu livro.</p>
<p><strong>Itens obrigatórios:</strong></p>
<ul>
<li><strong>title </strong>- O título do seu livro.</li>
<li><strong>language </strong>- A Lingua utilizada. Como o livro está em português eu escolhi pt-br.</li>
<li><strong>identifier </strong>- Um código único para o seu livro. Pode ser o ISBN, por exemplo.</li>
</ul>
<p><strong>Itens opcionais:</strong></p>
<ul>
<li><strong>creator </strong> &#8211; O criador. No caso, você.</li>
<li><strong>contributor</strong> &#8211; Contribuidor</li>
<li><strong>publisher </strong>- Editora</li>
<li><strong>subject </strong>- Assunto</li>
<li><strong>description</strong> &#8211; Descrição do livro</li>
<li><strong>date </strong>- Data</li>
<li><strong>type </strong>- Tipo</li>
<li><strong>format</strong> &#8211; Formato</li>
<li><strong>source</strong> &#8211; Fonte</li>
<li><strong>relation</strong> &#8211; Relação</li>
<li><strong>coverage</strong> &#8211; Cobertura</li>
<li><strong>rights</strong> &#8211; O tipo de licença. Creative Commons, por exemplo.</li>
</ul>
<p>Bem, vamos preencher nossas metadatas. Eu inseri o seguinte entre as tags package:</p>
<div class="codecolorer-container xml 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 /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;metadata</span> <span style="color: #000066;">xmlns:opf</span>=<span style="color: #ff0000;">&quot;http://www.idpf.org/2007/opf&quot;</span></span><br />
<span style="color: #009900;"><span style="color: #000066;">xmlns:dc</span>=<span style="color: #ff0000;">&quot;http://purl.org/dc/elements/1.1/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Saga do primeiro ePub<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:creator</span> <span style="color: #000066;">opf:role</span>=<span style="color: #ff0000;">&quot;aut&quot;</span> <span style="color: #000066;">opf:file-as</span>=<span style="color: #ff0000;">&quot;Dani&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Dani<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:creator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:date</span> <span style="color: #000066;">opf:event</span>=<span style="color: #ff0000;">&quot;original-publication&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>2012<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:date<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:publisher<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Tableless<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:publisher<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:date</span> <span style="color: #000066;">opf:event</span>=<span style="color: #ff0000;">&quot;epub-publication&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>2012-01-30<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:date<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:subject<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Primeiro ePub<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:subject<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:subject<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Estudos<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:subject<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Tableless<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:rights<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Pode copiar galera!<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:rights<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:identifier</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;EPB-UUID&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>minhaid<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:identifier<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:language<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>pt-br<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:language<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/metadata<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Manifest</h4>
<p>É um manifesto mesmo. Deve conter (em qualquer ordem) a lista de todos os arquivos da sua publicação. Exceto mimetype, container.xml e content.opf É necessário especificar uma ID única para cada arquivo. Você pode nserir estas informações antes ou depois da metadata. O importante é que esteja também dentro da tag package. No caso do nosso livro-tutorial ficou assim:</p>
<div class="codecolorer-container xml 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 /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;manifest<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #808080; font-style: italic;">&lt;!-- Documentos --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;titulo&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;titulo.html&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/xhtml+xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;capitulo1&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;capitulo1.html&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/xhtml+xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;capitulo2&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;capitulo2.html&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/xhtml+xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<br />
<span style="color: #808080; font-style: italic;">&lt;!-- CSS Style Sheets --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;main-css&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;style.css&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;text/css&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<br />
<span style="color: #808080; font-style: italic;">&lt;!-- NCX --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;ncx&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;toc.ncx&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/x-dtbncx+xml&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/manifest<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Spine</h4>
<p>A espinha do livro, ou seja, a ordem de leitura. Aqui você deve colocar apenas os arquivos tipo HTML na ordem que você deseja que apareça no livro, chamando cada um pelo ID que você definiu no manifesto. Tome cuidado para não duplicar nenhum arquivo ou ID. Como você já adivinhou, deve ser inserido entre as tags package também.</p>
<div class="codecolorer-container xml 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="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;spine</span> <span style="color: #000066;">toc</span>=<span style="color: #ff0000;">&quot;ncx&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;itemref</span> <span style="color: #000066;">idref</span>=<span style="color: #ff0000;">&quot;titulo&quot;</span> <span style="color: #000066;">linear</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;itemref</span> <span style="color: #000066;">idref</span>=<span style="color: #ff0000;">&quot;capitulo1&quot;</span> <span style="color: #000066;">linear</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;itemref</span> <span style="color: #000066;">idref</span>=<span style="color: #ff0000;">&quot;capitulo2&quot;</span> <span style="color: #000066;">linear</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/spine<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>toc.ncx</h4>
<p>TOC é uma sigla para Table of Contents, ou seja, o indice do livro. Também é um arquivo xml salvo com a terminação .ncx Possui a seguinte estrutura:</p>
<p><strong>#head</strong></p>
<ul>
<li>uid — o identificador único em content.opf</li>
<li>depth — níveis do sumário &gt;= 1</li>
<li>totalPageCount — to 0</li>
<li>maxPageNumber — to 0</li>
</ul>
<p><strong>#navMap</strong></p>
<p>O sumário em si</p>
<p><strong>#navPoint</strong></p>
<ul>
<li>id — único do arquivo</li>
<li>playOrder —ordem de navegação (iniciando em 1)</li>
</ul>
<p>O nosso índice ficou assim então:</p>
<div class="codecolorer-container xml 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 /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #00bbdd;">&lt;!DOCTYPE ncx</span><br />
<span style="color: #00bbdd;">PUBLIC &quot;-//NISO//DTD ncx 2005-1//EN&quot; &quot;http://www.daisy.org/z3986/2005/ncx-2005-1.dtd&quot;&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ncx</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.daisy.org/z3986/2005/ncx/&quot;</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;2005-1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dtb:uid&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;idtest&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dtb:depth&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;3&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dtb:totalPageCount&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dtb:maxPageNumber&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;docTitle<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Saga do primeiro ePub<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/docTitle<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;docAuthor<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Dani<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/docAuthor<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navMap<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navPoint</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;titulo&quot;</span> <span style="color: #000066;">playOrder</span>=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Titulo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;titulo.html&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navPoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navPoint</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;capitulo1&quot;</span> <span style="color: #000066;">playOrder</span>=<span style="color: #ff0000;">&quot;2&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Capitulo 1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;capitulo1.html&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navPoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navPoint</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;capitulo2&quot;</span> <span style="color: #000066;">playOrder</span>=<span style="color: #ff0000;">&quot;2&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Capitulo 2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;capitulo2.html&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navPoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navMap<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ncx<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>&nbsp;</p>
<h4>Os capítulos</h4>
<p>É aqui que entra o livro em si. Cada capitulo deve ficar em um HTML separado. Estes arquivos não são nada diferentes de HTMLs comuns:</p>
<p>&nbsp;</p>
<div class="codecolorer-container xml 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 /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;html</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/1999/xhtml&quot;</span> <span style="color: #000066;">xml:lang</span>=<span style="color: #ff0000;">&quot;pt&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">http-equiv</span>=<span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;application/xhtml+xml; charset=utf-8&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Capítulo 1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;link</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;style.css&quot;</span> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h3<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Capítulo 1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h3<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Hello World! Este é o primeiro capítulo do nosso livro. Yey!<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/html<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Outros tipos de arquivos:</h4>
<p><strong>CSS</strong> &#8211; Uma folha de estilos normal.<br />
<strong>Pasta images</strong> &#8211; Aqui devem ficar as imagens do livro. Formatos permitidos: jpeg, png, gif e svg+xml<br />
<strong>Pasta fonts</strong> &#8211; Utilize esta pasta se você quiser embedar algum arquivo de fonte no seu documento. Lembre-se de utilizar sempre o formato Open Type pois alguns aplicativos de leitura não suportam True Type.</p>
<h4>E agora basta compactar!</h4>
<p>Selecione todos os arquivos e crie um arquivo compactado (pode ser .zip ou .rar). Depois é só renomear para .epub e ler no seu dispositivo favorito. Pronto! Você tem um livro digital! <img src='http://tableless.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Dicas importantes para editar um ePub</h2>
<h4>Semântica é sua amiga</h4>
<p>Bem, se você é leitor do Tableless provavelmente não preciso dizer isso, mas vou dizer mesmo assim! É muito importante utilizar uma estrutura semântica aqui. Tags h1 a h6 para títulos, p para parágrafos… O que você já está mais do que cansado de saber a esta altura. Evite usar br para quebrar a linhas por que sem ter o tamanho de um container é difícil determinar quando de fato vai ser necessário quebrar a linha.</p>
<h4>Evite seletores complexos</h4>
<p>Leitores digitais não são tão sofisticados quanto browsers. Mantenha o seu CSS o mais simples possível.</p>
<h4>Use tamanhos relativos</h4>
<p>Como as &#8220;páginas&#8221; do seu livro vão aumentar e diminuir de acordo com o tamanho da tela do dispositivo não utilize pixels como medida para nada. Lembre-se: EM para texto e margens, porcentagens para figura. Isto vai garantir que o seu livro continue proporcional e escalável. E o seu leitor feliz!</p>
<h4>Tamanho é Documento</h4>
<p>Não use apenas um documento XHTML para o livro todo. A recomendação é que os capítulos tenham menos de 300k cada. Mais do que isto pode deixar alguns leitores, como o iBooks por exemplo, muito lentos! A razão é que estes apps consideram cada capítulo como um bloco de texto diferente. Se você colocar tudo em um documento só o aplicativo vai carregar tudo de uma vez a cada acesso.</p>
<p>Outra dica é tentar usar sempre imagens otimizadas para a web e com uma resolução não maior do que 1200 x 1600px.</p>
<h4>Não pire muito na escolha de fontes</h4>
<p>Evite usar fontes fora do padrão websafe. Você pode embedar fontes Open Type utilizando a propriedade @font-face mas isto não significa que voce deve. Para começar não são todos os leitores que aceitam isto e no final o seu arquivo pode ficar pesado demais e travar. E muitas vezes pode ser um trabalho extra inútil já que o seu usuário pode muito facilmente trocar de fonte. Se mesmo assim você quiser usar não escolha mais do que dois ou três tipos.</p>
<h2>Edição visual</h2>
<p>Sim. Existem alguns softwares que podem gerar o livro para você. O Adobe InDesign faz isto, o Pages do Mac… Mas falando sério: não vale a pena. O código vai ficar sujo e no final você vai ter que corrigir vários bugs. É como se você estivesse utilizando um editor &#8220;What you see is what you get&#8221; para fazer um site. Acho que vocês entendem o drama. Mas… se você for realmente caminhar por esta estrada escura tenha algumas coisas em mente:</p>
<ul>
<li>Se você está acostumado com editoração nestes programas é preciso mudar alguns paradigmas. Esqueça páginas mestras, hifenização, numeração, pé de página… você não precisa se preocupar mais com estas coisas em um formato digital.</li>
<li>Crie estilos específicos para o que é título, parágrafo, etc e não esqueça de importa-los na hora de salvar o arquivo.</li>
<li>Cuidado ao gerar o TOC (table of contents, ou seja, o índice). Se você colocar mais de dois subniveis pode dar problemas de compatibilidade com alguns programas e o seu livro simplesmente não abrir.</li>
<li>Lembre-se que todas as imagens precisam estar ancoradas para que fluam juntamente com o texto.</li>
<li>Determine quebras de capítulos. No caso do InDesign, salve cada parte do livro em um arquivo diferente. Depois junte todos os arquivos em um formato &#8220;book&#8221;.</li>
</ul>
<h2>E quanto ao formato iBook da Apple?</h2>
<p>A Apple lançou recentemente um software gratuito chamado iBooks Autor para a criação visual de livros digitais. Os livros no formato iBook são bem interativos, permitindo a implementação de elementos multimidia como videos (coisa que ainda está engatinhando no formato ePub). Com um &#8220;pequeno&#8221; porém. Sem muito alarde nos termos de serviço a Apple colocou uma clausula de exclusividade para livros comerciais. Ou seja, se você utilizar o software e vender o seu livro através da iBook Store não poderá vender em mais nenhum lugar. Sem contar que o programa é exclusivo para Mac.</p>
<h2>Fique longe dos conversores automáticos!</h2>
<p>Existem alguns softwares ainda que prometem converter de PDF para ePub. Fique longe deles! Sério. Eles são ainda piores que os editores visuais. Um software não consegue interpretar um livro da mesma maneira que um ser humano a menos que você diga a ele o que fazer. Se você não determinar &#8220;ei, isto é um título&#8221; ele não tem como fazer este tipo de decisão por você.</p>
<p>Os PDFs estão presos a um tamanho fixo, lembra? O que significa que as palavras precisam ser hifenizadas. Se você converter automaticamente (além do seu código ser a coisa menos semântica desde os sites feitos em tabelas) os hífens vão continuar lá, criando divisões no me-io das pala-vras on-de não pre-cisava! Pense nos números das páginas… se o texto flui isso significa que um mesmo livro pode (e vai) ter uma numeração diferente de acordo com o aparelho utilizado. Mas no caso da conversão automática os números no pdf vão continuar lá. Os títulos provavelmente vão estar errados também. Fora que muitos deixam marcas como &#8220;convertido pelo programa XYZ&#8221; em todas as páginas do livro.</p>
<h2>Links úteis</h2>
<ul>
<li><a title="IDPF" href="http://idpf.org/epub">IDPF </a>- A organização responsável pela criação do ePub. O site deles é meio confuso, mas contém bastante informação a respeito do formato.</li>
<li><a title="ePub Check" href="http://code.google.com/p/epubcheck/">ePub Chech</a> &#8211; Validação de ePub</li>
<li><a title="Epub Format Construction Guide" href="http://www.hxa.name/articles/content/epub-guide_hxa7241_2007.html">Epub Format Construction Guide</a> &#8211; Um meta-livro bem completo sobre o assunto.</li>
</ul>
<h2>Bibliotecas gratuitas</h2>
<ul>
<li><a title="Google Books" href="http://books.google.com.br/">Google Books</a></li>
<li><a title="ePub Bud" href="http://www.epubbud.com/">ePub Bud</a></li>
</ul>
<h2>Aplicativos para a Leitura</h2>
<h4>Mac &amp; PC</h4>
<ul>
<li><a title="Adobe Digital Editions " href="http://www.adobe.com/products/digitaleditions/">Adobe Digital Editions</a></li>
<li><a title="Nook" href="http://www.barnesandnoble.com/u/free-nook-apps/379002321/">Nook</a></li>
</ul>
<h4>Linux</h4>
<ul>
<li><a title="FB Reader" href="http://www.fbreader.org/">FB Reader</a></li>
</ul>
<h4>iOS</h4>
<ul>
<li><a title="iBooks" href="http://www.apple.com/br/ipad/built-in-apps/ibooks.html">iBooks</a></li>
<li><a title="Stanza" href="http://itunes.apple.com/br/app/stanza/id284956128?mt=8">Stanza</a></li>
</ul>
<h4>Android</h4>
<ul>
<li><a title="Aldiko" href="http://www.aldiko.com/">Aldiko</a></li>
</ul>
<h4>Leitura no Browser</h4>
<ul>
<li><a title="Magic Scroll " href="https://chrome.google.com/webstore/detail/ghgnmgfdoiplfmhgghbmlphanpfmjble">Magic Scroll </a>- Google Chrome</li>
<li><a title="ePub Read" href="http://www.epubread.com/">ePub Read</a> &#8211; Firefox</li>
</ul>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/" title="Qualidade de Imagens e densidade de pixels">Qualidade de Imagens e densidade de pixels</a></li><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/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/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/vote-no-especialista-em-usabilidade-para-presidente/" title="Vote no Especialista em Usabilidade para Presidente">Vote no Especialista em Usabilidade para Presidente</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>jQuery: métodos desconhecidos</title>
		<link>http://tableless.com.br/jquery-metodos-desconhecidos/</link>
		<comments>http://tableless.com.br/jquery-metodos-desconhecidos/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 15:30:24 +0000</pubDate>
		<dc:creator>Davi Ferreira</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[2012]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5315</guid>
		<description><![CDATA[Conheça alguns métodos pouco utilizados mas que podem ser grandes aliados dos desenvolvedores jQuery.]]></description>
			<content:encoded><![CDATA[<p>No meu <a href="http://tableless.com.br/jquery-dicas-de-otimizacao-e-performance/" title="">último artigo</a> falei sobre dicas de otimização e performance de códigos jQuery. Na versão inicial do texto eu havia planejado um tópico sobre os métodos não muito conhecidos, já que alguns, como o ajaxSetup, podem também atuar na performance da sua aplicação.</p>
<p>Acabei descobrindo que este tópico ficaria enorme e, por isso, preferi escrever sobre o assunto em um artigo próprio.</p>
<p>Com vocês, alguns dos métodos menos populares do jQuery!</p>
<h2>proxy()</h2>
<p>O método proxy() permite executar um outros método forçando um determinado contexto. Seu objetivo principal é evitar a confusão do &#8216;this&#8217; causada quando um objeto é utilizado dentro de um método de outro objeto.</p>
<p>Por exemplo:</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.botao&quot;</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; setTimeout<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//window</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.botao&quot;</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; setTimeout<span style="color: #009900;">&#40;</span><span style="color: #000066;">$</span>.<span style="color: #660066;">proxy</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//.botao</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>É possível utilizar o proxy() através de duas assinaturas. A primeira recebe como parâmetros uma função e o escopo. A segunda funciona passando o escopo e o nome do método como uma string.</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span>.<span style="color: #660066;">proxy</span><span style="color: #009900;">&#40;</span> funcao<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'objeto'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span>.<span style="color: #660066;">proxy</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'objeto'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'metodo'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Quem sabe agora você para de usar o truque do &#8216;var that = this&#8217;, hein?</p>
<h2>isArray() e isFunction()</h2>
<p>Esses dois métodos fazem parte da família de utilitários do jQuery. Como seus nomes sugerem, o primeiro verifica se o objeto é um array JavaScript e o segundo se o objeto é uma função.</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> jogadores <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Obina'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Vagner Love'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Zico'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> chutar <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>jogador<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Gol de &quot;</span> <span style="color: #339933;">+</span> jogadores<span style="color: #009900;">&#91;</span>jogador<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Utilities/isArray"><span style="color: #000066;">isArray</span></a><span style="color: #009900;">&#40;</span>jogadores<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// true</span><br />
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Utilities/isFunction"><span style="color: #000066;">isFunction</span></a><span style="color: #009900;">&#40;</span>chutar<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// true</span></div></td></tr></tbody></table></div>
<p>Uma observação: a função isArray retorna <em>true</em> apenas para verdadeiros Arrays (e não objetos &#8220;tipo array&#8221;, como um objeto jQuery, por exemplo).</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> jogadores <span style="color: #339933;">=</span> <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.jogadores'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Utilities/isArray"><span style="color: #000066;">isArray</span></a><span style="color: #009900;">&#40;</span>jogadores<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// false</span></div></td></tr></tbody></table></div>
<p>A <a href="http://api.jquery.com/category/utilities/" title="">lista de utilitários</a> possui outros métodos interessantes, tais como grep(), map(), merge() etc. </p>
<h2>queue() e dequeue()</h2>
<p>Apesar de terem sido desenvolvidos originalmente para o uso de animações, os métodos queue() e dequeue() podem ser utilizados para qualquer tipo de fila.</p>
<p>A fila padrão é chamada de &#8216;fx&#8217;: essa é a fila das animações. Ela será utilziada caso não seja passado nos parâmetros o nome de uma fila. No exemplo abaixo, estamos criando a fila &#8216;ajaxRequests&#8217;.</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/queue"><span style="color: #000066;">queue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ajaxRequests'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Ajax/ajax"><span style="color: #000066;">ajax</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'GET'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'/tableless'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; complete<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>jqXHR<span style="color: #339933;">,</span> textStatus<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/dequeue"><span style="color: #000066;">dequeue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ajaxRequests&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/queue"><span style="color: #000066;">queue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ajaxRequests'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Ajax/post"><span style="color: #000066;">post</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'/tableless'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>categoria<span style="color: #339933;">:</span> <span style="color: #3366CC;">'jquery'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Para dar sequência no andamento da fila, você precisa utilizar o método dequeue(). Ele deve ser chamado no final da execução de um processo da fila (e como essa é uma fila de processos AJAX, utilizamos o dequeue no evento <em>complete</em>).</p>
<p>Outro recurso interessante é a possibilidade de saber o tamanho da fila, ou seja, quantos eventos ainda serão executados. Para isso, basta utilizar a propriedade <em>length</em> após o método queue().</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/queue"><span style="color: #000066;">queue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ajaxRequests'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/length"><span style="color: #000066;">length</span></a><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 2</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/dequeue"><span style="color: #000066;">dequeue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ajaxRequests&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// executa fila</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/queue"><span style="color: #000066;">queue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ajaxRequests'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/length"><span style="color: #000066;">length</span></a><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 0</span></div></td></tr></tbody></table></div>
<h2>detach()</h2>
<p>Assim como o remove(), o detach() retira um elemento do DOM. No entanto, esse método guarda as referências, eventos e dados associados ao elemento retornando um objeto jQuery que pode ser re-inserido no DOM.</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; e.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp;<br />
&nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'clique'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 'clique'</span><br />
<span style="color: #003366; font-weight: bold;">var</span> link <span style="color: #339933;">=</span> <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">detach</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/append"><span style="color: #000066;">append</span></a><span style="color: #009900;">&#40;</span>link<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 'clique'</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/remove"><span style="color: #000066;">remove</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/append"><span style="color: #000066;">append</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;a href=&quot;#&quot; class=&quot;link&quot;&gt;link&lt;/a&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// []</span></div></td></tr></tbody></table></div>
<h2>ajaxSetup() e afins</h2>
<p>Talvez esses sejam os métodos mais injustiçados do jQuery. É muito comum a repetição de chamadas AJAX, incluindo seus parâmetros. Esses métodos de configuração permitem definir valores padrão para qualquer evento AJAX em sua aplicação.</p>
<p>Com o ajaxSetup() é possível, por exemplo, habilitar ou desabilitar o <em>cache</em> e definir o tipo de requisição: POST ou GET.</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Ajax/ajaxSetup"><span style="color: #000066;">ajaxSetup</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'POST'</span><span style="color: #339933;">,</span><br />
&nbsp; dataType<span style="color: #339933;">:</span> <span style="color: #3366CC;">'json'</span><span style="color: #339933;">,</span><br />
&nbsp; cache<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Você ainda pode configurar uma URL padrão e também parâmetros passados durante a chamada:</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Ajax/ajaxSetup"><span style="color: #000066;">ajaxSetup</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> &nbsp;<br />
&nbsp; <a href="http://docs.jquery.com/Core/data"><span style="color: #000066;">data</span></a><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; origem<span style="color: #339933;">:</span> <span style="color: #3366CC;">'tableless'</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'/tableless'</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Para conferir uma lista completa das propriedades configuráveis, visite a <a href="http://api.jquery.com/jQuery.ajax/" title="">página do método AJAX na API do jQuery</a>.</p>
<p>Os <em>callbacks</em> e eventos relacionados à execução de métodos AJAX também podem ser configurados. No entanto, essa configuração deve ser feita através dos seguintes métodos específicos: ajaxStart(), ajaxStop(), ajaxComplete(), ajaxError(), ajaxSuccess() e ajaxSend(). </p>
<p>Por exemplo, você poderia utilizar a configuração abaixo para exibir um indicador de carregamento no início da execução de um método AJAX.</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.carregando'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; .<a href="http://docs.jquery.com/Ajax/ajaxStart"><span style="color: #000066;">ajaxStart</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Effects/show"><span style="color: #000066;">show</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; .<a href="http://docs.jquery.com/Ajax/ajaxStop"><span style="color: #000066;">ajaxStop</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Effects/hide"><span style="color: #000066;">hide</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Você pode associar os eventos a qualquer elemento e o jQuery se encarregará de encontrar e executar todos os métodos associados.</p>
<h2>delay()</h2>
<p>O método delay() serve para adiar a execução de uma função, método ou animação. Ele é especialmente útil para controlar o tempo de animações.</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.alerta'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Effects/fadeIn"><span style="color: #000066;">fadeIn</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Effects/slideUp"><span style="color: #000066;">slideUp</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>No exemplo acima, o elemento com a classe &#8220;alerta&#8221; é exibido através de uma transição <em>fade</em> e, um segundo depois, ocultado através do método slideUp().</p>
<h2>replaceWith() e replaceAll()</h2>
<p>Imagine que você queira substituir todos os elementos que tenham a classe &#8220;pontos&#8221;. Com o método replaceWith() fica fácil. O que ele faz é buscar todos os objetos que se encaixem no seletor indicado e substituir seu conteúdo.</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.pontos'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/replaceWith"><span style="color: #000066;">replaceWith</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;h2&gt;1 milhão de pontos!&lt;/h2&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>O replaceWith() também funciona com elementos que não estejam presentes no DOM, ou seja, você pode criar um objeto jQuery e substituir/manipular seu conteúdo antes de inserí-lo no DOM.</p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;div class=&quot;carregando&quot; /&gt;'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/replaceWith"><span style="color: #000066;">replaceWith</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;p class=&quot;carregando&quot;&gt;Carregando...&lt;/p&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Da mesma forma, o método replaceAll() também substiui o conteúdo de elementos, mas a origem e o destino são invertidos. Você também pode passar seletores como conteúdo. Nesse caso o funcionamento é um pouco diferente já que o elemento não é clonado e sim movido no DOM. </p>
<div class="codecolorer-container jquery 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="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;h2&gt;Carregamento completo!&lt;/h2&gt;'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/replaceAll"><span style="color: #000066;">replaceAll</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.carregando'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.titulo'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/replaceAll"><span style="color: #000066;">replaceAll</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.carregando'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Note que a diferença dos métodos acima para os métodos tradiconais html() e text() é que o próprio elemento também é substituído e não só o seu conteúdo.</p>
<hr />
<p>Estes foram alguns métodos que pouca gente conhece ou utiliza. Pode até ser que você nunca tenha sentido falta deles, mas é sempre bom ter umas cartas extras na manga.</p>
<p>E se você gostou, garanto que ao consultar a <a href="http://api.jquery.com/" title="">API do jQuery</a> você descobrirá vários outros métodos desconhecidos, mas que podem ser úteis em algum momento do desenvolvimento dos seus projetos.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/manipulacao-de-classes-com-jquery/" title="Manipulação de classes com JQuery">Manipulação de classes com JQuery</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/cut-the-rope/" title="Cut the Rope">Cut the Rope</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><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></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/jquery-metodos-desconhecidos/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Declarando idiomas no HTML</title>
		<link>http://tableless.com.br/declarando-idiomas-no-html/</link>
		<comments>http://tableless.com.br/declarando-idiomas-no-html/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 10:00:42 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[tableless]]></category>
		<category><![CDATA[usabilidade]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5052</guid>
		<description><![CDATA[O conteúdo online pode ser acessado no mundo inteiro, não importa seu idioma. Para tanto o idioma deve ser declarado corretamente para que os meios de acesso entreguem o conteúdo da melhor forma possível.]]></description>
			<content:encoded><![CDATA[<p>Publicar conteúdo na web definitivamente não é a mesma coisa da publicação de conteúdo nos meios impressos. Quando imprimimos o conteúdo, temos como foco um determinado público de uma determinada região. Eu, estando no Brasil, não vou fazer uma revista em no idioma Japonês. Quando falamos publicação de conteúdo online a coisa muda de cenário. O conteúdo online pode ser acessado no mundo inteiro, não importa seu idioma. Obviamente se você conhece outros idiomas, você amplia suas possibilidades para encontrar conteúdo e novos sites. </p>
<p>Os desenvolvedores do mundo inteiro juntamente com os fabricantes de browsers e outros interessados, querem ter certeza que os navegadores, robôs de busca, leitores de tela e outros sistemas detectem da forma ideal o idioma correto.</p>
<p>A declaração do idioma no código HTML não determina a informação no <a href="http://tableless.com.br/charsets-e-encodes-tabelas-de-caracteres/" title="Charsets e Encodes – Tabelas de caracteres">encoding de caractére do texto</a> nem a direção de leitura do texto em outros idiomas. Essas definições precisam ser declaradas separadamente.</p>
<p>Nós precisamos definir o idioma por alguns motivos:</p>
<ul>
<li>Melhor pronunciação do texto em leitores de tela. </li>
<li>Para que os buscadores possam indexar o website no buscador do respectivo idioma. Por exemplo: não tem sentido o Google ranqueear muito bem um site em português no Google americano.</li>
<li>Selecionar as fonts corretas para mostrar na tela. Nesse caso para idiomas como Chinês.</li>
<li>Para que os browsers escolham o dicionário correto para a correção gramatical nativa em textos e formulários.</li>
<li>Renderizar a página rapidamente &#8211; o browser carrega o documento mais rápido quando o browser sabe qual o idioma nativo.</li>
</ul>
<h3>Definindo o idioma padrão do documento</h3>
<p>Existem algumas maneiras que você pode definir o idioma padrão no documento exibido ou em partes do texto para aqueles termos em idiomas diferentes.</p>
<p>Podemos definir diretamente via metatag nativa:</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/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Language&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pt-br&quot;</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Pela Metatag podemos definir vários valores no atributo content:</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/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Language&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pt-br, en, fr, it&quot;</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Via <strong>HTTP Header</strong>:</p>
<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 />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">HTTP/1.1 200 OK<br />
Date: Fri, 30 Dez 2011 10:46:04 GMT<br />
Server: Apache/1.3.28 (Unix) PHP/4.2.3<br />
Content-Location: CSS2-REC.en.html<br />
Vary: negotiate,accept-language,accept-charset<br />
TCN: choice<br />
P3P: policyref=http://www.w3.org/2001/05/P3P/p3p.xml<br />
Cache-Control: max-age=21600<br />
Expires: Wed, 05 Nov 2003 16:46:04 GMT<br />
Last-Modified: Tue, 12 May 1998 22:18:49 GMT<br />
ETag: &quot;3558cac9;36f99e2b&quot;<br />
Accept-Ranges: bytes<br />
Content-Length: 10734<br />
Connection: close<br />
Content-Type: text/html; charset=utf-8<br />
Content-Language: pt-br</div></td></tr></tbody></table></div>
<p>Via atributo <strong>lang</strong> nos elementos do 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 /></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>Nós utilizamos o <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;en&quot;</span>&gt;</span>mouse<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;</span> para navegar na <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;en&quot;</span>&gt;</span>web<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;</span> por meios dos <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;en&quot;</span>&gt;</span>browsers<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;</span>.</div></td></tr></tbody></table></div>
<p>Assim indicamos, principalmente para os leitores de tela, quais termos ele deve ler com o idioma nativo do termo.</p>
<p>Temos o costume de indicar o atributo <strong>lang</strong> no elemento <strong>html</strong> logo no início do documento para indicar que todo o conteúdo contido dentro do <strong>html</strong> está escrito em um determinado idioma.</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 /></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 />
<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; <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<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 />
<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>Ordem de herança</h3>
<p>Os meios de acesso, normalmente browsers, seguem esses passos de verificação para identificar o idioma:</p>
<ol>
<li>Verifica se elemento HTML que tem o atributo <strong>lang</strong>, se não,</li>
<li>Verifica se pai mais próximo ao termo que tenha o atributo <strong>lang</strong>, se não,</li>
<li>Verifica se o documento tem a metatag definida &lt;meta http-equiv=&#8221;content-language&#8221; content=&#8221;pt-br&#8221;&gt;, se não,</li>
<li>Verifica se o HTTP Header Content-Language tem uma tag de idioma definido. Se não,</li>
<li>O idioma é tratado como não reconhecido.</li>
</ol>
<p>O W3C recomenda que você sempre utilize o <strong>lang</strong> no elemento <strong>html</strong> para definir o idioma padrão de todo o conteúdo e também em todo o termo encontrado no texto com idioma diferente do definido como padrão.</p>
<p>Declarações de idioma baseados nestes atributos são importantes para a maioria das aplicações web hoje, que vão desde as <a href="http://br.mozdev.org/firefox/ortografia">corretores ortográficos</a> embutidos diretamente nos browsers até leitores de telas que interpretam as páginas web, etc etc.</p>
<p>Estas possibilidades são interessantes para que possamos globalizar ainda mais nossos projetos. Imagine por exemplo um website que ensina Russo para Chineses. É interessante que possamos marcar os termos dos dois idiomas de forma que os mecanismos trabalhem adequadamente em diversos meios de acesso. Os browsers precisam identificar quando o texto está em Russo ou quando está em Chinês. Os buscadores também precisam entender essa diferença, bem como os leitores de tela.</p>
<p>Aos poucos vamos padronizando características que antes eram ignoradas no desenvolvimento web. Não são ações muito difíceis de aplicar. Para começar, basta colocar o atributo <strong>lang</strong> no elemento <strong>html</strong> dos seus documentos e pronto.</p>
<h5>Referências</h5>
<p>Artigo que <a href="http://tableless.com.br/charsets-e-encodes-tabelas-de-caracteres/" title="Charsets e Encodes – Tabelas de caracteres">explica os Charsets, encodes e tabelas de caractéres no HTML</a>.</p>
<p>Veja aqui a <a href="http://www.w3.org/TR/i18n-html-tech-lang/">documentação oficial do W3C</a> que fala sobre este assunto.</p>
<p>O W3Schools tem aqui uma <a href="http://www.w3schools.com/tags/ref_language_codes.asp">listagem dos códigos de idioma</a> que podem usados. </p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/guia-de-referencia-de-html5/" title="Guia de Referência de HTML5">Guia de Referência de HTML5</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/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/qualidade-de-imagens-e-densidade-de-pixels/" title="Qualidade de Imagens e densidade de pixels">Qualidade de Imagens e densidade de pixels</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></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/declarando-idiomas-no-html/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

