{"id":37,"date":"2004-07-16T11:48:48","date_gmt":"2004-07-16T17:48:48","guid":{"rendered":"http:\/\/tonosdegris.com\/blog\/?p=37"},"modified":"2004-07-16T11:48:54","modified_gmt":"2004-07-16T17:48:54","slug":"css-listas-a-lo-ancho","status":"publish","type":"post","link":"https:\/\/www.tonosdegris.com\/blog\/2004\/07\/16\/css-listas-a-lo-ancho\/","title":{"rendered":"CSS &#8211; Listas a lo ancho"},"content":{"rendered":"<p>La tendencia actual al desarrollar p&aacute;ginas HTML es utilizar CSS.<\/p>\n<p>Con CSS, se debe crear el contenido de la p&aacute;gina demarcado adecuadamente con etiquetas HTML, y el dise&ntilde;o de la p&aacute;gina se obtiene dandole el estilo por medio de un archivo aparte.<\/p>\n<p>La manera m&aacute;s utilizada actualmente de crear menu&eacute;s es con una lista de enlaces y hacerla ver como un menu con CSS, pero una lista tiene sus limitaciones. Yo quise hacer que un men&uacute; generado por software por medio de listas utilizara todo el ancho de la p&aacute;gina.  Una lista no distribuye sus elementos a lo ancho de la lista, tal como lo hace una tabla, sino que los va agregando a la lista hasta llenar su ancho.  La &uacute;nica manera de hacerlo era poner medidas est&aacute;ticas a los elementos de la lista, pero al agregar otro elemento se corr&iacute;n y quedaba desordenado.  As&iacute; que tuve que encontrar una soluci&oacute;n din&aacute;mica a mi problema.<br \/>\n<!--more--><\/p>\n<p>Esta es una tabla con dos elementos:<\/p>\n<table style=\"text-align: center; border: solid 1px red\">\n<tr>\n<td>A<\/td>\n<td>B<\/td>\n<\/tr>\n<\/table>\n<p>Esta es una lista con dos elementos:<\/p>\n<ul style=\"border: solid 1px black\">\n<li>A<\/li>\n<li>B<\/li>\n<\/ul>\n<p>N&oacute;tese que para evitar confusiones, el borde de la tabla es rojo mientras que el de la lista es negro.<\/p>\n<p>Al quitar los marcadores a la lista y desplegarla en una l&iacute;nea, se ve similar a nuestra tabla:<\/p>\n<ul style=\"border: solid 1px black; list-style-type: none; padding: 0\">\n<li style=\"display: inline\">A<\/li>\n<li style=\"display: inline\">B<\/li>\n<\/ul>\n<p>Mi problema era que los elementos no son distribuidos a lo ancho de la lista, sino que esta agrupados al inicio, mientras que en la tabla, al darle un ancho fijo, los elementos se distribuyen dentro de la tabla para utilizar todo el ancho:<\/p>\n<table style=\"text-align: center; border: solid 1px red; width: 10em\">\n<tr>\n<td>A<\/td>\n<td>B<\/td>\n<\/tr>\n<\/table>\n<p>Mi primera soluci&#038;oacuten fue dar un ancho fijo a la lista, y utilizar medidas est&aacute;ticas para distribuir los elementos a lo ancho:<\/p>\n<ul style=\"border: solid 1px black; list-style-type: none; padding: 0; width: 10em\">\n<li style=\"display: inline; padding: 0 2em\">A<\/li>\n<li style=\"display: inline; padding: 0 2em\">B<\/li>\n<\/ul>\n<p>Pero esta soluci&oacute;n result&oacute; ser ineficaz tan pronto se agreg&oacute; otro elemento m&aacute;s por medio del software:<\/p>\n<ul style=\"border: solid 1px black; list-style-type: none; padding: 0; width: 10em\">\n<li style=\"display: inline; padding: 0 2em\">A<\/li>\n<li style=\"display: inline; padding: 0 2em\">B<\/li>\n<li style=\"display: inline; padding: 0 2em\">C<\/li>\n<\/ul>\n<p>Esto es lo que pasar&iacute;a si el software generara una tabla en lugar de una lista, y de hecho, este es el efecto esperado:<\/p>\n<table style=\"text-align: center; border: solid 1px red; width: 10em\">\n<tr>\n<td>A<\/td>\n<td>B<\/td>\n<td>C<\/td>\n<\/tr>\n<\/table>\n<p>Se me ocurri&oacute; modificar el software para que generara una tabla en lugar de una lista, pero hubiera resultado m&aacute;s complicado.  Especialmente al actualizar el software, ya que la nueva versi&oacute;n posiblemente volver&aacute; a generar este men&uacute; como listas, y tendr&iacute;a que volverlo a modificar.  Tambi&eacute;n esta la posibilidad de un cambio en el dise&ntilde;o de la p&aacute;gina, y ahora el men&uacute; perder&iacute;a todas las ventajas de ser creado como una lista.  As&iacute; que prefer&iacute; dejar esta opci&oacute;n como &uacute;ltima.<\/p>\n<p>Entonces decid&iacute; replantear mi problema.  En lugar de pensar que mi problema es que la lista no distribuye sus elementos a lo ancho, empezar a pensarlo como la necesidad de que una lista se comporte como una tabla.<\/p>\n<p>La tabla se comporta como lo hace, porque el navegador crea unas definiciones de estilo por defecto, en el caso de una tabla sencilla, ser&iacute;an las siguientes:<br \/>\n<code><br \/>\ntable { display: table }<br \/>\ntr { display: table-row }<br \/>\ntd { display: table-cell }<br \/>\n<\/code><br \/>\n&#8230; y el estilo lo que me permite es modificar las definiciones por defecto de los diferentes elementos HTML utilizados en nuestras p&aacute;ginas, tal y como ya lo hice con la lista para que despliegue sus elementos en una sola l&iacute;nea un lugar de hacerlo en l&iacute;neas aparte.  As&iacute; que se me ocurri&oacute; quitar las medidas est&aacute;ticas y probar lo siguiente:<br \/>\n<code><br \/>\nul { display: table }<br \/>\nli { display: table-cell }<br \/>\n<\/code><br \/>\n&#8230; y este fue el resultado:<br \/>\nCon 2 elementos<\/p>\n<ul style=\"border: solid 1px black; display: table; width: 10em\">\n<li style=\"display: table-cell\">A<\/li>\n<li style=\"display: table-cell\">B<\/li>\n<\/ul>\n<p>Con tres elementos<\/p>\n<ul style=\"border: solid 1px black; display: table; width: 10em\">\n<li style=\"display: table-cell\">A<\/li>\n<li style=\"display: table-cell\">B<\/li>\n<li style=\"display: table-cell\">C<\/li>\n<\/ul>\n<p>As&iacute; que esta es la manera sencilla de hacer que una lista horizontal despliegue sus elementos a lo ancho de la misma.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La tendencia actual al desarrollar p&aacute;ginas HTML es utilizar CSS. Con CSS, se debe crear el contenido de la p&aacute;gina demarcado adecuadamente con etiquetas HTML, y el dise&ntilde;o de la p&aacute;gina se obtiene dandole el estilo por medio de un archivo aparte. La manera m&aacute;s utilizada actualmente de crear menu&eacute;s es con una lista de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6,1,7],"tags":[],"_links":{"self":[{"href":"https:\/\/www.tonosdegris.com\/blog\/wp-json\/wp\/v2\/posts\/37"}],"collection":[{"href":"https:\/\/www.tonosdegris.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tonosdegris.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tonosdegris.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tonosdegris.com\/blog\/wp-json\/wp\/v2\/comments?post=37"}],"version-history":[{"count":0,"href":"https:\/\/www.tonosdegris.com\/blog\/wp-json\/wp\/v2\/posts\/37\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tonosdegris.com\/blog\/wp-json\/wp\/v2\/media?parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tonosdegris.com\/blog\/wp-json\/wp\/v2\/categories?post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tonosdegris.com\/blog\/wp-json\/wp\/v2\/tags?post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}