<?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; web standards</title>
	<atom:link href="http://tableless.com.br/tag/web-standards/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 &#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>GoMo &#8211; Teste seu site mobile</title>
		<link>http://tableless.com.br/gomo-teste-seu-site-mobile/</link>
		<comments>http://tableless.com.br/gomo-teste-seu-site-mobile/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 22:57:26 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Notícias]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[cotidiano]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5514</guid>
		<description><![CDATA[Teste seu site com o Google GoMo.]]></description>
			<content:encoded><![CDATA[<p>Quer saber como seu site aparece nos smartphones por aí mas não nenhum aparelho para testar? O Google tem uma iniciativa chamada <a href="http://bit.ly/Aj7XXh">GoMo</a>.</p>
<p>O GoMo faz um teste rápido no seu site e mostra um screenshot de como seu site aparece em aparelhos móveis, aparentemente somente em aparelhos que rodam Android. Lembrando que muito provavelmente seu site aparecerá da mesma forma em dispositivos da Apple, que rodam WebKit, mesmo motor de renderização do browser do Android.</p>
<p>Ao final do teste ele entrega o resultando indicando 4 pontos principais: velocidade, imagens quebradas, legibilidade de textos e navegação. Muito interessante para quem quer pelo menos ter um teste superficial de como seu site se comporta nestes dispositivos.</p>
<p>Visite o <a href="http://bit.ly/Aj7XXh">GoMo</a>.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><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><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></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/gomo-teste-seu-site-mobile/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Agora é a vez dos desenvolvedores</title>
		<link>http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/</link>
		<comments>http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 13:53:11 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[cotidiano]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5455</guid>
		<description><![CDATA[A revolução pode começar sem você.]]></description>
			<content:encoded><![CDATA[<p>O desenvolvimento web depende de três personagens principais: <strong>W3C</strong>, que regulamenta, cria e sanciona padrões para a web. Os <strong>browsers</strong>, que importam essas regras e padrões de forma que a web seja mais homogênea. E os <strong>desenvolvedores</strong>, que possibilitam a criação e publicação de conteúdo em vídeos, texto, imagem etc.</p>
<p>Cada um destes personagens tem papéis importantes para que a evolução da web possa se tornar forte, traçando novos caminhos, cobrindo as necessidades atuais dos usuários e prevendo necessidades e soluções futuras. Há um ciclo para que estes personagens possam cumprir com seus objetivos.</p>
<p>O W3C cuida dos padrões. Ele tem ideias, ele prevê problemas e tenta solucioná-los. O W3C não aplica, ele apenas planeja. É um trabalho difícil, por que é necessário uma visão muito apurada do cenário da web para saber quais caminhos ela deverá tomar. Uma decisão errada, pode acarretar problemas que levarão anos para serem solucionados por completo. Vide o desenvolvimento com tabelas. Por isso esse trabalho de planejamento deve ser meticuloso. Devo confessar que em muitos casos o W3C não supera as expectativas e faz com que iniciativas paralelas surjam e direcionem a Web para um caminha mais correto. Foi o que aconteceu com o HTML5.</p>
<p>Os browsers, por sua vez, precisam entender e adotar as idéias do W3C, absorvendo as soluções e criando suporte nos seus softwares. Esse trabalho também tem seus perigos. Os browsers precisam pesquisar quais das necessidades dos desenvolvedores é mais importante e assim implementá-la para que a utilização de projetos seja executada. Obviamente que alguns decidem suportar aquelas soluções que darão mais pontos estratégicos contra o concorrente.</p>
<p>Finalizando o ciclo, os desenvolvedores aplicam tudo o W3C define, mas apenas aquilo que os browsers “querem” ou podem suportar. E isso, claro, faz com que o desenvolvedor se depare com problemas na ponta produção. Vide o IE6/7/8 e nossos problemas de cada dia.</p>
<p>Durante muito tempo, esse ciclo não era afinado. Havia uma certa confusão e um jogo de interesses próprios envolvendo principalmente os browsers. O W3C estava apenas pensando em como resolver problemas que talvez existiriam daqui longos anos. Os browsers estavam apenas interessados em criar uma massa de usuários suficiente para ser o primeiro no ranking. Os desenvolvedores, por sua vez, queriam ganhar seu dinheirinho, fazer o trabalho, entregar pro cliente e acabar com o problema.<br />
Ninguém deu atenção quando começamos a desenvolver com tabelas, fazendo com que os sites ficassem mais pesados, aumentando o tempo de desenvolvimento e o custo do projeto. </p>
<p>Este ciclo defeituoso foi praticado durante muito tempo. Por incrível que pareça, foram os Desenvolvedores que começaram a fazer o ciclo funcionar novamente como deveria. Eles acordaram os fabricantes de browsers e também o W3C. </p>
<p>O W3C passou a pensar mais em problemas presentes. Solucionou problemas iminentes e que entregavam valor para os projetos. </p>
<p>Os browsers suportaram o mais rápido possível essas mudanças, atualizando seus engines, e fortalecendo as bases para novas soluções e flexibilizações posteriores.</p>
<p>Já os desenvolvedores estagnaram. Desculpe-me, serei um pouco revoltado daqui para frente. Os desenvolvedores dormiram. Quando o W3C e os browsers apresentaram soluções para problemas como transparência, bordas arredondadas, backgrounds inteligentes, utilização de fonts remotas e etc, os desenvolvedores resolveram que não era a hora dessas soluções por causa da retrocompatibilidade com browsers antigos, como o IE6. Na verdade estou sendo meio injusto aqui. Não foram todos os desenvolvedores que criaram caso com a retrocompatibilidade, foram somente os idiotas.</p>
<p>Nós reclamávamos que precisávamos de recursos mais inteligentes para trabalhar. Que precisávamos de idéias realmente inovadoras, que transformassem os projetos e facilitassem o desenvolvimento. Protestamos, escrevemos manifestos, postamos em nossos blogs revoltados com a falta de visão do W3C e com a pobreza do suporte dos browsers. E quando conseguimos o que queríamos, demos para trás. Amarelamos. Pedimos arrego.</p>
<p>Infelizmente, via-se muito disso aqui no Brasil do que no resto do mundo. Ouvi muitas desculpas como: &#8211; “Mas meu cliente usa IE6.” ou “Mas isso não funciona em IE6.” Você é desenvolvedor. Você trata com seu cliente todos os dias. Você tem o poder de <a href="http://tableless.com.br/convencimento-e-educacao-liberdade/" title="Convencimento e educação = liberdade">educar e convencer</a>. E se você acha que não tem poder nenhum, por que ainda trabalha com web?</p>
<p>Talvez isso seja trauma do passado. Talvez não. O fato é que não podemos mais nivelar por baixo. Isso é atrasar uma “evolução” inteira.</p>
<p>Tenho incansavelmente falado sobre <a href="http://tableless.com.br/bem-vindo-a-xangrila-parte-1/" title="Bem vindo a Xangri-lá – Parte 1">Graceful Degradation, Enhanced Progressive</a>, <a href="http://tableless.com.br/categoria/client-side/html-css/html5-client-side/">HTML 5</a>, as <a href="http://tableless.com.br/categoria/client-side/html-css/css3/">maravilhas do CSS 3</a> e etc, pois esse é o assunto que rola lá fora. Há desenvolvedores e empresas, que acham que devemos ter uma autorização especial dos gringos para utilizarmos novas tecnologias e principalmente <a href="http://tableless.com.br/browsers-antigos-guerra-contra-o-terror/">para deixar os browsers antigos no passado</a>.</p>
<p>Esse assunto me faz pensar em outra pergunta: Estamos (você está?) preparados para o ritmo alucinante do W3C e dos browsers?<br />
Até a Microsoft está cumprindo com a palavra de ter um browser atualizado. Eles já anunciaram o novíssimo Internet Explorer 10, com uma série de atualizações que promete trazer o IE para o patamar de browsers atuais. </p>
<p>O mercado de client-side se transformará rapidamente nos próximos anos. Muitas mudanças no HTML e no CSS serão publicadas com o intuito de tornar a web mais homogênea, flexível, portável. O HTML 5 não é só uma coleção de novas tags e APIs. O CSS 3 não ganhou só bordas arredondadas. E nem só de iPhone vive o homem. Existem milhares de Nokias, Blackberrys, Windows Phones e Androids por aí.</p>
<p>Os desenvolvedores precisam acordar.</p>
<p><small>Artigo originalmente publicado em Nov/2009 na revista TI Digital.</small></p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/gomo-teste-seu-site-mobile/" title="GoMo &#8211; Teste seu site mobile">GoMo &#8211; Teste seu site mobile</a></li><li><a href="http://tableless.com.br/introducao-a-padroes-de-codificacao/" title="Introdução aos padrões de codificação">Introdução aos padrões de codificação</a></li><li><a href="http://tableless.com.br/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/seu-lugar-ao-sol/" title="Seu lugar ao sol">Seu lugar ao sol</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></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/feed/</wfw:commentRss>
		<slash:comments>31</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>Introdução aos padrões de codificação</title>
		<link>http://tableless.com.br/introducao-a-padroes-de-codificacao/</link>
		<comments>http://tableless.com.br/introducao-a-padroes-de-codificacao/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 11:28:41 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[cotidiano]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[web standards]]></category>

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

		<guid isPermaLink="false">http://tableless.com.br/?p=5211</guid>
		<description><![CDATA[Introdução sobre algumas premissas sobre controles de versão. Muito útil para designers e iniciantes na área.]]></description>
			<content:encoded><![CDATA[<p>Parece ser óbvio, mas muitos desenvolvedores desdenham de ter controle total sobre o código gerado no desenvolvimento. Muitos, por trabalharem sozinhos, entendem que não precisam manter um certo nível de organização do seu código exatamente porque talvez, somente eles, o verão.<br />
Quem nunca ficou horas tentando debugar um código que você mesmo fez, mas não lembrava o que uma determinada função fazia&#8230; Esse código pode ter sido por você de madrugada, quando você estava pingando de sono, ou pior, bêbado&#8230; Vai saber&#8230;</p>
<p>Controlar seu código fonte deve ser uma premissa. Um princípio. Se você acha que o undo do seu editor predileto salva sua vida, imagina ter um undo do seu projeto inteiro. Imagine você ter a história de edição de cada um dos arquivos do seu projeto.</p>
<p>Os princípios abaixo servem para qualquer tipo de controle de versão que conhecemos hoje: GIT, SVN, Mercurial etc. </p>
<h4>Branchs e trunks</h4>
<p>A última revisão, a mais atual, normalmente é chamada de <em>HEAD</em>. Existem momentos onde teremos vários HEADs porque o projeto tem vários BRANCHES.<br />
Um branch é uma cópia do projeto. Cada branch pode ser editado e evoluído independentemente.<br />
Imagine que exista a <strong>versão de produção</strong> que é aquela que está no ar. É a versão o usuário está utilizando. É importante que nós não modifiquemos esta versão porque alguém pode commitar algo errado, quebrar tudo e o usuario reclamar. Por isso nós precisamos de outro ambiente, é aí que criamos um branch de desenvolvimento, onde podemos fazer o que quisermos ali, sem afetar o branch principal. </p>
<p><img src="http://tableless.com.br/wp-content/uploads/2012/01/branch.jpg" alt="" title="branch" width="770" height="188" class="alignnone size-full wp-image-5212"></p>
<p>É muito útil criarmos novos <strong>trunks</strong> (tronco) quando precisamos fazer modificações drásticas de novas features, resolver bugs ou modificar layout. </p>
<p>Exemplo: imagine que você esteja trabalhando em uma nova feature, em um branch específico. O cliente liga e diz que encontrou um bug, originado de uma modificação feita na semana passada. Você sai do branch da nova feature e cria um novo branch. Este novo branch tem a cópia do código do branch de produção, que é o que o cliente está vendo. Você resolve o bug neste novo branch. Quando resolver o bug, você move as modificações deste branch para o branch de produção. Isso tudo sem ter que subir as modificações incompletas da nova feature que você estava trabalhando anteriormente.</p>
<h4>Versionamento</h4>
<p>Versionamento é uma das características mais básicas do controle de código. Quando comecei a desenvolver, normalmente eu trabalhava guardando pastas com nomes do tipo <strong>nomeDoProjeto-v1</strong>, <strong>nomeDoProjeto-v2</strong> etc&#8230; Estas pastas guardavam apenas as versões com grandes modificações de projeto&#8230; algo como mudança geral de layout, uma feature importante ou algo do tipo. O problema são as pequenas edições&#8230; Quando juntamos as pequenas modificações, temos uma grande modificação. É muito provável que se você perder essa versão, você não se lembre de todas as pequenas modificações feitas e isso é um problemão.</p>
<p>Toda vez que o desenvolvedor termina uma determinada tarefa, ele geral um commit que por sua vez gera um ponto de referência, uma versão, daqueles arquivos modificados.  Cada commit gera uma versão do seu código. A graça é que se você tem versões do código, você tem praticamente um <strong>undo</strong> gigante do seu projeto&#8230; Se depois de uma determinada modificação seu projeto começou a dar pau, você consegue entender com a história do seu versionamento &#8211; o famoso log &#8211; a partir de onde exatamente o problema foi iniciado.</p>
<h4>Logs</h4>
<p>Quando cada revisão é comitada, o desenvolvedor pode ou não adicionar uma mensagem explicando o que ele fez naquela tarefa. É importante que essa mensagem seja clara e rica em detalhes, mas não um texto gigante, apenas o suficiente para que você mesmo ou outras pessoas envolvidas entenda o que aquela submissão significa.</p>
<h4>Diffs</h4>
<p>Diffs são sensacionais. Imagine que você queira comparar duas versões de um mesmo arquivo para descobrir as linhas modificadas. Fazer um diff entre as versões do arquivo te possibilita encontrar exatamente onde está o erro e o melhor, quando juntamos com o Log, podemos saber exatamente o porque a pessoa incluiu aquela linha ou aquele código, e o melhor, quem fez aquela alteração. </p>
<h4>Rollback</h4>
<p>Mantendo uma história de commits, você tem <strong>pontos de volta</strong> na história do arquivo, possibilitando a facilidade de voltarmos para antes de alguma modificação. Você pode voltar a partir de um commit, por exemplo. Se o sistema ou o arquivo passou a dar problema depois de uma determinada revisão, é simples de você voltar o arquivo para a versão daquele determinado commit.</p>
<h4>Edição multiusuário e merge</h4>
<p>Isso é uma maravilha. Me lembro de equipes inteiras perdendo arquivos e partes de código porque dois membros abriam o mesmo arquivo para editar. Obviamente nunca, mas nunca dava certo. O que faziam que equipes inteiras criassem mecanismos da idade das pedras para avisar o resto do pessoal que determinado arquivo estava sendo usado. O trabalho em equipe remotamente nunca era possível. Com um controle de versão isso muda. Qualquer um pode editar qualquer arquivo a qualquer hora.<br />
O sistema de controle de versão compara as modificações feitas no arquivo pelos dois (ou mais) desenvolvedores e junta os códigos automaticamente. Muito bonito, hein?<br />
E quando os desenvolvedores modificam a mesma linha de código? Aí o controle de versão gera um conflito, esse conflito se resolve deve ser resolvido pelo desenvolvedor que executou o segundo commit. Funciona assim:</p>
<p>1. Dois desenvolvedores abrem o mesmo arquivo para editar.<br />
2. Quando os desenvolvedores terminam, eles geram um commit. Se os desenvolvedores fizeram edições em partes diferentes do arquivo, por exemplo, um no topo do arquivo e o outro no final, o sistema junta os códigos fazendo um merge, e criando um arquivo atualizado com as duas revisões.<br />
3. Se sistema percebe que os desenvolvedores fizeram as modificações na mesma linha, o sistema gera um conflito.<br />
4. O conflito é resolvido pelo segundo desenvolvedor que comitar o código. Ou seja, o cara comitou a modificação dele primeiro que você. Quando você comitar a sua modificação, o controle de versão avisará que há um conflito em uma parte do seu código. O conflito é resolvido mostrando algo mais ou menos assim:</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">p <span style="color: #00AA00;">&#123;</span><br />
&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD<span style="color: #3333ff;">:estilo</span><span style="color: #6666ff;">.css</span><br />
&nbsp; &nbsp;<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><br />
<span style="color: #00AA00;">=======</span><br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">blue</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&gt;&gt;&gt;&gt;&gt;&gt;&gt;</span> 77976da35a11db4580b80ae27e8d65caf5208086<span style="color: #3333ff;">:estilo</span><span style="color: #6666ff;">.css</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>A primeira linha mostra a sua linha. A segunda linha mostra a modificação do outro dev. Aquele hash maluco no final é a identificação do commit do outro dev.<br />
Bom, nesses casos você precisa ver qual código é o correto, e isso as vezes inclui ir perguntar para o outro brother que diachos é aquela coisa que ele fez. Tudo na camaradagem&#8230; as vezes.</p>
<h3>Concluindo</h3>
<p>Estas são algumas premissas sobre controles de versão utilizados hoje em dia. Os controles de versão mais usados hoje são o GIT, SVN e Mercurial. Cada um deles tem comandos diferentes para lidar com as premissas acima e cada um deles faz o controle de sua forma particular. Mesmo assim todos trazem as vantagens que citamos no artigo. Mesmo que você trabalhe sozinho, é recomendado que você trabalhe com controle de versão. Assim você guarda seu projeto de forma segura e tem um histórico das suas modificações durante o tempo. Boas práticas, my friend.</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/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/introducao-das-premissas-dos-controles-de-versao/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>WebIntents &#8211; Framework para WebApps</title>
		<link>http://tableless.com.br/webintents-framework-para-webapps/</link>
		<comments>http://tableless.com.br/webintents-framework-para-webapps/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 13:45:44 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[aprenda]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[usabilidade]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5155</guid>
		<description><![CDATA[WebIntents: sistemas web falando a mesma língua.]]></description>
			<content:encoded><![CDATA[<p>O Chrome e o Firefox estão trabalhando juntos em um framework open-source que fazem aplicações web trabalhem juntas sem que uma precise dar informações sobre seus respectivos sistemas. O nome deste framework é <a href="http://www.webintents.com/?utm_source=TablelessComBr&#038;utm_medium=postLink&#038;utm_campaign=link">WebIntents</a>.</p>
<p>O problema a ser resolvido é que se quisermos criar um sistema que utilize algumas facilidades de outros sistemas, nós precisamos aprender a API deste determinado sistema. Acontece que as APIs não são iguais. Se você quer utilizar um sistema de localização como Foursquare ou Gowalla, você precisa aprender como a API de cada um funciona e então escolher entre um dos dois ou utilizar os dois no seu sistema. Nesse caso, você tem o dobro do trabalho para manter seu sistema. Os dois podem modificar partes da sua API e você tem que ficar atento para que seu sistema não quebre. O WebIntents faz com que você consiga usar um comando para os dois serviços. </p>
<p>Web Intents, based on an existing capability in Google&#8217;s Android mobile OS, will let Web apps express a simple call for an action, like &#8216;share&#8217; or &#8216;edit,&#8217; which receiving apps will be designed to use, without either app needing to have specific knowledge of the APIs of the other. This way, instead of having to code for each specific Web app one might want to access, developers can just use these simple requests, which will be built into the browser. The Chrome and Firefox teams are each building this functionality for their own browser, but they&#8217;re combining their proposals to use a single API for Web app developers to reach both platforms.</p>
<p><a href="http://paul.kinlan.me/">Paul Kinlan</a>, o dono da ideia e desenvolvedor do Google, explica no em um <a href="http://paul.kinlan.me/web-intents-a-fresh-look">post no seu blog</a> o que é o WebIntents:</p>
<blockquote><p>&#8220;If I built an image gallery application and I wanted to let users edit an image so that they can remove red-eye from a photo I either have to build an application that edits the images, or integrate with a 3rd party solution. Doing this is hard and stops you from building an awesome image gallery; and what happens if the user has a favorite service that they already use to remove red-eye? Simple, you have a frustrated user.&#8221;</p></blockquote>
<p>Não é de hoje que iniciativas de desenvolvedores e grandes empresas tomam forma para que o desenovlvimento web fique cada vez mais fácil e menos trabalhoso. Isso aconteceu com muitos grupos de desenvolvedores, como o pessoal da <a href="http://webstandards.org/?utm_source=TablelessComBr&#038;utm_medium=link&#038;utm_campaign=postLink">WaSP</a>, o pessoal da <a href="http://www.whatwg.org/?utm_source=TablelessComBr&#038;utm_medium=link&#038;utm_campaign=postLink">WHATWG</a> e mais uma vez agora com o pessoal do <a href="http://www.webintents.com/?utm_source=TablelessComBr&#038;utm_medium=link&#038;utm_campaign=postLink">WebIntents</a>. Claro, existem outras iniciativas anônimas que nos fizeram chegar até aqui.</p>
<p>Eu gosto muito muito de uma frase do pessoal da WaSP utiliza há tempos: <strong>If not now, when? If not you, who?</strong></p>
<p><a href="https://github.com/PaulKinlan/WebIntents">Veja aqui o GitHub do Framework.</a></p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/experiencia-deve-ter-comeco-meio-e-fim/" title="Experiência deve ter começo, meio e fim">Experiência deve ter começo, meio e fim</a></li><li><a href="http://tableless.com.br/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><li><a href="http://tableless.com.br/mobilidade-na-cabeca/" title="Mobilidade na cabeça">Mobilidade na cabeça</a></li><li><a href="http://tableless.com.br/sites-para-dispositivos-moveis-breve-introducao/" title="Sites para Dispositivos Móveis &#8211; Breve introdução">Sites para Dispositivos Móveis &#8211; Breve introdução</a></li><li><a href="http://tableless.com.br/browsers_em_dispositivos_moveis/" title="Browsers dos Dispositivos Móveis">Browsers dos Dispositivos Móveis</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/webintents-framework-para-webapps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Guia de Referência de HTML5</title>
		<link>http://tableless.com.br/guia-de-referencia-de-html5/</link>
		<comments>http://tableless.com.br/guia-de-referencia-de-html5/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 15:07:13 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[tableless]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5065</guid>
		<description><![CDATA[Cheat sheets completos sobre HTML5.]]></description>
			<content:encoded><![CDATA[<p>Ter sempre um guia de referência sobre qualquer tipo de linguagem é sempre bom. Ainda mais quando é completo e  atual. O pessoal do WDL nos presenteou com <a href="http://www.inmotionhosting.com/infographics/html5-cheat-sheet/">uma série de Cheat Sheets</a> sobre HTML5. </p>
<p>Os guias são divididos em 3 gráficos: Um mostra as novas tags, o segundo mostra os eventos e atributos e o terceiro mostra o suporte dos browsers.</p>
<p>Cada Cada um diferencia as características novas, existentes ou não suportadas do HTML5. O visual deles é bem simples e muito fácil de entender. O mais legal é que dá para imprimir e deixar à vista para quando você ou a equipe precisarem.</p>
<h3>HTML5 Tags Cheat Sheet</h3>
<p><a href="http://www.inmotionhosting.com/infographics/html5-cheat-sheet/" target="_blank"><img src="http://www.inmotionhosting.com/infographics/_img/html5_cheat_sheet_tags-670x460.png" width="670" height="460" border="0" alt="HTML5 Cheat Sheet - Tags" /></a></p>
<p>HTML5 Cheat Sheet By InMotion Hosting &#8211; A <a href="http://www.inmotionhosting.com/vps_hosting.html">Virtual Private Servers</a> Provider</p>
<h3>HTML5 Event Handler Content Attribute Cheat Sheet</h3>
<p><a href="http://www.inmotionhosting.com/infographics/html5-cheat-sheet/#eventhandler" target="_blank"><img src="http://www.inmotionhosting.com/infographics/_img/html5_cheat_sheet_event_attributes-670x460.png" width="670" height="460" border="0" alt="HTML5 Cheat Sheet - Event Handler Attributes" /></a></p>
<p>HTML5 Cheat Sheet By InMotion Hosting &#8211; A <a href="http://www.inmotionhosting.com/">Web Hosting</a> Provider</p>
<h3>HTML5 Browser Support Cheat Sheet</h3>
<p><a href="http://www.inmotionhosting.com/infographics/html5-cheat-sheet/#browsersupport" target="_blank"><img src="http://www.inmotionhosting.com/infographics/_img/html5_cheat_sheet_browser_support-670x460.png" width="670" height="460" border="0" alt="HTML5 Cheat Sheet - Browser Support" /></a></p>
<p>HTML5 Cheat Sheet By InMotion Hosting &#8211; A <a href="http://www.inmotionhosting.com/dedicated_servers.html">Dedicated Server</a> Provider</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/declarando-idiomas-no-html/" title="Declarando idiomas no HTML">Declarando idiomas no HTML</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/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/sections-html5/" title="Sections: seções do HTML5 – Parte 1">Sections: seções do HTML5 – Parte 1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/guia-de-referencia-de-html5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Introdução ao CSS 3D &#8211; Flip Card</title>
		<link>http://tableless.com.br/introducao-ao-css-3d-flip-card/</link>
		<comments>http://tableless.com.br/introducao-ao-css-3d-flip-card/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 12:00:10 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[tecnicascss]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=4792</guid>
		<description><![CDATA[Entenda como funciona o CSS 3D e suas aplicações.]]></description>
			<content:encoded><![CDATA[<p>O CSS 3D é sem dúvida uma das features do CSS mais aguardadas por todas as crianças do Brasil. Fala a verdade! Fazer efeitozinhos com sombra, gradientes, transparências e etc já foi um dia na vida do desenvolvimento algo bacana. Hoje é muito fora de moda. Carne de vaca, sabe? Por isso o CSS 3D é tão esperado. Ele trará para a web efeitos visuais para layout que antes só viamos em sistemas que rodam em smartphones, tipo um iPhone ou nos sistemas operacionais mais populares como Linux e OSX.</p>
<p>Mas não se anime muito. Eu sei que você está ansioso para sair por aí colocando efeitos 3D de CSS em tudo quanto é aplicação. Mas calma&#8230; entenda que o CSS foi feito para estilizar documentos. Você o utiliza para melhorar a experiência dos usuários nos diversos dispositivos e não para enfeitar seu website como se fosse uma penteadeira. Lembra-se dos websites cheios de gifs animados? Pois é, cuidado para não cair no mesmo erro. Você estará utilizando o CSS 3D da maneira certa se seus efeitos passarem desapercebidos pelo usuário ao utilizar seu sistema. Encher seu sistema com efeitos a cada clique ou a cada ação pode fazer com que o usuário perca tempo e a paciência.</p>
<p>Mas vamos ao que interessa. </p>
<h3>O suporte</h3>
<p>Infelizmente isso ainda está restrito para browsers. O Internet Explorer não tem suporte ainda e nem tem data para tal. Todos os exercícios que você ver neste post são feitos para browsers que tem WebKit como motor de renderização. Por isso teste em seu Chrome ou no seu Safari. Eu testei no Chrome porque o Safari mostrou algumas inconsistências. O Opera está esperando as especificações de CSS Transforms amadurecerem para adicionar este recurso. Testei no Firefox 8.0.1 e o exercício não funcionou. </p>
<p>A degradação do CSS 3D para os browsers que não o suportam é um pouco infeliz. Sugiro que se você for utilizar essas features, tente fazê-lo em projetos restritos para que não haja problemas com usuários de browsers antigos. Se ainda assim você quiser arriscar, crie soluções especifica para seu projeto, fazendo com que a experiência do seu cliente não seja muito prejudicada.<br />
Sugiro que <a href="http://tableless.com.br/utilizando-a-biblioteca-modernizr/" title="Utilizando a Biblioteca Modernizr">utilize a biblioteca Modernizr</a> para identificar os browsers que não entendem o CSS 3D.</p>
<h3>Tudo é uma questão de perspectiva</h3>
<p>Para falar de 3D, precisamos falar sobre perspectiva. Para ativar uma área 3D o elemento precisará de perspectiva.<br />
Você pode aplicar a perspectiva ao elemento de duas formas: utilizando diretamente a propriedade <strong>perspective</strong> ou adicionando um valor <strong>perspective()</strong> na propriedade <strong>transform</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 />2<br />3<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; -webkit-perspective<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">600</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>Ou:</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 /></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; -webkit-transform<span style="color: #00AA00;">:</span> perspective<span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">600</span><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>Estes dois formatos são os gatilhos que ativam a área 3D onde o elemento irá trabalhar.</p>
<p>O valor da perspectiva determina a intensidade do efeito. Imagine como se fosse a distância de onde vemos o objeto. Quanto maior o valor, mais perto o elemento estará, logo, menos intenso será o visual 3D. Logo, se colocarmos um valor de <i>2000</i>, o objeto não terá tantas mudanças visuais e o efeito 3D será suave. Se colocarmos <i>100</i>, o efeito 3D será muito visível, como se fosse um inseto olhando um objeto gigante.</p>
<p>Você também precisa entender sobre o <a href="http://pt.wikipedia.org/wiki/Perspectiva_(gráfica)" title="Wikipedia: sobre ponto de fuga">ponto de fuga</a>. O ponto de fuga por padrão está posicionado no centro. Você pode modificar essa posição com a propriedade <strong>perspective-origin</strong>, que é muito parecido com a propriedade <strong>transform-origin</strong>, que define onde a ação de transformação do objeto acontecerá, nesse caso <a href="http://tableless.github.com/exemplos/cssanimation.html">quando falamos de ações 2D</a>. A propriedade <strong>perspective-origin</strong> afeta os eixos X e Y do elemento filho.</p>
<p><a href="http://tableless.github.com/exemplos/css3d/cardflip/propriedade-perspective.html">Veja um exemplo com dois elementos</a>: um com pouca perspectiva e outra com muita perspectiva. </p>
<h3>CSS 3D Transforms</h3>
<p>Se você ainda não leu sobre CSS Transforms você pode <a href="http://tableless.com.br/introducao-ao-css-animation/" title="Introdução ao CSS Animation">ler algo aqui</a> e <a href="http://tableless.github.com/exemplos/csstransforms/">ver em ação aqui</a>. As propriedades são praticamente iguais, mas aplicadas para os princípios de 3D e não 2D.</p>
<p>Você deve estar acostumado a trabalhar com os eixos X e Y no CSS padrão. No CSS 3D podemos manipular também o eixo Z, que representa a profundidade.<br />
<a href="http://tableless.github.com/exemplos/css3d/cardflip/propriedade-transform.html">Veja um exemplo utilizando os valores <strong>rotateY, rotateX e translateZ</strong></a>. Perceba que no <strong>translateZ</strong> eu utilizei valores negativos e positivos. Quando utilizo o valor negativo, o objeto fica &#8220;mais longe&#8221;, se coloco valores positivos, o objeto fica &#8220;mais perto&#8221;.</p>
<p>Abaixo segue uma imagem do resultado do exemplo:<br />
<a href="http://tableless.github.com/exemplos/css3d/cardflip/propriedade-transform.html"><img src="http://tableless.com.br/wp-content/uploads/2011/12/img-transform3d.png" alt="" title="img-transform3d" width="801" height="706" class="alignnone size-full wp-image-4795" /></a></p>
<p>Nós podemos utilizar também alguns atalhos para estes valores onde podemos definir as três dimensões de uma vez:</p>
<ul>
<li>translate3d(x,y,z)</li>
<li>scale3d(x,y,z)</li>
<li>rotate3d(x,y,z,angle)</li>
</ul>
<p>Muito importante: ao utilizar as propriedades resumidas, os browsers ativam automaticamente a aceleração por hardware no Safari para que as animações tenham uma melhor performance. </p>
<h2>Fazendo o efeito de Card Flip</h2>
<p>O efeito de Card Flip é muito conhecido entre os usuários de iPhone. Para ter ideia de como é o efeito <a href="http://tableless.github.com/exemplos/css3d/cardflip/cardflip.html" title="Exemplo de efeito card flip com CSS 3 3D" target="_blank">veja o exemplo final</a>.</p>
<p>A estrutura HTML é esta:</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 /></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;section <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;geral&quot;</span>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;carta&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;figure <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;frente&quot;</span>&gt;&lt;<a href="http://december.com/html/4/element/img.html"><span style="color: #000000; font-weight: bold;">img</span></a> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;card-front.jpg&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span>figure&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;figure <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;atras&quot;</span>&gt;&lt;<a href="http://december.com/html/4/element/img.html"><span style="color: #000000; font-weight: bold;">img</span></a> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;card-back.jpg&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span>figure&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span></div></td></tr></tbody></table></div>
<p>O elemento <i>.geral</i> é onde iniciaremos o ambiente 3D. O elemento <i>.carta</i> age como container dos objetos 3D. Cada face da carta está separada por um elemento <strong>figure</strong>, com uma imagem.</p>
<p>Para começar, precisamos aplicar a perspectiva para o elemento <i>.geral</i> iniciar o espaço 3D.</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 /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">.geral { <br />
&nbsp; &nbsp; width: 200px;<br />
&nbsp; &nbsp; height: 293px;<br />
&nbsp; &nbsp; position: relative;<br />
&nbsp; &nbsp; margin:10% auto 0;<br />
&nbsp; &nbsp; -webkit-perspective: 500;<br />
}</div></td></tr></tbody></table></div>
<p>Defini uma largura e altura, coloquei um <strong>position: relative;</strong> para que os elementos dentro dele sejam posicionados se referenciando por ele. Coloquei uma margem só para separá-lo do topo do body a fim de conseguirmos ver melhor os efeitos.<br />
Por fim, coloquei a propriedade <strong>-webkit-perspective: 500;</strong> para aplicarmos o efeito 3D. O valor de 500 faz uma boa perspectiva.</p>
<p>Agora definiremos as dimensões da carta e suas propriedades.</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 /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">.carta {<br />
&nbsp; width: 100%;<br />
&nbsp; height: 100%;<br />
&nbsp; position: absolute;<br />
&nbsp; -webkit-transition: -webkit-transform 1s;<br />
}</div></td></tr></tbody></table></div>
<p>Largura e altura precisam ser de 100% para definir a área que o 3D irá aplicar. O <strong>position: absolute;</strong> é necessário para que as cartas fiquem relativas ao elemento <i>.geral</i>. A propriedade <strong>-webkit-transition: -webkit-transform 1s;</strong> define o tempo de transição do efeito, neste caso ele vai durar 1 segundo. </p>
<p>Formatando as cartas:</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"><span style="color: #6666ff;">.carta</span> figure <span style="color: #00AA00;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">block</span><span style="color: #00AA00;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">;</span><br />
&nbsp; -webkit-backface-<span style="color: #000000; font-weight: bold;">visibility</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">hidden</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>Vamos direto para a propriedade <strong>-webkit-backface-visibility: hidden;</strong> já que as outras dispensam comentários. Essa propriedade faz com que a face de trás da carta não apareça e nem se sobreponha no momento do efeito.<br />
E finalmente, para fazer com que a parte de trás da carta apareça no verso correto, nós temos que rotacioná-la.</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"><span style="color: #6666ff;">.atras</span><span style="color: #00AA00;">&#123;</span>-webkit-transform<span style="color: #00AA00;">:</span> rotateY<span style="color: #00AA00;">&#40;</span>180deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>E feito se completa com o trigger para fazer a animação acontecer. Nesse caso farei com um hover no elemento <i>.carta</i>, onde iremos rotacioná-lo em -180 graus.</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 /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6666ff;">.carta</span><span style="color: #3333ff;">:hover </span><span style="color: #00AA00;">&#123;</span><br />
&nbsp; -webkit-transform<span style="color: #00AA00;">:</span> rotateY<span style="color: #00AA00;">&#40;</span>-180deg<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>E Voilá! Se quiser brincar um pouco, modifique a origem da transformação com a propriedade <strong>-webkit-transform-origin</strong>. Adicionando essa linha, a transformação acontece para a direita em vez de ser pelo centro, como é o padrã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 /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6666ff;">.carta</span><span style="color: #3333ff;">:hover </span><span style="color: #00AA00;">&#123;</span><br />
&nbsp; -webkit-transform<span style="color: #00AA00;">:</span> rotateY<span style="color: #00AA00;">&#40;</span>-180deg<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
&nbsp; -webkit-transform-origin<span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">right</span> <span style="color: #993333;">center</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<h3>3Drollover.css</h3>
<p>Encontrei uma biblioteca muito interessante que nos permite fazer estes efeitos de forma fácil e de acordo com os princípios do OOCSS. É necessário apenas estruturar da forma correta e trocar as classes de acordo com o efeito que você quer fazer. Coisa muito simples.</p>
<p>O nome da biblioteca é <a href="https://github.com/codepo8/3drollovers.css">3Drollover</a>. Clone no seu computador e divirta-se. Dá para usar em projetos facilmente. Veja abaixo um vídeo que mostra os efeitos:</p>
<p><span style="text-align:center; display: block;"><a href="http://tableless.com.br/introducao-ao-css-3d-flip-card/"><img src="http://img.youtube.com/vi/QcCW_1FkJ9o/2.jpg" alt="" /></a></span></p>
<h3>Para ler mais</h3>
<ul>
<li>Leia a <a href="http://dev.w3.org/csswg/css3-3d-transforms/">documentação oficial do W3C sobre CSS 3D Transforms</a>.</li>
<li>Pessoal do <a href="http://www.webkit.org/blog/386/3d-transforms/">WebKit explicando sobre outras propriedades do CSS 3D Transforms</a>.</li>
<li>Você pode <a href="http://desandro.github.com/3dtransforms/examples/perspective-03.html">brincar um pouco com as propriedades do CSS 3D aqui</a>.</li>
</ul>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/css3-modulo-template-layout/" title="CSS3 &#8211; Módulo Template Layout">CSS3 &#8211; Módulo Template Layout</a></li><li><a href="http://tableless.com.br/css3-animation-keyframe/" title="CSS3 &#8211; Animation e regra keyframe">CSS3 &#8211; Animation e regra keyframe</a></li><li><a href="http://tableless.com.br/css3-abas-com-a-pseudo-classe-target/" title="CSS3 &#8211; Abas com a pseudo-classe :target">CSS3 &#8211; Abas com a pseudo-classe :target</a></li><li><a href="http://tableless.com.br/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/oocss-ou-css-do-jeito-certo/" title="OOCSS ou CSS do jeito certo">OOCSS ou CSS do jeito certo</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/introducao-ao-css-3d-flip-card/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Convencimento e educação = liberdade</title>
		<link>http://tableless.com.br/convencimento-e-educacao-liberdade/</link>
		<comments>http://tableless.com.br/convencimento-e-educacao-liberdade/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 14:00:57 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=4802</guid>
		<description><![CDATA[A obrigação do desenvolvedor client-side é educar e convencer. Porque ninguém gosta de perder tempo e dinheiro. ]]></description>
			<content:encoded><![CDATA[<p>Os websites precisam parecer iguais em todos os browsers? <a href="http://dowebsitesneedtolookexactlythesameineverybrowser.com/">Claro que não</a>. Aí você fala assim: &#8220;Diz isso para meu chefe ou meu cliente.&#8221; E eu digo sim. Mas aí eu estaria fazendo o seu trabalho.</p>
<p>Uma das obrigações atuais do desenvolvedor client-side é educar e convencer. E não venha me dizer que isso é quase impossível porque eu já sei disso. Mas ninguém disse que é totalmente impossível, correto? Você vai encontrar muitos obstáculos, tenha certeza disso, mas você vai conseguir mudar a web brasileira e a do mundo se fizer isso e fizer bem feito.</p>
<p>Não estou dizendo para você chegar de supetão, colocar a mão na testa do seu chefe/cliente e dizer: &#8220;Sai desse corpo IE porque ele não te pertence!!&#8221; Isso seria legal de assistir, mas você seria certamente demitido. Estou dizendo para você se armar. Se municie de números, estatísticas, quanto o pessoal da sua área está trabalhando mais para fazer o projeto funcionar em browsers antigos e quanto de dinheiro está provavelmente sendo perdido ao fazer isso.<br />
A conta é simples: calcule o seu valor hora e o valor hora dos seus colegas de projeto. Coloque impostos, coloque tempo extra etc&#8230; Depois multiplique esse valor pela quantidade de horas que vocês gastaram para arrumar layouts em browsers antigos, quanto tempo vocês gastaram para deixar tudo exatamente igual em todos os browsers. Inclue o tempo gasto para recortar imagens, procurar plugins milagreiros em javascript, o tempo que você passou solucionando os problemas de estruturação e etc, tudo isso deve contar no número final das horas. Faça um dossiê. Não precisa ser muito longo, mas precisa ser exato! Precisa conter todas as dificuldades que vocês tiveram que resolver para tentar deixar os browsers com os mesmos efeitos que os browsers novos. Depois disso tudo, em uma hora apropriada apresente para o seu chefe.</p>
<p>Para ajudar fizemos <a href="http://tableless.com.br/browsers-antigos-guerra-contra-o-terror/" title="PDF – Browsers antigos: guerra contra o terror">um PDF que explica</a> exatamente quais as soluções vocês precisam adotar e alguns outros assuntos que seu chefe precisa saber para entender melhor esse conceito todo. Você precisa entender esse é um caminho longo. Você não (ou vai) convencer seu chefe/cliente de primeira. Isso depende muito do seu perfil e do perfil deles. Mas com certeza, se você levar informações relevantes e maduras as chances serão grandes, já que ninguém gosta de perder dinheiro.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/experiencia-deve-ter-comeco-meio-e-fim/" title="Experiência deve ter começo, meio e fim">Experiência deve ter começo, meio e fim</a></li><li><a href="http://tableless.com.br/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/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-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/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></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/convencimento-e-educacao-liberdade/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

