<?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>el cssar &#187; xhtml</title>
	<atom:link href="http://www.elcssar.com/tag/xhtml/feed" rel="self" type="application/rss+xml" />
	<link>http://www.elcssar.com</link>
	<description>Diseño y maquetación accesibles basados en estándares web</description>
	<lastBuildDate>Wed, 24 Feb 2010 09:04:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Columnas CSS</title>
		<link>http://www.elcssar.com/css/columnas-css</link>
		<comments>http://www.elcssar.com/css/columnas-css#comments</comments>
		<pubDate>Sun, 29 Mar 2009 14:13:46 +0000</pubDate>
		<dc:creator>test</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[css columns]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.elcssar.com/?p=96</guid>
		<description><![CDATA[Crear una estructura de columnas con css y html sin usar tablas Desde que comencé en este mundo del marcado con etiquetas de hipertexto, muchas veces tuve la necesidad de construir una estructura de 2 o 3 columnas. El problema llegó cuando me inicié en estructuras semánticas y vi que quizás el uso de tablas [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Crear una estructura de columnas con css y html sin usar tablas</strong> Desde que comencé en este mundo del marcado con etiquetas de hipertexto, muchas veces tuve la necesidad de construir una estructura de 2 o 3 columnas. El problema llegó cuando me inicié en estructuras semánticas y vi que quizás el uso de tablas no era el más propicio puesto que me restaba flexibilidad estilística y accesibilidad. Fue entonces cuando comencé a buscar soluciones  ajenas sin encontrar ninguna que me satisficiera y no pude evitar embarcarme en la búsqueda de las mías propias.<br style="font-size: 29.25px; line-height: 42.75px;" /> Lo primero que hice fue plantear la estructura e intentar partir de la solución parcial que todos usábamos ya para construir columnas. Tenemos una caja principal con dos elementos embebidos que queremos se comporten como columnas&#8230;</p>
<div id="attachment_143" class="wp-caption alignnone" style="width: 132px"><a href="http://www.elcssar.com/wp-content/uploads/2009/03/fase0.png"><img class="size-thumbnail wp-image-143" title="fase0" src="http://www.elcssar.com/wp-content/uploads/2009/03/fase0-122x150.png" alt="fase0" width="122" height="150" /></a><p class="wp-caption-text">crosbrowsing fase inicial</p></div>
<p><span id="more-96"></span></p>
<p>Normalmente usaríamos un float en la primera columna para flotar el contenido de la segunda pero eso no nos daría dos culumnas del mismo tamaño sino algo así:</p>
<div id="attachment_149" class="wp-caption alignnone" style="width: 132px"><a href="http://www.elcssar.com/wp-content/uploads/2009/03/fase1.png"><img class="size-thumbnail wp-image-149" title="fase1" src="http://www.elcssar.com/wp-content/uploads/2009/03/fase1-122x150.png" alt="crosbrowsing pimer paso" width="122" height="150" /></a><p class="wp-caption-text">crosbrowsing pimer paso</p></div>
<p style="clear:both">Vemos dos problemas,  el primero es el ya clásico <a title="problemba float" href="http://www.elcssar.com/css/problema-float">problema de los floats</a>. Para solucionarlo podríamos usar las múltiples opciones que nos han proporcionado los gurus, sin embargo para este ejercicio aplicaremos un display-table al contenedor y de ese modo el contenido no desbordará la caja. Para solucionar el segundo de ellos necesitamos ir a la raíz del problema: estamos usando un atributo cuyo fin es flotar contenido en linea al rededor del elemento al cual se le ha aplicado. No parece que sea el mismo que el nuestro, que es crear una estructura de columnas o celdas paralela. Os propongo dos soluciones.</p>
<ol>
<li style="clear:both"> <a href="#inherit">La solución con display table y height inherit(FF)/100%(IE)<br />
</a><strong>Compatibilidad: </strong></p>
<ul>
<li>Gecko (FF): 95%</li>
<li>Webkit (Safari, Chrome): 80%</li>
<li> Presto (Opera):30%</li>
<li>Trident (IE): 60%</li>
</ul>
<p><strong>Bugs:</strong></p>
<ol>
<li>En WebKit, Presto y Trident, al depender de la altura heredada de la ventana por medio del tag &lt;html&gt; una vez superada esa altura por alguna de las columnas, las otras no seguirán creciendo a pesar de que lo haga su contenedor, e incluso pueden llegar a perder la herencia por completo.</li>
<li>IE necesitará una excepción para sustituir <em>height: inherit </em>por <em>height: 100%</em></li>
<li>Los navegadores basados en Webkit pueden sufrir conflictos cuando la caja contenedora esté alojada dentro de otras</li>
<li>Opera se comporta como IE pero puesto que no podemos hacer excepciones para ella, su compatibildad con el método es nula.</li>
<li>En WebKit al usar  <em>padding</em> o <em>border</em> en modo tabla aparecen diferencias en el modelo de caja. Sin embargo se pueden aplicar a los elementos interiores sin problemas</li>
</ol>
<p><strong>Comentarios:</strong> aunque algo compleja, es la única solución mínimamente compatible con IE7 o inferiores.</li>
<li style="clear:both"><a href="#tablecell">Solución mediante la replica de una tabla </a><br />
<strong>Compatibilidad: </strong></p>
<ul>
<li>Gecko (FF): 100%</li>
<li>Webkit (Safari, Chrome): 100%</li>
<li>Presto (Opera): 100%</li>
<li>Trident (IE): 0%</li>
<li>IE8: próximanente</li>
</ul>
<p><strong>Bugs:</strong> al igual que el float el método display: table-cell puede no renderizarse en FF ante cargas extremadamente  lentas.<br />
<em> </em><strong>Comentarios:</strong> Rápido y sencillo de implementar. No tiene secretos y es soportado por todos los navegadores excepto IE7 o inferiores ya que no reconocen <em>display: table</em>.</li>
</ol>
<h2><a id="inherit">La solución con display table y height inherit(FF)/100%(IE)</a></h2>
<p>En esta solución aprovechamos los floats, y digo floats porque nos hará falta flotar ambas columnas y además proporcionarle el ancho a ambas tambien.<br />
<a href="http://www.elcssar.com/wp-content/uploads/2009/03/display_tablewebkit.html">Probrar solución para FF y cia. en directo</a><a href="http://www.elcssar.com/wp-content/uploads/2009/03/display_tableie.html"><br />
</a></p>
<ol>
<li>Lo primero que hacemos es aplicar nuestro <em>display table</em> al elemento contenedor para que los elementos flotados no desborden.
<pre><code>&lt;div style="<strong>display: table;</strong>width: 402px; padding: 2px"&gt;
  &lt;div style="<span style="color: #f00;">float: left; width: 250px;</span> background-color: #666;"&gt;Columna 1&lt;/div&gt;
  &lt;div style="<span style="color: #f00;">float: left; width: 150px;</span> background-color: #f40;"&gt;Columna 2&lt;/div&gt;
&lt;/div&gt; </code></pre>
<p><div id="attachment_150" class="wp-caption alignnone" style="width: 123px"><a href="http://www.elcssar.com/wp-content/uploads/2009/03/fase2.png"><img class="size-thumbnail wp-image-150" title="fase2" src="http://www.elcssar.com/wp-content/uploads/2009/03/fase2-113x150.png" alt="crossbrowsing paso 2" width="113" height="150" /></a><p class="wp-caption-text">crossbrowsing segundo paso</p></div></li>
<li>Vemos que la altura de ambas columnas no se equipara, de modo que racionalicemos el problema.  Necesitamos que, haya las columnas que haya, todas igualen su altura a la de la más alta de ellas. ¿Cual es el elemento que siempre tendrá la altura máxima? Si cualquiera de las columnas puede crecer en función de su contenido, sólo hay un elemento que ahora se está acomodando a la altura de la mayor de las columnas: el contenedor.  Es pues su altura la que nos importa, y los estándares nos permiten trasmitirle esta altura a sus elementos hijo mediante la herencia. Pero como no iba a ser tan fácil, primero tendremos que declarale una altura al contenedor por CSS para que sus hijos la puedan heredar. Y he aquí el dilema. Veamos primero el resultado con una medida fija.
<pre><code>&lt;div style="<strong>display: table; </strong>width: 402px; <span style="color: #ff0000;">height:60px; padding: 2px 0px 2px 2px;</span>"&gt;
  &lt;div style="float: left; width: 250px; <strong>height: inherit;</strong> background-color: #666;"&gt;Columna 1&lt;/div&gt;
  &lt;div style="float: left; width: 150px; <strong>height: inherit;</strong> background-color: #f40;"&gt;Columna 2&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p><div id="attachment_151" class="wp-caption alignnone" style="width: 132px"><a href="http://www.elcssar.com/wp-content/uploads/2009/03/fase3.png"><img class="size-thumbnail wp-image-151" title="fase3" src="http://www.elcssar.com/wp-content/uploads/2009/03/fase3-122x150.png" alt="crossbrosing tercer paso" width="122" height="150" /></a><p class="wp-caption-text">crossbrosing tercer paso</p></div></li>
<li>Lo ideal sería que no tuviésemos que proporcionarle un alto al contenedor sino que éste creciese y automáticamente tomase un valor.  Como esto no es así y proporcionarle un alto fijo nos sirve de poco,  la única solución posible es dotarlo de un alto porcentual. Aunque no sea tampoco lo ideal pues nos obliga a tener un álto mínimo esta solución tiene truco. En principio podemos creer que nuestros &lt;body&gt; cubre el 100% de la ventana, pero eso no es así. No lo puede ser porque su elemento padre &lt;html&gt; no lo hace tampoco. Irónicamente, este comportamiento aparentemente extraño, nos permite que la altura del contenedor sea siempre la de su columna mayor que va forzando su tamaño y a su vez él fuerza la del body. Sin embargo por alguna razón las columnas como elemento de bloque no heredan bien el alto de su contenedor. Tendremos que aplicarles pues también a ellas el atributo display:table.<br />
Hasta aquí tendríamos <a title="columnasFF" href="http://www.elcssar.com/wp-content/uploads/2009/03/display_tableff.html">la solución perfecta para Firefox</a>.  Para que WebKit y Presto reaccionen &lt;html&gt; y &lt;body&gt; no tienen un height: 100% y aún así al superar el contenido la altura de la ventana la magia se rompe. IE directamente no comprende los estándares display:table ni el valor inherit. Pero para él aún hay alguna posibilidad.</p>
<pre><code>&lt;div style="display: table; width: 402px; <strong><span style="color: #ff0000;">height: 100%;</span></strong> padding: 2px 0 2px 2px"&gt;
  &lt;div style="float: left; width: 250px; height: inherit; background-color: #666;"&gt;Columna 1&lt;/div&gt;
  &lt;div style="display: table; float: left; width: 150px; height: inherit; background-color: #999;"&gt;Columna 2&lt;/div&gt;
&lt;/div&gt; </code></pre>
<p><a href="http://www.elcssar.com/wp-content/uploads/2009/03/display_tablewebkit.html">Probrar solución para FF y cia. en directo</a><a href="http://www.elcssar.com/wp-content/uploads/2009/03/display_tableie.html"><br />
</a><a href="http://www.elcssar.com/wp-content/uploads/2009/03/display_tableff.html"></a></p>
<p><div id="attachment_148" class="wp-caption alignnone" style="width: 132px"><a href="http://www.elcssar.com/wp-content/uploads/2009/03/fase4.png"><img class="size-thumbnail wp-image-148" title="fase4" src="http://www.elcssar.com/wp-content/uploads/2009/03/fase4-122x150.png" alt="crossbrowsing último paso" width="122" height="150" /></a><p class="wp-caption-text">crossbrowsing último paso</p></div></li>
<li style="height: 100%;">Corregimos para IE. En el ejercicio aplicamos los CSS sobre los elementos, pero para que la solución nos sirva en la práctica para varios navegadores tendremos que aplicar las excepciones para IE mediante un comentario condicional.
<pre><code>&lt;div style="display: table; padding: 2px 0px 2px 2px; width: 402px; height: 100%; background-color: #333333;"&gt;
  &lt;div style="display: table; float: left; width: 250px; background-color: #999999; <span style="color: #ff0000;"><strong>height: 100%;</strong></span>"&gt;columna 1&lt;/div&gt;
  &lt;div style="display: table; float: left; background-color: #ff9900; width: 150px; <span style="color: #ff0000;"><strong>height: 100%;</strong></span>"&gt;Columna2&lt;/div&gt;
&lt;/div&gt; </code></pre>
<p><a href="http://www.elcssar.com/wp-content/uploads/2009/03/display_tableie.html">Probrar solución para IE en directo</a><br />
Este es el código insertado dentro de otros elementos que limitan su altura.</p>
<div class="sample">
<div style="padding: 2px 0px 2px 2px; width: 402px; display: table; background-color: #333333; height: 100%;">
<div style="display: table; float: left; width: 250px; background-color: #999999; height: 100%;"><strong>Titulo columna 1</strong>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sit amet orci nec enim malesuada sollicitudin. Fusce mattis velit a diam. Nunc interdum.Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
<div style="display: table; float: left; background-color: #ff9900; width: 150px; height: 100%;"><strong>Titulo columna 2</strong>Morbi auctor. In mi neque, volutpat quis, rutrum at, vehicula et, felis.</div>
</div>
</div>
</li>
</ol>
<h2><a id="tablecell">Solución mediante la replica de una tabla<br />
</a></h2>
<p>Para los puristas de los estándares y detractores de IE la solución perfecta para montar una estructura de columnas sin tablas y mediante un método consistente y sencillo.</p>
<ol>
<li>Aplicamos al elemento contenedor el atributo <em>display:table</em></li>
<li>Añadimos un elemento extra con un <em>display: table-row para dar estabilidad*</em></li>
<li>A cada columna le ponemos un <em>display: table-cell</em></li>
<li>Dimensionamos por CSS el contenedor y los columnas.</li>
</ol>
<p>Sí, ya está, no hay más. Aquí tenéis un ejemplo del método embebido y un<a href="http://www.elcssar.com/wp-content/uploads/2009/03/display_table_cell.html"> link al método como contenedor principal</a>.</p>
<pre><code>&lt;div style="border: 1px solid #333333; <span style="color: #ff0000;">display: table;</span> width: 400px;"&gt;
  &lt;div style="display:table-row"&gt;
    &lt;div style="<span style="color: #ff0000;">display: table-cell;</span> width: 250px; background-color: #999999;"&gt;Columna 1&lt;/div&gt;
    &lt;div style="<span style="color: #ff0000;">display: table-cell;</span> width:150px background-color: #ff9900;"&gt;Columna 2&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</code></pre>
<div class="sample">
<div style="border: 1px solid #333333; display: table; width: 400px;">
<div style="display: table-cell; width: 250px; background-color: #999999;"><strong>Titulo columna 1</strong> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sit amet orci nec enim malesuada sollicitudin. Fusce mattis velit a diam. Nunc interdum.</div>
<div style="display: table-cell; width: 150px; background-color: #ff9900;"><strong>Titulo columna 2</strong> Morbi auctor. In mi neque, volutpat quis, rutrum at, vehicula et, felis.</div>
</div>
</div>
<p>Puesto que IE no entiende de herencias, obviamente esta es una solución exclusiva para motores de renderizado de verdad. Pero siempre podemos recurrir a la primer solución y aplicarla mediante un comentario condicional.</p>
<p>*Este elemento en principio no es necesario, pero resuelve el problema de firefox con las cargas lentas</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elcssar.com/css/columnas-css/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Estructura y semántica I: el “Código estructural”</title>
		<link>http://www.elcssar.com/css/estructura-xhtml-codigo-estructural</link>
		<comments>http://www.elcssar.com/css/estructura-xhtml-codigo-estructural#comments</comments>
		<pubDate>Sun, 22 Jun 2008 12:12:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[xhtml]]></category>
		<category><![CDATA[código estructural]]></category>
		<category><![CDATA[marcado semántico]]></category>

		<guid isPermaLink="false">http://www.elcssar.com/?p=5</guid>
		<description><![CDATA[Seguramente muchos ya habréis oído hablar de estos términos, pero si habéis llegado hasta aquí quizás estéis buscando respuestas a cómo construir una buena estructura HTML, o lo que es lo mismo, escribir código estructural. Para ello, si no os importa usaré el símil del ingeniero y el escultor e intentar así definir la idea de [...]]]></description>
			<content:encoded><![CDATA[<p>Seguramente muchos ya habréis oído hablar de estos términos, pero si habéis llegado hasta aquí quizás estéis buscando respuestas a cómo construir una buena <strong>estructura HTML, </strong>o lo que es lo mismo, escribir <strong>código estructural. </strong>Para ello, si no os importa usaré el símil del ingeniero y el escultor e intentar así definir la idea de estructura.</p>
<p>Pensemos en el escultor, concentrado en la forma, en la belleza, en los detalles de su magnífica obra de 30MB de peso, orgulloso de su creación, una creación que nunca podrá sacar del taller porque no le cabe por la puerta. Bien, pues no pensemos más en ello, porque es una imagen bastante deprimente, pensemos cómo evitar eso.<span id="more-5"></span></p>
<h3>Qué haría el ingeniero para evitarlo?</h3>
<ol>
<li> Pues lo primero separar estructura de estilo en la producción.</li>
<li>Contratar especialistas para cada una de las tareas, nada de chapuzillas multiusos (frontpage, fireworks&#8230;).</li>
<li>Contratar a un buen capataz para que dirija la construcción de la pieza.</li>
<li>Conseguir los mejores materiales y si los que hay en mercado no se adaptan, diseñarlos para ésta y próximas piezas.</li>
</ol>
<p>Aclaremos esto un poco. Si nuestra obra fuese una gran escultura de dimensiones desproporcionadas, no es que no nos sirva el escultor, él nos hará el boceto, una reproducción en miniatura de lo que debe ser la obra una vez finalizada. En Web ese sería el trabajo del diseñador.</p>
<p>Ahora ya tenemos el diseño. Si fuésemos una empresa es posible que tuviésemos un diseñador, un maquetador y un programador. Pero como es muy posible que nosotros mismos tengamos que hacer todo, dividamos nuestras conciencias. Ya hemos terminado el diseño, bien dejemos nuestro lado artístico que descanse y se tome unas piñas coladas. Y saquemos nuestro capataz para que dirija la obra, extraigamos el maquetador que hay en nosotros, que es quien conseguirá que la obra sea tal como la concebimos al mismo tiempo que sigue los planos del ingeniero y dirige a los trabajadores. Cuales serán nuestros albañiles y alicatadores? bien aquí es donde entran XHTML y CSS. Obreros especializados cada uno en su disciplina.</p>
<h3>Cómo crear código estructural?</h3>
<p>Para crear código estructural deberemos olvidarnos del aspecto final de la obra. Sí, habéis oído bien. Olvidar los colores, los tamaños de los marcos de las puertas e incluso del tamaño de nuestras estancias. Porque nuestra estructura tiene que ser flexible para poder ser no una sino muchas obras artísticas. Os acordáis del cubo de Rubik y la serpiente que convertíamos en una esfera, en una cobra, en un perro&#8230; Bien pues más o menos esa es la idea, que podamos girar nuestras piezas y cambiarles el color y la disposición en el espacio para que el año que viene podamos modificarla y siga las tendencias del momento sin que eso implique hacer una obra nueva.</p>
<p>XHTML es un gran albañil, dispone de las mejores herramientas para crear los cimientos y el esqueleto de nuestra Estatua de la Libertad. A diferencia de HTML4, que permite mezclar ambas cosas, XHTML sólo crea estructura dejando a CSS que termine la obra una vez él ha finalizado su parte.</p>
<p>Os preguntaréis a qué corresponden los materiales en maquetación. La respuesta a esto está en la semántica y las clases css. La combinación de elementos y atributos CSS, así como las nuevas técnicas serán nuestros materiales y herramientas.</p>
<p>Después de tanto símil, metáfora y comparación, imagino que todos estaréis pensando y quién o qué es el ingeniero en Web, qué hace? cuales son los planos? La respuesta a esto os la daré en un próximo artículo.</p>
<p>En próximos artículos también definiremos prácticas y metodologías del código estructural y entraremos en  el concepto de semántica.</p>
<p>Que ustedes lo estructuren bien <img src='http://www.elcssar.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.elcssar.com/css/estructura-xhtml-codigo-estructural/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
