<?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>Front-End Zen &#187; html</title>
	<atom:link href="http://blog.inspiroh.com/tag/html/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.inspiroh.com</link>
	<description>Equilibrio y Control en el desarrollo web</description>
	<lastBuildDate>Sun, 06 Jun 2010 07:41:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Botones con imagen y con efecto rollover</title>
		<link>http://blog.inspiroh.com/botones-con-imagen-efecto-rollover/</link>
		<comments>http://blog.inspiroh.com/botones-con-imagen-efecto-rollover/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 14:08:03 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Front-End]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[nivel-medio]]></category>
		<category><![CDATA[oop-css]]></category>

		<guid isPermaLink="false">http://blog.inspiroh.com/?p=10</guid>
		<description><![CDATA[Nivel: medio
Para la creación de botones en un proyecto web, lo normal es recomendar la creación de botones con texto generado (mejor mantenimiento, mejor SEO) y que sean flexibles (mejor mantenimiento, accesible).  Pero cada proyecto es un mundo y puede ser que en alguno nos veamos forzados a optar por la utilización de imágenes como [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;">Nivel: medio</p>
<p>Para la creación de botones en un proyecto web, lo normal es recomendar la creación de botones con texto generado (mejor mantenimiento, mejor SEO) y que sean flexibles (mejor mantenimiento, accesible).  Pero cada proyecto es un mundo y puede ser que en alguno nos veamos forzados a optar por la utilización de imágenes como botones.</p>
<p>Evidentemente, como en casi todo, existen diferentes soluciones a esto. Yo voy a exponer una solución que he aplicado en persona.</p>
<h3>Breve intro a la etiqueta HTML: button</h3>
<p>Una etiqueta HTML que me gusta mucho es el <strong>&lt;button&gt;</strong>. Es una etiqueta que lleva mucho tiempo entre nosotros (desde HTML 4.01) pero que hasta hace relativamente poco no lo he empezado a usar en serio en mis proyectos. Antes lo que siempre usaba para los botones de formularios era el típico <em>input</em>:</p>
<pre><code class="html">// antigua forma: input tradicional
&lt;input type="button" value="Enviar" /&gt;
// nueva forma: button
&lt;button type="button"&gt;Enviar&lt;/button&gt;
</code></pre>
<p>Ambas formas son equivalentes y correctas, pero la ventaja del <em>button </em>es que es más manejable mediante CSS y permite jugar más con ella. La desventaja que tiene es que no es 100% compatible ya que solo está disponible a partir de HTML 4.01. De todas formas, hoy en día más del 95% de usuarios utiliza navegadores que soportar HTML 4.01 o superior por lo que recomiendo el uso de esta etiqueta.</p>
<h3>La imagen y el botón</h3>
<p>Lo primero que se me ocurriría hacer es:</p>
<pre><code class="html">
&lt;input src="RUTA_IMG" type="image" /&gt;
// o con button, que me gusta mas <img src='http://blog.inspiroh.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
&lt;button&gt;&lt;img src="RUTA_IMG" alt="" /&gt;&lt;/button&gt;
</code></pre>
<p>Pero como tenemos que aplicar un efecto rollover en el botón, el método más optimizado es usando el CSS y tratar la imagen como imagen de fondo en el botón. Haciendo esto no necesitaremos tirar de javascript, solo necesitaremos el CSS. Por lo tanto prepararemos algo parecido a esto:</p>
<p><span id="more-10"></span></p>
<pre><code>&lt;button class="btn btn-enviar"&gt;Enviar&lt;/button&gt;
</code></pre>
<p>Aplicaremos también la <strong>técnica de sprites</strong> (que explicaré un día de estos) para optimizar el tema de imágenes. Si no te suena esta técnica,  viene a ser la unificación de las imágenes para reducir el número de peticiones del servidor y agilizar la carga de imágenes. En nuestro ejemplo crearemos la imagen del botón de la siguiente manera:</p>
<p><img class="alignnone size-full wp-image-11" title="btn-enviar.gif" src="http://blog.inspiroh.com/wp-content/uploads/2009/04/btn-enviar.gif" alt="btn-enviar.gif" width="76" height="50" /></p>
<p>Y el CSS para el botón:</p>
<pre><code class="css">button {border:0}
.btn  {text-indent:-9999px;cursor:pointer;}
.btn-enviar {background:transparent url(/img/btn-enviar.gif) no-repeat 0 0;width:76px;height:25px}
.btn-devolver:hover {background-position:0 -25px;}
</code></pre>
<p>Observar 4 cosas:</p>
<ul>
<li>En el estilo <em>.btn-enviar</em> definimos la imagen del botón como <em>background</em>.</li>
<li>En este ejemplo nos interesa poner el texto dentro de la imagen (aunque habría que intentar evitar esto y conseguir que el texto sea generado). Para tales casos, observamos que en el estilo <em>.btn</em> he definido un <em>text-indent</em> negativo, para que la palabra <em>Enviar </em>que hemos puesto no se muestre y no se superponga a la imagen de fondo. Hago esto porque interesa mantener la palabra &#8220;Enviar&#8221; en el código por temas de accesibilidad y de SEO. La <strong>técnica del text-indent negativo </strong>es una técnica muy usada para las imágenes con texto, para no perder la accesibilidad y las palabras clave. En otro artículo profundizaré más sobre esta técnica.</li>
<li>Gracias a la técnica de los sprites, nos bastará introducir la línea 3  para crear el efecto rollover.</li>
<li>Podríamos habernos ahorrado el estilo <em>.btn</em> pero si tenemos en mente el concepto de <strong>OOP-CSS</strong> (Programación Orientada a Objetos aplicado al CSS), veremos que es mejor definirlo de esta forma, sobretodo si tenemos más botones en la web (que es lo más probable).  También dedicaré especial atención a este concepto en el futuro, porque actualmente es un concepto clave que influye en mi filosofía parar afrontar como Front-End mis proyectos.</li>
</ul>
<p>Y ya está. Ya hemos definido una imagen como botón, 100% accesible, con rollover y usando solamente CSS.</p>
<h3>Bienvenido al mundo con IE6</h3>
<p>Si pruebas de aplicar este ejemplo y visualizarlo en IE6, tendrás la &#8220;grata&#8221; sorpresa de ver que tu botón no aparecerá. Este problema lo causa el text-indent negativo, que no solo desplaza el texto fuera de la parte visible, sino que desplaza el botón entero. Por suerte, hay solución para <span style="text-decoration: line-through;">todo </span>casi todo y hay un<strong> IE6 fix</strong> para resolver este caso en concreto. Bastará con agregar un display:block al button y habremos solucionado el problema.</p>
<pre><code class="css">
.btn  {text-indent:-9999px;cursor:pointer;<strong>display:block</strong>}
</code></pre>
<p>Bueno, espero que mi primer artículo/tutorial explicando una técnica de Front te haya resultado interesante. Es posible que haya mezclado muchos conceptos distintos en un mismo artículo haciendo menos claro el ejemplo. Intentaré hacerlo mejor la siguiente vez.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.inspiroh.com/botones-con-imagen-efecto-rollover/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
