<?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; Checkbox</title>
	<atom:link href="http://www.grifotecnologia.com.br/blog/tag/checkbox/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>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>

