<?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>Grifo &#187; CSS</title>
	<atom:link href="http://www.grifotecnologia.com.br/blog/category/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.grifotecnologia.com.br/blog</link>
	<description>Desenvolvimento client-side com inteligência.</description>
	<lastBuildDate>Mon, 31 Oct 2011 21:23:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>GrifoCast 02 &#8211; HTML5</title>
		<link>http://www.grifotecnologia.com.br/blog/grifo/grifocast-02-html5/</link>
		<comments>http://www.grifotecnologia.com.br/blog/grifo/grifocast-02-html5/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 18:49:50 +0000</pubDate>
		<dc:creator>Filipe Medina</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Grifo]]></category>
		<category><![CDATA[GrifoCast]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://www.grifotecnologia.com.br/blog/?p=334</guid>
		<description><![CDATA[Chegamos ao 2º episódio do GrifoCast. Hoje falaremos sobre HTML5 e a forma que utilizamos ele no nosso dia-a-dia. Falaremos também de CSS3Pie e Less. Agora contamos com melhores equipamentos e a edição está mais direta e com menos cortes. Mas, é claro, ainda temos muito a melhorar! Portanto continuem nos enviando críticas, sugestões, dúvidas,]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.grifotecnologia.com.br/blog/grifo/grifocast-02-html5/"><em>Clique aqui para assistir o vídeo inserido.</em></a></p>
<p>Chegamos ao 2º episódio do GrifoCast. Hoje falaremos sobre HTML5 e a forma que utilizamos ele no nosso dia-a-dia. Falaremos também de <a href="http://css3pie.com">CSS3Pie</a> e <a href="https://github.com/cloudhead/less.js/">Less</a>.</p>
<p>Agora contamos com melhores equipamentos e a edição está mais direta e com menos cortes. Mas, é claro, ainda temos muito a melhorar! Portanto continuem nos enviando críticas, sugestões, dúvidas, sua opinião e é claro, temas que você acha importantes para serem discutidos nos próximos episódios.</p>
<p>E por favor, compartilhem com seus amigos e colegas de trabalho o GrifoCast para melhorarmos cada vez mais.</p>
<p><strong>Edição:</strong><br />
Filipe Medina &#8211; <a title="Twitter de Filipe Medina" href="http://www.twitter.com/filipemedina" target="_blank">@filipemedina</a></p>
<p><strong>Participantes:</strong><br />
Renatho Rosa &#8211; <a title="Twitter de Renatho Rosa" href="http://www.twitter.com/renatho" target="_blank">@renatho</a><br />
Ricardo Tomasi &#8211; <a title="Twitter de Ricardo Tomasi" href="http://www.twitter.com/ricardobeat" target="_blank">@ricardobeat</a><br />
Marcelo Oliveira &#8211; <a title="Twitter de Marcelo Oliveira" href="http://www.twitter.com/askoth" target="_blank">@askoth</a><span id="more-334"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grifotecnologia.com.br/blog/grifo/grifocast-02-html5/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Gradientes no Internet Explorer 9</title>
		<link>http://www.grifotecnologia.com.br/blog/css/gradientes-no-internet-explorer-9/</link>
		<comments>http://www.grifotecnologia.com.br/blog/css/gradientes-no-internet-explorer-9/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 21:40:56 +0000</pubDate>
		<dc:creator>Ricardo Tomasi</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[ie9]]></category>
		<category><![CDATA[svg]]></category>

		<guid isPermaLink="false">http://www.grifotecnologia.com.br/blog/?p=324</guid>
		<description><![CDATA[Aqui na Grifo já estamos preparando nossos projetos para o IE9, usando o Beta/Platform Preview. É muito bom poder usar seletores CSS3, border-radius, shadow e tudo o mais. 

Mas ainda falta uma peça crucial: background gradients. Não há menção pela Microsoft de suporte futuro a essa funcionalidade no IE9, o que nos preocupa bastante. Estamos usando o <a href="http://css3pie.com/">CSS3Pie</a> em alguns projetos, que nos permite definir sombras, border radius e gradientes no CSS, que são renderizados via VML no IE 6, 7 e 8. Como o IE9 não suporta mais VML, ficamos de mão abanando.]]></description>
			<content:encoded><![CDATA[<p>Aqui na Grifo já estamos preparando nossos projetos para o IE9, usando o Beta/Platform Preview. É muito bom poder usar seletores CSS3, border-radius, shadow e tudo o mais.</p>
<p>Mas ainda falta uma peça crucial: background gradients. Não há menção pela Microsoft de suporte futuro a essa funcionalidade no IE9, o que nos preocupa bastante. Estamos usando o <a href="http://css3pie.com/">CSS3Pie</a> em alguns projetos, que nos permite definir sombras, border radius e gradientes no CSS, que são renderizados via VML no IE 6, 7 e 8. Como o IE9 não suporta mais VML, ficamos de mão abanando.</p>
<p>Sorte nossa é que a versão 9 suporta SVG. A solução que encontramos utiliza CSS, SVG e um script server-side: geramos um gradiente dinamicamente a partir de parâmetros passados no CSS. O resultado no CSS é meio gordo mas funciona em praticamente todos os browsers, do IE6 ao Opera. Veja o código abaixo:</p>
<p>(gradient.php)</p>
<pre class="brush: php; light: true; wrap-lines: false;">
&lt;?php
	header( 'Content-type: image/svg+xml' );
	function _get($k){	echo $_GET[$k] ? $_GET[$k] : 'fff';	}
?&gt;
&lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&gt;
&lt;svg width=&quot;100%&quot; height=&quot;100%&quot; version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
	&lt;defs&gt;
		&lt;linearGradient id=&quot;grad&quot; x1=&quot;0%&quot; y1=&quot;0%&quot; x2=&quot;0%&quot; y2=&quot;100%&quot;&gt;
			&lt;stop offset=&quot;0%&quot; style=&quot;stop-color:#&lt;?php _get('from') ?&gt;; stop-opacity:1&quot;/&gt;
			&lt;stop offset=&quot;100%&quot; style=&quot;stop-color:#&lt;?php _get('to') ?&gt;; stop-opacity:1&quot;/&gt;
		&lt;/linearGradient&gt;
	&lt;/defs&gt;
	&lt;rect width=&quot;100%&quot; height=&quot;100%&quot; fill=&quot;url(#grad)&quot; /&gt;
&lt;/svg&gt;
</pre>
<p>CSS:</p>
<pre class="brush: css;">
#xis {
  background: #dbdbdb; // fallback para browsers sem suporte
  background: url(gradient.php?from=ededed&amp;to=d8d8d8); // IE9, Opera
  background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ededed), to(#d8d8d8)); //Chrome, Safari, Mobile Webkit
  background: -moz-linear-gradient(top, #ededed, #d8d8d8); // Firefox
  -pie-background: linear-gradient(#ededed, #d8d8d8); // IE 6-8
  behavior: url(../js/PIE.php);
}
</pre>
<p>Uma baita mão escrever tudo isso só pra um gradiente, não? Por isso usamos o <a href="https://github.com/cloudhead/less.js">less.js</a> no desenvolvimento. Com esse mixin:</p>
<pre class="brush: css; light: true;">
.gradient(@from, @to){
	background: (@from+@to)/2;
	@svgG: e(%('url(gradient.php?from=%d&amp;to=%d)', @from, @to));
	@svgGradient: e(`this.svgG.toJS().replace(/#/g, '')`); //svg IE9
	background: @svgGradient;
	background: e(%('-webkit-gradient(linear, 0% 0%, 0% 100%, from(%d), to(%d))', @from, @to));
	background:	e(%('-moz-linear-gradient(top, %d, %d)', @from, @to));
	-pie-background: e(%('linear-gradient(%d, %d)', @from, @to));
	.pie();
}
</pre>
<p>Só precisamos escrever isso no CSS:</p>
<pre class="brush: css; light: true;">
#xis {
  .gradient(#fcfcfc, #999999);
}
</pre>
<p>Exemplo <a href="http://www.grifotecnologia.com.br/blog/examples/svg-gradient/CSS_SVG.html">aqui</a>.</p>
<p>A limitação no momento é que só funcionam gradientes lineares verticais, mas é só alterar o código server-side que dá pra gerar qualquer tipo de gradiente.</p>
<p>Esperamos que a dica seja útil <img src='http://www.grifotecnologia.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.grifotecnologia.com.br/blog/css/gradientes-no-internet-explorer-9/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Input File &#8211; Formulários personalizados</title>
		<link>http://www.grifotecnologia.com.br/blog/css/input-file-formularios-personalizados/</link>
		<comments>http://www.grifotecnologia.com.br/blog/css/input-file-formularios-personalizados/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 05:00:58 +0000</pubDate>
		<dc:creator>Renatho</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Formulário]]></category>
		<category><![CDATA[input file]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.grifotecnologia.com.br/blog/?p=254</guid>
		<description><![CDATA[Vamos para o último post da série formulários personalizados. Já mostramos como personalizar o campos de radio e checkbox e também as combobox. Hoje iremos mostrar como personalizar um campo de arquivo que é o mais simples. As duas grandes sacadas para a personalização do input file são as seguintes: Utilizaremos o campo com opacidade]]></description>
			<content:encoded><![CDATA[<p>Vamos para o último post da série formulários personalizados. Já mostramos como personalizar o campos de <a href="http://www.grifotecnologia.com.br/blog/css/radio-e-checkbox-formularios-personalizados/">radio e checkbox</a> e também as <a title="Combobox" href="http://www.grifotecnologia.com.br/blog/css/combobox-formularios-personalizados/">combobox</a>. Hoje iremos mostrar como personalizar um campo de arquivo que é o mais simples.</p>
<p>As duas grandes sacadas para a personalização do input file são as seguintes:</p>
<ul>
<li>Utilizaremos o campo com opacidade 0 por cima do campo falso, assim como nos outros casos de personalização de formulário;</li>
<li>Se você já tentou fazer esse teste, provavelmente teve problemas para aumentar o tamanho do campo conforme o layout que está trabalhando. A forma de fazer isto é aumentando o tamanho da fonte.</li>
</ul>
<p>Vamos montar um exemplo passo a passo e no final disponibilizaremos o link com o exemplo completo. Não trapaceie, monte o exemplo com suas próprias mãos e depois veja o link.</p>
<p>Começamos pelo HTML:</p>
<pre class="brush: xml;">
&lt;div class=&quot;inputFile&quot;&gt;
	&lt;span&gt;Selecione um arquivo&lt;/span&gt;
	&lt;input type=&quot;file&quot; name=&quot;arquivo&quot; id=&quot;arquivo&quot; /&gt;
&lt;/div&gt;
</pre>
<p>O span será utilizado para mostrar o nome do arquivo selecionado.</p>
<p>Agora através do CSS vamos posicionar o input sobre o span e ocultá-lo com opacidade. Desta forma, quando o usuário clicar no span (que é o que estará visível), na verdade estará clicando no input.</p>
<pre class="brush: css;">
.inputFile {
	width: 185px;
	height:40px;
	position: relative;
	overflow: hidden;
	background: red;
}
.inputFile span {
	display: block;
	position: absolute;
}
.inputFile input {
	position: absolute;
	right: 0;
	z-index: 2;
	font-size: 100px; /* Aumenta tamanho do campo */
	opacity: 0;
	filter: alpha(opacity=0);
}
</pre>
<p>Note a propriedade font-size: 100px no input. Isto é utilizado para aumentar o tamanho do campo que não respeita as propriedades width e height em alguns browsers.</p>
<p>Agora só falta exibir no span o valor selecionado no input. Isto é feito com poucas linhas utilizando jquery:</p>
<pre class="brush: jscript;">
$(&quot;#arquivo&quot;).change(function() {
	$(this).prev().html($(this).val());
});
</pre>
<p>E está pronto. Simples não? Conseguiu se segurar e montar antes de abrir o link de exemplo? Então agora acesse <a href="../../../code/formulario-personalizado/input-file.html" target="_blank">personalização de input file</a></p>
<p>As técnicas mostradas foram testadas em IE6 e superiores, Firefox  3.6, Chrome e Safari. Qualquer problema que encontrarem em outras  versões de browser, mobile ou outros do gênero nos avisem para tentarmos  aprimorar a técnica. Sugestões de melhoria também são bem-vindas.</p>
<p>Abraços e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grifotecnologia.com.br/blog/css/input-file-formularios-personalizados/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Combobox – Formulários personalizados</title>
		<link>http://www.grifotecnologia.com.br/blog/css/combobox-formularios-personalizados/</link>
		<comments>http://www.grifotecnologia.com.br/blog/css/combobox-formularios-personalizados/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 20:05:30 +0000</pubDate>
		<dc:creator>Renatho</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Combobox]]></category>
		<category><![CDATA[Formulário]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Select]]></category>

		<guid isPermaLink="false">http://www.grifotecnologia.com.br/blog/?p=96</guid>
		<description><![CDATA[Dando sequencia à série de Posts de formulários personalizados, hoje falaremos do combobox (select). Esta é outra técnica que não perde acessibilidade, não perde usabilidade e utiliza javascript não-obstrutivo. O resultado final do que explicaremos aqui será um select oculto com um span o sobrepondo e exibindo o valor. Ao clicar no select as opções]]></description>
			<content:encoded><![CDATA[<p>Dando sequencia à série de Posts de formulários personalizados, hoje falaremos do combobox (select). Esta é outra técnica que não perde acessibilidade, não perde usabilidade e utiliza <a title="Javascript não-obstrutivo" href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript" target="_blank">javascript não-obstrutivo</a>.</p>
<p>O resultado final do que explicaremos aqui será um select oculto com um span o sobrepondo e exibindo o valor. Ao clicar no select as opções dele são exibidas normalmente da forma nativa.</p>
<p>O único problema desta técnica é que não funciona no <a title="IE6 funeral" href="http://ie6funeral.com/" target="_blank">IE6</a> (segundo o Jeremias: &#8220;<a title="IE IE IE é  safado tem q morrer" href="http://www.youtube.com/watch?v=2hjnbraEL4A#t=0m30s" target="_blank">IE IE IE é  safado tem q morrer</a>&#8220;), pois ele (<span style="text-decoration: line-through;">browser burro</span>) não suporta opacidade no select, então para <a title="IE6 funeral" href="http://ie6funeral.com/" target="_blank">IE6</a> podemos apenas colocar uma cor de fundo no select para não destoar muito do desenho &#8211; Isto chama-se <a title="Graceful Degradation" href="http://www.css3.info/graceful-degradation/" target="_blank">Graceful Degradation</a> (que por sinal também merece um futuro Post).</p>
<p>Como é de praxe, começamos pelo HTML:</p>
<pre class="brush: xml;">
&lt;div class=&quot;styleCombobox&quot;&gt;
  &lt;select title=&quot;Selecione&quot;&gt;
    &lt;option value=&quot;1&quot;&gt;Opção 1&lt;/option&gt;
    &lt;option value=&quot;2&quot;&gt;Opção 2&lt;/option&gt;
    &lt;option value=&quot;3&quot;&gt;Opção 3&lt;/option&gt;
  &lt;/select&gt;
&lt;/div&gt;
</pre>
<p>Utilizamos uma div encapsulando o select, pois através do script vamos inserir um span antes do select exibindo o valor selecionado. No atributo title podemos inserir um valor inicial (valor que não precisa aparecer nas opções da combobox &#8211; ex.: &#8220;Selecione uma opção&#8221;).</p>
<p>Agora vamos criar um CSS para os estilos da nossa combobox conforme o desenho. No nosso exemplo colocaremos apenas um background cinza para não sair do foco do post.</p>
<p>Além dos estilos do desenho, vamos deixar o select sem opacidade &#8211; Os browsers ocultam somente a parte do valor do select, então quando clicarmos nele as opções serão exibidas.</p>
<pre class="brush: css;">
.styleCombobox {
  width:200px;
  background:gray;
}
.styleCombobox span {
  position:absolute;
}
.styleCombobox select {
  width:100%;
  opacity:0;
  filter:alpha(opacity=0);
}
</pre>
<p>No script que estamos disponilibizando também colocamos a funcionalidade de foco para o select, então precisamos criar outro estilo para ele:</p>
<pre class="brush: css;">
.comboboxFocus {
  border:dotted 1px #CCC;
}
</pre>
<p>Como comentado no início do post, no caso do <a title="IE6 funeral" href="http://ie6funeral.com/" target="_blank">IE6</a> você pode criar hacks para alterar as cores do select para ficar mais próximo do desenho, mas não entraremos no mérito.</p>
<p>Agora você precisa baixar o plugin desenvolvido pela Grifo neste link <a title="styleCombobox" href="http://www.grifotecnologia.com.br/code/formulario-personalizado/jquery.styleCombobox.js" target="_blank">styleCombobox</a> e importá-lo na sua página. A chamada fica dessa forma:</p>
<pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot;&gt;
  $(&quot;.styleCombobox select&quot;).styleCombobox({
    classFocus:&quot;comboboxFocus&quot;
  });
&lt;/script&gt;
</pre>
<p>Para usuários com javascript desabilitado, vamos exibir os selects normais do browser com o <a title="Tag noscript" href="http://www.w3schools.com/tags/tag_noscript.asp" target="_blank">noscript</a>:</p>
<pre class="brush: xml;">
&lt;noscript&gt;
  &lt;style type=&quot;text/css&quot;&gt;
  .styleCombobox select {
    filter:alpha(opacity=1);
    opacity:1;
  }
  &lt;/style&gt;
&lt;/noscript&gt;
</pre>
<p>As técnicas mostradas foram testadas em IE6 (apesar de neste funcionar parcialmente) e superiores, Firefox  3.6, Chrome e Safari. Qualquer problema que encontrarem em outras  versões de browser, mobile ou outros do gênero nos avisem para tentarmos  aprimorar a técnica. Sugestões de melhoria também são bem-vindas.</p>
<p>Veja um exemplo de <a title="Personalização de Combobox" href="http://www.grifotecnologia.com.br/code/formulario-personalizado/jquery.styleCombobox.html" target="_blank">personalização de combobox</a> em  funcionamento.</p>
<p>Abraços e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grifotecnologia.com.br/blog/css/combobox-formularios-personalizados/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Radio e Checkbox &#8211; Formulários personalizados</title>
		<link>http://www.grifotecnologia.com.br/blog/css/radio-e-checkbox-formularios-personalizados/</link>
		<comments>http://www.grifotecnologia.com.br/blog/css/radio-e-checkbox-formularios-personalizados/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 17:13:12 +0000</pubDate>
		<dc:creator>Renatho</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Checkbox]]></category>
		<category><![CDATA[Formulário]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Radio]]></category>

		<guid isPermaLink="false">http://www.grifotecnologia.com.br/blog/?p=27</guid>
		<description><![CDATA[Neste post vou dar umas dicas de como personalizar campos de Radio e Checkbox, afinal os designers adoram nos sacanear. Quando terminar de ler aposto que você vai falar &#8220;como não pensei nisso antes?&#8221;, pois a solução além de super simples e óbvia, não perde acessibilidade, não perde usabilidade e foram utilizadas técnicas de javascript]]></description>
			<content:encoded><![CDATA[<p>Neste post vou dar umas dicas de como personalizar campos de Radio e Checkbox, afinal os designers adoram nos sacanear. Quando terminar de ler aposto que você vai falar &#8220;como não pensei nisso antes?&#8221;, pois a solução além de super simples e óbvia, não perde acessibilidade, não perde usabilidade e foram utilizadas técnicas de <a title="Javascript não-obstrutivo" href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript" target="_blank">javascript não-obstrutivo</a>.</p>
<p>Você já deve saber o clique em um label que referencia algum campo (Ex.: <code>&lt;label for="idDoCampo"&gt;</code>) tem a função de foco para este campo. E no caso dos checkbox e radios a função é o clique do campo (marcar / desmarcar). Esta é a essência da solução. Já começou cair a ficha né?</p>
<p>Nosso HTML será composto por uma label que encapsula o input e o texto, desta forma tudo que estiver dentro do label estará na área clicável.</p>
<p>Veja o código:</p>
<pre class="brush: xml;">

&lt;label for=&quot;radioButton1&quot;&gt;&lt;input type=&quot;radio&quot; name=&quot;radioButton&quot; id=&quot;radioButton1&quot; /&gt; Radio 1&lt;/label&gt;
&lt;label for=&quot;radioButton2&quot;&gt;&lt;input type=&quot;radio&quot; name=&quot;radioButton&quot; id=&quot;radioButton2&quot; /&gt; Radio 2&lt;/label&gt;

&lt;label for=&quot;checkbox1&quot;&gt;&lt;input type=&quot;checkbox&quot; name=&quot;checkbox&quot; id=&quot;checkbox1&quot; /&gt; Checkbox 1&lt;/label&gt;&lt;/div&gt;
&lt;label for=&quot;checkbox2&quot;&gt;&lt;input type=&quot;checkbox&quot; name=&quot;checkbox&quot; id=&quot;checkbox2&quot; /&gt; Checkbox 2&lt;/label&gt;&lt;/div&gt;
</pre>
<p>Através do CSS vamos ocultar os inputs e fazer a personalização sacana que o designer desenhou.</p>
<pre class="brush: css;">
.styleRadio input, .styleCheckbox input {
   cursor:pointer;
   filter:alpha(opacity=0);
   opacity:0;
}

.styleRadio, .styleCheckbox {
   cursor:pointer;
   height:30px;
   background:url(controls.gif) no-repeat;
}

.styleRadio {
   background-position:0 -500px;
}
.styleCheckbox {
   background-position:0 0;
}
</pre>
<p>Beleza! já tá funcionando, não está vendo ainda? Usuários cegos já, pois o código está acessível.</p>
<p>Ok, vamos deixar acessível sem screen reader também. Para isso a <a title="Grifo" href="http://www.grifotecnologia.com.br" target="_self">Grifo</a> fez um plugin do jquery <span style="text-decoration: line-through;">exclusivamente</span> para você, leitor do nosso blog. O plugin pode ser baixado neste link: <a href="http://www.grifotecnologia.com.br/code/formulario-personalizado/jquery.styleRadioCheckbox.js" target="_blank">styleRadioCheckbox</a>.</p>
<p>O plugin trabalha com a estrutura HTML que citamos acima. Você precisará criar 2 classes além da classe para estado normal dos inputs: uma classe para ele marcado e outra para o foco.</p>
<p><strong>Exemplo:</strong></p>
<pre class="brush: css;">
.inputRadioChecked {
   background-position:-500px -500px;
}
.inputCheckboxChecked {
   background-position:-500px 0;
}
.inputFocus { /* Este está genérico nos para radio e checkbox, mas também pode ser uma classe para cada */
   border:dotted 1px #CCC;
}
</pre>
<p>Agora só falta a chamada do plugin, onde passaremos por parâmetro as classes de estados criadas no passo anterior.</p>
<p>Código de chamada do plugin:</p>
<pre class="brush: jscript;">
$(&quot;input:checkbox&quot;).styleRadioCheckbox({
   classChecked:&quot;inputCheckboxChecked&quot;,
   classFocus:&quot;inputFocus&quot;
});
$(&quot;input:radio&quot;).styleRadioCheckbox({
   classChecked:&quot;inputRadioChecked&quot;,
   classFocus:&quot;inputFocus&quot;
});
</pre>
<p>Pronto. Agora tudo está funcionando! Mas espere aí, no início do post não dizia que a técnica era feita com javascript não-obstrutivo? Desativando o javascript não está funcionando. &#8211; Pergunta pro usuário cego se não está funcionando, aposto que pra ele tá que é uma beleza. Mas ok, vamos achar uma solução para ficar acessível sem screen reader de novo.</p>
<p>Para solucionar este problema iremos inserir uma tag <a title="Tag noscript" href="http://www.w3schools.com/tags/tag_noscript.asp" target="_blank">noscript</a> que vai exibir os inputs novamente:</p>
<pre class="brush: xml;">
&lt;noscript&gt;
  &lt;style type=&quot;text/css&quot;&gt;
  .styleCheckbox input, .styleRadio input {
     filter:alpha(opacity=1);
     opacity:1;
  }
  &lt;/style&gt;
&lt;/noscript&gt;
</pre>
<p>As técnicas mostradas foram testadas em IE6 e superiores, Firefox 3.6, Chrome e Safari. Qualquer problema que encontrarem em outras versões de browser, mobile ou outros do gênero nos avisem para tentarmos aprimorar a técnica. Sugestões de melhoria também são bem-vindas.</p>
<p>Veja um exemplo de <a href="http://www.grifotecnologia.com.br/code/formulario-personalizado/jquery.styleRadioCheckbox.html" target="_blank">personalização de radio e checkbox</a> em funcionamento.</p>
<p>Abraços e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grifotecnologia.com.br/blog/css/radio-e-checkbox-formularios-personalizados/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

