<?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/tag/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>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>

