<?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>CSSLab</title>
	<atom:link href="http://www.csslab.cl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.csslab.cl</link>
	<description>Un laboratorio de ideas para la web en español</description>
	<lastBuildDate>Thu, 29 Jul 2010 14:21:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=4622</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Háptica en iOS</title>
		<link>http://www.csslab.cl/2010/07/28/haptica-en-ios/</link>
		<comments>http://www.csslab.cl/2010/07/28/haptica-en-ios/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 21:27:46 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=616</guid>
		<description><![CDATA[

iPad, iPad, iPad&#8230; otro nuevo dispositivo para cautivar a los &#225;vidos consumidores, pero que por lo menos trae interesantes nuevas tecnolog&#237;as. Aparte de que crean que es un iPhone gigante, tiene varias innovaciones que permiten darle mucha rienda a la imaginaci&#243;n de los creadores de contenido espec&#237;fico para esta plataforma. Una de las que m&#225;s [...]]]></description>
			<content:encoded><![CDATA[<div class="haptica">
<img src="http://www.csslab.cl/wp-content/uploads/2010/07/ipad.png" alt="CSSLab: iPad" width="195" height="240" align="left" /></p>
<p><strong>iPad</strong>, <strong>iPad</strong>, <strong>iPad</strong>&#8230; otro nuevo dispositivo para cautivar a los &aacute;vidos consumidores, pero que por lo menos trae interesantes nuevas tecnolog&iacute;as. Aparte de que crean que es un <strong>iPhone</strong> gigante, tiene varias innovaciones que permiten darle mucha rienda a la imaginaci&oacute;n de los creadores de contenido espec&iacute;fico para esta plataforma. Una de las que m&aacute;s me han interesados, corresponde a los <strong>eventos gestuales</strong>.</p>
<p>Este art&iacute;culo abordar&aacute; todos los eventos disponibles para <strong>iPad</strong> y que ocurren cuando el usuario interact&uacute;a con una p&aacute;gina web en <strong>iOS</strong>. Aunque puedes visualizar los ejemplos con <strong>Safari 5</strong> para escritorio o el mismo <strong>iPhone</strong>, la mejor interacci&oacute;n la puedes lograr desde un <strong>iPad</strong> mismo por la dimensi&oacute;n y calidad de su superficie t&aacute;ctil (o en su defecto con su simulador).</p>
<p><span id="more-616"></span></p>
<h3>Eventos Multitouch</h3>
<p><img src="http://www.csslab.cl/wp-content/uploads/2010/07/multitouch.png" alt="CSSLab - Eventos Multitouch" width="200" height="315" align="right" /></p>
<p>Puedes usar <em>classes</em> de eventos <em>touch</em> de tipo <strong>DOM</strong> en <em>Javascript</em> que ya est&aacute;n disponibles en <strong>iOS</strong>. Si quieres registrar estos eventos, el sistema env&iacute;a objetos <em>TouchEvent</em> a aquellos elementos <strong>DOM</strong> mientras los dedos se mueven por sobre la superficie. Una secuencia <em>multitouch</em> comienza cuando un dedo toca por primera vez la superficie. La secuencia termina cuando el &uacute;ltimo de esos dedos se levanta de la misma superficie. &Eacute;stos eventos son similares a los usuales eventos de <em>mouse</em>, excepto que puedes tener toques simult&aacute;neos en la superficie en diferentes lugares de la misma. Un objeto de evento <em>touch</em> es utilizado para encapsular todos los toques que existen en un mismo momento en la pantalla. Cada dedo es representado por un objeto <em>touch</em> y las t&iacute;picas propiedades que encuentras en un evento de <em>mouse</em> est&aacute;n en un evento <em>touch</em>, pero no el objeto mismo.</p>
<p>Cuatro son los principales eventos <em>touch</em>:</p>
<dl>
<dt>ontouchstart</dt>
<dd>ocurre cada vez que un dedo se posa sobre la pantalla.</dd>
<dt>ontouchmove</dt>
<dd>ocurre cuando un dedo que ya est&aacute; en la pantalla se mueve sobre ella.</dd>
<dt>ontouchend</dt>
<dd>ocurre cada vez que un dedo sale de la pantalla.</dd>
<dt>ontouchcancel</dt>
<dd>el sistema puede cancelar los eventos en ciertas ocasiones, como por ej. cuando recibes un <strong>SMS</strong> mientras est&aacute;s arrastrando un elemento.</dd>
</dl>
<p>Para registrarlos con <em>Javascript</em>:</p>
<pre class="codejs">element.addEventListener(&quot;touchstart&quot;, touchStart, false);
element.addEventListener(&quot;touchmove&quot;, touchMove, false);
element.addEventListener(&quot;touchend&quot;, touchEnd, false);
element.addEventListener(&quot;touchcancel&quot;, touchCancel, false);</pre>
<p>Y si lo quieres implementar como una funci&oacute;n:</p>
<pre class="codejs">function touchStart(event) {
   <span class="commentjs">// tomemos las coordenadas del dedo cuando toca la pantalla</span>
   var x = event.touches[0].pageX;
   var y = event.touches[0].pageY;
   alert('X = '+x+',Y = '+y);
}</pre>
<p><a href="http://www.csslab.cl/ejemplos/haptica/ejemplo1.html" title="Enlace en CSSLab a &quot;Ejemplo 1&quot;" class="verejemplo">Ver ejemplo 1</a></p>
<p>Un simple evento: arrastra un elemento cuando mueves el dedo:</p>
<pre class="codejs">function touchMove(event) {
   event.preventDefault();
   var touch = event.touches[0];
   var node = touch.target;
   node.style.position = &quot;absolute&quot;;
   node.style.left = touch.pageX + &quot;px&quot;;
   node.style.top = touch.pageY + &quot;px&quot;;
}</pre>
<p><a href="http://www.csslab.cl/ejemplos/haptica/ejemplo2.html" title="Enlace en CSSLab a &quot;Ejemplo 2&quot;" class="verejemplo">Ver ejemplo 2</a></p>
<p class="atencion"><img src="http://www.csslab.cl/wp-content/uploads/2010/07/atencion_abre.png" width="13" height="23" class="aligncenter" /><br />Detalle: por defecto, si arrastras un dedo sobre la pantalla es probable que la p&aacute;gina comience a moverse (peor si &eacute;sta tiene scroll). Por suerte agregaron la funci&oacute;n <strong>preventDefault()</strong> que hace que la p&aacute;gina se quede quieta si lo necesitamos.<br /><img src="http://www.csslab.cl/wp-content/uploads/2010/07/atencion_cierra.png" width="13" height="23" class="aligncenter" /></p>
<p>Las listas de eventos agrupan estos objetos, y contiene informaci&oacute;n para cada dedo que est&aacute; tocando la pantalla. Adem&aacute;s, contiene 2 otras listas: una que tiene informaci&oacute;n para los dedos que se originan del mismo elemento y otro que contiene s&oacute;lo informaci&oacute;n para los dedos asociados al mismo evento. Estas listas est&aacute;n disponibles para cada evento <em>touch</em>, y son:</p>
<dl>
<dt>touches</dt>
<dd>una lista para cada dedo que est&aacute; posado actualmente sobre la pantalla.</dd>
<dt>targetTouches</dt>
<dd>tal como <strong>touches</strong>, pero filtra s&oacute;lo la informaci&oacute;n para los dedos que comienzan del mismo elemento.</dd>
<dt>changedTouches</dt>
<dd>lista la informaci&oacute;n para cada dedo involucrado en el mismo evento.</dd>
</dl>
<p>Las propiedades que contienen estas listas son:</p>
<dl>
<dt>clientX</dt>
<dd>coordenada X del toque relativa al <em>viewport</em> (pantalla visible).</dd>
<dt>clientY</dt>
<dd>coordenada Y del toque relativa al <em>viewport</em>.</dd>
<dt>screenX</dt>
<dd>coordenada X relativa a la pantalla.</dd>
<dt>screenY</dt>
<dd>coordenada Y relativa a la pantalla.</dd>
<dt>pageX</dt>
<dd>coordenada X relativa a la p&aacute;gina completa (incluye <em>offset</em> del <em>scroll</em>).</dd>
<dt>pageY</dt>
<dd>coordenada Y relativa a la p&aacute;gina completa.</dd>
<dt>target</dt>
<dd>elemento donde el evento touch fue originado.</dd>
<dt>indentifier</dt>
<dd>n&uacute;mero identificados, &uacute;nico para cada evento <em>touch</em>.</dd>
</dl>
<p>Para entender mejor, veamos el siguiente caso:</p>
<ol>
<li>
<p>Cuando pongo un dedo en la pantalla, las 3 listas tendr&aacute;n la misma informaci&oacute;n en sus propiedades, pero <strong>changedTouches</strong> fue el que origin&oacute; el evento.</p>
</li>
<li>
<p>Cuando pongo el segundo dedo, <strong>touches</strong> tendr&aacute; 2 items (uno para cada dedo); <strong>targetTouches</strong> tendr&aacute; 2 items s&oacute;lo si el segundo dedo es posado en el mismo elemento del primero; <strong>changedTouches</strong> tendr&aacute; informaci&oacute;n relacionada al segundo dedo, porque fue lo que caus&oacute; el evento.</p>
</li>
<li>
<p>Si pongo 2 dedos exactamente al mismo tiempo, tendr&eacute; 2 items en <strong>changedTouches</strong>: uno para cada dedo.</p>
</li>
<li>
<p>Si muevo mis dedos, la &uacute;nica lista que cambiar&aacute; es <strong>changedTouches</strong> y va a tener informaci&oacute;n relacionada a cada dedo que se vaya moviendo (al menos uno).</p>
</li>
<li>
<p>Cuando levanto un dedo, ser&aacute; eliminado de <strong>touches</strong> y <strong>targetTouches</strong> y aparecer&aacute; en <strong>changedTouches</strong> ya que fue el que origin&oacute; el evento.</p>
</li>
<li>
<p>Si quito el &uacute;ltimo dedo se vaciar&aacute;n <strong>touches</strong> y <strong>targetTouches</strong>, y <strong>changedTouches</strong> tendr&aacute; la informaci&oacute;n para ese ultimo dedo.</p>
</li>
</ol>
<div class="gesture">
<h3>Eventos Gestuales</h3>
<p>Eventos <em>multitouch</em> pueden ser combinados para crear eventos de gestos. Los objetos <em>GestureEvent</em> son enviados durante una secuencia <em>multitouch</em> y contienen informaci&oacute;n de dimensiones y rotaciones. </p>
<p>Para registrarlos en <strong>HTML</strong>:</p>
</div>
<pre class="codehtml">&lt;div
   ongesturestart=&quot;gestureStart(event);&quot;
   ongesturechange=&quot;gestureChange(event);&quot;
   ongestureend=&quot;gestureEnd(event);&quot;
&gt;</pre>
<p>Y mediante <em>Javascript</em>:</p>
<pre class="codejs">element.addEventListener(&quot;gesturestart&quot;, gestureStart, false);
element.addEventListener(&quot;gesturechange&quot;, gestureChange, false);
element.addEventListener(&quot;gestureend&quot;, gestureEnd, false);</pre>
<p>Comencemos con un ejemplo simple: </p>
<pre class="codejs">function gestureStart(event) {
   <span class="commentjs">// tomamos el angulo y tama&ntilde;o del elemento</span>
   var angle = event.rotation;
   var scale = event.scale;
   alert('angulo: '+angle+', dimension: '+scale);
}</pre>
<p><a href="http://www.csslab.cl/ejemplos/haptica/ejemplo3.html" title="Enlace en CSSLab a &quot;Ejemplo 3&quot;" class="verejemplo">Ver Ejemplo 3</a></p>
<p>Ahora escalamos y rotamos un elemento:</p>
<pre class="codejs">function gestureChange(event) {
   event.preventDefault(); 
   event.target.style.width = (200 * event.scale) + &quot;px&quot;;
   event.target.style.height = (200 * event.scale) + &quot;px&quot;;
   event.target.style.webkitTransform = 'rotate(' + event.rotation + 'deg)';
}</pre>
<p><a href="http://www.csslab.cl/ejemplos/haptica/ejemplo4.html" title="Enlace en CSSLab a &quot;Ejemplo 4&quot;" class="verejemplo">Ver Ejemplo 4</a></p>
<p>Creo que esto es un buen comienzo para que te interese esta plataforma, la que implementa un tipo de interacci&oacute;n h&aacute;ptica poco usual y con un gran potencial comercial.</p>
<h4>Links:</h4>
<ul>
<li><a href="http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW1" target="_blank">Safari Reference Library: Handling Events</a>
  </li>
<li><a href="http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariJSRef/index.html#//apple_ref/doc/uid/TP40001482" target="_blank">Safari Reference Library: Safari DOM Additions Reference</a></li>
<li><a href="http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/">Sitepen: Touching and Gesturing on the iPhone</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/07/28/haptica-en-ios/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tip Precoz 7: resize textarea</title>
		<link>http://www.csslab.cl/2010/07/19/tip-precoz-7-resize-textarea/</link>
		<comments>http://www.csslab.cl/2010/07/19/tip-precoz-7-resize-textarea/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 17:24:08 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[accesibilidad]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=601</guid>
		<description><![CDATA[Si usas seguido Safari ó Chrome, habrás notado que estos browsers permiten -por defecto- que el &#60;textarea&#62; sea redimensionado por el usuario a través del arrastre en el rincón inferior-derecho. Esta es una propiedad de WebKit de accesibilidad que puede perjudicar el layout de nuestro lindo formulario.
Para quitarlo, basta declarar en CSS:

textarea {
	resize: none;
}
Ver ejemplo [...]]]></description>
			<content:encoded><![CDATA[<p>Si usas seguido <strong>Safari</strong> ó <strong>Chrome</strong>, habrás notado que estos <em>browsers</em> permiten -por defecto- que el <strong>&lt;textarea&gt;</strong> sea redimensionado por el usuario a través del arrastre en el rincón inferior-derecho. Esta es una propiedad de <strong>WebKit</strong> de accesibilidad que puede perjudicar el <em>layout</em> de nuestro lindo formulario.</p>
<p>Para quitarlo, basta declarar en <strong>CSS</strong>:</p>
<p><span id="more-601"></span></p>
<pre class="codecss">textarea {
	resize: none;
}</pre>
<p><a href="http://www.csslab.cl/ejemplos/textarea.html" class="verejemplo" title="Enlace en CSSLab a &quot;Ejemplo Tip Precoz 7: resize textarea&quot;">Ver ejemplo <br /><small>(En Safari-Chrome)</small></a></p>
<p style="text-align: center"><img src="http://www.csslab.cl/wp-content/uploads/2010/07/textarea.png" alt="" title="CSSLab.cl: resize textarea" width="350" height="314" class="aligncenter size-full wp-image-602" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/07/19/tip-precoz-7-resize-textarea/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>¿Con o sin comillas?</title>
		<link>http://www.csslab.cl/2010/07/07/con-o-sin-comillas/</link>
		<comments>http://www.csslab.cl/2010/07/07/con-o-sin-comillas/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 16:04:47 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[propiedades css]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=590</guid>
		<description><![CDATA[
Al declarar algunos valores en propiedades CSS como background-image, usualmente se permite poner o no el valor entre comillas dobles &#34;&#34; &#243; simples &#8221;. Si escribes el c&#243;digo a mano, no las utilizas. Si usas alg&#250;n editor, quizas las agrega. Pero &#191;se debe o no poner comillas?
Esta pregunta que ha intrigado al hombre por a&#241;os [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.csslab.cl/wp-content/uploads/2010/07/comillas.png" alt="CSSLab: ¿Con o sin comillas?" title="comillas" width="150" height="95" class="alignright size-full wp-image-596" />
<p>Al declarar algunos valores en propiedades <strong>CSS</strong> como <strong>background-image</strong>, usualmente se permite poner o no el valor entre comillas dobles <strong>&quot;&quot;</strong> &oacute; simples <strong>&#8221;</strong>. Si escribes el c&oacute;digo a mano, no las utilizas. Si usas alg&uacute;n editor, quizas las agrega. Pero &iquest;se debe o no poner comillas?</p>
<p>Esta pregunta que ha intrigado al hombre por a&ntilde;os no tiene una respuesta definitiva. Por lo menos no la he encontrado de manos de la <a href="http://www.w3.org/TR/CSS2/syndata.html" target="_blank" title="Enlace externo a &quot;W3C&quot;">W3C</a>, pero s&iacute; el uso de comillas en ciertas declaraciones tiene sentido:</p>
<p><span id="more-590"></span></p>
<blockquote><p>
  &#8230; single quotes (&#8216;), and double quotes (&quot;) must come in matching pairs &#8230;
</p></blockquote>
<p>Primero, no dice que deben ser utilizadas. Segundo, dice que si las utilizas, deben estar en par (si abres con comilla simple cierra con simple, etc.). Pero:</p>
<blockquote><p>
  Inside the quotes, characters are parsed as a string.</p></blockquote>
<p>Esto es lo importante. Si utilizas las comillas simples o dobles, el valor se pasa como <em>string</em>. Un ejemplo pr&aacute;ctico y descuidado: si tienes una imagen con espacios en su nombre:</p>
<pre class="codecss">background: url('back ground.png')</pre>
<p>Si utilizas comillas en su declaraci&oacute;n la imagen se mostrar&aacute;:</p>
<p><a href="http://www.csslab.cl/ejemplos/comillas/concomillas.html" title="Enlace en CSSLab a &quot;Ejemplo con comillas&quot;" class="verejemplo">Ver ejemplo con comillas</a></p>
<p>Si no la utilizas, el <em>browser</em> no encontrar&aacute; la imagen:</p>
<p><a href="http://www.csslab.cl/ejemplos/comillas/sincomillas.html" title="Enlace en CSSLab a &quot;Ejemplo sin comillas&quot;" class="verejemplo">Ver ejemplo sin comillas</a></p>
<p>Este comportamiento es independiente del <a href="http://www.csslab.cl/2005/11/30/&iquest;strict-o-no-strict/" title="Enlace en CSSLab a &quot;&iquest;Strict o no Strict?&quot;">doctype</a> que est&eacute;s utilizando. Yo las uso.</p>
<h4>Link:</h4>
<ul>
<li><a href="http://www.w3.org/TR/CSS2/syndata.html" title="Enlace externo a &quot;W3C: Syntax and basic data types&quot;">W3C: Syntax and basic data types</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/07/07/con-o-sin-comillas/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Podcast 04</title>
		<link>http://www.csslab.cl/2010/06/15/podcast-04/</link>
		<comments>http://www.csslab.cl/2010/06/15/podcast-04/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 15:24:04 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[podcast - videocast]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[opinión]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=582</guid>
		<description><![CDATA[Muchos temas me son más fáciles de expresar verbalmente que a través del teclado, principalmente cuando son de opinión. Y compartir la opinión, tanto mía como la de ustedes ha sido uno de los principales motivos por los cuales mantengo este sitio. Aparte de compartir conocimientos, crear un lugar -aunque sea virtual- para concentrar y [...]]]></description>
			<content:encoded><![CDATA[<p>Muchos temas me son más fáciles de expresar verbalmente que a través del teclado, principalmente cuando son de opinión. Y compartir la opinión, tanto mía como la de ustedes ha sido uno de los principales motivos por los cuales mantengo este sitio. Aparte de compartir conocimientos, crear un lugar -aunque sea virtual- para concentrar y comparar puntos de vista es un gran objetivo que se sigue manteniendo en <strong>CSSLab.cl</strong>.</p>
<p>En esta ocasión, el <strong>podcast</strong> es bastante preciso y corto, y los temas que convergen son:</p>
<p><span id="more-582"></span></p>
<ol>
<li>Yo no valido.</li>
<li><strong>HTML5</strong>, <strong>CSS3</strong> y rediseño de este sitio.</li>
</ol>
<p>Y para ser más cabrón, desde ahora lo pueden escuchar aquí mismo (si tienen un <em>browser</em> moderno) a través de la nueva etiqueta<strong> &lt;audio&gt;&lt;/audio&gt;</strong>. Si no ven el <em>player</em>, pueden actualizar su navegador a <a href="http://www.getfirefox.com/" title="Enlace externo a &quot;Get Firefox&quot;">Firefox</a> ó <a href="http://www.apple.com/es/safari/download/" title="Enlace externo a &quot;Download Safari&quot;">Safari</a>, ó simplemente bajar el archivo <strong>.zip</strong> el cual también entrego.</p>
<h4>Escuchar (HTML5):</h4>
<p>
<audio controls="controls"><br />
     <source src="http://www.csslab.cl/podcast/csslab_podcast4.ogg" /><!-- para FF --><br />
     <source src="http://www.csslab.cl/podcast/csslab_podcast4.mp3" /><!-- para Safari --><br />
</audio>
</p>
<p>Bajar: <a href="http://www.csslab.cl/podcast/csslab_podcast4.zip" title="Enlace en CSSLab a &quot;Bajar Podcast 04&quot;">Bajar Podcast 04 <em>(13.20 min, 12.6mb, .zip)</em></a></p>
<p>Feed: <a href="feed://www.csslab.cl/?feed=rss2&#038;category_name=podcast">RSS2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/06/15/podcast-04/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
<enclosure url="http://www.csslab.cl/podcast/csslab_podcast4.mp3" length="12845076" type="audio/mpeg" />
		</item>
		<item>
		<title>Tip Precoz 6: Limpiar valores de input</title>
		<link>http://www.csslab.cl/2010/06/08/tip-precoz-6-limpiar-valores-de-input/</link>
		<comments>http://www.csslab.cl/2010/06/08/tip-precoz-6-limpiar-valores-de-input/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 22:20:36 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=578</guid>
		<description><![CDATA[Esta peque&#241;a funci&#243;n de jQuery me es muy &#250;til cuando tengo un campo de texto (&#60;input&#62;, &#60;textarea&#62;, etc) y &#233;ste tiene un valor por defecto (por ejemplo, el Buscar que se ve en el header de este humilde sitio). Cuando hago foco en &#233;l para escribir, quiero que ese value desaparezca y el usuario pueda [...]]]></description>
			<content:encoded><![CDATA[<p>Esta peque&ntilde;a funci&oacute;n de <strong>jQuery</strong> me es muy &uacute;til cuando tengo un campo de texto (<strong>&lt;input&gt;</strong>, <strong>&lt;textarea&gt;</strong>, etc) y &eacute;ste tiene un valor por defecto (por ejemplo, el <em>Buscar</em> que se ve en el <em>header</em> de este humilde sitio). Cuando hago foco en &eacute;l para escribir, quiero que ese <strong>value</strong> desaparezca y el usuario pueda ingresar lo que quiera; caso contrario, si el usuario lo deja vac&iacute;o o si es el mismo que el original (en este caso, <em>Buscar</em>) vuelve a restablecerse al definido por defecto.</p>
<pre class="codejs">$('input').each(function(){
   <span class="commentjs">// tomamos el valor actual del input</span>
   var currentValue = $(this).val();
   <span class="commentjs">// en el focus() comparamos si es el mismo por defecto, y si es asi lo vaciamos</span>
   $(this).focus(function(){
      if( $(this).val() == currentValue ) {
         $(this).val('');
      };
   });
   <span class="commentjs">// en el blur, si el usuario dejo el value vacio, lo volvemos a restablecer</span>
   $(this).blur(function(){
      if( $(this).val() == '' ) {
         $(this).val(currentValue);
      };
   });
});</pre>
<p><a href="http://www.csslab.cl/ejemplos/jquery_vacia_value/index.html" class="verejemplo" title="Enlace en CSSLab a &quot;Ver ejemplo Tip Precoz 6: Limpiar valores de input&quot;">Ver ejemplo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/06/08/tip-precoz-6-limpiar-valores-de-input/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Lo ví y me gustó 35</title>
		<link>http://www.csslab.cl/2010/06/04/lo-vi-y-me-gusto-35/</link>
		<comments>http://www.csslab.cl/2010/06/04/lo-vi-y-me-gusto-35/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 16:09:37 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[Lo ví y me gustó]]></category>
		<category><![CDATA[diseño web]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=571</guid>
		<description><![CDATA[#35 &#8211; 4 Junio 2010



]]></description>
			<content:encoded><![CDATA[<p>#35 &#8211; 4 Junio 2010</p>
<p><a href="http://www.conocono.com/" target="_blank" title="Abrir Sitio"><img src="http://www.csslab.cl/wp-content/uploads/2010/06/conocono.jpg" width="450" height="100" border="0" /></a></p>
<p><a href="http://www.lucasnikitczuk.com.ar/" target="_blank" title="Abrir Sitio"><img src="http://www.csslab.cl/wp-content/uploads/2010/06/lucas.jpg" width="450" height="100" border="0" /></a></p>
<p><a href="http://www.urbanchip.com/" target="_blank" title="Abrir Sitio"><img src="http://www.csslab.cl/wp-content/uploads/2010/06/urbanchip.jpg" width="450" height="100" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/06/04/lo-vi-y-me-gusto-35/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS Reseter v2</title>
		<link>http://www.csslab.cl/2010/06/01/css-reseter-v2/</link>
		<comments>http://www.csslab.cl/2010/06/01/css-reseter-v2/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 21:45:53 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[reseter]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=551</guid>
		<description><![CDATA[Inaugurando el redise&#241;o de este sitio, orientado completamente hacia los nuevos est&#225;ndares que espero alg&#250;n d&#237;a pronto sea aprobado y (bien) aplicado por los fabricantes de browsers, he mejorado la versi&#243;n de mi ya fiel CSS Reseter que tanto me ha ayudado en innumerables proyectos.
Para esta nueva versi&#243;n, he agregado las nuevas etiquetas que conforman [...]]]></description>
			<content:encoded><![CDATA[<p>Inaugurando el redise&ntilde;o de este sitio, orientado completamente hacia los nuevos est&aacute;ndares que espero alg&uacute;n d&iacute;a pronto sea aprobado y (bien) aplicado por los fabricantes de <em>browsers</em>, he mejorado la versi&oacute;n de mi ya fiel <a href="http://www.csslab.cl/2007/10/18/css-reseter/" title="Enlace en CSSLab a &quot;CSS Reseter&quot;">CSS Reseter</a> que tanto me ha ayudado en innumerables proyectos.</p>
<p>Para esta nueva versi&oacute;n, he agregado las nuevas etiquetas que conforman <strong>HTML 5</strong> para elementos de tipo bloque (las que son <em>inline</em> no las necesitan) y aprovech&eacute; de realizar las siguientes mejoras en lo existente:</p>
<ul>
<li>Soporte para nuevas etiquetas <strong>HTML 5</strong></li>
<li>Mejor <em>reset</em> para campos de formularios</li>
<li> Mejoras para listas ordenadas (<strong>&lt;ol&gt;</strong>) y tablas (<strong>&lt;table&gt;</strong>)</li>
</ul>
<p>Ya est&aacute; activo en este nuevo sitio, y espero sea aprovechado y de mucha ayuda en sus proyectos. La idea, como saben, es simplificar el codificado mediante el <em>reset</em> de estilos que traen por defecto los navegadores web.</p>
<p><a href="http://www.csslab.cl/downloads/CSS+Reseter+v2" title="Enlace en CSSLab a &quot;CSS Reseter V2&quot;" class="verejemplo" target="_blank">Bajar hoja de estilo (.zip)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/06/01/css-reseter-v2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>jQuery Tabs y registro en el historial</title>
		<link>http://www.csslab.cl/2010/05/10/jquery-tabs-y-registro-en-el-historial/</link>
		<comments>http://www.csslab.cl/2010/05/10/jquery-tabs-y-registro-en-el-historial/#comments</comments>
		<pubDate>Mon, 10 May 2010 16:14:53 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[Hacks]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[menú]]></category>
		<category><![CDATA[tabs]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=545</guid>
		<description><![CDATA[Es muy com&#250;n el uso de navegaci&#243;n de tipo tabs para contenidos dentro de una misma p&#225;gina y funcionan bastante bien; el usuario ya est&#225; acostumbrado a este tipo de elementos y los utiliza sin problemas, adem&#225;s que resulta liviano y relativamente f&#225;cil implementarlos.

Pero recientemente un cliente pidi&#243; que los tabs se pudieran navegar con [...]]]></description>
			<content:encoded><![CDATA[<p>Es muy com&uacute;n el uso de navegaci&oacute;n de tipo <em>tabs</em> para contenidos dentro de una misma p&aacute;gina y funcionan bastante bien; el usuario ya est&aacute; acostumbrado a este tipo de elementos y los utiliza sin problemas, adem&aacute;s que resulta liviano y relativamente f&aacute;cil implementarlos.</p>
<p><span id="more-545"></span></p>
<p>Pero recientemente un cliente pidi&oacute; que los <em>tabs</em> se pudieran navegar con el historial del <em>browser</em>, o sea que si vas seleccionado diferentes <em>tabs</em> e incluso saliendo a otras p&aacute;ginas, puedas volver a ellas con el bot&oacute;n <em>&#8216;Back&#8217;</em> o <em>&#8216;Volver&#8217;</em> del navegador, y volver a pasar por ellos. Esto me result&oacute; en un problema no menor que me cost&oacute; solucionar, ya que los <em>tabs</em> suelen reaccionar ante eventos del <em>click</em> del <em>mouse</em> (como por ejemplo para mostrar tal <strong>&lt;div&gt;</strong> al <em>clickear</em> tal enlace<strong> &lt;a&gt;</strong> y que a &eacute;ste se le agregue una <strong>class=&quot;selected&quot;</strong> que indique su estado de seleccionado). Y esto suelo no quedar registrado en el cach&eacute; del <em>browser</em> para que pueda ser navegado como se pidi&oacute;. Pero bueno, pude solucionarlo y aqu&iacute; lo comparto por si lo necesitan; implica 2 pasos diferentes los cuales deben funcionar en conjunto:</p>
<p>Primero, crearemos una simple funci&oacute;n en <strong>jQuery</strong> para que funcionen los <em>tabs</em>. Esta es una de las maneras m&aacute;s simples de crear este tipo de men&uacute;es. Para el <strong>HTML</strong>:</p>
<pre class="codehtml">&lt;div class=&quot;tabs&quot;&gt;<span class="commenthtml">&lt;!-- .tabs --&gt;</span>
   &lt;ul id=&quot;menu_tabs&quot;&gt;
      &lt;li&gt;&lt;a href=&quot;#item1&quot;&gt;Item 1&lt;/a&gt;&lt;/li&gt;
      ...
   &lt;/ul&gt; 
   &lt;div id=&quot;item1&quot; class=&quot;caja&quot;&gt;<span class="commenthtml">&lt;!-- #item1 --&gt;</span>
      &lt;h2&gt;Item 1&lt;/h2&gt;
      &lt;p&gt;Donec gravida posuere arcu.&lt;/p&gt;
   &lt;/div&gt;<span class="commenthtml">&lt;!-- /#item1 --&gt;</span>
   ...&lt;/div&gt;<span class="commenthtml">&lt;!-- /.tabs --&gt;</span></pre>
<p>Le aplicamos la siguiente instrucci&oacute;n en <strong>jQuery</strong>:</p>
<pre class="codejs">$(function(){
   <span class="commentjs">// definimos variables para el contenedor y los&lt;div&gt;'s de los tabs</span>
   var tabContainers = $('.tabs &gt; div');
   <span class="commentjs">// creamos el evento click para cada uno de los items del menu de tabs</span>
   $('div.tabs ul a').each(function() {
      $(this).click(function(){
         <span class="commentjs">// guardamos el ancla (#item1 por ej.) en una variable del link clickeado</span>
         var hash = $(this).attr('href');
         <span class="commentjs">// escondemos todos los tabs</span>
         tabContainers.hide();
         <span class="commentjs">// mostramos el &lt;div&gt; que sea igual al ancla guardado</span>
         $(hash).show();
         <span class="commentjs">// jugamos agregando y quitando classes del menu</span>
         $('div.tabs ul a').removeClass('selected');
         $('a[href='+hash+']').addClass('selected');
      });
   });
   <span class="commentjs">// para comenzar, hacemos que el primer elemento sea el clickeado</span>
   $('div.tabs ul a:first').click();
});</pre>
<p><a href="http://www.csslab.cl/ejemplos/tabs_history/tabs.html" class="verejemplo" title="Enlace en CSSLab &quot;Demo 01: jQuery Tabs&quot;" target="_blank">Ver demo tabs</a></p>
<p><img src="http://www.csslab.cl/wp-content/uploads/2010/05/btn_back.png" alt="CSSLab: btn back" width="154" height="105" align="right" style="padding: 10px;" /></p>
<p>Bien, con esto tienes tu men&uacute; de <em>tabs</em> funcionando de manera b&aacute;sica pero pr&aacute;ctica. Ahora como notar&aacute;s, al ir por los <em>tabs</em> y volver con el bot&oacute;n del navegador &eacute;stos no seguir&aacute;n el mismo recorrido devuelta, aunque en la <strong>URL</strong> s&iacute; se vea que van cambiando. Para que esto ocurra, debemos comparar no el <strong>hash</strong> del enlace (<strong>&lt;a href=&quot;#item1&quot;&gt;</strong> por ej.), sino comparar con la <strong>URL</strong> que va cambiando. Adem&aacute;s se debe incluir el <em>plugin</em> <a href="http://benalman.com/projects/jquery-bbq-plugin/" title="Enlace externo a &quot;jQuery BBQ&quot;" target="_blank">jQuery BBQ</a>, el que realiza el ingreso de la <strong>URL</strong> con <em>tabs</em> al cach&eacute; del <em>browser</em>. Con el mismo <strong>HTML</strong>, miren la nueva funci&oacute;n:</p>
<pre class="codejs">$(function(){
   var tabContainers = $('.tabs &gt; div');
   <span class="commentjs">// creamos un nuevo evento y lo incluimos al browser</span>
   $(window).bind('hashchange', function () {
      <span class="commentjs">// nuestra variable no la sacamos del &lt;a&gt; sino de la URL y dejamos el primero seleccionado</span>
      var hash = window.location.hash || '#item1';
      <span class="commentjs">// el resto es pr&aacute;cticamente lo mismo</span>
      tabContainers.hide();
      $(hash).show();
      $('div.tabs ul a').removeClass('selected');
      $('a[href='+hash+']').addClass('selected');
   });
   <span class="commentjs">// ejecutamos este nuevo evento 'hashchange' mediante un trigger</span>
   $(window).trigger('hashchange');
});</pre>
<p><a href="http://www.csslab.cl/ejemplos/tabs_history/tabs_history.html" class="verejemplo" title="Enlace en CSSLab &quot;Demo 02: jQuery Tabs + History&quot;" target="_blank">Ver demo Tabs + History</a></p>
<p>En este ejemplo, incluso podemos abrir mediante la <strong>URL</strong> en el <em>tab</em> que queramos, por ejemplo con el siguiente <strong>link</strong> abriremos el demo en el <em>tab</em> 3:</p>
<p><a href="http://www.csslab.cl/ejemplos/tabs_history/tabs_history.html#item3" class="verejemplo" title="Enlace en CSSLab &quot;Demo 03: jQuery Tabs + History en tab 3&quot;" target="_blank">Ver demo Tabs + History en el tercer tab</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/05/10/jquery-tabs-y-registro-en-el-historial/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tip Precoz 5: teclados de iPhone/iPad</title>
		<link>http://www.csslab.cl/2010/04/20/tip-precoz-5-teclados-de-iphoneipad/</link>
		<comments>http://www.csslab.cl/2010/04/20/tip-precoz-5-teclados-de-iphoneipad/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 19:49:08 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=538</guid>
		<description><![CDATA[Como muchos ya saben, Webkit siempre ha sido pionero en implementar nuevas tecnolog&#237;as y las &#250;ltimas versiones de los lenguajes web existentes. Muchas etiquetas y atributos de HTML 5 por ejemplo, ya se pueden utilizar desde hace mucho tiempo en browsers como Safari, Konqueror y Chrome. Este peque&#241;o tip mostrar&#225; un atributo de HTML 5 [...]]]></description>
			<content:encoded><![CDATA[<p>Como muchos ya saben, <em>Webkit</em> siempre ha sido pionero en implementar nuevas tecnolog&iacute;as y las &uacute;ltimas versiones de los lenguajes web existentes. Muchas etiquetas y atributos de <strong>HTML 5</strong> por ejemplo, ya se pueden utilizar desde hace mucho tiempo en <em>browsers</em> como <strong>Safari</strong>, <strong>Konqueror</strong> y <strong>Chrome</strong>. Este peque&ntilde;o tip mostrar&aacute; un atributo de <strong>HTML 5</strong> que implementado, ayudar&aacute; a que la experiencia de usuario de <strong>Safari</strong> para <strong>iPhone</strong> y <strong>iPad</strong> sea mejor.</p>
<p>En un campo de formulario, cuando lo seleccionas en <strong>iPhone/iPad</strong> para completarlo, autom&aacute;ticamente te muestra el teclado <em>touch</em> del aparato. Aparte del teclado <strong>QUERTY</strong> por defecto, existen 3 valores para <strong>type=&quot;&quot;</strong> de <strong>&lt;input /&gt;</strong> que muestran diferentes tipos de teclados: num&eacute;ricos, url y de e-mail:</p>
<p><span id="more-538"></span></p>
<p class="codehtml">&lt;input type=&quot;text&quot; /&gt; <span class="commenthtml">(por defecto)</span></p>
<p><img src="http://www.csslab.cl/wp-content/uploads/2010/04/querty.png" alt="CSSLab: teclados para iPhone/iPad" width="340" height="235" /></p>
<p class="codehtml">&lt;input type=&quot;url&quot; /&gt;</p>
<p><img src="http://www.csslab.cl/wp-content/uploads/2010/04/url.png" alt="CSSLab: teclados para iPhone/iPad" width="340" height="235" /></p>
<p class="codehtml">&lt;input type=&quot;number&quot; /&gt;</p>
<p><img src="http://www.csslab.cl/wp-content/uploads/2010/04/number.png" alt="CSSLab: teclados para iPhone/iPad" width="340" height="235" /></p>
<p class="codehtml">&lt;input type=&quot;email&quot; /&gt;</p>
<p><img src="http://www.csslab.cl/wp-content/uploads/2010/04/email.png" alt="CSSLab: teclados para iPhone/iPad" width="340" height="235" /></p>
<p>Los <em>browsers</em> que no soporten <strong>HTML5</strong> lo obviar&aacute;n y degradar&aacute;n como si fuera un campo de tipo texto (<strong>type=&quot;text&quot;</strong>).</p>
<p>Se nota como un detalle menor pero seguro tus usuarios lo notar&aacute;n y te diferenciar&aacute;s con este tipo de detalles. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/04/20/tip-precoz-5-teclados-de-iphoneipad/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Videocast 4: formulario</title>
		<link>http://www.csslab.cl/2010/04/08/videocast-4-formulario/</link>
		<comments>http://www.csslab.cl/2010/04/08/videocast-4-formulario/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 15:09:23 +0000</pubDate>
		<dc:creator>Jorge Epuñan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[podcast - videocast]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[maquetacion]]></category>
		<category><![CDATA[videocast]]></category>

		<guid isPermaLink="false">http://www.csslab.cl/?p=533</guid>
		<description><![CDATA[Ten&#237;a hace unos meses preparado un nuevo videocast para ayudar a quienes est&#225;n aprendiendo a maquetar en HTML+CSS a realizarlo con campos de formularios. Lejos es lo m&#225;s complicado que me ha tocado perfeccionar, pero se trata principalmente de practicar y de realizar la mayor cantidad de variaciones posibles para lograr un buen manejo de [...]]]></description>
			<content:encoded><![CDATA[<p>Ten&iacute;a hace unos meses preparado un nuevo <strong>videocast</strong> para ayudar a quienes est&aacute;n aprendiendo a maquetar en <strong>HTML+CSS</strong> a realizarlo con campos de formularios. Lejos es lo m&aacute;s complicado que me ha tocado perfeccionar, pero se trata principalmente de practicar y de realizar la mayor cantidad de variaciones posibles para lograr un buen manejo de las etiquetas y conocer c&oacute;mo se comportan en los diferentes <em>browsers</em>. A modo de ejemplo, la siguiente imagen  grafica un mismo archivo HTML con diferentes tipos de &lt;input /&gt; con diferentes estilos en diferentes <em>browsers</em>:</p>
<p><span id="more-533"></span></p>
<p><img src="http://www.csslab.cl/wp-content/uploads/2010/04/input_browsers.png" alt="Diferencias de input entre browsers - CSSLab.cl" width="620" height="1090" /></p>
<p>En esta ocasi&oacute;n el <em>layout</em> es bastante simple, uno t&iacute;pico que encontrar&aacute;s en cualquier sistema de comentarios para <em>blogs</em>. Pero es un buen puntapi&eacute; para que veas de qu&eacute; se trata esto. Adem&aacute;s, contiene las etiquetas fundamentales y m&aacute;s utilizadas para capturar datos de usuarios.</p>
<p><a href="http://www.csslab.cl/videocast/5/index.html" title="Enlace en CSSLab para ver &quot;Videocast 4&quot;"><img src="http://www.csslab.cl/videocast/icon_flash.gif" alt="Videocast 4 versión stream" border="0" /></a><br />
<a href="http://www.csslab.cl/videocast/5/csslab_formularios.zip" title="Enlace en CSSLab para bajar &quot;Videocast 4 versi&oacute; completa&quot;"><img src="http://www.csslab.cl/videocast/icon_mov.gif" alt="Videocast 4 versi&oacute;n completa" border="0" /></a></p>
<p>Espero sea de ayuda y que se entienda, como siempre lo muestro en 2 formatos: <em>streaming</em> para web y uno en alta calidad para que lo bajes y estudies <em>offline</em>. Adem&aacute;s, puedes <a href="http://www.csslab.cl/videocast/5/form_videocast5.zip">descargar el material utilizado</a> para este videocast.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.csslab.cl/2010/04/08/videocast-4-formulario/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
