<?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>Como Lo Hago &#187; CSS</title>
	<atom:link href="http://www.comolohago.cl/category/diseno-web/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.comolohago.cl</link>
	<description>Si se puede, te lo enseñamos</description>
	<lastBuildDate>Tue, 10 Jan 2012 16:56: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>Cómo hacer un gadget en Windows 7</title>
		<link>http://www.comolohago.cl/2010/08/09/como-hacer-un-gadget-en-windows-7-2/</link>
		<comments>http://www.comolohago.cl/2010/08/09/como-hacer-un-gadget-en-windows-7-2/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 02:22:32 +0000</pubDate>
		<dc:creator>Cri</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Gadget]]></category>
		<category><![CDATA[sidebar]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3803</guid>
		<description><![CDATA[
 
Hola   amigos de Cómo Lo Hago, tratando de sorprenderlos día a día nos empeñamos en poder crear nuevos tutoriales y ayudarlos en adquirir un mayor conocimiento como también desenvolverse dentro de un nuevo tipo de desarrollo. Esta vez será la ocasión de crear un Gadget el cual nos puede servir para una [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4076/4878538776_56444ce8d5.jpg" alt="" width="500" height="260" /></p>
<p style="text-align: justify;"><strong> </strong></p>
<p style="text-align: justify;">Hola   amigos de Cómo Lo Hago, tratando de sorprenderlos día a día nos empeñamos en poder crear nuevos tutoriales y ayudarlos en adquirir un mayor conocimiento como también desenvolverse dentro de un nuevo tipo de desarrollo. Esta vez será la ocasión de crear un <strong><em>Gadget</em></strong> el cual nos puede servir para una infinidad de cosas dependiendo del uso que le queramos dar, en este caso veremos como hacer uno con alimentacion RSS de los tutoriales que se hacen en CómoLoHago. Partiendo por una cosa, es muy importante recalcar que no hay que ser programador para poder realizar este tuto, pero sí tener harta paciencia para darle al clavo. Los invito a seguir en este entretenido tuto como siempre despues del salto&#8230;</p>
<p style="text-align: justify;"><span id="more-3803"></span></p>
<p style="text-align: justify;"><img title="Más..." src="http://www.comolohago.cl/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></p>
<p style="text-align: justify;"><strong> </strong></p>
<p style="text-align: justify;"><strong> </strong></p>
<p style="text-align: justify;"><strong> </strong></p>
<h1 style="text-align: center;">Cómo hacer un gadget en Windows 7</h1>
<p style="text-align: justify;">1.  ¿Qué  necesitamos?</p>
<ul style="text-align: justify;">
<li>Sistema operativo Windows 7</li>
<li>Aprender un poco de HTML + CSS. Para esto puede recurrir a los siguientes tutoriales</li>
</ul>
<ol>
<li><a href="http://www.comolohago.cl/2010/02/11/como-convertirse-en-un-campeon-de-html-parte-1/">Aprender HTML</a><em><br />
</em></li>
<li><a href="http://www.comolohago.cl/2009/02/01/como-dominar-css-sin-salir-del-escritorio-parte-1/">Aprende CSS</a><em><br />
</em></li>
</ol>
<h2 style="text-align: justify;">2.  ¿Cómo  lo hago?</h2>
<p style="text-align: justify;"><strong>1. </strong>Manos a la obra, primero a buscar donde tenemos nuestros <strong><em>Gadgets</em></strong> los cuales se encontrarán siempre por <em>default</em> en <strong><em>Archivos de programa&gt;Windows Sidebar&gt;Gadgets</em></strong>. Una vez ubicados en esta carpeta procederemos a crear la carpta contenedora de nuestro futuro Gadget por desarrollar. Es muy importante que la extensión del nombre sea así:</p>
<p style="text-align: justify;"><strong>NOMBREDEMIGADGET.Gadget</strong></p>
<p style="text-align: justify;"><strong> </strong> <img class="alignnone" src="http://farm5.static.flickr.com/4094/4877930213_23b99c9738_z.jpg" alt="" width="640" height="493" /></p>
<p style="text-align: justify;"><strong>2. </strong>Una vez creada nuestra carpeta contenedora necesitaremos algunos archivos indispensables para poder personalisar y a la vez desarrollar:</p>
<p><img src="http://farm5.static.flickr.com/4082/4877930397_912a5736e3_z.jpg" alt="" width="640" height="493" /></p>
<ul style="text-align: justify;">
<li><em>MiGadget.html: Contiene el código principal para los ajustes de color, fondo, letras, links, feeders, etc</em>.</li>
</ul>
<blockquote style="text-align: justify;"><address>&lt;html xmlns=&#8221;http://www.w3.org/1999/xhtml&#8221;&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=iso-8859-1&#8243; /&gt;<br />
&lt;title&gt;ComoLoHago mi primer gadget&lt;/title&gt;<br />
&lt;!&#8211; Para llamar a nuestros Settings.js del gadget &#8211;&gt;<br />
&lt;script type=&#8221;text/javascript&#8221; src=&#8221;MiGadget.js&#8221;&gt;&lt;/script&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;<br />
/*/ El cuerpo de nuestro Gadget /*/<br />
body<br />
{</address>
<address>width: 330px;<br />
height: 450px;<br />
font-family: verdana;<br />
font-weight: lighter;<br />
margin:0px;<br />
font-size: 10px;<br />
overflow-x:hidden;<br />
overflow-y:auto;<br />
background-color:#333333;<br />
scrollbar-face-color:#444444; /*/ Color del cuadro /*/<br />
scrollbar-arrow-color:#999999; /*/ Color de la flecha de nuestro scroll /*/<br />
scrollbar-track-color:#333333;  /*/ Color de la vía donde se mueve el scroll /*/<br />
scrollbar-highlight-color:#444444; /*/ Si queremos color desde un ángulo /*/<br />
scrollbar-darkshadow-color:#444444; /*/Color opuesto al lugar al Highlight-Color /*/<br />
scrollbar-shadow-color:#444444; /*/ Si queremos sombra /*/<br />
scrollbar-3dlight-color:#444444;  /*/ Si queremos color de luz 3d /*/</address>
<address>}</address>
<address>#ContenidoDeMiGadget</address>
<address>/*/Aqui se encuentra parte del contenido que se alimentará dentro de nuestro gadget/*/<br />
{</address>
<address>width: 318px;<br />
margin-left:1px;<br />
height:100px;<br />
vertical-align: middle;<br />
text-align:center;<br />
background-color:#333333;</address>
<address>}</address>
<address>/*/ Este es el codigo especial para poder editar todo dentro del contenido rss /*/<br />
/*/ ya sea colores de letras, colores de fondo, bordes, etc/*/</address>
<address>/*/1-Con esto le indicamos al contenido el ancho que ocupará/*/</address>
<address>.rssxpresschannel { width:318px; font-family: Verdana; }</address>
<address>.rssxpresstable {height:200px; width:318px;}</address>
<address>/*/2-Con esto le indicamos al subtitulo &#8220;Sí se puede, te lo enseñamos&#8221; lo que queremos/*/</address>
<address>.rssxpresschdesc {font-size:10px; background-color:#333333; color:99BBFF; font-style:italic;}</address>
<address>/*/3-Con esto le indicamos al título &#8220;Como Lo Hago&#8221; lo que queremos/*/</address>
<address>.rssxpresschtitle  {font-size:12px; font-family:Arial; color:#99BBFF;  background-color:#333333; background-position:right;  background-image:url(logo.png); background-repeat:no-repeat;  height:69px; width:88px;margin-top:10px;}</address>
<address>/*/4-Con esto le indicamos al título de cada tema lo que queremos/*/</address>
<address>.rssxpressittitle  {font-size:10px; margin-right:5px; background-color:#333333;  border-top-style:inset; border-top-color:#999999; border-width:thin; }</address>
<address>/*/5-Con esto le indicamos a la descripcion de cada contenido lo que queremos/*/</address>
<address>.rssxpressitdesc  {font-size:10px; background-color:#333333; color:#FFFFFF;  margin-top:5px; margin-bottom:5px; font-weight:lighter; }</address>
<address>A:link {text-decoration:none;color:#99BBFF;}</address>
<address>A:visited {text-decoration:none;color:#99BBFF;}</address>
<address>A:active {text-decoration:none;color:#99BBFF;}</address>
<address>A:hover {text-decoration:none;color:#00BBFF;}</address>
<address>&lt;/style&gt;<br />
&lt;/head&gt;</address>
<address>&lt;b style=&#8221;margin-left:210px&#8221; style=&#8221;color:#555555&#8243;&gt;ComoLoHago v1.0&lt;/b&gt;<br />
&lt;body&gt;<br />
&lt;!&#8211;Contenido de mi gadget&#8211;&gt;<br />
&lt;div id=&#8221;ContenidoDeMiGadget&#8221;&gt;<br />
&lt;!&#8211;Script alimentador del contenido Rss&#8211;&gt;<br />
&lt;script src=&#8221;http://rssxpress.ukoln.ac.uk/lite/viewer/?rss=http%3A%2F%2Fwww.comolohago.cl%2Ffeed&#8221;&gt;&lt;/script&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</address>
</blockquote>
<ul style="text-align: justify;">
<li><em>Settings.html: Contiene el código para los ajustes de nuestro Gadget</em>.</li>
</ul>
<blockquote style="text-align: justify;"><address style="text-align: justify;">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=iso-8859-1&#8243; /&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;</p>
<p>body<br />
{</p>
</address>
<address style="text-align: justify;">/*/ ancho y alto de nuestro menu de ajustes /*/<br />
width:300px;<br />
height:250px;<br />
}</p>
<p>/*/un poco de CSS /*/<br />
#L_settingsTitle<br />
{<br />
font-family:Arial;<br />
font-size:15px;<br />
color:#FF0000;<br />
}</p>
<p>#L_settingsTitleLabel<br />
{<br />
font-family:Arial;<br />
font-size:8px;<br />
font-style:italic;<br />
color:#000000;<br />
}</p>
<p>&lt;/style&gt;</p>
<p>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;MiGadget.js&#8221;&gt; &lt;/script&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;p&gt;Aqui agregan su contenido&lt;/p&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</address>
</blockquote>
<ul style="text-align: justify;">
<li><em>MiGadget.js: Contiene el código especial para poder tener ajustes en nuestro Gadget.</em></li>
</ul>
<blockquote style="text-align: justify;"><address>// Importantisimo para poder tener los ajustes de nuestro Gadget<br />
</address>
<address>System.Gadget.settingsUI = &#8220;Settings.html&#8221;;</address>
<address>System.Gadget.onSettingsClosing = SettingsClosing;</address>
<p style="text-align: justify;">
</blockquote>
<ul style="text-align: justify;">
<li><em>Gadget.xml: Contiene el autor, nombre, descripción, ícono, logo. En sí es lo necesario para aparecer en el menú para seleccionar el Gadget</em>.</li>
</ul>
<blockquote style="text-align: justify;"><address>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt;</address>
<address>&lt;gadget&gt;</address>
<address> &lt;name&gt;CómoLoHago &#8211; Novedades&lt;/name&gt;</address>
<address> &lt;version&gt;1.0&lt;/version&gt;</address>
<address> &lt;author name=&#8221;CómoLoHago Team&#8221;&gt;</address>
<address> &lt;info url=&#8221;www.ComoLoHago.cl&#8221; /&gt;</address>
<address> &lt;/author&gt;</address>
<address> &lt;copyright&gt;&amp;#169; CómoLoHago 2010&lt;/copyright&gt;</address>
<address> &lt;description&gt;Novedades acerca de tutoriales nuevos en tu escritorio&lt;/description&gt;</address>
<address> &lt;icons&gt;</address>
<address> &lt;icon height=&#8221;48&#8243; width=&#8221;48&#8243; src=&#8221;icono.png&#8221;/&gt;</address>
<address> &lt;/icons&gt;</address>
<address> &lt;hosts&gt;</address>
<address> &lt;host name=&#8221;sidebar&#8221;&gt;</address>
<address> &lt;autoscaleDPI&gt;true&lt;/autoscaleDPI&gt;</address>
<address> &lt;base type=&#8221;HTML&#8221; apiVersion=&#8221;1.0.0&#8243; src=&#8221;MiGadget.html&#8221; /&gt;</address>
<address> &lt;permissions&gt;Full&lt;/permissions&gt;</address>
<address> &lt;platform minPlatformVersion=&#8221;1.0&#8243; /&gt;</address>
<address> &lt;defaultImage src=&#8221;imagenarrastrada.png&#8221;/&gt;</address>
<address> &lt;/host&gt;</address>
<address> &lt;/hosts&gt;</address>
<address>&lt;/gadget&gt;</address>
</blockquote>
<p style="text-align: justify;"><strong>2. </strong>La flecha blanca indica el ícono que aparecerá en el menú de <em><strong>Gadgets</strong></em>. Este ícono <em>(icono.png)</em> se direcciona desde nuestro archivo XML, en este caso Gadget.xml. También podemos agregar otra imagen para cuando arrastremos nuestro <em><strong>Gadget</strong></em> al escritorio <em>(imagenarrastrada.png)</em>.</p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4100/4878539210_3d1179ddee.jpg" alt="" width="500" height="260" /></p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4081/4878539308_5af141246a.jpg" alt="" width="500" height="260" /></p>
<p style="text-align: justify;"><strong>3. </strong>Finalmente nos podemos dar cuenta que nuestro <strong><em>Gadget</em></strong> va adquiriendo la forma que le damos con CSS y HTML ademas de las programaciones que cada uno le dé en javascript.</p>
<p style="text-align: justify;">Para poder mostrar el contenido RSS, tuve que recurrir a la página <a href="http://rssxpress.ukoln.ac.uk/lite/include/?t=1" target="_blank">http://rssxpress.ukoln.ac.uk/lite/include/?t=1</a> para obtener el script feeder el cual va inserto en <strong><em>MiGadget.html</em></strong>:</p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4123/4877930675_981c161b84.jpg" alt="" width="358" height="463" /></p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4094/4877930725_0e4a769418.jpg" alt="" width="358" height="463" /></p>
<p style="text-align: justify;"><img class="alignnone" src="http://farm5.static.flickr.com/4102/4877930919_d251acf20b.jpg" alt="" width="358" height="463" /></p>
<p style="text-align: justify;">Espero    les haya gustado, les motive para hacer sus propias creaciones y así poder compartirlas con los demas. Me despido</p>
<p style="text-align: justify;">Como   siempre exclusivamente  ha sido:</p>
<p style="text-align: justify;"><img src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" /></p>
<p style="text-align: justify;"><strong>Staff  CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/08/09/como-hacer-un-gadget-en-windows-7-2/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Cómo hacer un formulario de ingreso desplegable</title>
		<link>http://www.comolohago.cl/2010/08/05/como-hacer-un-formulario-de-ingreso-desplegable/</link>
		<comments>http://www.comolohago.cl/2010/08/05/como-hacer-un-formulario-de-ingreso-desplegable/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 04:35:52 +0000</pubDate>
		<dc:creator>Jorge Nitales</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Destacado]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[desplegable]]></category>
		<category><![CDATA[formulario]]></category>
		<category><![CDATA[login]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3760</guid>
		<description><![CDATA[
Hoy vamos a ver un pequeño truquillo para mejorar tu sitio web, veremos como crear un formuario de ingreso desplegable al momento de hacer click en algún lugar y que además se esconda si volvemos a hacer click. Con esto evitaremos la carga de una página para que los usuarios puedan acceder al sitio.
Para ver [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-medium wp-image-3782" title="principal" src="http://www.comolohago.cl/wp-content/uploads/2010/08/principal-300x107.png" alt="" width="300" height="107" /></p>
<p style="text-align: justify;">Hoy vamos a ver un pequeño truquillo para mejorar tu sitio web, veremos como crear un formuario de ingreso desplegable al momento de hacer click en algún lugar y que además se esconda si volvemos a hacer click. Con esto evitaremos la carga de una página para que los usuarios puedan acceder al sitio.</p>
<p style="text-align: justify;">Para ver Cómo lo hago y que necesito, vamos después del salto.<br />
<span id="more-3760"></span></p>
<h1 style="text-align: center;">Cómo hacer un formulario de ingreso desplegable</h1>
<blockquote>
<h2>Información del Tutorial</h2>
<ul>
<li>Dificultad: Baja</li>
<li>Tiempo de Realizacíon: 30 min</li>
</ul>
</blockquote>
<blockquote>
<h2>¿Qué necesito?</h2>
<ul>
<li>Un editor web</li>
<li>Conocimiento básico en HTML. Recomendamos esta <a href="http://www.comolohago.cl/2010/02/11/como-convertirse-en-un-campeon-de-html-parte-1/">saga</a></li>
<li>Conocimiento básico en CSS. Recomendamos esta <a href="http://www.comolohago.cl/2009/02/01/como-dominar-css-sin-salir-del-escritorio-parte-1/">saga</a></li>
</ul>
</blockquote>
<h2 style="text-align: justify;">¿Cómo Lo Hago?</h2>
<p style="text-align: justify;">1.- Necesitamos crear una página HTML básica donde usemos hojas de estilo, que contenga nuestro menú donde una de las opciones sea &#8220;Login&#8221;, &#8220;Ingresar&#8221; o lo que ustedes prefieran.</p>
<p style="text-align: justify;">En este caso haremos lo siguiente:</p>
<p style="text-align: justify;">En HTML:</p>
<pre class="html" title="code">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;link rel="stylesheet" href="estilos.css" type="text/css" media="screen" title="no title" charset="utf-8"&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Galer&amp;iacute;a&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Contacto&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Log-in&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;

&lt;/html&gt;</pre>
<p>en CSS</p>
<pre class="css" title="code">table
{
background:green;
margin:auto;
font-family:verdana,helvetica;
font-size:14px;
}

a:link,a:active,a:visited
{
color:white;
text-decoration:none;
}

a:hover
{
text-decoration:underline;
}</pre>
<p style="text-align: justify;">No ganará ningun concurso de diseño, pero para la explicación sirve.</p>
<p style="text-align: justify;">Con lo anterior tendremos algo<a href="http://www.comolohago.cl/uploads/demos/login/galeriabasico.html" target="_blank"> así</a>.</p>
<p style="text-align: justify;">2.- Ahora necesitamos crear nuestro formulario de ingreso, para esto usaremos un &#8220;&lt;div&gt;&#8221;, ya que este estará siempre en la página, pero se vera cuando nosotros los indiquemos.</p>
<p style="text-align: justify;">Para esto, creamos un div como el siguiente:</p>
<pre class="html" title="code">&lt;div id="login-form"&gt;
&lt;form action="ingreso.html" method="post"&gt;
&lt;input type="text" name="usuario" value="Usuario" id="usuario"/&gt;
&lt;input type="password" name="password" value="Password" id="password"/&gt;
&lt;input type="submit" value="Ingresar" /&gt;
&lt;/form&gt;</pre>
<p style="text-align: justify;">Como ven, este div tiene un &#8220;id&#8221; que es un identificador, adicionalmente a esto, agregamos una etiqueta &#8220;id&#8221; al link del menu que corresponde a &#8220;login&#8221;, quedando el HTML de la siguiente forma:</p>
<pre class="html" title="code">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;link rel="stylesheet" href="estilos.css" type="text/css" media="screen" title="no title" charset="utf-8"&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Galer&amp;iacute;a&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Contacto&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#" id="login"&gt;Log-in&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;div id="login-form"&gt;
&lt;form action="ingreso.html" method="post"&gt;
&lt;input type="text" name="usuario" value="Usuario" /&gt;
&lt;input type="password" name="password" value="Password" /&gt;
&lt;input type="submit" value="Ingresar" /&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;</pre>
<p style="text-align: justify;">También debemos agregar un nuevo código a la hoja de estilos para darle forma a nuestro formulario, por lo que agregaremos a nuestro CSS lo siguiente:</p>
<pre class="css" title="code">#login-form
{
width:120px;
background:gray;
text-align:center;
}
#login-form input[type=text],#login-form [type=password]
{
background:black;
color:white;
display:block;
margin-left:10px;
width:100px;
}</pre>
<p style="text-align: justify;">Quedando nuestro sitio <a href="http://www.comolohago.cl/uploads/demos/login/galeriamedio.html">así</a>.</p>
<p style="text-align: justify;">Sigue sin ganar ningun premio, pero nuevamente es funcional para el ejemplo.</p>
<p style="text-align: justify;">En la hoja de estilos, al id del formulario, agregamos lo siguiente:</p>
<pre class="css" title="code">display:none;

margin:auto;</pre>
<p>quedando nuestro CSS de la siguiente manera:</p>
<pre class="css" title="code">table
{
background:green;
margin:auto;
font-family:verdana,helvetica;
font-size:14px;
}

a:link,a:active,a:visited
{
color:white;
text-decoration:none;
}

a:hover
{
text-decoration:underline;
}

#login-form
{
width:120px;
background:gray;
text-align:center;
margin:auto;
display:none;
}

#login-form input[type=text],#login-form [type=password]
{
background:black;
color:white;
display:block;
margin-left:10px;
width:100px;
}</pre>
<p style="text-align: justify;">Como verán, si es que estan haciendo esto a la vez que leen, nuestro formulario desapareció <span style="text-decoration: line-through;">y jamas volvera, así que fin del tutorial</span>. Lo que pasa que está inicialmente escondido, como necesitamos que este, además lo centramos, pero como no pueden ver, aun no lo sabe.</p>
<p style="text-align: justify;">De aquí en adelante empieza la magia.</p>
<p style="text-align: justify;">Primero que todo, como empezaremos a usar JQuery, necesitan bajar la librería y agregarla en el encabezado de su sitio.</p>
<p style="text-align: justify;">Para descargarla lo pueden hacer <a href="http://www.jquery.com" target="_blank">aquí</a></p>
<p style="text-align: justify;">y para agregarlo, ponen la siguiente linea en el encabezado de su sitio.</p>
<pre class="html" title="code">&lt;script src="jquery-1.4.2.min.js" type="text/javascript" &gt;&lt;/script&gt;</pre>
<p style="text-align: justify;">Y ahora, necesitamos crear un nuevo archivo, que para efectos de ejemplo, llamaremos &#8220;funciones.js&#8221;</p>
<p style="text-align: justify;">en el cual pondremos el siguiente código (se comentará el código para explicar su funcionamiento)</p>
<pre class="javascript" title="code">$(function(){
/* Con esto se esta diciendo "una vez que se cargue el sitio",
cuando eso se cumpla se sigue con lo demas */

$('#login').toggle(function(){
/* Usamos la funcion toggle, que sirve para hacer cierta acción con el primer click
y otra con el segundo. Los clicks se deben hacer sobre #login que es el
identificador de "login" en nuestro menu */

$('#login-form').slideDown();
/* Con el primer click, hacemos que el formulario se despliegue hacia abajo */

},function(){ 

//y con el segundo click...

$('#login-form').slideUp();
// hacemos que el formuario se "guarde" hacia arriba

}); //cerramos la funcion que realiza toggle

}); //cerramos las funciones</pre>
<p style="text-align: justify;">Es importante decir que la función Toggle tiene al menos 12 mil usos más. En verdad 12 mil fue un número al azar y quizás exagerado, pero si tiene muchas más.</p>
<p style="text-align: justify;">Ahora si vuelven a su sitio y hacen click en login.. ¡¡¡no pasará nada!!!</p>
<p style="text-align: justify;">Y esto es porque tenemos que agregar este archivo de funciones a la cabecera de nuestro sitio, de la siguiente manera <em>(a esta altura creo que debí hacer esto en video)</em></p>
<pre class="html" title="code">&lt;script src="jquery-1.4.2.min.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="funciones.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<p style="text-align: justify;">Como ven se agregó <strong>abajo</strong> de la librería de jquery, si lo agregar sobre esta, no funcionará nada. ¡Avisados!</p>
<p style="text-align: justify;">Ahora ya esta funcionando, pero antes de mostrar como quedó, agregaremos unas funciones más. ¿Para qué?</p>
<p style="text-align: justify;">Para que cuando alguien haga click en el input de usuario o contraseña, se borre el texto que por defecto esta y lo deje en blanco, lo hacemos agregando lo siguiente, debemos agregarlo despues del cierre de la funcion de toggle pero antes del cierre de todas las funciones.</p>
<pre class="javascript" title="code">$('#usuario').focus(function(){
// Esto quiere decir, que cuando se selecciones el input con id "usuario"...
$(this).val(''); 
// el valor, idetificado como val, que es lo que esta dentro del campo sea igual a.. nada.

}); // Cerramos la funcion y abajo repetimos lo mismo con el input password

$('#password').focus(function(){
$(this).val('');

});
});    
/* Cerramos las funciones, no lo hicimos 2 veces,
recuerden que esto va abajo de la funcion anterior y antes del cierre */</pre>
<p>Para evitar confusiones mostraremos todo el archivo de funciones sin comentarios.</p>
<pre class="javascript" title="code">$(function(){

$('#login').toggle(function(){

$('#login-form').slideDown();

},function(){

$('#login-form').slideUp();

});

$('#usuario').focus(function(){
$(this).val('');

});

$('#password').focus(function(){
$(this).val('');

});
});</pre>
<p style="text-align: justify;">Y como podemos ver, funciona si problemas, <a href="http://www.comolohago.cl/uploads/demos/login/galeriacasifinal.html">aquí</a></p>
<p style="text-align: justify;">Para terminar, agregaremos un &#8220;&lt;div&gt;&#8221; que contenga todo lo anterior, para poder centrarlo y que nuestro formulario quede a la derecha con CSS. Ahora mostraremos los códigos de todo, para que vean el resultado final.</p>
<p style="text-align: justify;">HTML</p>
<pre class="html" title="code">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;link rel="stylesheet" href="estilos.css" type="text/css" media="screen" title="no title" charset="utf-8"&gt;
&lt;script src="jquery-1.4.2.min.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;
&lt;script src="funciones.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div id="contenedor"&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Galer&amp;iacute;a&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#"&gt;Contacto&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="#" id="login"&gt;Log-in&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;div id="login-form"&gt;
&lt;form action="ingreso.html" method="post"&gt;
&lt;input type="text" name="usuario" value="Usuario" id="usuario"/&gt;
&lt;input type="password" name="password" value="Password" id="password"/&gt;
&lt;input type="submit" value="Ingresar" /&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;

});
});</pre>
<p>CSS</p>
<pre class="css" title="code">#contenedor
{
width:215px;
margin:auto;
}

table
{
background:green;
font-family:verdana,helvetica;
font-size:14px;
}

a:link,a:active,a:visited
{
color:white;
text-decoration:none;
}

a:hover
{
text-decoration:underline;
}

#login-form
{
width:120px;
background:gray;
text-align:center;
display:none;
float:right;
}

#login-form input[type=text],#login-form [type=password]
{
background:black;
color:white;
display:block;
margin-left:10px;
width:100px;
}</pre>
<p>JQuery</p>
<pre class="javascript" title="code">$(function(){

$('#login').toggle(function(){

$('#login-form').slideDown();

},function(){

$('#login-form').slideUp();

});

$('#usuario').focus(function(){
$(this).val('');

});

$('#password').focus(function(){
$(this).val('');
});
});</pre>
<p>El resultado final <a href="http://www.comolohago.cl/uploads/demos/login/galeria.html" target="_blank">aquí</a></p>
<p>Con esto, tienen listo su formulario desplegable. Solo queda hacer un diseño bonito para acompañar.</p>
<p>Cualquier duda que puedan tener, los invitamos a dejarnos un comentario a continuación.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg?v=0" alt="" width="400" height="314" /></p>
<p style="text-align: left;">Por ahora,</p>
<p style="text-align: left;">Me despido</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/08/05/como-hacer-un-formulario-de-ingreso-desplegable/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Cómo crear un formulario de contacto &#8211; Versión 2.0</title>
		<link>http://www.comolohago.cl/2010/05/29/como-crear-un-formulario-de-contacto-version-2-0/</link>
		<comments>http://www.comolohago.cl/2010/05/29/como-crear-un-formulario-de-contacto-version-2-0/#comments</comments>
		<pubDate>Sun, 30 May 2010 02:16:33 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[formulario de contacto]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3557</guid>
		<description><![CDATA[
Hace algún largo tiempo ya, les trajimos un tutorial sobre como armar un formulario de contacto para nuestros sitios Web, en el cual vimos todo el proceso de creación, desde el armado  hasta el envío de los datos vía correo electrónico.
Pero como el tiempo pasa, y nos vamos poniendo viejos, y sabemos que las soluciones [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4065/4650880553_ec664544f4_o.png" alt="" width="450" height="235" /></p>
<p style="text-align: justify;">Hace algún largo tiempo ya, les trajimos un tutorial sobre <a href="http://www.comolohago.cl/2008/10/07/como-hacer-un-formulario-de-contacto/" target="_blank">como armar un formulario de contacto</a> para nuestros sitios Web, en el cual vimos todo el proceso de creación, desde el armado  hasta el envío de los datos vía correo electrónico.</p>
<p style="text-align: justify;">Pero como el tiempo pasa, <span style="text-decoration: line-through;"><em>y nos vamos poniendo viejos</em></span>, y sabemos que las soluciones no son eternas ni apropiadas para estos tiempos, hoy hemos decidido sacar a relucir nuestros talentos <span style="text-decoration: line-through;"><em>musicales y poéticos</em></span> desarrollísticos <em>(¿desarrolladores?)</em> y traerles una nueva versión de este formulario, ahora con sabor a limón y algunas características que lo convierten en una versión mucho más óptima que la anterior.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-3557"></span></p>
<h1 style="text-align: center;">Cómo crear un formulario de contacto &#8211; Versión 2.0</h1>
<p style="text-align: justify;">Como siempre, lo primero:</p>
<blockquote>
<h2><img src="http://www.comolohago.cl/wp-content/uploads/2010/03/search_page.png" alt="" width="27" height="27" />Detalles del tutorial</h2>
<ul>
<li><strong>Tiempo    aproximado de implementación: </strong>30 minutos.</li>
<li><strong>Dificultad:</strong> Básico <em>(para implementar tal cual)</em> &#8211; Intermedio <em>(para personalizar)</em>.</li>
<li><strong>Conocimientos previos requeridos: </strong>Entendimiento de HTML, CSS, jQuery y PHP.</li>
</ul>
<h2><img title="tools" src="http://www.comolohago.cl/wp-content/uploads/2010/03/tools.png" alt="tools" width="27" height="27" />Implementos necesarios:</h2>
<ul>
<li>Un editor Web <em>(Recomendamos Aptana Studio o Notepad++, ambos gratuitos)</em>.</li>
</ul>
</blockquote>
<p style="text-align: justify;">Ahora, la pregunta de rigor. ¿Qué trae de nuevo este formulario 2.0?:</p>
<ul>
<li>Validaciones de ingreso de datos en tiempo real mediante jQuery.</li>
<li>Validación del correo electrónico en tiempo real mediante expresiones regulares.</li>
<li>Envío de información de forma asincrónica <em>(sin recargar la página) </em>mediante el método .ajax de jQuery.</li>
<li>Mejoras de estilo y codificación.</li>
</ul>
<p>Así que con eso claro, vamos, manos a la obra:</p>
<h2>Procedimiento:</h2>
<p style="text-align: justify;">Separaremos este desarrollo en las siguientes partes:</p>
<ol>
<li style="text-align: justify;">Código HTML &#8211; Armado del formulario.</li>
<li style="text-align: justify;">Código CSS &#8211; Estilización del formulario.</li>
<li style="text-align: justify;">Código jQuery/Javascript &#8211; Validaciones.</li>
<li style="text-align: justify;">Código PHP &#8211; Envío de información.</li>
</ol>
<h2>1.- Código HTML</h2>
<p style="text-align: justify;">El armado del formulario es bastante estándar:</p>
<pre class="html" title="code">&lt;div id="container"&gt;
  &lt;form name="formulario" id="formulario" method="post" action="envio.php"&gt;
    &lt;fieldset&gt;&lt;h2&gt;Contacto&lt;/h2&gt;&lt;/fieldset&gt;

 &lt;div&gt;
 &lt;label for="nombre"&gt;Nombre: &lt;/label&gt;
 &lt;input type="text" name="nombre" id="nombre" size="60"&gt;
 &lt;span id="validar-nombre"&gt;&lt;/span&gt;
&lt;/div&gt;

 &lt;div&gt;
  &lt;label for="correo"&gt;Correo:&lt;/label&gt;
 &lt;input type="text" name="correo" id="correo" size="60"/&gt;
 &lt;span id="validar-correo"&gt;&lt;/span&gt;
 &lt;/div&gt;

&lt;div&gt;&lt;label for="sitio"&gt;Sitio Web:&lt;/label&gt;
 &lt;input type="text" name="sitio" id="sitio" size="60"/&gt;
 &lt;span id="validar-sitio"&gt;&lt;/span&gt;
&lt;/div&gt;

 &lt;div&gt;
 &lt;label for="mensaje"&gt;Mensaje: &lt;/label&gt;
 &lt;textarea name="mensaje" id="mensaje" rows="10" cols="56"&gt;&lt;/textarea&gt;
 &lt;span id="validar-mensaje"&gt;&lt;/span&gt;
 &lt;/div&gt; 

 &lt;p id="envio"&gt;
 &lt;input type="submit" name="enviar" id="enviar" value="Enviar" /&gt;
 &lt;/p&gt;    

&lt;/form&gt;
 &lt;/div&gt;</pre>
<p style="text-align: justify;">Con este código tendremos un formulario bastante estándar armado en nuestra página de contacto. Este contará con campos de texto para que el visitante ingrese su nombre, correo electrónico y sitio Web, así como un área de texto para que ingrese su mensaje. Y obviamente al final añadimos un botón para el envío.</p>
<p style="text-align: justify;">Como podrán fijarse, a continuación de cada campo de texto y área de texto, hemos añadido un <strong>span</strong> sin contenido. Esto lo hemos hecho para insertar mensajes y resultados de las validaciones posteriormente mediante jQuery.</p>
<p style="text-align: justify;">A continuación, haremos la estilización del formulario, mediante CSS.</p>
<h2 style="text-align: justify;">2.- Código CSS</h2>
<pre class="css" title="code">body {
 height: 100%;
 background: #348075;
 font-family: Arial;
 font-size: 11px;
 color: white;
}

#container {

 width: 1000px;
 margin: 0 auto;
 background: #5b5c5c;
 border: 1px solid white;
 -moz-border-radius: 20px;
 -webkit-border-radius: 20px;

}

#formulario {

 padding: 1em;

}

#formulario fieldset {

 width: 400px;
 padding: 0 0 0 0;
 border: 0;

}

#formulario label {

 display: block;
 padding: 5px 0 5px 0;

}

#formulario input[type=text], textarea {

 padding: 10px 0 10px 0;
 border: 1.5px solid black;
 color: #5b5c5c;
 font-family: inherit;
 font-size: inherit;
 -moz-border-radius: 5px;
 -webkit-border-radius: 3px;

}

#formulario input[type=text]:focus, textarea:focus {

 background: #f5f2c9;

}

#formulario input[type=submit] {

 border: none;
 margin-right: 1em;
 padding: 6px;
 text-decoration: none;
 font-size: 12px;
 font-weight: bold;
 -moz-border-radius: 4px;
 background: #348075;
 color: white;
 width: 100px;

}

#formulario input[type=submit]:hover {
 background: #287368;
 cursor: pointer;
}

#validar-nombre, #validar-correo, #validar-sitio, #validar-mensaje {
 position: absolute;
 width: 100px;
}

#validar-nombre img, #validar-correo img, #validar-mensaje img {
 padding:10px 0 0 5px;
}</pre>
<p style="text-align: justify;">Como podrán ver, en algunas partes hemos utilizado la propiedad <strong>border-radius</strong> <em>(con moz y webkit para apuntar a distintos navegadores)</em>. Esta propiedad, tal como hemos indicado anteriormente, es de CSS3, por lo que no está completamente soportada por todos los navegadores, especialmente los más antiguos. El efecto que logra es el de bordes redondeados, así que ojo, si utilizan IE o algún navegador de mayor antiguedad no lo podrán apreciar.</p>
<h2 style="text-align: justify;">3.- Código jQuery / Javascript</h2>
<p style="text-align: justify;">Acá debemos fijarnos en algunas cosas. Primero, debemos asegurarnos de descargar e incluir jQuery en la cabecera de nuestro formulario, y luego, crear un documento js en el que incluiremos el código en jQuery que hará las validaciones y el correspondiente a Javascript que contendrá la expresión regular que evaluará la dirección de correo ingresada para ver si es válida. Partamos con jQuery:</p>
<pre class="javascript" title="code">$(function(){

 var valor;
 var i = 0;

 $('#nombre').focus(function(){

     $('#resultado-nombre').remove();
     $('#validar-nombre').append('&lt;p&gt;* Obligatorio&lt;/p&gt;');

 });

 $('#nombre').blur(function(){

     $('.advertencia').remove();

     valor = $('#nombre').val();

     if(valor != '') {
         $('&lt;img src="imagenes/accept.png" id="resultado-nombre" /&gt;').appendTo('#validar-nombre');
     }
     else {
         $('&lt;img src="imagenes/delete.png" id="resultado-nombre" /&gt;').appendTo('#validar-nombre');
     }

 });

 $('#correo').focus(function(){

     $('#resultado-correo').remove();
     $('#validar-correo').append('&lt;p&gt;* Obligatorio&lt;/p&gt;');

 });

 $('#correo').blur(function(){

     $('.advertencia').remove();

     valor = $('#correo').val();

     if(valor != '') {

       if(validaCorreo(valor)){

          $('&lt;img src="imagenes/accept.png" id="resultado-correo" /&gt;').appendTo('#validar-correo');
          var valido = true;

       }
      else {
          $('&lt;span id="resultado-correo"&gt;Correo no valido&lt;/span&gt;').appendTo("#validar-correo");
      }
    }
    else {
         $('&lt;img src="imagenes/delete.png" id="resultado-correo" /&gt;').appendTo('#validar-correo');
    }

 });

 $('#sitio').focus(function(){

     $('#validar-sitio').append('&lt;p&gt;* Opcional&lt;/p&gt;');

 });

 $('#sitio').blur(function(){

      $('.advertencia').remove();

 });

 $('#mensaje').focus(function(){

      $('#resultado-mensaje').remove();
      $('#validar-mensaje').append('&lt;p&gt;* Obligatorio&lt;/p&gt;');

 });

 $('#mensaje').blur(function(){

     $('.advertencia').remove();

     valor = $('#mensaje').val();

     if(valor != '') {
          $('&lt;img src="imagenes/accept.png" id="resultado-mensaje" /&gt;').appendTo('#validar-mensaje');
     }
     else {
        $('&lt;img src="imagenes/delete.png" id="resultado-mensaje" /&gt;').appendTo('#validar-mensaje');
     }

 });

 $('#enviar').click(function(){

       if($('#nombre').val()!= '' &amp;&amp; $('#correo').val()!='' &amp;&amp; $('#mensaje').val()!='' &amp;&amp; valido) {

         $('.advertencia').remove();

         $('#envio').append('&lt;img src="imagenes/ajax-loader.gif" alt="Procesando envio" id="cargando" /&gt;');

         var nombre = $('#nombre').val();
         var correo = $('#correo').val();
         var sitio = $('#sitio').val();
         var mensaje = $('#mensaje').val();

       $.ajax({
           url: 'envio.php',
           type: 'POST',
           data: 'nombre=' + nombre + '&amp;correo=' + correo + '&amp;sitio=' + sitio + '&amp;mensaje=' + mensaje,

           success: function(resultado) {
               $('#respuesta').remove();
               $('#envio').append('&lt;span id="respuesta"&gt;' + resultado + '&lt;/span&gt;');
               $('#cargando').fadeOut(500, function() {
                   $(this).remove();
               });

           }
       });

       return false;

   }
   else {
       $('#envio').append('&lt;span&gt;Debe completar los datos requeridos.&lt;/span&gt;');
       return false;
    }

 });

});</pre>
<p style="text-align: justify;">Varias cosas a las que ponerle atención en el código anterior:</p>
<ul>
<li style="text-align: justify;">Utilizamos 3 imágenes en los procesos de validación y envío <em>(accept.png, delete.png, ajax-loader.gif</em>)<em>. </em>Estas imágenes son utilizadas para validar correcta e incorrectamente así como mostrar un pequeño cargador al momento de enviar los datos. Pueden obtenerlas en el código fuente que hemos adjuntado al final.</li>
<li style="text-align: justify;">Hacemos uso del método <strong>ajax</strong> de jQuery, el cual nos permite enviar asincrónicamente los datos a una página en PHP mediante un método como POST o GET y que esta se ejecute sin la necesidad de recargar la página. Como se puede apreciar, en caso de éxito de esta llamada <em>(el código correspondiente a success)</em>, hay un parámetro que es devuelto <em>(resultado)</em>, el cual corresponde a un mensaje desplegado por el script que ejecutamos, lo que podremos ver más adelante.</li>
<li style="text-align: justify;">Hemos incluido en 2 partes un <strong>return false</strong>. Esto se ha hecho para que el formulario no ejecute el action <em>(de enviar a la página envio.php)</em> de forma normal, sino que ejecute todo de forma asincrónica. Si el usuario tiene desactivado Javascript en su navegador, se ejecutará todo de forma normal.</li>
<li style="text-align: justify;">En la validación del correo se hace un llamado a una función que lo evaluará, esa la incluiremos a continuación.</li>
</ul>
<p style="text-align: justify;">El código básicamente ejecuta acciones cada vez que se selecciona un campo de texto <em>(focus)</em> y/o se sale de el <em>(blur)</em>. Ahí evalua de acuerdo a los parámetros que hemos definido <em>(que existan datos)</em> y en base a eso muestra un resultado de la validación. Luego, al final, cuando se hace click en el botón de envío, evalúa que existan datos en todos los campos y en ese caso envía. De lo contrario, despliega un mensaje indicando la necesidad de completar el formulario.</p>
<p style="text-align: justify;">Luego, a continuación del código jQuery, incluiremos una función en Javascript que evaluará el correo mediante una expresión regular para verificar que tenga el formato correcto:</p>
<pre class="javascript" title="code">function validaCorreo(correo) {

 var expresion = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)
|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})
\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.
|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.)
{2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
 return expresion.test(correo);

}</pre>
<p style="text-align: justify;">Entre estos 2 códigos se encargan de toda la validación del formulario, tal como indicamos, en tiempo real. Lo que nos queda hacer ahora es crear nuestro script en PHP para el envío final de los datos.</p>
<h2 style="text-align: justify;">4.- Código PHP</h2>
<pre class="php" title="code">&lt;?php

 /* Recepcionamos los datos enviados asincrónicamente */

 $nombre = $_POST['nombre'];
 $correo = $_POST['correo'];
 $sitio = $_POST['sitio'];
 $mensaje = $_POST['mensaje'];

 /* Definimos el correo donde enviaremos el mensaje y el asunto */

 $destino = "correo@ejemplo.com";
 $asunto = "Contacto sitio Web";

 /* Definimos el formato del mensaje a enviar */

 $cuerpo = "&lt;strong&gt;Nombre: &lt;/strong&gt;".$nombre."&lt;br /&gt;
 &lt;strong&gt;Correo: &lt;/strong&gt;".$correo."&lt;br /&gt;
 &lt;strong&gt;Sitio Web: &lt;/strong&gt;".$sitio."&lt;br /&gt;
 &lt;strong&gt;Mensaje: &lt;/strong&gt;".$mensaje;

 /* Definimos las cabeceras del mensaje */

 $cabecera = "MIME-Version: 1.0\r\n";
 $cabecera .= "Content-type:text/html; charset=iso-8859-1\r\n";
 $cabecera .= "From: $correo\r\n";
 $cabecera .= "Reply-to: $correo\r\n";
 $cabecera .= "Cc: $correo\r\n";

 /* Enviamos vía correo, devolviendo un mensaje en caso de éxito o falla */ 

 if(mail($destino, $asunto, $cuerpo, $cabecera)) {
    echo 'Su mensaje ha sido enviado.
     De ser necesario, nos pondremos en contacto con Ud.';
 }
 else {
    echo 'No se pudo enviar el mensaje. Int&amp;eacute;ntelo nuevamente';
 }

?&gt;</pre>
<p style="text-align: justify;">Los mensajes desplegados en el <strong>if</strong> y <strong>else</strong> cuando enviamos el correo son aquellos que son devueltos al método <strong>.ajax</strong> de jQuery <em>(el parámetro resultado del que hablamos anteriormente)</em>, los cuales son desplegados en el formulario.</p>
<h2 style="text-align: justify;">Conclusión</h2>
<p style="text-align: justify;">Y con eso tenemos nuestro formulario de contacto terminado, el cual valida en tiempo real y envía los datos de forma asincrónica. En caso de que el visitante tenga Javascript desactivado en su navegador, esto se ejecutará de forma normal, es decir, el script PHP se cargará al momento de presionar el botón Enviar y no habrá validación en tiempo real.</p>
<p style="text-align: justify;">Antes de terminar:</p>
<p style="text-align: center;"><a href="http://www.comolohago.cl/uploads/demos/formulario/contacto.html" target="_blank"><img class="aligncenter" style="border: 0pt none;" src="http://farm5.static.flickr.com/4043/4651670584_24037a9779_o.png" alt="" width="279" height="105" /></a></p>
<p style="text-align: center;"><a href="http://www.comolohago.cl/uploads/formulario.rar" target="_blank"><img class="aligncenter" style="border: 0pt none;" src="http://farm5.static.flickr.com/4067/4651052375_0ca30dda48_o.png" alt="" width="279" height="105" /></a></p>
<p style="text-align: justify;">Y como siempre, les recordamos que este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" />Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/05/29/como-crear-un-formulario-de-contacto-version-2-0/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>Cómo crear un cuadro de información de autores en Wordpress</title>
		<link>http://www.comolohago.cl/2010/05/22/como-crear-un-cuadro-de-informacion-de-autores-en-wordpress/</link>
		<comments>http://www.comolohago.cl/2010/05/22/como-crear-un-cuadro-de-informacion-de-autores-en-wordpress/#comments</comments>
		<pubDate>Sun, 23 May 2010 02:33:05 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[informacion de autores]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3507</guid>
		<description><![CDATA[
Es común que cuando tenemos múltiples autores escribiendo en un sitio, querramos mostrar la información del responsable de cada artículo para que los usuarios puedan conocer quien está detrás de cada cosa que se escribe. Si bien en CLH en un principio optamos por no mostrar la información, y luego hacer una pequeña referencia al [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4065/4630128565_59468f80c9_o.png" alt="" width="451" height="184" /></p>
<p style="text-align: justify;">Es común que cuando tenemos múltiples autores escribiendo en un sitio, querramos mostrar la información del responsable de cada artículo para que los usuarios puedan conocer quien está detrás de cada cosa que se escribe. Si bien en CLH en un principio optamos por no mostrar la información, y luego hacer una pequeña referencia al comienzo de cada artículo, eventualmente hemos llegado al punto de incluirlo <em>(principalmente por Dexter, que quiere ser famoso <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  )</em></p>
<p style="text-align: justify;">En la búsqueda de alternativas, dimos con varios plugins que ayudan a automatizar la tarea, pero nada que nos satisfaciera por completo en cuanto a diseño y personalización. Luego de analizar el tema más a fondo fue posible darse cuenta que armar un cuadro de información desde cero no es una tarea compleja, y si entrega una gran flexibilidad para el armado, por lo que echamos manos a la obra y hoy, en un sencillo y rápido tutorial, les enseñaremos el proceso paso a paso.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-3507"></span></p>
<h1 style="text-align: center;">Cómo crear un cuadro de información de autores en Wordpress</h1>
<p style="text-align: justify;">Antes de todo, como siempre:</p>
<blockquote>
<h2><img src="http://www.comolohago.cl/wp-content/uploads/2010/03/search_page.png" alt="" width="27" height="27" />Detalles del tutorial</h2>
<ul>
<li><strong>Tiempo    aproximado de implementación: 10</strong> minutos.</li>
<li><strong>Dificultad:</strong> Básico <em>(para implementar tal cual)</em> &#8211; Intermedio <em>(para personalizar)</em>.</li>
<li><strong>Conocimientos previos requeridos: </strong>Entendimiento de HTML, CSS, PHP y las funciones de Wordpress.</li>
</ul>
<h2><img title="tools" src="http://www.comolohago.cl/wp-content/uploads/2010/03/tools.png" alt="tools" width="27" height="27" />Implementos necesarios:</h2>
<ul>
<li>Un sitio con Wordpress.</li>
</ul>
</blockquote>
<p style="text-align: justify;">
<h2 style="text-align: justify;">Procedimiento:</h2>
<p style="text-align: justify;">La implementación de un cuadro de información de autores, cuenta con varias partes:</p>
<ul>
<li style="text-align: justify;">Código HTML para crear el cuadro.</li>
<li style="text-align: justify;">Código CSS para estilizarlo.</li>
<li style="text-align: justify;">Código PHP para insertar las funciones de Wordpress.</li>
</ul>
<p style="text-align: justify;">Así que vamos, a implementar:</p>
<h2 style="text-align: justify;">Código HTML</h2>
<p style="text-align: justify;">Con esto armaremos la estructura de nuestro cuadro de información de autores, el <em>esqueleto</em> por ponerlo de alguna forma. En el, incluiremos principalmente 3 cosas:</p>
<ol>
<li>Imagen del autor.</li>
<li>Información del autor <em>(nombre y sitio Web)</em>.</li>
<li>Bio del autor.</li>
</ol>
<p style="text-align: justify;">Para verlo de forma más gráfica, armaremos algo de la siguiente forma:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4028/4630191997_2f99d2eb43_o.png" alt="" width="600" height="263" /></p>
<p style="text-align: justify;">Como podemos ver, no es demasiado complejo. Desarmando esa imagen es posible apreciar que necesitamos un Div para el cuadro completo que debe contener a su vez 2 Div&#8217;s: Uno para la imagen del autor y una para la bio e información del autor. Así que viendo esto en código, sería algo de la siguiente forma:</p>
<pre class="html" title="code">&lt;div id="cuadro-info"&gt;
   &lt;div id="imagen-autor"&gt;
        Aqui iría la imagen del autor
   &lt;/div&gt;
   &lt;div id="info-bio-autor"&gt;
       Aquí iría la información y bio del autor
   &lt;/div&gt;
&lt;/div&gt;</pre>
<p style="text-align: justify;">Vamos viendo. En el código anterior está claro que irá contenido dentro de cada Div, por lo que rellenarlo es bastante sencillo. Podríamos agregar una etiqueta para imágenes y luego abajo escribir el texto que querramos que aparezca. Sin embargo, ¿qué pasa si tenemos múltiples autores?, o más bien ¿cómo le decimos a Wordpress que incluya la información del autor del artículo y no de otra persona?. Ahí es donde entran las funciones de Wordpress.</p>
<h2 style="text-align: justify;">Código PHP</h2>
<p style="text-align: justify;">Afortunadamente, Wordpress trae funciones incorporadas que nos permiten referenciar de manera muy sencilla la información de un autor en particular y relacionarla al artículo desde donde se está haciendo la llamada. Así, si Dexter escribe un artículo, aparece el cuadro con la información de Dexter, pero si el artículo lo escribe Topher, aparecerá su información, ya que WP sabe diferenciar de acuerdo a la ID de cada artículo y recupera los datos en base a eso.</p>
<p style="text-align: justify;">Así que, listando, la información que debemos rescatar es:</p>
<ul>
<li>Imagen del autor.</li>
<li>Su nombre o pseudónimo.</li>
<li>Un enlace a su sitio Web.</li>
<li>Su bio.</li>
</ul>
<p style="text-align: justify;">Si se fijan, los 3 últimos parámetros están incluidos en el perfil de cada autor en Wordpress, por lo que es sumamente sencillo recuperarlos. Ahora, el primero, correspondiente a la imagen es un poco más complejo, ya que el perfil en si no está asociado a ninguna imagen.</p>
<p style="text-align: justify;">¿La solución?, Wordpress incluye una función que nos permite referenciar el <strong>gravatar</strong> asociado a la cuenta de correo del autor. Así que si el autor tiene un gravatar, este será mostrado en el cuadro.</p>
<p style="text-align: justify;">O sea, en base al listado anterior, llamaremos a las siguientes funciones de Wordpress:</p>
<ul>
<li>get_avatar( ), entregando como parámetro la función the_author_meta y como parámetro a esta última <strong>user_email</strong>.</li>
<li>the_author_link( ), sin parámetros.</li>
<li>the_author_meta( ) , entregando como parámetro <strong>user_url</strong>.</li>
<li>the_author_meta( ), entregando como parámetro <strong>description</strong>.</li>
</ul>
<p style="text-align: justify;">Donde:</p>
<p style="text-align: justify;">La función <strong>get_avatar</strong> nos permite recuperar el gravatar asociado a una cuenta de correo. Por eso pasamos como parámetro el correo electrónico del autor del artículo.</p>
<p style="text-align: justify;">La función <strong>the_author_link</strong> nos entrega el nombre o pseudónimo del autor, enlazado a una enumeración de todos los artículos que ha escrito en el sitio.</p>
<p style="text-align: justify;">La función <strong>the_author_meta</strong> nos entrega información relacionada al autor del artículo, dependiendo del parámetro enviado, por eso al enviar <strong>user_url</strong> nos entrega el sitio Web asociado a la cuenta del autor, y si enviamos <strong>description</strong> nos entrega la bio que está en su perfil.</p>
<p style="text-align: justify;">Así que con eso, el código quedaría de la siguiente forma <em>(incluyendo el HTML anterior)</em>:</p>
<pre class="php" title="code">&lt;div id="cuadro-info"&gt;
   &lt;div id="imagen-autor"&gt;
     &lt;a href="&lt;?php the_author_meta('user_url'); ?&gt;"&gt;
    &lt;?php echo get_avatar( get_the_author_meta('user_email'), '80', '' );
      ?&gt;
     &lt;/a&gt;
   &lt;/div&gt;
   &lt;div id="info-bio-autor"&gt;
       &lt;h4&gt;Escrito por &lt;?php the_author_link(); ?&gt;&lt;/h4&gt;
       &lt;p&gt;&lt;?php the_author_meta('description'); ?&gt;&lt;/p&gt;
   &lt;/div&gt;
&lt;/div&gt;</pre>
<p style="text-align: justify;">Como pueden ver, hicimos uso de las funciones destacadas anteriormente para rescatar el gravatar del autor, su nombre, sitio Web y bio del perfil.</p>
<p style="text-align: justify;">Ahora, si se fijan, hay un parámetro que incluimos en la función <strong>get_avatar</strong> que no indicamos anteriormente, el cual tiene un valor de <strong>80</strong>. Este parámetro corresponde al tamaño de la imagen. Como los avatars son cuadrados, este valor se toma como ancho y alto de la imagen, la cual en este caso será de 80 pixeles.</p>
<p style="text-align: justify;">Con eso ya tenemos nuestro cuadro armado en estructura y con la información del autor mostrándose, pero probablemente si lo vemos en el navegador, se verá desordenado y bastante horrible, ya que no hemos estilizado nada. Eso, precisamente, será nuestro próximo paso:</p>
<h2 style="text-align: justify;">Código CSS</h2>
<p style="text-align: justify;">Mediante CSS vamos a encargarnos de posicionar los elementos dentro de cada bloque y de estilizar para hacerlo más agradable a la vista. El código que entregamos aquí es referencial, de acuerdo a lo que utilizamos para los cuadros de este sitio, así que siéntanse libres de modificar de acuerdo al estilo de su sitio:</p>
<pre class="css" title="code">div#info-autor {
 background: #f7f7fa; padding: 10px;
 margin: 0 0 15px 0;
 -moz-border-radius: 8px;
 -webkit-border-radius: 8px;
 border-radius: 8px;
 overflow: auto;
}
div#info-autor div#imagen-autor {
 float: left;
 margin: 0 10px 5px 0;
 border: 3px solid #626263;
}
div#info-autor div#imagen-autor a img{
 border: none;
}
div#info-autor p{
 text-align: justify;
 font-style: italic;
}
div#info-autor h4{
 font-weight: bold;
 padding-bottom: 5px;
 color: #403f3a;
 letter-spacing: -1px;
 line-height: 1em;
 font-size: 18px;
}</pre>
<p style="text-align: justify;">Algunos detalles a tener en consideración:</p>
<ul>
<li>La propiedad border-radius <em>(-moz-border-radius para Firefox y -webkit-border-radius para navegadores basados en Webkit)</em>, corresponde a CSS3, por lo que navegadores más antiguos o algunos modernos que no soporten CSS3 por completo <em>(IE)</em> no desplegarán correctamente el efecto. ¿Qué efecto se preguntarán?, esquinas redondeadas para los bloques.</li>
<li>Los últimos 2 bloques de código <em>(para párrafos y para encabezados h4)</em> los incluímos para que el estilo fuera distinto al que por defecto tiene la hoja de estilo en otros sectores del sitio. Sin embargo, esto es opcional.</li>
</ul>
<p style="text-align: justify;">Y con esos ajustes de CSS tenemos terminado nuestro cuadro de información de autores. ¿Se preguntan como queda el resultado? Fácil de ver, siguiendo más abajo, luego de la calificación del tutorial pueden verlo completamente implementado.</p>
<p style="text-align: justify;">Nuevamente, los parámetros tanto de estilo como de estructura, son los que utilizamos acá. Si quieren armarlo de forma distinta, o posicionar y estilizar de manera más acorde a su sitio, no tengan miedo en jugar con el código. Esa es la base, pero todo lo que se puede lograr depende de cada uno <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify;">Por ahora, les recordamos que como siempre este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/05/22/como-crear-un-cuadro-de-informacion-de-autores-en-wordpress/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Cómo crear una galería de imágenes para tu Web</title>
		<link>http://www.comolohago.cl/2010/03/29/como-crear-una-galeria-de-imagenes-para-tu-web/</link>
		<comments>http://www.comolohago.cl/2010/03/29/como-crear-una-galeria-de-imagenes-para-tu-web/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 18:41:56 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3194</guid>
		<description><![CDATA[
Continuando con nuestra larga saga de tutoriales sobre diseño Web, en esta ocasión les traemos un pequeño desarrollo que sin duda puede ser de gran utilidad para nuestros sitios, en especial si queremos montar una especie de portafolio o una simple galería para desplegar imágenes.
En un esfuerzo conjunto e integración de tecnologías como PHP, jQuery, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm3.static.flickr.com/2761/4471619828_0bc2fd38de_o.png" alt="" width="450" height="174" /></p>
<p style="text-align: justify;">Continuando con nuestra larga saga de tutoriales sobre diseño Web, en esta ocasión les traemos un pequeño desarrollo que sin duda puede ser de gran utilidad para nuestros sitios, en especial si queremos montar una especie de portafolio o una simple galería para desplegar imágenes.</p>
<p style="text-align: justify;">En un esfuerzo conjunto e integración de tecnologías como PHP, jQuery, CSS, XHTML y un poco de MySQL, hoy veremos un paso a paso de como construir una simple galería de imágenes desde cero.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-3194"></span></p>
<h1 style="text-align: center;">Cómo crear una galería de imágenes para tu Web</h1>
<p style="text-align: justify;">Como siempre, lo primero:</p>
<blockquote>
<h2 style="text-align: justify;"><img class="alignnone" src="http://www.comolohago.cl/wp-content/uploads/2010/03/search_page.png" alt="" width="27" height="27" />Detalles del tutorial</h2>
<ul style="text-align: justify;">
<li><strong>Tiempo aproximado de implementación: </strong>60 minutos.</li>
<li><strong>Dificultad:</strong> Intermedio.</li>
<li><strong>Conocimientos requeridos:</strong> Idealmente nociones de PHP, XHTML, CSS, jQuery y bases de datos, especialmente si quieren personalizar el diseño final. De cualquier forma, todo será explicado paso a paso en caso de que deseen implementar tal como está acá.</li>
</ul>
<h2 style="text-align: justify;"><img class="alignnone size-full wp-image-3161" title="tools" src="http://www.comolohago.cl/wp-content/uploads/2010/03/tools.png" alt="tools" width="27" height="27" />Implementos necesarios:</h2>
<ul style="text-align: justify;">
<li>Un servidor que pueda ejecutar archivos PHP. <em>(Recomendamos XAMPP</em> <em>para Windows, Linux y Mac)</em>.</li>
<li>Un sistema gestor de bases de datos MySQL <em>(En XAMPP viene uno incluido)</em>.</li>
<li>Opcionalmente un editor Web <em>(Recomendamos Adobe Dreamweaver o Aptana Studio).</em></li>
<li>Un editor de imágenes <em>(Recomendamos Adobe Photoshop)</em>.</li>
<li>La librería jQuery, que pueden obtener desde su <a href="http://jquery.com/" target="_blank">sitio oficial</a>.</li>
<li>Imágenes para montar en la galería. Para este caso utilizamos algunas de la <a href="http://www.flickr.com/photos/27805557@N08/" target="_blank">galería de JoesSistah</a>, las cuales están bajo una licencia Creative Commons.</li>
</ul>
</blockquote>
<p style="text-align: justify;">Con eso claro, vamos, manos a la obra:</p>
<p style="text-align: justify;">1.- Lo primero que haremos será crear una base de datos en nuestro MySQL y en el una tabla llamada imagen, la cual contendrá 4 campos de información:</p>
<pre class="sql" title="code">CREATE TABLE 'clh'.'imagen' (
'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'titulo' VARCHAR( 50 ) NOT NULL ,
'descripcion' TEXT NOT NULL ,
'archivo' VARCHAR( 20 ) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_unicode_ci</pre>
<p style="text-align: justify;">Repasando nuestro código anterior, lo que hemos hecho ha sido crear una tabla llamada imagen, la cual contiene 4 campos:</p>
<ul style="text-align: justify;">
<li><strong>id:</strong> Contendrá un número identificatorio para cada imagen, lo hemos dejado con auto increment para que cada vez que se inserte un nuevo registro aumente automáticamente.</li>
<li><strong>titulo:</strong> Contendrá el título de la imagen.</li>
<li><strong>descripcion: </strong>Contendrá la descripción de la imagen.</li>
<li><strong>archivo:</strong> Contendrá el nombre del archivo y su extensión para luego llamarlo desde nuestra galería.</li>
</ul>
<p style="text-align: justify;">2.- Luego que hemos creado la tabla, insertaremos información de 4 imágenes:</p>
<pre class="sql" title="code">INSERT INTO imagen( titulo, descripcion, archivo ) VALUES (
'Paisaje Numero 1', 'Imagen representativa de un paisaje con costa',
'1.jpg')

INSERT INTO imagen( titulo, descripcion, archivo ) VALUES (
'Paisaje Numero 2', 'Imagen representativa de un paisaje con nieve',
'2.jpg')

INSERT INTO imagen( titulo, descripcion, archivo ) VALUES (
'Paisaje Numero 3', 'Imagen representativa de un paisaje con una
luna en el fondo', '3.jpg')

INSERT INTO imagen( titulo, descripcion, archivo ) VALUES (
'Imagen abstracta', 'Representacion de una mariposa',
'4.jpg')</pre>
<p style="text-align: justify;">3.- Con eso debiésemos tener una tabla de la siguiente forma:</p>
<p style="text-align: justify;">
<table id="wp-table-reloaded-id-2-no-1" class="wp-table-reloaded wp-table-reloaded-id-2">
<thead>
	<tr class="row-1">
		<th class="column-1">id</th><th class="column-2">titulo</th><th class="column-3">descripcion</th><th class="column-4">archivo</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2">
		<td class="column-1">1</td><td class="column-2">Paisaje Numero 1</td><td class="column-3">Imagen representativa de un paisaje con costa</td><td class="column-4">1.jpg</td>
	</tr>
	<tr class="row-3">
		<td class="column-1">2</td><td class="column-2">Paisaje Numero 2</td><td class="column-3">Imagen representativa de un paisaje con nieve</td><td class="column-4">2.jpg</td>
	</tr>
	<tr class="row-4">
		<td class="column-1">3</td><td class="column-2">Paisaje Numero 3</td><td class="column-3">Imagen representativa de un paisaje con una luna en el fondo</td><td class="column-4">3.jpg</td>
	</tr>
	<tr class="row-5">
		<td class="column-1">4</td><td class="column-2">Imagen abstracta</td><td class="column-3">Representacion de una mariposa</td><td class="column-4">4.jpg</td>
	</tr>
</tbody>
</table>
</p>
<p style="text-align: justify;">4.- Con nuestra tabla creada, y antes de empezar a codificar, haremos la preparación de nuestras imágenes. Para la galería, necesitaremos 3 tamaños de las mismas imágenes, 2 los fijaremos en imágenes distintas y 1 lo redimensionaremos vía CSS. Así que necesitaremos:</p>
<ul style="text-align: justify;">
<li>Tamaño normal de las imágenes para la vista completa. En este caso utilizamos 400px.</li>
<li>Tamaño reducido para los previews o thumbnails. En este caso utilizamos 150px.</li>
<li>Tamaño aún más reducido para los previews bajo la vista completa. En este caso utilizamos 75px. Este es el que ajustaremos vía CSS.</li>
</ul>
<p>Los 2 primeros pueden hacerlo mediante su editor de imágenes favorito.</p>
<p style="text-align: justify;">5.- Con todo aquello listo, procedemos a codificar. Nuestra galería contará de 2 archivos en formato PHP, uno donde desplegaremos un preview de las imágenes y añadiremos un pequeño efecto en jQuery para que estas aparezcan oscuras al cargar la página y que solo sean completamente visibles cuando el usuario pase el mouse por encima, y el otro funcionará como un visor de la imagen en tamaño completo, con su respectiva información y enlaces para imágenes siguientes y anteriores, así como otro preview de la misma galería en un tamaño más pequeño. Adicionalmente codificaremos un archivo en formato CSS para el estilo de la galería y un archivo en formato JS para nuestras funciones en jQuery. Así que resumiendo, los archivos que crearemos son:</p>
<ul>
<li>index.php</li>
<li>visor.php</li>
<li>estilos.css</li>
<li>funciones.js</li>
</ul>
<p style="text-align: justify;">Vamos con el primero. Los comentarios como siempre, dentro del código:</p>
<h2 style="text-align: justify;">index.php</h2>
<pre class="php" title="code">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt;
		/* Incluimos la hoja de estilos, la libreria jquery y
                nuestra libreria de funciones */
                &lt;link rel="stylesheet" href="css/estilos.css" /&gt;
		&lt;script type="text/javascript" src="js/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="js/funciones.js"&gt;&lt;/script&gt;
		&lt;title&gt;Galer&amp;iacute;a de Im&amp;aacute;genes&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;

		&lt;div id="galeria"&gt;
			&lt;h1&gt;Mi galer&amp;iacute;a de im&amp;aacute;genes&lt;/h1&gt;
		&lt;?php
                /* Conectamos a la BD para obtener la informacion de
                las imagenes que tenemos guardadas */
  		$conexion = new mysqli('localhost', 'usuario', 'clave', 'clh');
		$consulta = "SELECT id, titulo, descripcion, archivo
                FROM imagen";

		// Obtenemos el resultado de la consulta
                $resultado = $conexion-&gt;query($consulta);

		// Desplegamos las imagenes con un enlace a su id
                while($filas = $resultado-&gt;fetch_array(MYSQLI_ASSOC)) {

		?&gt;
		&lt;a href="visor.php?id=&lt;?php echo $filas['id']; ?&gt;"&gt;
   &lt;img src="img/t-&lt;?php echo $filas['archivo']; ?&gt;" alt="imagen" /&gt;
         &lt;/a&gt;
		&lt;?php }
		?&gt;

		&lt;/div&gt;

	&lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">En resumen, lo que hemos hecho en nuestro index.php, yendo paso a paso:</p>
<ol style="text-align: justify;">
<li>Incluimos la hoja de estilo, la librería jQuery y nuestra librería de funciones.</li>
<li>Conectamos a la base de datos y obtenemos toda la información de las imágenes que tenemos almacenadas.</li>
<li>Desplegamos las imágenes con un enlace hacia el visor y pasamos como parámetro el id de la imagen para luego obtener más información.</li>
</ol>
<p style="text-align: justify;">Y ahora continuamos con el visor, en donde podremos mostrar las imágenes en tamaño completo y con más información:</p>
<h2 style="text-align: justify;">visor.php</h2>
<pre class="php" title="code">&lt;?php
/* Obtenemos el id que fue pasado
como parametro por URL, y luego
creamos 2 variables: prev y sig
que corresponden a la id anterior y
siguiente de la imagen actual */
$id = $_GET['id'];
$prev = $id-1;
$sig = $id+1;

/* Conectamos a la BD y obtenemos la
informacion de la imagen actual*/
$conexion = new mysqli('localhost', 'usuario', 'clave', 'clh');
$consulta = "SELECT titulo, descripcion, archivo
FROM imagen WHERE id = $id";

$resultado = $conexion-&gt;query($consulta);

$fila = $resultado-&gt;fetch_array(MYSQLI_ASSOC);

/* Luego conectamos a la BD y obtenemos la
primera y ultima id de imagen, para saber cuando
se trata de la ultima y/o primera imagen de la
galeria */
$consulta = "SELECT min(id) as minimo, max(id) as maximo FROM imagen";
$resultado = $conexion-&gt;query($consulta);

$datos = $resultado-&gt;fetch_array(MYSQLI_ASSOC);
?&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&gt;
// Creamos el titulo de la pagina de acuerdo a la imagen
&lt;title&gt;Galer&amp;iacute;a de Im&amp;aacute;genes - &lt;?php echo $fila['titulo'];?&gt;
&lt;/title&gt;
// Incluimos la hoja de estilo y librerias
&lt;link rel="stylesheet" href="css/estilos.css" /&gt;
&lt;script type="text/javascript" src="js/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/funciones.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div id="contenedor"&gt;
  &lt;?php
/* Comparamos la id actual con la menor id de la tabla
para saber si es la primera imagen de la galeria.
Si no es igual, mostramos un enlace para la imagen
anterior */
	if($id != $datos['minimo']) {
  ?&gt;
  &lt;a  href="visor.php?id=&lt;?php echo $prev; ?&gt;"&gt;
  &lt;img src="img/back.png" /&gt;
   &lt;/a&gt;
/* De lo contrario, mostramos una imagen
indicando que no hay nada antes */
  &lt;?php }
	else {
  ?&gt;
  &lt;img src="img/block.png" alt="Primera imagen" /&gt;

  &lt;?php }
  ?&gt;

/* Desplegamos la imagen actual en tamaño completo
con su respectiva descripcion */
  &lt;img id="imgcompleta" src="img/&lt;?php echo $fila['archivo']; ?&gt;"
  alt="&lt;?php echo $fila['descripcion'];?&gt;" /&gt;

/* Comparamos la id actual a la mayor id de la tabla
para saber si es la ultima imagen. Si no es igual
mostramos un enlace para la imagen siguiente */
  &lt;?php if($id != $datos['maximo']){
  ?&gt;

  &lt;a  href="visor.php?id=&lt;?php echo $sig; ?&gt;"&gt;
  &lt;img src="img/next.png" /&gt;
  &lt;/a&gt;

/* De lo contrario, mostramos una imagen
indicando que no hay nada despues */
  &lt;?php }
  else {
  ?&gt;
  &lt;img src="img/block.png"  alt="&amp;Uacute;ltima imagen" /&gt;

  &lt;?php }?&gt;
/* Establecemos un pequeño div para la
informacion de la imagen. Cuando el usuario
pase el mouse por encima, apareceran los datos
(titulo y descripcion) */
  &lt;div id="masinfo"&gt;&lt;h4&gt;Informaci&amp;oacute;n de la imagen &lt;a href="#"&gt;&lt;img src="img/add.png" alt="M&amp;aacute;s informaci&amp;oacute;n" /&gt;&lt;/a&gt;&lt;/h4&gt;&lt;/div&gt;

/* Este div mostrara la informacion de la imagen.
Por defecto lo dejaremos oculto mediante CSS y
solo se mostrara al pasar el mouse sobre el */
     &lt;div id="info"&gt;
     &lt;p&gt;T&amp;iacute;tulo: &lt;?php echo $fila['titulo'];?&gt;&lt;/p&gt;
     &lt;p&gt;Descripci&amp;oacute;n: &lt;?php echo $fila['descripcion'];?&gt;&lt;/p&gt;
     &lt;/div&gt;
  &lt;/div&gt;

/* Al igual que en index, mostraremos la
galeria completa, solo que esta vez las
imagenes seran mas pequeñas */
 &lt;div id="galeria-small"&gt;
	&lt;h3&gt;Mis otras im&amp;aacute;genes&lt;/h3&gt;
	&lt;?php 

	$cons = "SELECT id, titulo, descripcion, archivo FROM imagen";

	$res = $conexion-&gt;query($cons);

	while($filas = $res-&gt;fetch_array(MYSQLI_ASSOC)) {

	?&gt;

	&lt;a href="visor.php?id=&lt;?php echo $filas['id']; ?&gt;"&gt;
        &lt;img src="img/t-&lt;?php echo $filas['archivo']; ?&gt;" alt="imagen" /&gt;
        &lt;/a&gt;

	&lt;?php }

	?&gt;

  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">Resumiendo el archivo anterior, lo que hicimos fue:</p>
<ol style="text-align: justify;">
<li>Obtuvimos la id enviada por parámetro para obtener la información de la imagen actual.</li>
<li>Obtuvimos la primera y última id de imágenes almacenadas para saber cuando tratamos con la primera y/o última imagen de la galería.</li>
<li>Cargamos la hoja de estilos y librerías.</li>
<li>Comparamos la id actual con la menor existente en la base de datos para saber si es la primera imagen de la galería. De ser así, mostramos una imagen que indica que no hay nada antes. De lo contrario, mostramos una imagen con un enlace a la imagen anterior.</li>
<li>Mostramos la imagen actual en tamaño completo.</li>
<li>Lo mismo que el punto 4, pero ahora con la última id y la imagen siguiente.</li>
<li>Creamos un div para la información de la imagen el cual permanecerá oculto hasta que el usuario pase el mouse por encima.</li>
</ol>
<p style="text-align: justify;">Ya con eso listo, nos falta declarar nuestras funciones en jQuery y nuestra hoja de estilos. Partiremos por las funciones:</p>
<h2 style="text-align: justify;">funciones.js</h2>
<pre class="javascript" title="code">$(function(){

/* Este es un efecto inicial sobre la galeria,
en el cual decimos basicamente que cuando
la pagina cargue, las imagenes se muestren mas
oscuras y que al pasar el mouse por encima
tomen su opacidad natural. Para esto utilizamos
las funciones animate, hover y stop de jQuery. */
  $('#galeria img').animate({
	"opacity" : .5
  });

  $('#galeria img').hover(function(){

	$(this).stop().animate({ "opacity" : 1 });

   }, function(){

	$(this).stop().animate({ "opacity" : .5});

  });

/* Repetimos el mismo efecto para la galeria
pequeña que mostramos en el visor */

  $('#galeria-small img').animate({
	"opacity" : .5
  });

  $('#galeria-small img').hover(function(){

	$(this).stop().animate({ "opacity" : 1 });

  }, function(){

	$(this).stop().animate({ "opacity" : .5});

  });

/* Ahora aplicamos la funcion para que cuando
un usuario pase el mouse por encima del div con id
masinfo, se despliegue la informacion del div info
del visor. Esto lo haremos mediante las funciones
hover, fadeIn y fadeOut de jQuery */

  $('#masinfo').hover(function(){
 	$('#info').fadeIn();
  }, function(){
        $('#info').fadeOut();
  });

});</pre>
<p style="text-align: justify;">En resumen, lo que hicimos aquí fue:</p>
<ol style="text-align: justify;">
<li>Creamos 3 funciones para que estén disponibles cuando la página cargue.</li>
<li>La primera agregará un efecto de opacidad sobre la galería que se desactivará cuando el usuario pose el mouse encima.</li>
<li>La segunda agregará el mismo efecto pero a la galería pequeña que añadimos al visor.</li>
<li>La tercera hará aparecer la información de la imagen cuando el usuario pose el mouse sobre el div &#8216;masinfo&#8217; del visor y a su vez la hará desaparecer cuando mueva el mouse de ahí.</li>
</ol>
<p style="text-align: justify;">Y ahora nos queda la parte final, que es declarar los estilos:</p>
<h2 style="text-align: justify;">estilos.css</h2>
<pre class="css" title="code">body {
	background: black;
	color: white;
	font-family: Arial, Helvetica, sans-serif;
	width: 100%;
	margin: 0 auto;

}

#galeria{
	width: 800px;
	margin: 0 auto;
}

#galeria img{
	border: 1px solid white;
	padding: 1px;
	margin-right: 10px;
	margin-bottom: 10px;

}

#galeria-small{
	width: 800px;
	margin: 0 auto;
}
#galeria-small img{
	width: 100px;
	height: 100px;
	border: 1px solid white;

}

#contenedor{
	width: 800px;
	margin: 0 auto;
	padding-top: 10px;
}

#imgcompleta{
	border: 1px solid white;
}

a img{
	border: none;
}

/* Este es el div con informacion de
la imagen. Inicialmente cargara con
display:none para que no sea visto a menos
que el usuario pose el mouse encima */

#info {
	display: none;
}</pre>
<p style="text-align: justify;">Y con eso tenemos nuestro resultado final:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4067/4471843750_4664307880_o.png" alt="" width="600" height="211" /></p>
<p style="text-align: center;"><em>Primera vista de la galería</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm5.static.flickr.com/4019/4471064613_000385323e_o.png" alt="" width="600" height="214" /></em></p>
<p style="text-align: center;"><em>La imagen toma su opacidad natural al pasar el mouse por encima</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm5.static.flickr.com/4070/4471064845_1d8edde285_o.png" alt="" width="600" height="526" /></em></p>
<p style="text-align: center;"><em>Vista completa de la primera imagen</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm3.static.flickr.com/2788/4471844222_b7092f614e_o.png" alt="" width="600" height="579" /></em></p>
<p style="text-align: center;"><em>Información de la primera imagen al pasar el mouse por encima del div de información</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm3.static.flickr.com/2776/4471065273_0105b08d51_o.png" alt="" width="600" height="482" /></em></p>
<p style="text-align: center;"><em>Vista completa de imagen que tiene una previa y una siguiente</em></p>
<p style="text-align: center;"><em><img class="aligncenter" src="http://farm3.static.flickr.com/2787/4471844630_0b64eee812_o.png" alt="" width="600" height="538" /></em></p>
<p style="text-align: center;"><em>Vista completa de la última imagen</em></p>
<p style="text-align: justify;">Antes de terminar, y comprendiendo que este tutorial ha sido largo, integramos una nueva característica a estos tutoriales:</p>
<p style="text-align: justify;"><a href="http://www.comolohago.cl/uploads/galeria/"><br />
</a><a href="http://www.comolohago.cl/uploads/galeria.rar"><img class="aligncenter" style="border: 0pt none;" src="http://farm3.static.flickr.com/2749/4471629680_c89163fa14_o.png" alt="" width="279" height="105" /></a>Y con eso damos por terminado este tutorial, recordándoles como siempre que ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" />Esperamos que haya sido de utilidad para Uds. Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/03/29/como-crear-una-galeria-de-imagenes-para-tu-web/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Cómo superponer contenido sobre una animación en Flash</title>
		<link>http://www.comolohago.cl/2010/02/22/como-superponer-contenido-sobre-una-animacion-en-flash/</link>
		<comments>http://www.comolohago.cl/2010/02/22/como-superponer-contenido-sobre-una-animacion-en-flash/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 00:20:28 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Z index]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=3092</guid>
		<description><![CDATA[
Gracias al posicionamiento mediante CSS es posible controlar el lugar donde aparecerá cada uno de los elementos de nuestras páginas en la pantalla de los visitantes. Si bien con propiedades como float es posible acomodar con facilidad cada capa en un costado de la pantalla, hay una propiedad muy interesante que nos permite superponer distintos [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm3.static.flickr.com/2688/4379695821_369fc36cf1_o.jpg" alt="" width="362" height="250" /></p>
<p style="text-align: justify;">Gracias al posicionamiento mediante CSS es posible controlar el lugar donde aparecerá cada uno de los elementos de nuestras páginas en la pantalla de los visitantes. Si bien con propiedades como <em>float</em> es posible acomodar con facilidad cada capa en un costado de la pantalla, hay una propiedad muy interesante que nos permite superponer distintos contenidos entre sí y de esta forma lograr un complejo efecto visual sobre animaciones, imágenes u otro tipo de contenidos que queramos desplegar.</p>
<p style="text-align: justify;">Es por eso que hoy, en un nuevo tutorial que les trae CLH, estaremos viendo en detalle la propiedad <strong>z-index</strong> de CSS, la cual nos permite lograr lo antes descrito.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-3092"></span></p>
<h1 style="text-align: center;">Cómo superponer contenido sobre una animación en Flash</h1>
<p style="text-align: justify;">Si bien lo que veremos hoy es bastante más generalizado que <em>&#8216;Superponer contenido sobre una animación en Flash&#8217;</em>, hemos decidido denominarlo de esa forma ya que es uno de los problemas más comunes que llevan a la profundización de esta propiedad. Sin embargo, lo expuesto hoy puede aplicarse para todo tipo de contenido, incluyendo imágenes, textos o menús de navegación entre otras cosas.</p>
<p style="text-align: justify;">Con eso claro, vamos con lo primero:</p>
<h2 style="text-align: justify;">Implementos necesarios:</h2>
<ol style="text-align: justify;">
<li>Opcionalmente un editor Web. De cualquier forma de no utilizar alguno, se puede realizar el procedimiento mediante bloc de notas.</li>
</ol>
<p style="text-align: justify;">Antes de entrar de lleno al procedimiento, es bueno hacer una aclaración de conceptos. Como mencionábamos en la introducción de este tutorial, estaremos hablando de y trabajando con la propiedad z-index de CSS. Así que para los curiosos <em>(como Topher)</em> y los preguntones <em>(como Dexter)</em>:</p>
<blockquote>
<h2 style="text-align: justify;">¿Qué es z-index?</h2>
<p style="text-align: justify;">La pregunta <span style="text-decoration: line-through;"><em>de la olla millonaria de caldos mag.. sin propaganda mejor</em></span> clave de todo este asunto. Si nos remontamos a épocas antiguas, por alla por los tiempos estudiantiles de cada uno y hacemos un pequeño repaso por matemáticas, o más especificamente geometría análitica, es posible recordar aquellos <span style="text-decoration: line-through;"><em>temibles</em></span> contenidos sobre el plano cartesiano, rectas, pendientes y demases.</p>
<p style="text-align: justify;">Si hacemos más memoria aún, recordaremos que un factor común de esos contenidos era cuando nos hablaban sobre los <strong>puntos en el espacio y los ejes a los que pertenecían</strong>. Esos ejes, al menos en ese momento, eran principalmente 2: <strong>el eje x</strong>, el cual representaba la horizontalidad<strong> y el eje y</strong>, el cual representaba la verticalidad. Para los que le hayan hecho la cruz a la geometría posterior a eso.. <em>(la cruz.. intersección de 2 puntos.. humor matemático y juego de palabras, que lindo ¿no?)</em> y se hayan perdido el resto de la historia, existe además un tercer eje, el cual es conocido como <strong>eje z</strong> y representa la profundidad en el espacio. Esto se relaciona directamente a las 3 dimensiones en las que vivimos y vemos los seres humanos: horizontal <em>(x)</em>, vertical <em>(y)</em>, profundidad <em>(z)</em>. Esta es la parte donde todos decimos <em>&#8220;Oooohhhh&#8221;</em> al ver como todo está conectado entre sí.</p>
<p style="text-align: justify;">Computacionalmente el asunto no es muy diferente. La pantalla en donde vemos todo tipo de contenidos, desde recursos multimedia, archivos, aplicaciones, juegos, etc. opera con la lógica del plano, teniendo un eje horizontal y uno vertical, los cuales son representados por las resoluciones de pantalla <em>(por ej. al hablar de una resolución de 1024&#215;768 pixeles, estamos diciendo que en la pantalla vemos 1024 pixeles horizontalmente y 768 de forma vertical)</em>. A su vez acá también tenemos un plano z de profundidad, el cual si bien a simple vista no notamos, si existe. La mejor prueba para notarlo es ver que al momento de abrir una aplicación, el escritorio no desaparece, solo queda parcial o totalmente oculto por el nuevo contenido que se superpuso.</p>
<p style="text-align: justify;">En diseño Web, o más especificamente en CSS, podemos manejar el tema de las profundidades de los contenidos que estamos desplegando. Esto lo hacemos mediante la propiedad <strong>z-index</strong>, la cual se encarga de asignar una posición de profundidad a cada contenido de acuerdo al valor que le demos. A mayor valor asignado a esta propiedad para un contenido, se irá superponiendo a cada contenido restante que tenga un valor menor. Al final, todos los contenidos irán formando una pila, de menor a mayor.</p>
<p style="text-align: justify;">Para que un elemento pueda hacer uso de la propiedad z-index, <strong>debe siempre</strong> estar posicionado, ya sea absoluta o relativamente. Si el elemento no está posicionado, no podrá usarse la propiedad. Adicionalmente, si 2 elementos comparten el mismo z-index se posicionarán de acuerdo al orden que le hayamos dado en el documento HTML.</p>
</blockquote>
<p style="text-align: justify;">Con esa <span style="text-decoration: line-through;"><em>larga</em></span> explicación lista, podemos empezar a trabajar en nuestro proyecto de hoy y ver como resulta todo:</p>
<h2 style="text-align: justify;">Procedimiento:</h2>
<p style="text-align: justify;">Lo que haremos hoy será bastante simple. Crearemos un documento HTML en donde añadiremos un pequeño encabezado, el cual estará compuesto de una animación flash <em>(en el fondo)</em> y una barra en imagen <em>(superpuesta a la animación)</em> para luego insertar un menú de navegación. Junto a eso añadiremos un pequeño botón como detalle. Este botón podrá ser manipulado tal como si fuese una imagen normal, es decir, añadiéndole un enlace total o por mapa, viendo sus propiedades, copiando la ruta, etc. Lo mismo corre para el menú de navegación.</p>
<p style="text-align: justify;">Entonces basicamente contaremos con 3 capas: una para la animación, otra para nuestra barra y menú de navegación y finalmente una que irá sobre todas las anteriores con el botón.</p>
<p style="text-align: justify;">1.- Utilizaremos los siguientes elementos:</p>
<p style="text-align: justify;">Una animación de fondo:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4060/4380593934_182e25b2cb_o.png" alt="" width="593" height="133" /></p>
<p style="text-align: justify;">Un botón <em>(para hacer botones, los invitamos a revisar <a href="http://www.comolohago.cl/2008/09/29/como-hacer-botones-estilo-20-para-tu-web/" target="_blank">este tutorial</a> donde hemos cubierto el proceso por completo)</em>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4063/4379909439_a90b201efb_o.png" alt="" width="200" height="38" /></p>
<p style="text-align: justify;">Y adicionalmente hemos creado una barra de color blanco <em>(la cual por razones obvias no pondremos acá)</em> de 1&#215;60 px, la cual montaremos sobre la animación y modificaremos vía CSS.</p>
<p style="text-align: justify;">Para no extender en demasía este tutorial, el menú de navegación lo incluiremos como texto plano, con el fin de ubicar donde iría el código final y como se posiciona en términos de profundidad con respecto a los otros elementos. Empezar a hacer el menú desde cero acá probablemente nos llevaría un buen rato y lo hemos visto en otros tutoriales, así que lo haremos de esta forma.</p>
<p style="text-align: justify;">2.- Con nuestros elementos listos, prepararemos nuestro CSS, el cual definirá las propiedades a aplicar a cada parte del contenido:</p>
<pre class="css" title="code">body{
margin: 0;
}

#uno{
position: absolute;
z-index: 1;
width:100%;
}

#dos{
position: absolute;
z-index: 2;
background-image: url(barra.png);
background-repeat: repeat;
width: 100%;
height: 60px;
opacity: .50;
-moz-opacity: .50;
filter: alpha(opacity=50);
margin-top: 10px;
font-weight: bold;
text-indent:20px;
}

#tres{
position:absolute;
z-index: 3;
margin-left:450px;
}</pre>
<p style="text-align: justify;">Entonces ordenemos el cuento:</p>
<ul>
<li>Cada id declarado <em>(uno, dos y tres)</em> corresponden a uno de los elementos que agregaremos <em>(animación en el uno, barra y menú de navegación en el dos y botón en el tres)</em>. Los tres han sido posicionados de forma absoluta y se les ha asignado un z-index correlativo con el fin de que la animación salga al fondo, sobre ella la barra y el menú de navegación y sobre todos ellos el botón.</li>
<li>A su vez, la barra se ha agregado como fondo en el id dos, con el fin de escribir el texto sobre esta imagen de fondo y así poder aprovechar una imagen pequeña <em>(1&#215;60 px)</em> y repetirla a lo largo del encabezado.</li>
<li>Adicionalmente hemos utilizado las propiedades <strong>opacity, -moz-opacity y filter</strong> para agregar transparencia a la barra y que no se vea solida en blanco, si no que nos permita ver el resto de la animación que está en el fondo.</li>
<li>Todo lo demás lo hemos acomodado mediante márgenes e indentaciones de texto para acomodar de acuerdo al diseño que teníamos en mente.</li>
</ul>
<p style="text-align: justify;">Ahora ojo, hemos hecho todos los posicionamientos con medidas fijas en pixeles, para efectos de demostración. Al momento de hacer diseños definitivos es bueno adaptarse a como se ha diseñado el sitio completo, especialmente si son diseños líquidos cuyas medidas están en porcentajes.</p>
<p style="text-align: justify;">3.- Con el CSS listo, ahora crearemos un archivo HTML, en donde insertaremos div&#8217;s con el respectivo contenido, los cuales tomarán propiedades del CSS y se posicionarán como lo teníamos pensado originalmente. Entonces:</p>
<pre class="html" title="code">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Ejemplo de superposicion&lt;/title&gt;
&lt;link href="estilo.css" rel="stylesheet" type="text/css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="uno"&gt;
&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=7,0,19,0" width="700" height="157"&gt;
&lt;param name="movie" value="fondo.swf" /&gt;
&lt;param name="quality" value="high" /&gt;
&lt;param name="wmode" value="transparent" /&gt;
&lt;embed wmode="transparent" src="fondo.swf" quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" width="700" height="157"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;/div&gt;
&lt;div id="dos"&gt;&lt;h2&gt;Inicio | Quienes Somos | Contacto&lt;/h2&gt;&lt;/div&gt;
&lt;div id="tres"&gt;&lt;img src="boton.png" /&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p style="text-align: justify;">Guardamos todo y vemos en nuestro navegador favorito para observar el resultado final:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4051/4379909629_61008e7633_o.png" alt="" width="601" height="138" /></p>
<p style="text-align: justify;">Como podemos ver en la imagen anterior, tenemos nuestra animación hecha en Flash en el fondo. Sobre ella se ha agregado la barra que creamos <em>(repetida y con la opacidad alterada vía CSS)</em>. Sobre la barra nuestro menú de navegación y sobre todo ello el botón. Se ha ordenado tal como los valores que hemos dado a cada z-index.</p>
<p style="text-align: justify;">Simple ¿no?. Así que en resumen:</p>
<h2 style="text-align: justify;">¿Qué hemos aprendido hoy?</h2>
<ul style="text-align: justify;">
<li>Mediante z-index podemos manejar la profundidad de varios elementos, aún cuando compartan el mismo espacio físico.</li>
<li>Para utilizar z-index, debemos posicionar los elementos de forma relativa o absoluta.</li>
<li>2 elementos pueden compartir el mismo z-index y serán mostrados de acuerdo al orden que se agregan.</li>
<li>Podemos superponer todo tipo de contenidos, así que a animarse y probar.</li>
<li>La geometría analítica está relacionada a como vemos y vivimos los humanos, y todo eso a como se grabó Avatar.</li>
</ul>
<p style="text-align: justify;">Y con eso damos todo por terminado hoy, recordándoles que como siempre, este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" />Cualquier duda o comentario que tengan, no sean tímidos, los invitamos a dejarnos unas líneas a continuación. Somos buena onda para responder, lo prometemos <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/02/22/como-superponer-contenido-sobre-una-animacion-en-flash/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cómo implementar donaciones vía PayPal</title>
		<link>http://www.comolohago.cl/2010/01/26/como-implementar-donaciones-via-paypal/</link>
		<comments>http://www.comolohago.cl/2010/01/26/como-implementar-donaciones-via-paypal/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 04:42:51 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[donaciones]]></category>
		<category><![CDATA[PayPal]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2966</guid>
		<description><![CDATA[om]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm5.static.flickr.com/4017/4304233418_85095ee3ec_o.png" alt="" width="259" height="74" /></p>
<p style="text-align: justify;">Hace algún tiempo nos llegó una petición sobre como incorporar un sistema simple de donaciones vía PayPal en un sitio Web cualquiera. Luego de investigar un poco al respecto, porque en verdad no sabíamos nada sobre el proceso propiamente tal, nos dimos cuenta que es bastante simple y rápido de hacer, ya que el propio PayPal se encarga de la mayor parte del proceso, dejando que nos preocupemos de lo más importante: personalizar y recibir el dinero que los usuarios nos quieran donar.</p>
<p style="text-align: justify;">Hoy, en CLH, veremos como implementar este simple sistema de donaciones en nuestros sitios Web. Y lo veremos en detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2966"></span></p>
<h1 style="text-align: center;">Cómo implementar donaciones vía PayPal</h1>
<p style="text-align: justify;">Como siempre, lo primero:</p>
<h2 style="text-align: justify;">Implementos necesarios:</h2>
<ol style="text-align: justify;">
<li>Una cuenta de PayPal.</li>
<li>Un sitio Web <em>(e idealmente usuarios dispuestos a hacer donaciones </em> <img src='http://www.comolohago.cl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  )</li>
</ol>
<p style="text-align: justify;">Sin más que detallar, vamos, manos a la obra:</p>
<h2 style="text-align: justify;">Procedimiento:</h2>
<p>1.- Lo primero que debemos hacer es ir al <a href="http://www.paypal.com" target="_blank">sitio de PayPal</a>, en donde deberemos ingresar si ya tenemos una cuenta, o de lo contrario registrarnos.</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4044/4305022685_84e807303e_o.png" alt="" width="600" height="543" /></p>
<p>2.- Una vez que hayamos ingresado a nuestra cuenta, debemos ir a la pestaña <strong>Vender en su Web</strong>:</p>
<p><img class="aligncenter" src="http://farm5.static.flickr.com/4022/4305031385_0255e7d8c6_o.png" alt="" width="600" height="56" /></p>
<p>3.- En aquella sección, podremos ver en la parte inferior un cuadro de <strong>Funciones clave</strong>. Ahí debemos seleccionar <strong>Botones comprar ahora</strong>:</p>
<p><img class="aligncenter" src="http://farm3.static.flickr.com/2696/4305776702_e6bfec3d42_o.png" alt="" width="600" height="526" /></p>
<p>4.- Esto nos llevará a un formulario proporcionado por PayPal, el cual nos dejará configurar una serie de parámetros para crear un botón de <em>&#8220;Comprar ahora&#8221;</em>, a través del cual los usuarios podrán hacer una compra de un determinado producto <em>(en nuestro caso donaciones)</em>, solo haciendo click en el:</p>
<p><img class="aligncenter" src="http://farm3.static.flickr.com/2753/4305800106_dc45c20d25_o.png" alt="" width="600" height="654" /></p>
<p style="text-align: justify;">Acá debemos hacer los siguientes ajustes:</p>
<p style="text-align: justify;">5.- En la sección <strong>Aceptar pagos por</strong>, debemos cambiar la opción <strong>Productos</strong> por <strong>Donativos. </strong>Esto cambiará las opciones que viene más adelante en el formulario.</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4051/4305076695_c3ca1b7f39_o.png" alt="" width="286" height="80" /></p>
<p style="text-align: justify;">6.- En <strong>Nombre de organización o servicio</strong> ponemos nuestro nombre o el del sitio Web donde recibiremos las donaciones y en <strong>Id. del donativo</strong> podemos fijar un código especial para identificar esas donaciones <em>(por ejemplo si estamos recibiendo dinero en PayPal desde ese sitio por otro concepto, es bueno diferenciar)</em>. Este último es opcional.</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2704/4305820698_cbfd220c2d_o.png" alt="" width="495" height="63" /></p>
<p style="text-align: justify;">7.- Luego, en la sección <strong>Personalizar botón</strong>, podemos definir las características gráficas del botón que se mostrará en nuestro sitio, ya sea el que nos proporciona PayPal, o uno que podemos definir nosotros mismos a partir de una imagen. Hay una serie de opciones que podemos acomodar a nuestro gusto, por lo que recomendamos probar hasta encontrar la configuración ideal:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm5.static.flickr.com/4035/4305077151_8d00e42d79_o.png" alt="" width="597" height="303" /><br />
<em>Al parecer ahora en Chile hablamos inglés.. Get it? -&gt; !</em></p>
<p style="text-align: justify;">8.- Finalmente definiremos la divisa <em>(o moneda)</em> en que recibiremos los aportes, así como si dejaremos a los usuarios definir cuanto donaran o si es una cantidad por defecto y como recibiremos las notificaciones de pago:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm5.static.flickr.com/4006/4305821026_21c9c1ef68_o.png" alt="" width="430" height="228" /></p>
<p style="text-align: justify;">9.- Una vez que definimos todos los parámetros, debemos presionar el botón que dice <strong>Crear botón</strong> y nos llevará a una página en donde se nos entregará el código correspondiente al botón creado:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2727/4305095897_ebfbfc3a40_o.png" alt="" width="600" height="295" /></p>
<pre class="html" title="code">&lt;form action="https://www.paypal.com/cgi-bin/webscr" method="post"&gt;
&lt;input type="hidden" name="cmd" value="_s-xclick"&gt;
&lt;input type="hidden" name="encrypted" value="-----BEG
IN PKCS7-----MIIHJwYJKoZIhvc"&gt;
&lt;input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif" border="0"
name="submit" alt="PayPal - The safer, easier way to pay online!"&gt;
&lt;img alt="" border="0" src="https://www.paypal.com/es_XC/i/scr/pixel.gif" width="1" height="1"&gt;
&lt;/form&gt;</pre>
<p style="text-align: justify;">Este código debemos insertarlo en cualquier parte de nuestro sitio Web. De esta forma, cuando un usuario haga click en él, lo llevará a un interfaz de PayPal en donde se le preguntará cuanto desea donar y podrá hacerlo de forma rápida y sencilla.</p>
<p style="text-align: justify;">Con lo que hemos visto ahora basta y sobra para hacer un sistema sencillo de donaciones para nuestro sitio Web. Sin embargo, antes de cerrar, veremos un pequeño truco que puede ser muy útil para darle un estilo especial a las donaciones.</p>
<p style="text-align: justify;">Como es posible ver, el código que nos entrega PayPal no es más que un formulario con valores en campos ocultos y una imagen utilizada como botón. Los valores enviados como ocultos permiten definir a quien pertenece el botón de donación y ejecuta el script de PayPal para procesar los pagos. Lo bueno de esto, es que es posible enviar otros valores de forma oculta. Uno de los valores que se puede enviar, es <strong>return</strong>, el cual permite definir una página donde el usuario será llevado una vez que haga la donación. Esto es útil si queremos que el usuario siga navegando en nuestro sitio después de donar, así como también más comodo para el visitante, quien no querrá salir del área donde estaba originalmente. Para utilizar este valor, solo debemos incluir esta línea dentro del código anterior:</p>
<pre class="html" title="code">&lt;input type="hidden" name="return" value="url de la página
donde será llevado"&gt;</pre>
<p style="text-align: justify;">Aquí podemos diseñar una pequeña página con un agradecimiento por la donación o algo por el estilo. Sin duda que le dará un toque especial.</p>
<p style="text-align: justify;">Ahora <strong>ojo</strong>. Este parámetro actualmente no figura de forma <em>&#8216;oficial&#8217;</em> dentro de los botones de compra de PayPal, ya que se utilizaba anteriormente, por lo que no es seguro que siempre funcione. Nosotros lo probamos con 2 cuentas y funcionó sin problemas en una de ellas, en la otra no. Desconocemos realmente la razón, pero es bueno probar en caso de que sirva.</p>
<p style="text-align: justify;">Y así de simple tenemos un pequeño sistema de donaciones vía PayPal para insertar en nuestros sitios Web en solo minutos. Es una forma muy práctica para recibir aportes de los usuarios que estén interesados en nuestros contenidos y sin duda que nos servirá.</p>
<p style="text-align: justify;">Anees de terminar, les recordamos que como siempre, este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2010/01/26/como-implementar-donaciones-via-paypal/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Cómo optimizar tu sitio Web en 10 pasos</title>
		<link>http://www.comolohago.cl/2009/11/24/como-optimizar-tu-sitio-web-en-10-pasos/</link>
		<comments>http://www.comolohago.cl/2009/11/24/como-optimizar-tu-sitio-web-en-10-pasos/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 18:32:40 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2476</guid>
		<description><![CDATA[Cientos de miles de millones de horas más tarde, trasnoches al por mayor, litros y litros del buen café-café, dosis interminables de snacks y un sinfín de decisiones tomadas (¿Qué color? ¿Verde? ¿Rojo?) te han llevado al momento que tanto esperabas: El sitio está terminado y listo para el lanzamiento. A descansar ahora ¿no?, nada [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2592/4131150508_09003ac297_o.png" alt="" width="400" height="113" />Cientos de miles de millones de horas más tarde, trasnoches al por mayor, litros y litros del buen <em>café-café</em>, dosis interminables de snacks y un sinfín de decisiones tomadas <em>(¿Qué color? ¿Verde? ¿Rojo?)</em> te han llevado al momento que tanto esperabas: El sitio está terminado y listo para el lanzamiento. A descansar ahora ¿no?, nada más lejos de la realidad.</p>
<p style="text-align: justify;">Para todos aquellos que les gusta el diseño Web, trabajan en ello, o bien ambas, no hay mejor momento que cuando un sitio es terminado y se lanza. Sin embargo, junto con eso, se sabe que el trabajo no está ni cerca de terminar, ya que desde ese instante en adelante comienza el proceso interminable de la optimización y mejoramiento de lo que se ha hecho, lo cual, siendo bastante honestos, puede terminar siendo aún más exhaustivo <span style="text-decoration: line-through;"><em>e interminable</em></span> que el proceso de diseño y desarrollo.</p>
<p style="text-align: justify;">Pues bien, hoy en CLH, en nuestro continuo afán de hacer la vida un poco más sencilla, les traemos un sencillo top ten con algunos tips y trucos para que puedan optimizar sus sitios Web, para al menos partir con un poco de orientación en este largo y complejo camino.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2476"></span></p>
<h1 style="text-align: center;">Cómo optimizar tu sitio Web en 10 pasos</h1>
<p style="text-align: justify;"><strong>Nota:</strong> La optimización de un sitio Web es un proceso continuo y bastante extenso, que de seguro toma bastante más que los 10 pasos presentados a continuación. Sin embargo, les presentamos algunos de los que consideramos, en nuestra opinión, más esenciales para poder partir, y esperamos en un futuro traer algunos más.</p>
<p style="text-align: justify;">En este tutorial, al ser de un tipo distinto que los normales, no necesitamos ningún tipo de implementos de forma requerida, quizás es recomendable algún editor Web para alguna de las tareas, pero ahí lo podrán apreciar en cada punto.</p>
<p style="text-align: justify;">Lo que veremos hoy es un conjunto de buenas prácticas, consejos útiles y tips de mejora de rendimiento que nunca están demás.</p>
<p style="text-align: justify;">Sin más que decir, vamos con nuestro top ten:</p>
<h2 style="text-align: justify;">1.- Siempre declarar el DocType <em>(y asegurarse que sea el correcto)</em></h2>
<p style="text-align: justify;">Este es un punto al que muchos, incluyéndome, en algunas ocasiones le hemos dado poca importancia, pero sin duda que la tiene. El declarar el DocType o tipo de documento es clave para permitir que los navegadores interpreten de forma correcta el código que tenemos en cada página, ya sea HTML o XHTML. Si bien al no declarar, existe la posibilidad de que en nuestro navegador se vea de forma correcta, esto no asegura que el código se interprete bien para cada usuario y será complejo al momento de validar.</p>
<p style="text-align: justify;">La gran mayoría de los editores Web <em>(como Adobe Dreamweaver)</em>, agregan el DocType de forma automática, por lo que no hay que preocuparse. Sin embargo, nosotros lo podemos añadir de forma manual, siempre al <strong>inicio del documento</strong>, es decir, antes de la etiqueta &lt;html&gt;. Los 4 más recomendados de utilizar <em>(siempre que no estemos trabajando con HTML 5)</em>, son:</p>
<blockquote>
<p style="text-align: justify;">&lt;!DOCTYPE HTML PUBLIC  &#8220;-//W3C//DTD HTML 4.01//EN&#8221; &#8220;http://www.w3c.org/TR/html4/strict.dtd&#8221;&gt;</p>
<p style="text-align: justify;">&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221; &#8220;http://www.w3c.org/TR/html4/loose.dtd&#8221;&gt;</p>
<p style="text-align: justify;">&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&gt;</p>
<p style="text-align: justify;">&lt;!DOCTYPE html PUBLIC&#8221;-//W3C//DTD XHTML 1.0 Strict//EN&#8221; &#8220;http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#8221;&gt;</p>
</blockquote>
<p style="text-align: justify;">La diferencia de utilizar una de las 4 formas anteriores depende primero de si estamos utilizando HTML o XHTML para codificar <em>(las 2 primeras para HTML y las 2 últimas para XHTML)</em> y de si estamos utilizando la versión Strict o la Transitional del lenguaje. La diferencia de lo último depende si queremos permitir el uso de etiquetas que estén descontinuadas de versiones anteriores del lenguaje <em>(Strict no permite, Transitional si)</em>. Más allá de eso, cualquiera de las 4 es correcta.</p>
<h2 style="text-align: justify;">2.- Nunca estilizar dentro de las etiquetas</h2>
<p style="text-align: justify;">Esto corresponde a una buena práctica, y si bien es un comportamiento adoptado y adaptado por la gran mayoría de diseñadores Web, siempre hay por ahí algún caso que cae en el error, por lo que es bueno recordarlo.</p>
<p style="text-align: justify;">Con la popularización de CSS, y la descontinuación de etiquetas de estilo <em>(como font face)</em> en HTML, se buscaba hacer una separación completa y absoluta entre el estilo de los documentos Web y su estructura, por lo que al aplicar un estilo dentro de una etiqueta en particular caemos en lo que tanto se ha intentado evitar. Para muestra, un botón <em>(aunque no es un botón realmente, sino que más un ejemplo)</em>:</p>
<blockquote>
<p style="text-align: justify;"><strong>Esto es incorrecto:</strong></p>
<p style="text-align: justify;">&lt;p style:=&#8221;color: black; font-family:Arial;&#8221;&gt;Texto de ejemplo&lt;/p&gt;</p>
<p style="text-align: justify;"><strong>Esto es correcto:</strong></p>
<p style="text-align: justify;">En una hoja de estilo externa, declarar:</p>
<p style="text-align: justify;">p{<br />
color:black;<br />
font-family:Arial;<br />
}</p>
<p style="text-align: justify;">O bien, en la misma hoja de estilo externa, declarar:</p>
<p style="text-align: justify;">.estilo1{<br />
color:black;<br />
font-family:Arial;<br />
}</p>
<p style="text-align: justify;">Y luego, en nuestro HTML:</p>
<p style="text-align: justify;">&lt;p class=&#8221;estilo1&#8243;&gt;Texto de ejemplo&lt;/p&gt;</p>
</blockquote>
<p style="text-align: justify;">De esta forma, separamos completamente la estructura del estilo, realizandolo de forma correcta y ahorrándonos bastante tiempo al momento de hacer modificaciones.</p>
<h2 style="text-align: justify;">3.- CSS al comienzo, Javascript al final</h2>
<p style="text-align: justify;">Este es un error en el que personalmente he caído bastante, con las librerías en Javascript, pero vamos por parte:</p>
<p style="text-align: justify;">Lo recomendable para las hojas de estilo externas en CSS es siempre cargarlas al inicio del documento, entre las etiquetas &lt;head&gt; y &lt;/head&gt;. Esto nos asegura tanto una carga más rápida de la página propiamente tal, como asegurar que siempre los estilos se carguen junto al documento y no luego de que se ha cargado el contenido, ya que si el usuario detiene la carga de la página, o su conexión se cae, se desplegará el contenido sin ningún estilo aplicado, entregando una experiencia visual bastante mala.</p>
<blockquote>
<p style="text-align: justify;"><strong>Lo correcto es:</strong></p>
<p style="text-align: justify;">&lt;head&gt;<br />
&lt;title&gt;Mi sitio Web&lt;/title&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;estilos.css&#8221; media=&#8221;screen&#8221;&gt;<br />
&lt;/head&gt;</p></blockquote>
<p style="text-align: justify;">Por otro lado, las librerías en Javascript es todo lo contrario. Lo recomendable en este caso es incluirlas al final del documento, para que las cargas las realice cuando el contenido ya se depliegue en pantalla. ¿Por qué?, porque normalmente un documento Web no se seguirá cargando mientras una parte de el no se termine de cargar <em>(enredado ¿no?)</em>. Considerando que las librerías en Javascript pueden llegar a tener un tamaño mayor al mismo documento, es muy probable que la carga se tome algunos instantes para poder seguir, por lo que a no ser que sea estrictamente necesario <em>(por ej. si una librería determina como se despliega el sitio en si)</em>, lo más conveniente es cargarlas al final, y de esta forma presentarle el contenido al usuario lo más rápido posible para que este pueda empezar a navegar, sin necesitar que se cargue todo el documento.</p>
<blockquote>
<p style="text-align: justify;"><strong>Un ejemplo sería así:</strong></p>
<p style="text-align: justify;">&lt;/div&gt;<br />
&lt;script type=&#8221;text/javascript&#8221; src=&#8221;libreria.js&#8221;&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p></blockquote>
<p style="text-align: justify;">La librería se cargara de cualquier forma, pero se le dará una mayor prioridad al contenido y estilo de la página.</p>
<h2 style="text-align: justify;">4.- Estilizar para cada navegador</h2>
<p style="text-align: justify;">Esta es una frase que debiésemos grabarnos a fuego. <strong>Todos los navegadores despliegan documentos Web de forma diferente</strong>. Es uno de los grandes problemas que nos cuesta comprender, especialmente cuando estamos empezando. Debido a que todos los navegadores son distintos, han sido codificados por empresas diferentes, usan motores que no son iguales a otros <em>(excepto navegadores de la misma familia, como Firefox y Flock)</em>, el contenido, o más bien el estilo de este, es interpretado de distintas formas por cada uno de ellos.</p>
<p style="text-align: justify;">Como tal, junto con asegurarnos de siempre probar nuestros diseños en todos los navegadores posibles <em>(nunca podremos asegurar compatibilidad completa con todos, pero si debemos cubrir los más comunes)</em>, es esencial definir hojas de estilo para cada uno de ellos e indicarle al documento que junto con detectar el navegador, cargue el estilo correspondiente. El mayor problema es comunmente Internet Explorer, ya que hay muchos estilos que no reconoce, especialmente entre sus distintas versiones <em>(6, 7 y 8 )</em>, por lo que podemos hacer lo siguiente. Dentro de nuestra inclusión de hojas de estilo, añadimos una pequeña excepción para que si el navegador es IE, cargue la hoja de estilo correspondiente:</p>
<blockquote>
<p style="text-align: justify;">&lt;!&#8211; [if lte IE 7]&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; media=&#8221;screen&#8221; type=&#8221;text/css&#8221; href=&#8221;estiloie7.css&#8221;&gt;<br />
&lt;!&#8211; [endif]&#8211;&gt;</p></blockquote>
<p style="text-align: justify;">El código anterior indica que si el navegador es IE 7 o alguna versión inferior, entonces cargue la hoja de estilo correspondiente. Esto lo definimos con el parámetro <strong>lte</strong>, el cual significa <strong>less than or equal </strong><em>(menor a o igual a)</em>. En caso de solo querer cubrir versiones anteriores a IE 7, cambiamos el parámetro por <strong>lt</strong>.</p>
<h2 style="text-align: justify;">5.- En lo posible, cargar todo localmente</h2>
<p style="text-align: justify;">Hoy en día, con toda la información disponible en Internet, es posible para los diseñadores y desarrolladores Web contar con un gran número de librerías de acceso libre y gratuito para utilizar en sus sitios. Sin embargo, muchas de estas librerías requieren ser cargadas desde sitios Web de terceros, lo que inevitablemente aumentará el tiempo final de carga de nuestro sitio y por ende empeorará la experiencia del usuario.</p>
<p style="text-align: justify;">Es por esto, que en lo posible, lo recomendable es tener todas, o el mayor número posible, de librerías y hojas de estilo en el mismo servidor donde está el sitio, para que la carga se haga de forma local y mucho más rápida.</p>
<h2 style="text-align: justify;">6.- Añadir descripciones a las imágenes</h2>
<p style="text-align: justify;">Un detalle comunmente pasado por alto son los atributos de descripciones a las imágenes que incluímos en nuestros sitios Web. Si bien al no añadirlas nada sucede y el contenido se despliega de forma correcta, si es necesario incluirlas para efectos de mejorar la accesibilidad de cada página y para el momento de la validación del código. Es importante recordar que los sistemas de navegación para no videntes reconocen este atributo de las imágenes para explicar el tipo de contenido que está ahí, así que a no olvidarlo:</p>
<blockquote>
<p style="text-align: justify;"><strong>Esto no es correcto:</strong></p>
<p style="text-align: justify;">&lt;img src=&#8221;imagen.jpg&#8221;&gt;</p>
<p style="text-align: justify;"><strong>Esto es correcto:</strong></p>
<p style="text-align: justify;">&lt;img src=&#8221;imagen.jpg&#8221; alt=&#8221;Una imagen cualquiera&#8221;&gt;</p>
</blockquote>
<p style="text-align: justify;">Adicionalmente, hay algunos navegadores que en vez del atributo alt, reconocen <strong>title</strong>, por lo que nunca está demás agregar ambos.</p>
<h2 style="text-align: justify;">7.- Nunca olvidar cerrar cada etiqueta</h2>
<p style="text-align: justify;">HTML o XHTML, es 100% acerca de tener una estructura ordenada y definida en cada documento. Y como tal, siempre debemos asegurarnos de que cada etiqueta que abramos, sea cerrada. No importa si los navegadores obvien en algunas ocasiones este tema, es nuestro deber asegurarnos que todo esta abierto y cerrado como y cuando corresponde. De esta forma, nuestro sitio validará de mejor forma y nos haremos un gran favor al momento de realizar edición de código o bien si estamos realizando un trabajo colaborativo, para que otras personas sepan siempre donde empieza y donde termina cada parte del documento.</p>
<blockquote>
<p style="text-align: justify;"><strong>Esto no es correcto:</strong></p>
<p style="text-align: justify;">&lt;p&gt; Un párrafo de texto<br />
&lt;p&gt; Otro párrafo de texto<br />
&lt;p&gt; Y otro más</p>
<p style="text-align: justify;"><strong>Esto es correcto:</strong></p>
<p style="text-align: justify;">&lt;p&gt; Un párrafo de texto &lt;/p&gt;<br />
&lt;p&gt; Otro párrafo de texto &lt;/p&gt;<br />
&lt;p&gt; Y otro más &lt;/p&gt;</p></blockquote>
<p style="text-align: justify;">Con XHTML además, tenemos la posibilidad de cerrar la etiqueta en la misma de apertura y es considerado una práctica correcta:</p>
<blockquote>
<p style="text-align: justify;">&lt;br /&gt; -&gt; Una etiqueta abierta y cerrada.</p>
</blockquote>
<h2 style="text-align: justify;">8.- Favorecer PNG por sobre JPG, y el entrelazado</h2>
<p style="text-align: justify;">Este corresponde más a un tip gráfico que Web, pero considerando que normalmente incluímos un gran número de imágenes en nuestros sitios Web, no está demás remarcar.</p>
<p style="text-align: justify;">El formato más común para tratar imágenes es JPG, es de los más utilizados, pero no por eso el mejor. La verdad es que cada vez que manipulamos una imagen en formato JPG, ya sea al abrirla, editarla, cambiarla de tamaño, añadirle algo encima, o lo que sea y la volvemos a guardar, esta va perdiendo calidad, y así sucesivamente cada vez que trabajemos sobre ella, por lo que si estamos realizando constantes modificaciones, después de un tiempo la imagen será de una calidad notablemente inferior a la original.</p>
<p style="text-align: justify;">Por esto es recomendable el uso de PNG, que es un formato que se encarga de mantener la calidad a través de los distintos cambios, algo a tener muy en cuenta, especialmente si trabajamos con imágenes de gran resolución o si son nuestra fuente primaria de trabajo <em>(por ej. si tenemos un sitio con un portafolio de trabajos gráficos)</em>.</p>
<p style="text-align: justify;">Adicionalmente a esto, al utilizar PNG, una técnica bastante buena para utilizar en imágenes que vayamos a desplegar en la Web, es guardarlas con entrelazado. ¿Qué significa esto?, bastante simple. El entrelazado añade características a la imagen para que esta se cargue de forma distinta a que si se guardara convencionalmente.</p>
<p style="text-align: justify;">Por ejemplo, si tenemos una imagen sin entrelazado y la insertamos en un documento Web, la carga de esta se realizará de forma vertical, de arriba hacia abajo. Con esto, si la conexión es lenta, o la imagen muy grande, se irá viendo como se carga, trozo por trozo, de arriba hacia abajo.</p>
<p style="text-align: justify;">Por otra parte, con el entrelazado, la modalidad de carga cambia, y en vez de realizarse de forma vertical como el caso anterior, esta se va realizando por capas, desde el fondo hasta el frente de la imagen, cargando en una primera etapa la imagen completa, viéndose como si estuviese pixeleada y eventualmente cargando capa tras capa encima de esta, de cierta forma <em>despixeleándose</em>. Con esto, el contenido de la imagen puede ser apreciado antes que termine de cargarse, y por lo general se muestran de forma mucho más rápida que de forma convencional.</p>
<h2 style="text-align: justify;">9.- Tablas para los datos, nunca para el diseño</h2>
<p style="text-align: justify;">Cuando empecé a meterme de lleno en el diseño Web, hace unos 10 años, la mayoría de los sitios eran diseñados utilizando 2 técnicas: Frames o marcos y con tablas.</p>
<p style="text-align: justify;">Ámbos métodos eran bastante útiles, ya que permitían hacer una organización del contenido de forma sencilla y bastante rápida y ordenada. Por una parte los frames nos permitían separar el sitio en secciones y trabajar cada una de ellas mediante archivos independientes y por otra, las tablas, nos permitían definir una estructura segmentada y ordenada mediante filas, columnas y celdas, detallando contenido en ellas tal como si fuese un rompecabezas.</p>
<p style="text-align: justify;">Sin embargo, con el tiempo y evolución que ha tenido HTML, hace bastante que no es visto con buenos ojos definir el diseño de un sitio mediante alguna de estas 2 técnicas, y es recomendable hacer el uso de bloques <em>(o div&#8217;s)</em> para hacer el diseño propiamente tal, utilizando posicionamientos en CSS  y dejar las tablas solamente para presentar información tabulada.</p>
<p style="text-align: justify;">Sin duda que el dominar de forma correcta el uso de bloques puede ser tremendamente complejo al compararlo con lo que hacíamos mediante tablas, pero a medida que se va teniendo un mejor entendimiento de como funcionan es posible alcanzar un mejor grado de ubicación de cada componente, así como un orden ideal.</p>
<p style="text-align: justify;">Es por esto que si sus sitios están actualmente diseñados bajo una estructura de tablas, es recomendable empezar a actualizar los conocimientos y hacer los traspasos necesarios, todo con el fin de tener un sitio mejor adaptado a lo que hoy es considerado correcto.</p>
<h2 style="text-align: justify;">10.- Validar, validar y luego seguir validando</h2>
<p style="text-align: justify;">Dejamos al final un punto que tiene tanta o más importancia que los anteriormente mencionados, que es el tema de la validación.</p>
<p style="text-align: justify;">Cuando hablamos de validar un sitio, nos referimos a inspeccionarlo con el fin de determinar que toda la codificación haya sido hecha de forma correcta, y de esa forma asegurarnos que cada navegador verá exactamente lo que queremos mostrar. De esta forma podemos asegurarnos que los usuarios tendrán una buena experiencia visualizando el sitio y también ayudaremos a que los buscadores indexen de mejor forma en sus resultados.</p>
<p style="text-align: justify;">Para validar tenemos varias opciones, como por ejemplo:</p>
<ul style="text-align: justify;">
<li>La primera, y más utilizada, es el <a href="http://validator.w3.org/" target="_blank">validador oficial de la W3C</a>, en el cual al ingresar la URL de nuestro sitio nos entregará un detalle de cualquier problema que haya.</li>
<li>Existen complementos para navegadores que nos ayudan en la tarea, como es el caso de <a href="https://addons.mozilla.org/en-US/firefox/addon/60" target="_blank">Web Developer</a> y <a href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Firebug</a> para Firefox.</li>
</ul>
<p style="text-align: justify;">Adicionalmente existen otros sitios que validan nuestro código, pero con lo anterior podrán hacerlo sin problemas.</p>
<p style="text-align: justify;">Y con este último punto damos cierre a esta práctica guía para optimizar tu sitio Web en tan solo 10 pasos. Al ir terminando nos hemos dado cuenta de algunos importantes que se nos quedaron fuera y que es importante recalcar, por lo que probablemente en un futuro cercano haremos una continuación sobre este tema, que sin duda a muchos les servirá.</p>
<p style="text-align: justify;">Por ahora lo dejamos hasta aquí, recordando como siempre que este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier comentario o duda que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
<p style="text-align: center;">
<p style="text-align: justify;">
<p style="text-align: justify;">
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/11/24/como-optimizar-tu-sitio-web-en-10-pasos/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>CLH Express: Compresión CSS/Javascript, Feedburner, Blogger, Firefox, Pdf&#8217;s y más Pdf&#8217;s</title>
		<link>http://www.comolohago.cl/2009/11/14/clh-express-compresion-cssjavascript-feedburner-blogger-firefox-pdfs-y-mas-pdfs/</link>
		<comments>http://www.comolohago.cl/2009/11/14/clh-express-compresion-cssjavascript-feedburner-blogger-firefox-pdfs-y-mas-pdfs/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 00:38:02 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CLH Express]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Trucos]]></category>
		<category><![CDATA[Blogger]]></category>
		<category><![CDATA[Feedburner]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://www.comolohago.cl/?p=2415</guid>
		<description><![CDATA[Continuando con la sección que hace poco dimos por inaugurada, hoy cubriremos algunos tips y peticiones pequeñas que han llegado al buzón oficial de CLH. Desde incrustar archivos PDF en un sitio Web, hasta comprimir nuestras hojas de estilo y utilizar Feedburner en blogs de Blogger, los invitamos a conocer el detalle, como siempre, después [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="aligncenter size-full wp-image-2320" title="clh-express" src="http://www.comolohago.cl/wp-content/uploads/2009/10/clh-express.png" alt="clh-express" width="400" height="202" />Continuando con la <a href="http://www.comolohago.cl/2009/10/29/clh-express-wordpress-movil-eliminar-directorios-vacios-trucos-de-firefox-mapas-de-imagenes-y-optimizacion-de-tablas-en-mysql/" target="_blank">sección</a> que hace poco dimos por inaugurada, hoy cubriremos algunos tips y peticiones pequeñas que han llegado al <a href="http://www.comolohago.cl/peticiones/" target="_blank">buzón oficial de CLH</a>. Desde incrustar archivos PDF en un sitio Web, hasta comprimir nuestras hojas de estilo y utilizar Feedburner en blogs de Blogger, los invitamos a conocer el detalle, como siempre, después del salto.</p>
<p><span id="more-2415"></span></p>
<h1 style="text-align: center;">CLH Express: Compresión CSS/Javascript, Feedburner, Blogger, Firefox, Pdf&#8217;s y más Pdf&#8217;s</h1>
<p style="text-align: justify;">
<p style="text-align: justify;">Les recordamos que si nos quieren hacer llegar sus peticiones, solo deben contactarnos en la <a href="http://www.comolohago.cl/peticiones/" target="_blank">sección correspondiente de nuestro sitio</a>.</p>
<p style="text-align: justify;">En el CLH Express de hoy:</p>
<ol style="text-align: justify;">
<li>Cómo incrustar archivos PDF en un sitio Web.</li>
<li>Cómo utilizar Feedburner en Blogger.</li>
<li>Cómo comprimir nuestros CSS y Javascript.</li>
<li>Cómo evitar el refresco automático de Firefox.</li>
<li>Cómo convertir de PDF a Excel.</li>
</ol>
<p style="text-align: justify;">Sin más que decir, vamos, manos a la obra:</p>
<h2 style="text-align: justify;">1.- Cómo incrustar archivos PDF en un sitio Web</h2>
<p style="text-align: justify;">Cuando hablamos de incrustar, nos referimos a la funcionalidad de reproducir un contenido dentro de otro, el cual puede ser del mismo tipo o bien distinto. La gracia de todo esto, es lograr un impacto mínimo a los ojos del usuario, con el fin de que se vea una integración casi nativa entre las 2 partes.</p>
<p style="text-align: justify;">Es común que hoy en día en nuestros sitios Web ofrezcamos documentos en formato PDF, los cuales pueden ser descargados por los visitantes o bien abiertos en el mismo navegador en una nueva pestaña o ventana.</p>
<p style="text-align: justify;">Pero, ¿qué pasa si queremos que el usuario pueda visualizar el documento sin dejar nuestro sitio?, es aquí donde la incrustación juega un papel vital. Hoy en día, gracias a Google Docs, la visualización de archivos PDF se ha vuelto realmente cómoda y natural, por lo que podemos aprovecharla y utilizarla desde nuestro propio sitio, para obtener las claras ventanas.</p>
<p style="text-align: justify;">¿Cómo lo haremos?, bastante simple. Sólo debemos crear un documento HTML para nuestra Web <em>(si es que no tenemos uno ya)</em> y crear un iframe en el, desde el cual cargaremos la URL del visor de PDF de Google Docs y a este le indicaremos, mediante un parámetro, que cargue nuestro archivo PDF. El código queda de la siguiente forma:</p>
<blockquote>
<p style="text-align: justify;">&lt;iframe src=&#8221;http://docs.google.com/gview?url=direccion de nuestro archivo PDF&amp;embedded=true&#8221; style=&#8221;width:ancho del visor; height:alto del visor;&#8221; frameborder=&#8221;0&#8243;&gt;&lt;/iframe&gt;</p>
</blockquote>
<p style="text-align: justify;">Por ejemplo, si quisiéramos mostrar en este artículo un PDF que incluímos en nuestro tutorial <a href="http://www.comolohago.cl/2008/06/10/como-tocar-cumpleanos-feliz-en-guitarra/" target="_blank"><em>&#8220;Cómo tocar cumpleaños feliz en guitarra&#8221;</em></a>, iría algo así:</p>
<blockquote>
<p style="text-align: justify;">&lt;iframe src=&#8221;http://docs.google.com/gview?url=http://www.comolohago.cl/uploads/Tab.pdf&amp;embedded=true&#8221; style=&#8221;width:500px; height:375px;&#8221; frameborder=&#8221;0&#8243;&gt;&lt;/iframe&gt;</p>
</blockquote>
<p style="text-align: justify;">Al cargar ese documento HTML en nuestro navegador, se cargará un visor con el documento PDF y algunas funciones para manipularlo.</p>
<h2 style="text-align: justify;">2.- Cómo utilizar Feedburner en Blogger</h2>
<p style="text-align: justify;">Desde hace mucho tiempo que un aspecto vital de los sitios Web <em>(especialmente los que están generando nuevo contenido de forma continua)</em> son los feeds. Estos nos permiten entregarle a los usuarios una forma cómoda para que se enteren de nuevas actualizaciones, ya que la oferta de lectores de RSS hoy es bastante amplia, pudiendo incluso integrarlos a los navegadores Web o servicios de Google.</p>
<p style="text-align: justify;">Configurar Feedburner para nuestros blogs en Wordpress es bastante sencillo, solo basta crear la cuenta y apuntarlo. Sin embargo, en Blogger requiere de un poco más de trabajo, aunque no por eso se hace más complejo. Hoy veremos como en unos breves pasos podemos dejar todo andando:</p>
<p style="text-align: justify;">1.- Lo primero que haremos será ir al <a href="http://www.feedburner.com" target="_blank">sitio de Feedburner</a> y crear una cuenta si es que no tenemos.</p>
<p style="text-align: justify;">2.- Luego, en el cuadro <strong>Burn a feed right this instant</strong> debemos ingresar la dirección de nuestro blog y hacemos click en <strong>Next</strong>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2646/4104446280_200d2ea3a8_o.png" alt="" width="478" height="92" />3.- A continuación, nos mostrará un cuadro de selección con los feeds que detectó desde el blog. Probablemente serán 2, uno en formato Atom y uno en RSS. Optaremos por el segundo y haremos click en <strong>Next</strong>.</p>
<p style="text-align: justify;">4.- Luego nos pedirá que definamos el título del feed y la URL de este. Aquí podemos fijar según queramos y hacemos click en <strong>Next</strong>. Con esto habremos activado el feed desde el sitio de Feedburner.</p>
<p style="text-align: justify;">5.- Ahora debemos dirijirnos al nuestro panel de control en Blogger, y dentro de <strong>Configuración</strong> buscaremos la opción <strong>Feed del sitio</strong>.</p>
<p style="text-align: justify;">6.- Dentro de esta última, buscamos la opción llamada <strong>Publicar URL redireccionada del feed</strong> y en ella ingresamos la URL que definimos en el último paso en Feedburner:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2703/4104470570_78c13263a1_o.png" alt="" width="500" height="93" /></p>
<p style="text-align: justify;">7.- Guardamos la configuración y listo. Desde ahora nuestros feeds se harán en formato RSS a través de Feedburner.</p>
<h2 style="text-align: justify;">3.- Cómo comprimir nuestros CSS y Javascript</h2>
<p style="text-align: justify;">Una buena práctica en el desarrollo de sitios Web, la cual lamentablemente es obviada por muchos, es la compresión de hojas de estilo CSS y archivos Javascript una vez que tenemos las versiones finales y nos aprontamos a subirlas al servidor. Los beneficios de hacer esto incluyen desde mejorar el tiempo de carga de los sitios <em>(algo que siempre debiesemos tener en cuenta)</em>, eliminar partes innecesarias <em>(como por ejemplo comentarios, los cuales está bien tenerlos en las versiones que manejamos a la hora de desarrollar, pero en el sitio en si no cumplen ninguna funcionalidad)</em> o bien optimizar mediante la combinación de secciones, cuando por ejemplo 2 marcas utilizan el mismo estilo y están declaradas por separado.</p>
<p style="text-align: justify;">Hoy hacer compresión de CSS y Javascript es bastante sencillo, ya que se encuentran disponibles muchos servicios que nos permiten realizarlo en línea y en solo unos segundos. Les recomendamos 2:</p>
<ol style="text-align: justify;">
<li>Para las hojas de estilo: CSS Compressor de CSS Drive Gallery, el cual pueden encontrar <a href="http://www.cssdrive.com/index.php/main/csscompressor/" target="_blank">aquí</a>.</li>
<li>Para Javascript: Javascript Compressor, el cual pueden encontrar <a href="http://javascriptcompressor.com/" target="_blank">aquí</a>.</li>
</ol>
<p style="text-align: justify;">Ambos servicios son sumamente sencillos de utilizar. Sólo debemos ingresar nuestro código y presionar un botón para que nos entregue la versión comprimida. Así que a tenerlo en cuenta a la hora de desarrollar.</p>
<h2 style="text-align: justify;">4.- Cómo evitar el refresco automático de Firefox</h2>
<p style="text-align: justify;">Una de las tantas funcionalidades que Firefox ofrece por defecto a la hora de instalarlo es el refresco automático de páginas que estemos viendo. Si bien en algunos casos puede ser útil, hay otros en los que se vuelve bastante molesto, por lo que una opción es desactivarlo, lo cual se puede hacer en unos cuantos pasos:</p>
<p style="text-align: justify;">1.- Abrimos Firefox y en la barra de direcciones escribimos <strong>about:config</strong> , con lo que se abrirá el interfaz de configuración:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2644/4104510392_c2bfe1c118_o.png" alt="" width="500" height="165" /></p>
<p style="text-align: justify;">2.- Hacemos click en <strong>¡Tendré cuidado, lo prometo!</strong> y nos llevará a las opciones de configuración. Una vez ahí, en el filtro debemos escribir:</p>
<blockquote>
<p style="text-align: justify;">accessibility.blockautorefresh</p>
</blockquote>
<p style="text-align: justify;">Y nos buscará la opción con el mismo nombre:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2709/4103747823_236ceb455e_o.png" alt="" width="368" height="84" /></p>
<p style="text-align: justify;">3.- Por defecto esta opción viene con el valor <strong>false</strong>. Hacemos click con el botón derecho del mouse sobre ella y seleccionamos <strong>Modificar</strong>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2794/4103747843_0ab569103f_o.png" alt="" width="364" height="166" /></p>
<p style="text-align: justify;">4.- Y veremos como el valor se cambia a <strong>true</strong>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2721/4103747853_ed1c42e125_o.png" alt="" width="386" height="68" /></p>
<p style="text-align: justify;">Y tenemos el refresco automático bloqueado. Si queremos volver a activarlo, solo debemos repetir el proceso y modificar el valor para que quede en <strong>false</strong>.</p>
<h2 style="text-align: justify;">5.- Cómo convertir de PDF a Excel</h2>
<p style="text-align: justify;">Dentro de las peticiones que nos llegan día a día, la conversión de formatos <em>(especialmente involucrando PDF)</em> es la categoría más llena. Una de las que teníamos en carpeta hace tiempo era la conversión de archivos PDF a formato Excel, la cual en un principio nos sorprendió bastante, ya que desconocíamos que fuera posible. Sin embargo, nuestro buen Topher, quien es la portabilidad hecha persona, nos ha mostrado un servicio que en lo personal me ha dejado impactado por su simpleza y rapidez. Hablamos de <strong>PDF to Excel</strong>, el cual puede ser accedido desde el siguiente enlace,  que nos permite hacer la conversión en solo 3 pasos, enviándonos el archivo convertido a nuestro correo electrónico.</p>
<p style="text-align: justify;">Para convertir:</p>
<p style="text-align: justify;">1.- Ingresamos al sitio oficial de <a href="http://www.pdftoexcelonline.com/es/Default.aspx" target="_blank">PDF to Excel</a>:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2520/4104537986_dac6df8899_o.png" alt="" width="500" height="309" /></p>
<p style="text-align: justify;">2.- Seguimos los 3 pasos para la conversión que vemos en el sitio principal:</p>
<ul style="text-align: justify;">
<li>Seleccionamos el archivo a convertir.</li>
<li>Seleccionamos el formato de destino <em>(aunque solo está disponible XLS)</em>.</li>
<li>Ingresamos nuestro correo electrónico para que nos envíen el archivo.</li>
</ul>
<p style="text-align: justify;">3.- Hacemos click en <strong>Convertir</strong> y esperamos mientras se sube el archivo al servidor:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2600/4104538040_7b286de259_o.png" alt="" width="500" height="301" /></p>
<p style="text-align: justify;">4.- Una vez subido, nos mostrará el mensaje de éxito y a continuación solo debemos esperar que nos llegue a nuestro correo:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2646/4103775439_b03591c3a8_o.png" alt="" width="500" height="398" /></p>
<p style="text-align: justify;">Para tener una noción aproximada, al momento de probar el servicio subimos un PDF de 850KB. La carga del archivo al servidor demoró unos 30 segundos y en no más de 5 minutos lo teníamos disponible en nuestro correo. Sin embargo, estos tiempos pueden variar dependiendo de nuestra conexión y de la carga que tenga el servidor al momento de utilizar el servicio.</p>
<p style="text-align: justify;">Bastante simple.</p>
<p style="text-align: justify;">Y así damos por terminada esta edición de CLH Express, en donde buscamos responder todas aquellas dudas que presenten soluciones cortas y sencillas que no necesiten de un completo paso a paso. Les recordamos que pueden seguir enviándonos sus peticiones a nuestro<a href="http://www.comolohago.cl/peticiones/" target="_blank"> buzón oficia</a>l.</p>
<p style="text-align: justify;">Como siempre, este CLH Express ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_ed7150e191_o.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este CLH Express haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
<p style="text-align: justify;">
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/11/14/clh-express-compresion-cssjavascript-feedburner-blogger-firefox-pdfs-y-mas-pdfs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cómo añadir tooltips a tu Web</title>
		<link>http://www.comolohago.cl/2009/10/19/como-anadir-tooltips-a-tu-web/</link>
		<comments>http://www.comolohago.cl/2009/10/19/como-anadir-tooltips-a-tu-web/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 00:13:38 +0000</pubDate>
		<dc:creator>Xabadu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[tooltips]]></category>

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

Hace algún tiempo me encontré en la situación de tener que implementar tooltips en un proyecto Web. Luego de buscar y experimentar distintas soluciones (la mayoría basadas en librerías externas en jQuery), me fue posible notar la dificultad de implementación que tenían estas para alguien que no contaba con gran experiencia en jQuery, como era [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm3.static.flickr.com/2663/4027840122_f3478611d9.jpg" alt="" width="400" height="74" /></p>
<p style="text-align: justify;">
<p style="text-align: justify;">Hace algún tiempo me encontré en la situación de tener que implementar tooltips en un proyecto Web. Luego de buscar y experimentar distintas soluciones <em>(la mayoría basadas en librerías externas en jQuery)</em>, me fue posible notar la dificultad de implementación que tenían estas para alguien que no contaba con gran experiencia en jQuery, como era mi caso, por lo que la experiencia terminó siendo menos que satisfactoria.</p>
<p style="text-align: justify;">Sin embargo, al seguir buscando, fue posible encontrar una forma mucho más sencilla de implementar estos tooltips, todo con la ayuda de nuestro querido y nunca bien ponderado CSS. Esta forma, se las contamos hoy mediante un sencillo y rápido tutorial.</p>
<p style="text-align: justify;">El detalle, como siempre, después del salto.</p>
<p style="text-align: justify;"><span id="more-2286"></span></p>
<h1 style="text-align: center;">Cómo añadir tooltips a tu Web</h1>
<p style="text-align: justify;">Antes de comenzar, partamos por aclarar para quienes desconozcan el concepto:</p>
<blockquote>
<h2 style="text-align: justify;">¿Qué es un tooltip?</h2>
<p style="text-align: justify;">Un tooltip es básicamente un cuadro que podemos rellenar con distinta información, el cual será visto por un usuario cuando pose el puntero del mouse sobre un elemento en particular de un documento Web.</p>
<p style="text-align: justify;">Su funcionamiento es bastante similar a los atributos ALT o TITLE de las imágenes, con la diferencia que el tooltip podemos adjuntarlo a otros elementos, como por ejemplo texto.</p>
<p style="text-align: justify;">La gran utilidad de los tooltips es poder presentar a nuestros visitantes información extra sobre ciertos elementos o secciones del sitio. Por ejemplo, es posible combinarlos con un formulario para agregar datos o tips sobre como rellenar ciertos campos, o entregar advertencias sobre cierto tipo de información.</p>
</blockquote>
<p style="text-align: justify;">Con eso claro, continuemos:</p>
<h2 style="text-align: justify;">Implementos necesarios:</h2>
<p style="text-align: justify;">En vista de que no utilizaremos librerías externas para crear nuestros tooltips, y solo lo haremos mediante CSS, lo que necesitamos es:</p>
<ol style="text-align: justify;">
<li>Un editor Web. En CLH utilizamos y recomendamos Adobe Dreamweaver, que pueden descargar del <a href="http://www.google.cl/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CAYQFjAA&amp;url=http%3A%2F%2Fwww.adobe.com%2Fes%2Fproducts%2Fdreamweaver%2F&amp;rct=j&amp;q=adobe+dreamweaver&amp;ei=DfncSqTaF8ak8Aaz4723BQ&amp;usg=AFQjCNGeFeQ8Mqbd407QHjtdwQGe1DWrPQ" target="_blank">siguiente enlace</a>. Sin embargo, si no tienen un editor Web, pueden utilizar bloc de notas, guardando el documento resultante como HTML.</li>
</ol>
<h2>Procedimiento:</h2>
<p>1.- Lo primero que haremos, será crear un nuevo documento HTML, el cual llamaremos <strong>prueba.html</strong>, pero pueden darle el nombre que deseen.</p>
<p>2.- En este documento que hemos creado, añadiremos un estilo de CSS, agregando el siguiente código entre las etiquetas &lt;head&gt; y &lt;/head&gt;:</p>
<blockquote><p>&lt;style type=&#8221;text/css&#8221;&gt;</p>
<p>a:hover{<br />
background:#ffffff;<br />
text-decoration:none;<br />
}</p>
<p>a.tooltip span{<br />
display:none;<br />
padding: 2px 3px;<br />
margin-left: 8px;<br />
width: 130px;<br />
}</p>
<p>a.tooltip:hover span{<br />
display: inline;<br />
position: absolute;<br />
background: #ffffff;<br />
border: 1px solid #cccccc;<br />
color:#6c6c6c;<br />
}</p>
<p>&lt;/style&gt;</p></blockquote>
<p style="text-align: justify;">Estos estilos determinarán el comportamiento cuando pasemos el mouse sobre un enlace, definiendo una clase llamada tooltip con la que deberemos marcar la etiqueta correspondiente en HTML. Aquí pueden jugar con los colores e ir probando las distintas características para lograr un resultado más personalizado si así lo desean.</p>
<p style="text-align: justify;">3.- Luego, entre las etiquetas &lt;body&gt; y &lt;/body&gt; simplemente definimos un texto y lo enlazamos, haciendo la llamada en el atributo class a tooltip, para que haga la relación con los estilos que recién hemos definido. Por ejemplo:</p>
<blockquote>
<p style="text-align: justify;">&lt;body&gt;</p>
<p style="text-align: justify;">Este es un &lt;a class=&#8221;tooltip&#8221; href=&#8221;#&#8221;&gt;Ejemplo de tooltip&lt;span&gt;Muy sencillo y hecho en CSS&lt;/span&gt;&lt;/a&gt;.</p>
<p style="text-align: justify;">&lt;/body&gt;</p>
</blockquote>
<p style="text-align: justify;">Ahora, de acuerdo a los estilos que definimos anteriormente, todo lo que incluyamos dentro de las etiquetas &lt;span&gt; y &lt;/span&gt; es lo que aparecerá dentro del tooltip, independiente de que este todo dentro de una etiqueta &lt;a&gt;. Adicionalmente, recuerden que el atributo <strong>href</strong> dentro de la etiqueta &lt;a&gt; debe apuntar a #, para que no cargue otro vínculo.</p>
<p style="text-align: justify;">4.- Guardamos y abrimos en el navegador, con lo que debiesemos tener algo como esto:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2600/4027928640_171bde1ce1.jpg" alt="" width="400" height="74" />5.- Pasamos el mouse por encima del enlace y veremos lo siguiente:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm3.static.flickr.com/2793/4027928652_9e4bd5c98b.jpg" alt="" width="400" height="74" />Tal como lo habíamos definido. Debido a que es una captura de pantalla, no se aprecia el puntero del mouse, pero podemos ver como la línea inferior del enlace desapareció al pasar el mouse por encima, tal como definimos en nuestro estilo CSS y aparece dentro del tooltip el texto que incluímos entre las etiquetas &lt;span&gt; y &lt;/span&gt;.</p>
<p style="text-align: justify;">Bastante simple ¿no?. En tan solo un par de minutos hemos podido habilitar y añadir tooltips mediante CSS para utilizar en nuestros sitios Web. Esto es muy útil si lo vamos combinando con distintos elementos, todo con el fin de entregar una mejor experiencia a nuestros visitantes.</p>
<p style="text-align: justify;">Antes de terminar, les recordamos que como siempre, este tutorial ha sido:</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://farm4.static.flickr.com/3043/3056524059_52d616c96c.jpg" alt="" width="400" height="314" /></p>
<p style="text-align: justify;">Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.</p>
<p style="text-align: justify;">Esperamos que este tutorial haya sido de utilidad para Uds.</p>
<p style="text-align: justify;">Muchas gracias por leer y será hasta una próxima oportunidad.</p>
<p style="text-align: center;"><strong>Staff CLH</strong></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.comolohago.cl/2009/10/19/como-anadir-tooltips-a-tu-web/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

