CSS – Listas a lo ancho

La tendencia actual al desarrollar páginas HTML es utilizar CSS.

Con CSS, se debe crear el contenido de la página demarcado adecuadamente con etiquetas HTML, y el diseño de la página se obtiene dandole el estilo por medio de un archivo aparte.

La manera más utilizada actualmente de crear menué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ú generado por software por medio de listas utilizara todo el ancho de la pá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 única manera de hacerlo era poner medidas estáticas a los elementos de la lista, pero al agregar otro elemento se corrín y quedaba desordenado. Así que tuve que encontrar una solución dinámica a mi problema.

Esta es una tabla con dos elementos:

A B

Esta es una lista con dos elementos:

  • A
  • B

Nótese que para evitar confusiones, el borde de la tabla es rojo mientras que el de la lista es negro.

Al quitar los marcadores a la lista y desplegarla en una línea, se ve similar a nuestra tabla:

  • A
  • B

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:

A B

Mi primera soluci&oacuten fue dar un ancho fijo a la lista, y utilizar medidas estáticas para distribuir los elementos a lo ancho:

  • A
  • B

Pero esta solución resultó ser ineficaz tan pronto se agregó otro elemento más por medio del software:

  • A
  • B
  • C

Esto es lo que pasaría si el software generara una tabla en lugar de una lista, y de hecho, este es el efecto esperado:

A B C

Se me ocurrió modificar el software para que generara una tabla en lugar de una lista, pero hubiera resultado más complicado. Especialmente al actualizar el software, ya que la nueva versión posiblemente volverá a generar este menú como listas, y tendría que volverlo a modificar. También esta la posibilidad de un cambio en el diseño de la página, y ahora el menú perdería todas las ventajas de ser creado como una lista. Así que preferí dejar esta opción como última.

Entonces decidí 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.

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ían las siguientes:

table { display: table }
tr { display: table-row }
td { display: table-cell }

… y el estilo lo que me permite es modificar las definiciones por defecto de los diferentes elementos HTML utilizados en nuestras páginas, tal y como ya lo hice con la lista para que despliegue sus elementos en una sola línea un lugar de hacerlo en líneas aparte. Así que se me ocurrió quitar las medidas estáticas y probar lo siguiente:

ul { display: table }
li { display: table-cell }

… y este fue el resultado:
Con 2 elementos

  • A
  • B

Con tres elementos

  • A
  • B
  • C

Así que esta es la manera sencilla de hacer que una lista horizontal despliegue sus elementos a lo ancho de la misma.

Deje un mensaje