<?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>aurea &#187; Estándares</title>
	<atom:link href="http://aurea.es/category/estandares/feed/" rel="self" type="application/rss+xml" />
	<link>http://aurea.es</link>
	<description>Desarrollador front-end, Estándares Web y Accesibilidad</description>
	<lastBuildDate>Mon, 23 Apr 2012 06:52:44 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Diseño sensible vs. versión móvil</title>
		<link>http://aurea.es/2012/04/20/diseno-sensible-vs-version-movil/</link>
		<comments>http://aurea.es/2012/04/20/diseno-sensible-vs-version-movil/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 11:40:59 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[Usabilidad]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=5528</guid>
		<description><![CDATA[Vuelvo con un tema recurrente y que siempre levanta mucho debate en la comunidad Web. Surge a raíz del artículo Why We Shouldn’t Make Separate Mobile Websites sobre el Responsive Web Design &#8211; RWD (diseño web sensible). La pregunta básica es: ¿Diseñamos una Web única, o realizamos dos versiones (una de escritorio y otra móvil)? [...]]]></description>
			<content:encoded><![CDATA[<p>Vuelvo con un tema recurrente y que siempre levanta mucho debate en la comunidad Web.  Surge a raíz del artículo <a href="http://www.smashingmagazine.com/2012/04/19/why-we-shouldnt-make-separate-mobile-websites/">Why We Shouldn’t Make Separate Mobile Websites</a> sobre el <em>Responsive Web Design</em> &#8211; RWD (diseño web sensible).</p>
<p><strong>La pregunta básica</strong> es: ¿Diseñamos una Web única, o realizamos dos versiones (una de escritorio y otra móvil)?<br />
<span id="more-5528"></span><br />
Y es aquí donde tengo pensamientos encontrados:</p>
<h3>Si me dejo llevar por los estándares web</h3>
<ul>
<li>Mejor adaptación al dispositivo final. Sea el dispositivo que sea: navegadores convencionales y especiales, lectores de pantalla, lectores braille, dispositivos móviles.</li>
<li>Mejor adaptación al usuario, siendo él quien ajuste la presentación del sitio web a sus necesidades y en base a las opciones de su navegador.</li>
<li>Abstracción más clara del estilo, estructura y comportamiento.</li>
<li>Escalabilidad y mantenimiento. Pienso que sería más rápido y sencillo escalar posiciones que hacerlo manteniendo diferentes versiones del sitio Web.</li>
</ul>
<p>Si nos fijamos el artículo esta escrito por <a href="http://www.brucelawson.co.uk/">Bruce Lawson</a>, un desarrollador que trabaja en Opera. Empresa que esta a la vanguardia de los <a href="http://aurea.es/category/estandares/">estándares web</a>, y desde un principio muy volcados en HTML5, lenguaje que posibilidad este único camino para todos. En el 2009 había escrito sobre una conferencia de Chaals (evangelista de Opera) sobre las bondades de los <a href="http://aurea.es/2009/05/01/chaals-nuevos-estandares-web/">nuevos estándares web con HTML5</a>. Unos meses después la <acronym title="World Wide Web Consortium" xml:lang="en">W3C</acronym> anuncia que se <a href="http://aurea.es/2009/08/03/w3c-se-volcara-en-html5/">volcará sus esfuerzos en HTML5</a>. Si seguimos este camino me parece que al menos se intenta perseguir un Web único y estándar. </p>
<p>Ahora bien:</p>
<h3>Si me dejo llevar por la usabilidad</h3>
<ul>
<li>Se diseñara en base a las expectativas del usuario, a sus objetivos.</li>
<li>Se demanda inmediatez, que el usuario pueda hacer/leer lo que le interesa rápidamente. Para ello es necesario ofrecer una versión menos densa de contenidos.</li>
<li>Menos contenido = más velocidad a la hora de descargarlo.</li>
<li>Hay ciertos contenidos y servicios que en una versión móvil no son viables, entonces para que tenerlos? confunden al usuario!</li>
</ul>
<p>La experiencia de usuario y satisfacer sus objetivos son lo primero. Y por esto es necesaria una versión móvil. Jakob Nielsen y otros gurus de usabilidad van por este camino. </p>
<p>Por otro lado hay mucha información, muchos recursos, mucho dinero invertido en estas versiones web móvil, hay conferencias, hay patrones de diseño orientado a ello, todo centrado en la Usabilidad. Es un movimiento muy grande en esta dirección y eso da que pensar.</p>
<p>Pero&#8230;, si nos centramos en la usabilidad, el diseño del sitio Web móvil debería tener en cuenta muchos parámetros que incluso dependen de los fabricantes. Entonces, ¿hay que diseñar para varios dispositivos móviles?, ¿para cuales de ellos?</p>
<ul>
<li>Diferente hardware
<ul>
<li>Varios tamaños de pantalla.</li>
<li>Paleta de colores, contrastes, imágenes.</li>
<li>Diferentes teclados: caracteres, disposiciones, teclas-significados</li>
<li>Conexiones, memorias, etc.</li>
</ul>
</li>
<li>Diferentes métodos de interacción: <a href="http://es.wikipedia.org/wiki/Palanca_de_mando">joystick</a>, <a href="http://en.wikipedia.org/wiki/IPod">click whell</a>, <a href="http://es.wikipedia.org/wiki/Touchpad">touchpad</a>, <a href="http://es.wikipedia.org/wiki/Pantalla_t%C3%A1ctil">touchscreen</a>, reconocimiento de voz o el clásico <a href="http://es.wikipedia.org/wiki/Teclado_(inform%C3%A1tica)">teclado</a>.</li>
<li>Diferente Software: Nos podemos encontrar múltiples sistemas operativos: <a href="http://www.symbian.org">Symbian</a>, <a href="http://www.microsoft.com/windowsmobile">Windows Mobile</a>, <a href="http://www.apple.com/es/macosx/">Mac OS</a>, <a href="http://en.wikipedia.org/wiki/Google_Android">Android</a>.</li>
</ul>
<p>¿Hay que mirar estadísticas de acceso de usuarios, discriminando a la minoría?, ¿Y la usabilidad de estos pocos? <a href="http://aurea.es/category/estandares/">Los estándares Web</a> aquí reñirían con la <a href="http://aurea.es/category/usabilidad">Usabilidad</a> y mirarían hacia la <a href="http://aurea.es/category/accesibilidad">Accesibilidad</a>. </p>
<h3>Solución intermedia, las prosperas Apps</h3>
<p>Ayer vi de casualidad el programa &#8220;<a href="http://www.programalanube.es/">La nube</a>&#8221; en TV2, sobre el floreciente negocio de las apps. Por cierto que bien que vuelvan programas así.<br />
Al hilo de esto, he observado que muchos sitios web, orientados a servicios, tienen su Web única y una app especial que sustituye esa otra web en versión móvil.<br />
Bueno esto puede ser una solución intermedia a tener en cuenta. Puesto que la App esta diseñada, y destinada a satisfacer unos objetivos muy concretos, siendo dirigida a un target también muy concreto donde podemos centrarnos especialmente en la Usabilidad.</p>
<h3>Conclusión</h3>
<p>Llegados aquí, creo que ya se me ve el plumero. Yo abogaría por una Web única. Sobre el diseño sensible, todavía no me encuentro con conocimiento suficiente de ello, pero si se realmente se consigue que un único sitio Web se adapte a los distintos dispositivos, cambiando el tamaño de elementos, su posición, eliminandolos y haciendo una versión reducida mas sencilla. Entonces, &#8220;yo&#8221; iría en ese camino.</p>
<p>*Nota: Casa de herrero, cuchillo de palo. Espero zambullirne en este tema cuando tenga tiempo para afrontar el tan deseado rediseño de este sitio web (que se remonta al 2007 <img src='http://aurea.es/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  )</p>]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2012/04/20/diseno-sensible-vs-version-movil/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Abrir enlaces externos en nueva ventana añadiendo class external y _blank target al vuelo con jQuery</title>
		<link>http://aurea.es/2011/10/20/abrir-enlaces-externos-en-nueva-ventana-anadiendo-class-external-y-_blank-target-al-vuelo-con-jquery/</link>
		<comments>http://aurea.es/2011/10/20/abrir-enlaces-externos-en-nueva-ventana-anadiendo-class-external-y-_blank-target-al-vuelo-con-jquery/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 09:44:33 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[:not]]></category>
		<category><![CDATA[blank]]></category>
		<category><![CDATA[external]]></category>
		<category><![CDATA[href]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=5477</guid>
		<description><![CDATA[Hace tiempo (2009 y como pasa de rápido&#8230;) hablábamos de esto mismo en _blank, rel=”external” y una solución jQuery para abrir enlace en nueva ventana. Ahora traigo una revisión del snippet con esa misma funcionalidad pero un poco más completa y optimziada. Código jQuery jQuery&#40;document&#41;.ready&#40;function&#40;$&#41; &#123; &#160; //open external links in new window $&#40;'a:not([href^=&#34;http://aurea.es&#34;]):not([href^=&#34;#&#34;]):not([href^=&#34;/&#34;])'&#41;.addClass&#40;'external'&#41;; $&#40;'a[class=&#34;external&#34;]'&#41;.click&#40;function&#40;&#41;&#123; [...]]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo (2009 y como pasa de rápido&#8230;) hablábamos de esto mismo en <a href="http://aurea.es/2009/06/25/_blank-relexternal-y-jquery-como-solucion-para-abrir-enlace-en-nueva-ventana/">_blank, rel=”external” y una solución jQuery para abrir enlace en nueva ventana</a>. Ahora traigo una revisión del snippet con esa misma funcionalidad pero un poco más completa y optimziada.</p>
<h3>Código jQuery</h3>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 	
&nbsp;
	<span style="color: #006600; font-style: italic;">//open external links in new window</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a:not([href^=&quot;http://aurea.es&quot;]):not([href^=&quot;#&quot;]):not([href^=&quot;/&quot;])'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'external'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a[class=&quot;external&quot;]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'target'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'_blank'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Explicación</h3>
<ol>
<li>Comenzamos el mítico método <code>ready</code> de jQuery, encargado de comprobar si el <acronym title="Document Object Model" xml:lang="en">DOM</acronym> esta cargado y preparado para usarse. Tengamos en cuenta que deben estar todos los tags de enlaces ya descargados en el navegador para luego lanzar las operaciones sobre ellos.</li>
<li>A continuación hacemos 3 comprobaciones basadas en el atributo &#8220;href&#8221;. Que el link no comience con el &#8220;dominio del sitio web&#8221; (link absoluto), que no comience por &#8220;#&#8221; (link ancla), y que no comience por &#8220;/&#8221; (link relativo). A todos los enlaces que cumplen esto se les añade la clase &#8220;external&#8221;, ejemplo: <code>class="external"</code>.</li>
<li>Una vez tenemos identificados todos los enlaces externos, ya solo queda preparar un evento <code>.click()</code> que añada el atributo <code>target</code> con valor <code>blank</code> (nueva ventana/tab) cuando el evento se dispare.</li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2011/10/20/abrir-enlaces-externos-en-nueva-ventana-anadiendo-class-external-y-_blank-target-al-vuelo-con-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adios IFRAME, hola OBJECT</title>
		<link>http://aurea.es/2010/10/14/adios-iframe-hola-object/</link>
		<comments>http://aurea.es/2010/10/14/adios-iframe-hola-object/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 12:25:24 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[object]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=5405</guid>
		<description><![CDATA[Cuando necesitamos incluir un objeto HTML externo incrustado en una página podemos recurrir al tag IFRAME. Si el objeto que necesitamos incrustar es un SWF se suele recurrir a OBJECT y EMBED. Antes de seguir, es bueno recordar la historia de los elementos IMG, EMBED y OBJECT. OBJECT como sustituto de IFRAME Con IFRAME podemos [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando necesitamos incluir un objeto <acronym title="HyperText Markup Language" xml:lang="en">HTML</acronym> externo incrustado en una página podemos recurrir al tag <a href="http://www.w3.org/TR/REC-html40/present/frames.html#h-16.5">IFRAME</a>.<br />
Si el objeto que necesitamos incrustar es un SWF se suele recurrir a <a href="http://www.w3.org/TR/REC-html40/struct/objects.html">OBJECT</a> y EMBED.</p>
<p>Antes de seguir, es bueno recordar <a href="http://aurea.es/2008/11/27/breve-historia-de-img-embed-object/">la historia de los elementos IMG, EMBED y OBJECT</a>.</p>
<h3>OBJECT como sustituto de IFRAME</h3>
<p>Con <code>IFRAME</code> podemos embeber un tipo de documento HTML. Pero si atendemos a la definición de <code>OBJECT</code> veremos que podemos embeber varios tipos de documento como: <acronym title="HyperText Markup Language" xml:lang="en">HTML</acronym>, SWF, VIDEO, IMAGEN (<a href="http://wiki.dreamhost.com/index.php/Object_Embedding">ver ejemplos</a>).<br />
Teniendo en cuenta lo anterior, IFRAME puede verse como un TAG redundante.</p>
<p>Por otro lado en la versión <acronym title="eXtensible HyperText Markup Language" xml:lang="en">XHTML</acronym> Strict, el <acronym title="Document Type Definition" xml:lang="en">DTD</acronym> no admite el tag IFRAME. Al fin y al cabo forma parte del pasado y la <acronym title="World Wide Web Consortium" xml:lang="en">W3C</acronym> siempre ha recomendado el uso de un OBJECT para incrustar los diferentes documentos, tanto si es vídeo, como imagen, como una página html.</p>
<p>Además hay que tener cuidado con IFRAME en Firefox, generado de forma dinámica podemos tener problemas (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=279048">Bug 279048</a>).</p>
<h3><acronym title="Internet Explorer" xml:lang="en">IE</acronym> como de costumbre va contracorriente</h3>
<p>Si usamos OBJECT en Internet Explorer, debemos tener en cuenta que no reconoce el atributo <code>type</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;object type=&quot;text/html&quot; ...</pre></div></div>

<p>En su lugar tenemos que indicar un <a href="http://msdn.microsoft.com/en-us/library/ms533559%28VS.85%29.aspx">atributo classid</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;object classid=&quot;clsid:F08DF954-8592-11D1-B16A-00C0F0283628&quot; ...</pre></div></div>

<p>De todas formas con varias pruebas que hice he comprobado que el comportamiento es irregular en las diferentes versiones de la familia Internet Explorer (6, 7, 8, 9).<br />
En cambio con IFRAME, Internet Explorer se maneja de maravilla <img src='http://aurea.es/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  todas las versiones interpretan y dan el mismo resultado.</p>
<h3>IFRAME para <acronym title="Internet Explorer" xml:lang="en">IE</acronym>, OBJECT para el resto</h3>
<p>Al final pienso que la mejor opción cross-browser es mantener el IFRAME para la familia Internet Explorer y recuperar el OBJECT para el resto de navegadores (Firefox, Opera, Safari, Chrome).</p>
<p>Para hacer la bifurcación he recurrido a los <a href="http://aurea.es/2010/05/28/comentarios-condicionales-de-internet-explorer/">comentarios condicionales de IE</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--[if IE]&gt;
    &lt;iframe src=&quot;page.htm&quot;&gt;contenido alternativo&lt;/iframe&gt;
&lt;![endif]--&gt;
&lt;!--[if !IE]&gt; &lt;--&gt;
    &lt;object type=&quot;text/html&quot; data=&quot;page.htm&quot;&gt;contenido alternativo&lt;/object&gt;
&lt;!--&gt; &lt;![endif]--&gt;</pre></div></div>

<p>Conclusión, voy abrazando OBJECT mientras digo adiós al IFRAME a excepción de <acronym title="Internet Explorer" xml:lang="en">IE</acronym> <img src='http://aurea.es/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2010/10/14/adios-iframe-hola-object/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CSS adaptado a cada navegador con PHP</title>
		<link>http://aurea.es/2010/10/06/css-adaptado-a-cada-navegador-con-php/</link>
		<comments>http://aurea.es/2010/10/06/css-adaptado-a-cada-navegador-con-php/#comments</comments>
		<pubDate>Wed, 06 Oct 2010 07:35:41 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=5355</guid>
		<description><![CDATA[Tener diferentes hojas de estilo dependiendo del navegador me parece algo horrible .  Pero si por algún motivo es necesario, podemos emplear una forma bastante fácil y limpia mediante PHP (Ref. Andrew Martin). Para ello, (1) pondremos un CSS base que sea compatible para todos los navegadores y a continuación (2) haremos uso del array [...]]]></description>
			<content:encoded><![CDATA[<p>Tener diferentes hojas de estilo dependiendo del navegador me parece algo horrible <img src='http://aurea.es/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  .  Pero si por algún motivo es necesario, podemos emplear una forma bastante fácil y limpia mediante <a href="http://php.net">PHP</a> (Ref. <a href="http://antigravity-systems.com">Andrew Martin</a>).</p>
<p>Para ello, (1) pondremos un <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> base que sea compatible para todos los navegadores y a continuación (2) haremos uso del array <a href="http://www.php.net/manual/en/reserved.variables.server.php">$_SERVER</a> y del campo donde se cargan las cabeceras con información del navegador del usuario &#8220;HTTP_USER_AGENT&#8221;.</p>
<p>1. Código <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> base:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; href=&quot;base.css&quot; type=&quot;text/css&quot; /&gt;</pre></div></div>

<p>2. Código PHP:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$browser</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_USER_AGENT'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>	
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/MSIE.8/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;msie8.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> 
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/MSIE.7/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;msie7.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/MSIE.6/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;msie6.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/MSIE.9/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;msie9.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/Firefox.2/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;firefox2.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/Firefox.3.5/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;firefox35.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/Firefox.3/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;firefox3.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/Chrome/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;chrome.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/Safari/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;safari.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/Opera/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$browser</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;opera.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;link rel=&quot;stylesheet&quot; href=&quot;unknown.css&quot; type=&quot;text/css&quot; /&gt;'</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p>El código escribirá el link con la hoja de estilo correspondiente al navegador empleado por el usuario basándose en la comparación de cadenas.</p>
<p>Si lo que queremos es únicamente discernir la versión de <acronym title="Microsoft Internet Explorer" xml:lang="en">MSIE</acronym>, podemos también recurrir a los <a href="http://aurea.es/2010/05/28/comentarios-condicionales-de-internet-explorer/">comentarios condicionales de Internet Explorer</a>.</p>
<p>Para hacer las pruebas necesarias con los diferentes navegadores, podemos descargarlos o <a href="http://aurea.es/2009/08/06/emular-ie8ie7ie6-firefox-safari-chrome-opera/">emularlos</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2010/10/06/css-adaptado-a-cada-navegador-con-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Etiqueta PRE, desbordamiento en gmail y solución con nl2br o white-space</title>
		<link>http://aurea.es/2010/07/19/etiqueta-pre-desbordamiento-en-gmail-solucion-con-white-space/</link>
		<comments>http://aurea.es/2010/07/19/etiqueta-pre-desbordamiento-en-gmail-solucion-con-white-space/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 14:22:31 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[nl2br]]></category>
		<category><![CDATA[pre]]></category>
		<category><![CDATA[white-space]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=5314</guid>
		<description><![CDATA[Me he encontrado con un problema que parece afectar exclusivamente a Gmail y que ocurre al recibir un mail que contiene la etiqueta pre. La misión de esta etiqueta es pre-formatear su contenido, con lo cual mantiene en el texto los espacios en blanco, saltos de línea, etc. Y es justamente por esa razón por [...]]]></description>
			<content:encoded><![CDATA[<p>Me he encontrado con un problema que parece afectar exclusivamente a <a href="http://gmail.com">Gmail</a> y que ocurre al recibir un mail que contiene la etiqueta <a href="http://www.w3.org/TR/html401/struct/text.html#h-9.3.4">pre</a>. </p>
<p>La misión de esta etiqueta es pre-formatear su contenido, con lo cual mantiene en el texto los espacios en blanco, saltos de línea, etc. Y es justamente por esa razón por la que debemos tener mucho cuidado (no soy muy amigo de emplearla).</p>
<p>En Gmail, por ejemplo se producía un desbordamiento horizontal, donde salia el scroll y el texto continuaba a lo largo y ancho de la ventana <img src='http://aurea.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Como solución, sustituir <code>pre</code> por un simple <code>div</code> en conjunción con una de estas dos opciones para el contenido que albergará:</p>
<ul>
<li>Formatear el contenido con PHP: Podemos ayudarnos de la función <a href="http://php.net/manual/es/function.nl2br.php">nl2br</a> que insertará los saltos de línea.<br />
<br />Ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">    <span style="color: #990000;">nl2br</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'texto con formato'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

</li>
<li>Formatear el contenido con CSS: Podemos usar la regla <code>white-space: pre;</code> para simular el comportamiento de la etiqueta <code>pre</code>.<br />
<br />Ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">    &lt;div style=&quot;white-space: pre;&quot;&gt;
        texto con formato
    &lt;/div&gt;</pre></div></div>

</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2010/07/19/etiqueta-pre-desbordamiento-en-gmail-solucion-con-white-space/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimización de CSS; Nicole Sullivan nos enseña 5 errores típicos y 5 buenas maneras</title>
		<link>http://aurea.es/2010/07/15/optimizacion-de-css-nicole-sullivan-nos-ensena-5-errores-tipicos-y-5-buenas-maneras/</link>
		<comments>http://aurea.es/2010/07/15/optimizacion-de-css-nicole-sullivan-nos-ensena-5-errores-tipicos-y-5-buenas-maneras/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 18:51:29 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[optimización]]></category>
		<category><![CDATA[pagespeed]]></category>
		<category><![CDATA[yslow]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=5276</guid>
		<description><![CDATA[Hace un tiempo escribí sobre algunas técnicas para poder optimizar nuestros códigos CSS. También mencionaba herramientas que puede facilitar nuestro trabajo de optimización: Firebug, PageSpeed, YSlow y YUI Compressor. 5 errores típicos Un 42% de páginas no comprimen su contenido con GZIP. Un 44% de páginas enlazan a más de 2 ficheros CSS. Un 56% [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un tiempo escribí sobre <a href="http://aurea.es/2010/03/10/optimizar-css-12-consejos-y-3-herramientas/">algunas técnicas para poder optimizar nuestros códigos CSS</a>. También mencionaba herramientas que puede facilitar nuestro trabajo de optimización: <a href="https://addons.mozilla.org/es-ES/firefox/addon/1843">Firebug</a>, <a href="http://code.google.com/intl/es-ES/speed/page-speed/">PageSpeed</a>, <a href="http://developer.yahoo.com/yslow/">YSlow</a> y <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a>.</p>
<h3>5 errores típicos</h3>
<ul>
<li>Un 42% de páginas no comprimen su contenido con GZIP.</li>
<li>Un 44% de páginas enlazan a más de 2 ficheros CSS.</li>
<li>Un 56% no sirven el <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> con cookies (o no la entiendo, o esta la veo complicada de evitar sin CDN).</li>
<li>Un 63% no minimiza sus ficheros con herramientas como <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a>.</li>
<li>Un 21% de páginas tienen ficheros <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> con más de 100K de peso (esta es de escándalo).</li>
</ul>
<p>Si en nuestros <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> sumamos: demasiada atomicidad, normas, duplicación, conflictos y lo aderezamos todo con algo de impredecibilidad, tendremos por resultado un enorme e incontrolable CSS.</p>
<h3>5 buenas maneras</h3>
<p>Lo que debemos evitar es:</p>
<h4>1. La Atomicidad</h4>
<p>Imaginemos una página Web como si fuera un coche. Para crear ese coche usamos piezas de lego, una a una las vamos posicionando hasta crear la figura del coche. </p>
<ul>
<li>Con <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> básicamente hacemos lo mismo, podemos ir pieza a pieza posicionando y creando el sitio web. Y es justamente el planteamiento que debemos cambiar.</li>
<li>La idea es evitar pensar en pequeñas piezas (átomos) y pensar en objetos que se puedan reutilizar. De esta manera podemos por ejemplo crear con <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> una rueda del coche, que a su vez bastaría para simular las otras tres restantes.</li>
<li>Esto se podría considerar una evolución de la forma de pensar en el CSS.</li>
</ul>
<h4>2. Normas desfasadas</h4>
<p>Que van acumulandose, que no se reutilizan, que son incrementales en el tiempo, muy especificas, etc.</p>
<h4>3. Normas imprevisibles</h4>
<p>Que no pueden ser reutilizadas y que son totalmente dependientes de su ubicación.</p>
<h4>4. Guerras de especificidad</h4>
<p>Nodos hijos de hijos de otros hijos, hacks, estilos con #ID que no pueden ser reutilizados, la sentencia !important no tiene cabida (si se usa bien la cascada), <a href="http://aurea.es/2010/03/10/optimizar-css-12-consejos-y-3-herramientas/">etc</a>. </li>
<h4>5. Duplicidad</h4>
<p>Definir en numerosas ocasiones reglas como: margin, float, font-size, etc. Como solución tenemos:</p>
<ul>
<li><a href="http://aurea.es/2008/11/27/tecnicas-para-resetear-css/">Algunas técnicas para resetear el CSS</a>.</li>
<li>Pensar en global, en todo el sitio web. Para ello ayuda mucho seguir <a href="http://aurea.es/2010/04/29/diseno-centrado-en-el-usuario-una-propuesta/">una metodología como la DCU</a>, para abstraer el futuro marcado de los mockups y ejecutar nuestro &#8220;<acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> kung-fu&#8221;! <img src='http://aurea.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p><object type="application/x-shockwave-flash" data="http://www.youtube.com/v/j6sAm7CLoCQ" width="425" height="355" class="embedflash"><param name="movie" value="http://www.youtube.com/v/j6sAm7CLoCQ" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><small>(Please open the article to see the flash file or player.)</small></object></p>]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2010/07/15/optimizacion-de-css-nicole-sullivan-nos-ensena-5-errores-tipicos-y-5-buenas-maneras/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>PNG transparente e IE, el mítico problema…</title>
		<link>http://aurea.es/2010/07/09/png-transparente-e-ie-el-mitico-problema/</link>
		<comments>http://aurea.es/2010/07/09/png-transparente-e-ie-el-mitico-problema/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 07:31:29 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[filtro]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[png]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=5251</guid>
		<description><![CDATA[Internet Explorer en su versión 6 y anteriores no soporta la transparencia del formato PNG. Para solucionar este problema existen varias técnicas: A través del filtro Directx AlphaImageLoader. Con Behaviors. El conocido pngfix (con la ayuda de JavaScript). Algunas implementaciones pngfix para frameworks de JavaScript, como jquery.pngFix.js Todas ellas presentan pros y contras. Dependiendo del [...]]]></description>
			<content:encoded><![CDATA[<p>Internet Explorer en su versión 6 y anteriores no soporta la transparencia del formato PNG.<br />
Para solucionar este problema existen varias técnicas:</p>
<ul>
<li>A través del filtro Directx <a href="http://msdn.microsoft.com/en-us/library/ms532969%28VS.85%29.aspx">AlphaImageLoader</a>.</li>
<li>Con <a href="http://www.twinhelix.com/css/iepngfix/">Behaviors</a>.</li>
<li>El conocido <a href=" http://homepage.ntlworld.com/bobosola/index.htm">pngfix</a> (con la ayuda de JavaScript).</li>
<li>Algunas implementaciones pngfix para frameworks de JavaScript, como <a href="http://jquery.andreaseberhard.de/pngFix/">jquery.pngFix.js</a></li>
</ul>
<p>Todas ellas presentan pros y contras. Dependiendo del proyecto puede que venga mejor uno u otro, o que simplemente alguno no funcione por conflictos de JavaScript o misteriosas razones que solo las meigas de <acronym title="Internet Explorer" xml:lang="en">IE</acronym> conocen. Así que la única solución es probar y probar&#8230; <img src='http://aurea.es/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>A continuación voy a desarrollar la primera de ellas.</p>
<h3>AlphaImageLoader</h3>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#logo</span>  <span style="color: #00AA00;">&#123;</span> 
	<span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
	filter<span style="color: #00AA00;">:</span> progid<span style="color: #3333ff;">:DXImageTransform</span><span style="color: #6666ff;">.Microsoft</span>.AlphaImageLoader<span style="color: #00AA00;">&#40;</span>
		src<span style="color: #00AA00;">=</span><span style="color: #ff0000;">'http://..../logo.png'</span><span style="color: #00AA00;">,</span> 
		sizingMethod<span style="color: #00AA00;">=</span><span style="color: #ff0000;">'crop'</span>
	<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>El primero de los pasos es indicar que no hay ningún fondo <code>background-image: none;</code>, a continuación usamos <code>filter</code> y la llamada Directx de Microsoft para cargar imágenes que incorporan factor alfa.  En el parámetro <code>src</code> va la ruta absoluta al fichero png.</p>
<h3>Conflicto con los enlaces</h3>
<p>Con lo dicho anteriormente el <acronym title="Portable Network Graphics" xml:lang="en">PNG</acronym> es mostrado con transparencia y sin errores, pero los enlaces no realizan el comportamiento adecuado si se encuentran en el interior de un elemento que tenga aplicado el filtro AlphaImageLoader.</p>
<p>Para solucionar este último problema podemos recurrir al siguiente código CSS:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#logo</span> a <span style="color: #00AA00;">&#123;</span> 
	<span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">relative</span><span style="color: #00AA00;">;</span> 
	<span style="color: #000000; font-weight: bold;">z-index</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Cuando se aplica un filtro el elemento tiene una posición estática y esto presenta problemas en los enlaces, por ello se fuerza por medio de <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> a que los enlaces dispongan de una posición relativa y con z-index en una capa inferior.</p>
<h3>Solo para Internet Explorer</h3>
<p>Otros navegadores modernos (Firefox, Opera, Safari, Chrome) soportan perfectamente el formato <acronym title="Portable Network Graphics" xml:lang="en">PNG</acronym> y su grado de transparencia, por tanto sería bueno pensar en ofrecer esta técnica únicamente cuando el usuario se encuentra navegando con Internet Explorer. Para lograrlo podemos recurrir a los <a href="http://aurea.es/2010/05/28/comentarios-condicionales-de-internet-explorer/">comentarios condicionales</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--[if lt IE 7]&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;ie6.css&quot; mce_href=&quot;ie6.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;&lt;![endif]--&gt;</pre></div></div>

<p>Mediante este comentario condicional ubicado en el <code>head</code> podemos indicar que solo aquellos navegadores que sean inferiores al Internet Explorer 7  <code>[if lt <acronym title="Internet Explorer" xml:lang="en">IE</acronym> 7]</code> se enlace el fichero de esitlo “ie6.css” que a su vez contiene los códigos comentados para esta técnica.</p>
<p>De esta forma: </p>
<ul>
<li>No obligamos a que se interprete código propietario (no estándar) como el filtro <strong>AlphaImageLoader</strong> por parte de otro navegador que no sea <acronym title="Internet Explorer 6" xml:lang="en">IE6</acronym> o inferior.</li>
<li>El sitio Web será estándar y válido según el <acronym title="World Wide Web Consortium" xml:lang="en">W3C</acronym> &#8211; <a href="http://validator.w3.org/">Validator</a>.</li>
<li>Reducimos el código <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> innecesario para otros navegadores y con ello logramos una <a href="http://aurea.es/2010/03/10/optimizar-css-12-consejos-y-3-herramientas/">mejor optimización</a>.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2010/07/09/png-transparente-e-ie-el-mitico-problema/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Abreviaturas (abbr) VS. Acrónimos (acronym)</title>
		<link>http://aurea.es/2010/06/23/abreviaturas-abbr-vs-acronimos-acronym/</link>
		<comments>http://aurea.es/2010/06/23/abreviaturas-abbr-vs-acronimos-acronym/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 12:21:11 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[abbr]]></category>
		<category><![CDATA[acronym]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=5180</guid>
		<description><![CDATA[En la vieja escuela estábamos acostumbrados a identificar y definir cada abreviatura y acrónimo con intención de aportar más semántica a nuestro contenido. Usamos el atributo title con la versión textual completa, dentro de las etiquetas abbr y acronym, para explicar el término sin interrumpir el flujo del documento. Ejemplo de abreviatura &#8211; abbr &#60;p&#62;&#60;abbr [...]]]></description>
			<content:encoded><![CDATA[<p>En la vieja escuela estábamos acostumbrados a identificar y definir cada abreviatura y acrónimo con intención de aportar más semántica a nuestro contenido.<br />
Usamos el atributo <code>title</code> con la versión textual completa, dentro de las etiquetas <code>abbr</code> y <code>acronym</code>, para explicar el término sin interrumpir el flujo del documento.</p>
<h3>Ejemplo de abreviatura &#8211; <code>abbr</code></h3>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;p&gt;&lt;abbr title=&quot;Teléfono&quot;&gt;Tel&lt;/abbr&gt;&lt;/p&gt;</pre></div></div>

<h3>Ejemplo de acrónimo &#8211; <code>acronym</code></h3>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;p&gt;&lt;acronym title=&quot;Real Academia Española&quot;&gt;RAE&lt;/acronym&gt;&lt;/p&gt;</pre></div></div>

<h3>Abreviaturas o acrónimos en otro idioma</h3>
<p>Si el idioma de la abreviatura o el acrónimo es diferente al del documento, se debería indicar con los atributos <code>lang</code> y/o <code>xml:lang</code>.</p>
<p>Por ejemplo en el caso del documento siguiente en <abbr title="eXtensible HyperText Markup Language" lang="en" xml:lang="en">XHTML</abbr> Strict en Inglés:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; dir=&quot;ltr&quot; lang=&quot;en&quot; xml:lang=&quot;en&quot; &gt;</pre></div></div>

<p>El marcado de la abreviatura sería:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;p&gt;&lt;acronym title=&quot;Real Academia Española&quot; lang=&quot;es&quot; xml:lang=&quot;es&quot;&gt;RAE&lt;/acronym&gt;&lt;/p&gt;</pre></div></div>

<p>Y ahora viene lo bueno&#8230;</p>
<h3>Según la nueva escuela todo es abreviatura</h3>
<ul>
<li>Se llama <strong>acrónimo</strong> a la palabra que se forma a partir de las letras iniciales de un nombre compuesto y a veces por más letras. Por ejemplo: <acronym title="RAdio-Detection And Ranging" xml:lang="en" lang="en">RADAR</acronym> (RAdio-Detection And Ranging).</li>
<li>Se llama <strong>sigla</strong> al término que se forma a partir de la inicial de las palabras claves que forman el título o el nombre completo de algo. Por ejemplo: <acronym title="Real Academia Española">RAE</acronym> (Real Academia Española).</li>
</ul>
<p><em>Ambos casos (acrónimos y siglas) son considerados abreviaturas</em> y por ello en la práctica se permite usar <code>abbr</code> para todo tipo de formas abreviadas.</p>
<p>Además, en las especificaciones <abbr title="HyperText Markup Language" lang="en" xml:lang="en">HTML</abbr>5 y <abbr title="eXtensible HyperText Markup Language" lang="en" xml:lang="en">XHTML</abbr>2 queda eliminado el elemento <code>acronym</code> a favor de estándarizar únicamente <code>abbr</code>.</p>
<p>Me parece bueno todo lo que sea ahorrar confusiones y malos usos, por eso me gusta la interpretación de la nueva escuela <img src='http://aurea.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>* A tener en cuenta: Como no podía ser de otra forma las versiones anteriores a Internet Explorer 7 no reconocen <code>abbr</code>.</p>]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2010/06/23/abreviaturas-abbr-vs-acronimos-acronym/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comentarios condicionales de Internet Explorer</title>
		<link>http://aurea.es/2010/05/28/comentarios-condicionales-de-internet-explorer/</link>
		<comments>http://aurea.es/2010/05/28/comentarios-condicionales-de-internet-explorer/#comments</comments>
		<pubDate>Fri, 28 May 2010 14:16:07 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=5118</guid>
		<description><![CDATA[Son como su propio nombre indica comentarios interpretados únicamente por Internet Explorer e incrustados en el código HTML, generalmente en el apartado HEAD y realizan su función únicamente si la condicional se cumple atendiendo al navegador y su versión. Este mecanismo fue &#8220;un invento&#8221; de Microsoft (Internet Explorer), que en númerosas ocasiones no han seguido [...]]]></description>
			<content:encoded><![CDATA[<p>Son como su propio nombre indica <em>comentarios</em> interpretados únicamente por <a href="http://www.microsoft.com/spain/Windows/internet-explorer/">Internet Explorer</a> e incrustados en el  código <acronym title="HyperText Markup Language" lang="en" xml:lang="en">HTML</acronym>, generalmente en el apartado <a hreflang="en" href="http://www.w3.org/TR/html401/struct/global.html#h-7.4.1">HEAD</a> y realizan su función únicamente si la  condicional se cumple atendiendo al <strong>navegador</strong> y su <strong>versión</strong>.</p>
<p>Este mecanismo fue &#8220;un invento&#8221; de Microsoft (Internet Explorer), que en númerosas ocasiones no han seguido los estándares y pautas  marcadas por la W3C. Mediante los comentarios condicionales podremos  crear estilos propios atendiendo a las diferentes versiones de este  navegador.</p>
<p>Las condicionales llevan un operador: &#8220;!&#8221; (negación), &#8220;lt&#8221; (menor  que), &#8220;lte&#8221; (menor o igual que), &#8220;gt&#8221; (mayor que), &#8220;gte&#8221; (mayor o igual  que). Con los operadores y las diferentes versiones del navegador ya  podemos definir estilos atendiendo a las diferencias de cada caso.</p>
<h4>Ejemplos</h4>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--[if !IE]&gt; Cualquier navegador pero NO (!) Internet Explorer &lt;![endif]--&gt;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--[if lt IE 6]&gt; Solo versiones MENORES de la 6 &lt;![endif]--&gt;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--[if lte IE 6]&gt; Solo versiones MENORES o IGUAL a la 6 &lt;![endif]--&gt;;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--[if gt IE 5.5]&gt; Solo versiones MAYORES a la 5.5  &lt;![endif]--&gt;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--[if gte IE 5.5]&gt; Solo versiones MAYORES o IGUAL a la 5.5  &lt;![endif]--&gt;</pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2010/05/28/comentarios-condicionales-de-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Optimizar CSS, 12 consejos y 4 herramientas</title>
		<link>http://aurea.es/2010/03/10/optimizar-css-12-consejos-y-3-herramientas/</link>
		<comments>http://aurea.es/2010/03/10/optimizar-css-12-consejos-y-3-herramientas/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 13:19:23 +0000</pubDate>
		<dc:creator>javiaurea</dc:creator>
				<category><![CDATA[Estándares]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[optimización]]></category>

		<guid isPermaLink="false">http://aurea.es/?p=4999</guid>
		<description><![CDATA[Expongo a continuación algunos consejos para la optimización de nuestras hojas de estilos CSS. 1. Selectores ID, Classes, Tags #logo &#123; margin-top: 1em; &#125; .ico &#123; margin-left: 1em; &#125; a &#123; text-decoration:none; &#125; Los Selectores ID es la forma más eficiente y rápida que hay en CSS para otorgar estilo. Por contra no podemos sobrecargar [...]]]></description>
			<content:encoded><![CDATA[<p>Expongo a continuación algunos consejos para la optimización de nuestras hojas de estilos CSS.</p>
<h3>1. Selectores ID, Classes, Tags</h3>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#logo</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">margin-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1em</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.ico</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">margin-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1em</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
a <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">text-decoration</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Los <a href="http://www.w3.org/TR/CSS2/selector.html#id-selectors">Selectores ID</a> <strong>es la forma más eficiente</strong> y rápida que hay en <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> para otorgar estilo. Por contra no podemos sobrecargar nuestro <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> usándolos para cada elemento que requiera un mínimo de diseño. En este punto tenemos que pensar de forma creativa y global para usar los <a href="http://www.w3.org/TR/CSS2/selector.html#class-html">selectores de clase</a>, las propias etiquetas y los principios de la cascada.</p>
<h3>2. Un identificador no necesita más</h3>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">h1 <span style="color: #cc00cc;">#logo</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1em</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Las etiquetas con un atributo de identificador son irrepetibles, solamente hay uno por página, por tanto es redundante añadir cualquier referencia adicional.<br />
El ejemplo anterior más optimo sería:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#logo</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1em</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<h3>3. Agrupar selectores con mismas propiedades</h3>
<p>En vez de:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">h2 <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">700</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
h3 <span style="color: #00AA00;">&#123;</span>  <span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">700</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
.<span style="color: #993333;">bold</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">700</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Mejor usar:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">h2<span style="color: #00AA00;">,</span> h3<span style="color: #00AA00;">,</span> .<span style="color: #993333;">bold</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">700</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Este es un ejemplo muy obvio pero puede ser más complejo dependiendo del tamaño de la hoja de estilos.</p>
<h3>4. Escribir el <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> de formas abreviada</h3>
<p>Las llamadas <a href="http://www.w3.org/TR/CSS2/about.html#shorthand">Shorthand</a> es una forma de  escribir las reglas de forma abreviada, lo cual repercute directamente en la optimización (siguiendo el principio <q>menos es más</q>).<br />
Este asunto lo he tratado en un post anterior llamado &#8220;<a href="http://aurea.es/2008/12/08/formas-abreviadas-para-optimizar-css/">Formas abreviadas para optimizar CSS</a>&#8220;.</p>
<h3>5. Más restrictivo a la derecha</h3>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">ul li span<span style="color: #6666ff;">.linklist</span> a <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #993333;">red</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Ante un ejemplo como este podemos pensar que el navegador interpreta de izquierda a derecha los selectores, cuando en realidad es justamente a la inversa. Primero analiza <code>A</code>, luego mira que se su padre sea <code>SPAN.linklist</code>, su abuelo <code>LI</code> y su bisabuelo <code>UL</code>, si esto se cumple se pone la propiedad de estilo <code>border: 1px solid red;</code>. </p>
<p>El problema es que pueden existir muchas etiquetas de enlace en una página y la cantidad de proceso será mayor, por lo tanto tendríamos que poner el selector más restrictivo más a la derecha. Ante esto se me ocurren dos soluciones:</p>
<ul>
<li>Disminuir las descendencias, por ejemplo: <code>span.linklist a</code></li>
<li>Otorgar una clase <code>a.linklist</code> y prescindir del resto</li>
</ul>
<h3>6. Menos descendencia y más herencia</h3>
<p>Es aconsejable no recurrir a <a href="http://www.w3.org/TR/CSS2/selector.html#descendant-selectors">selectores con descendencias, hijos, hermanos, etc.</a> Siempre que sea posible usar únicamente Selectores ID, clases y etiquetas. </p>
<p>En cambio si es positivo heredar (inherit) el mayor número de propiedades posibles entre diferentes elementos. Tengamos en cuenta también la herencia por defecto para no escribir reglas redundantes.</p>
<h3 id="optimizarcss-csshead">7. Poner el <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> en HEAD</h3>
<p>El situar los estilos en el <a href="http://www.w3.org/TR/html401/struct/global.html#h-7.4.1">HEAD</a> hace posible que la página muestre el contenido-estilo de forma progresiva, lo que mejora la experiencia de uso.</p>
<p>Por otro lado <a href="http://www.w3.org/TR/html4/struct/links.html#h-12.3">la especificación HTML</a> también recomienda la etiqueta LINK dentro del HEAD para incorporar nuestras hojas de estilo. </p>
<h3>8. <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> como fichero externo (style.css)</h3>
<p>Esto hace que la cache pueda hacer su trabajo, de lo contrario si incorporamos el <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> en linea, será descargado una y otra vez con la página. </p>
<p>Otra ventaja es la mejora en la escalabilidad pudiendo gestionar todos los estilos y el diseño de una forma más centralizada.</p>
<h3>9. LINK mejor que @import</h3>
<p>En algunas versiones de <acronym title="Internet Explorer" xml:lang="en">IE</acronym> usar <a href="http://www.w3.org/TR/CSS2/cascade.html#at-import">@import</a> es parecido a usar LINK fuera de HEAD, por esta razón y teniendo en cuanta <a href="#optimizarcss-csshead">lo dicho anteriormente</a>, es recomendable usar un enlace al fichero y no importarlo.  </p>
<p>Más información en <a href="http://www.stevesouders.com/blog/2009/04/09/dont-use-import/" hreflang="en" lang="en" xml:lang="en">Don&#8217;t use @import</a>.</p>
<h3>10. Minimizar el número de peticiones LINK</h3>
<p>Supongamos el siguiente ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; href=&quot;style1.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;style2.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;</pre></div></div>

<p>En el fichero style2.css a penas hay unas pocas lineas de código y su gestión no lleva a confusiones, entonces es mejor tener un solo fichero style.css con todas las reflas <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym>, reduciendo el número de peticiones LINK al servidor. </p>
<p>En este sentido tener en cuanta también la modularidad, pueden existir ficheros <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> que por esta razón es mejor mantenerlos bien separados y organizados. </p>
<h3>11. Evitar las &#8220;<acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> Expressions&#8221;</h3>
<p>No son estándares y se procesan repetidas veces para establecer sus propiedades dinámicas.<br />
En <a href="http://aurea.es/2010/03/01/no-me-gustan-las-css-expressions">No me gustan las <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym> Expressions</a> planteo algunos problemas que derivan en la falta de optimización.</p>
<h3>12. Evitar filtros</h3>
<p>Siempre que sea posible evitar el uso de filtros como por ejemplo &#8220;<a href="http://msdn.microsoft.com/en-us/library/ms532969%28VS.85%29.aspx">AlphaImageLoader</a>&#8220;, estos filtros consumen una gran cantidad de memoria para su funcionamiento. </p>
<h3>Herramientas para la optimización y compresión</h3>
<p>Existen muchas, pero las que más uso son:</p>
<ul>
<li><a href="http://aurea.es/2009/10/09/cleancss-limpiar-y-optimizar-nuestro-css/">CleanCSS – Limpiar y optimizar nuestras hojas de estilo</a></li>
<li><a href="https://addons.mozilla.org/es-ES/firefox/addon/1843">Firebug</a> + <a href="http://code.google.com/intl/es-ES/speed/page-speed/">PageSpeed</a> + <a href="http://developer.yahoo.com/yslow/">YSlow</a></li>
<li><a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a></li>
</ul>
<p>Las dos primeras te ayudarán a chequear y encontrar mejores formas de optimización, la tercera se encarga de comprimir el fichero CSS.</p>
<p>La experiencia hace que en cada proyecto tengamos menos trabajo que optimizar e invertir menos tiempo delante de estas herramientas.</p>
<p>Por cierto, ¿se os ocurren más formas para optimizar <acronym title="Cascading Style Sheets" xml:lang="en">CSS</acronym>?</p>]]></content:encoded>
			<wfw:commentRss>http://aurea.es/2010/03/10/optimizar-css-12-consejos-y-3-herramientas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

