Estilos>>Técnicas

Encolumnar listas

En ocasiones podemos encontrarnos con listas que contienen un considerable número de ítems y que resulta poco apropiado presentar en una única columna. 

Hemos utilizado como ejemplo la lista de pueblos que componen la comarca de la cuenca del Tajuña en la provincia de Madrid que son los quince que figuran a continuación.

Si nuestra intención es utilizar esta lista como punto de partida para realizar una descripción geográfica de los pueblos de la comarca parece evidente que es necesario aprovechar el ancho de la ventana. Aparte de que pueda resultar estéticamente más agradable se trata de favorecer al visitante, ya que le ahorraremos tener que recurrir a la barra de desplazamiento que sería casi inevitable con una lista de este tamaño.

Además, tal vez sería interesante eliminar los indicadores de cada ítem. Si estás viendo esta página con Internet Explorer o con Opera es posible que te haya sorprendido lo de eliminar los indicadores de ítem... porque no los estás viendo. Al parecer, cuando se utilizan anchuras para indicar el ancho de una lista estos navegadores prescinden de los indicadores, así que vamos a hacer dos cosas: primero veremos cómo hay que hacerlo para que desaparezcan los indicadores, esperando que los navegadores se ajusten en el futuro a los estándares y luego volvemos al mundo real e intentamos recuperar nuestros "bolos" para que se puedan ver en todos los navegadores.

Pongamos manos a la obra:

Como tenemos quince ítems vamos a hacer que se agrupen de cinco en cinco, esto es en tres columnas. Para ello le adjudicaremos a la lista una anchura de 14em para cada ítem, con un total de 42em para la lista. (Este cálculo es empírico: en función de la longitud de los ítems estimamos la anchura necesaria y la corregimos si nos hemos desviado mucho). Si fijamos los márgenes y rellenos de los elementos de la lista a 0 nos vendrá muy bien para poder ajustar la estimación de anchuras.

Aunque parezca un detalle nimio es importante que se especifique el ancho en ambos selectores para que el navegador pueda calcular cuántos ítems le cabrán en cada línea.

El tercer factor a tener en cuenta es que los ítems floten a la izquierda, de forma que vayan dejando hueco a su derecha para que se pueda colocar el ítem siguiente.

Tras aplicar estos criterios nuestro código CSS ha quedado así:

ul {width: 42em;
margin: 0 1.5em;
padding: 0;
}
ul li { float: left;
width: 14em;
margin: 0 ;
padding: 0;
}

Como se está utilizando un estilo en línea y en esta página va a aparecer también una lista ordenada no podemos definir sencillamente las priopiedades del selector li ya que se aplicarían también a los ítems de la lista ordenada. Por ese motivo hemos definido la regla para los elementos li que sean hijos de un elemento ul. 


Recuperar los indicadores de ítem



  • Ambite
  • Arganda del Rey
  • Campo Real
  • Carabaña
  • Morata de Tajuña
  • Nuevo Baztán
  • Olmeda de las Fuentes
  • Orusco
  • Perales de Tajuña
  • Pozuelo del Rey
  • Rivas Vaciamadrid
  • San Martín de la Vega
  • Tielmes
  • Valdilecha
  • Villar de Olmo


Ya hemos comentado antes que Internet Explorer y Opera no mostraban los indicadores de item cuando la lista tenía establecida una anchura. Esto incluye no sólo los indicadores por defecto, sino también las imágenes gráficas. Es posible que hayas pensado que lo que habíamos hecho era sustituir los indicadores por imágenes, pero no es así: ha habido que complicar un poco la situación buscando una imagen para ponerla como fondo de cada ítem y calcular los desplazamientos para que no se montara con el texto.

La explicación en real de esto se basa en que, cada elemento de lista hace que el navegador genere dos cajas: una para el indicador y otra par el texto del ítem. Internet Explorer y Opera solo generan la caja correspondiente al texto cuando se encuentran una lista con anchura especificada.  Debido a esto, para obtener un efecto similar al que se muestra habría que trabajar adjudicando una imagen de fondo y separándola del texto para que no este no se superpusiera. Además no habría que olvidarse de quitar los indicadores para que no aparecieran en los navegadores basados en el motor Gecko de Mozilla que interpretan correctamente la situación. Como ves todo bastante complicado. En el siguiente recuadro

li {float: left;
width: 12em; /* habrá que ajustar la anchura descontando el relleno que antes no existía */
margin: 0 ;
list-style-type:none; /*eliminamos el indicador para que no se muestre en navegadores basados en Mozilla */
background-image: url(imagenes/Rd_pin.gif);
background-position: 0;
background-repeat: no-repeat;
padding: 0 0 0 2em; /*añadimos un relleno en la zona izquierda para hacer hueco para la imagen */
}

Encolumnar respetando el orden vertical

En los ejemplos anteriores hemos utilizado listas desordenadas. Al menos así las hemos presentado, pero el contenido de las mismas estaba realmente ordenado alfabéticamente. 

Al mostrarlas en columnas se ha seguido manteniendo el orden pero, probablemente, si los textos de cada ítem no hubieran sido tan largos, la tendencia natural de lectura habría sido agrupar visualmente las columnas y suponer que el orden de lectura es primero de arriba a abajo en una columna para luego saltar a la siguiente.

Para acentuar este fenómeno perceptivo vamos a mostrar ahora el mismo contenido ordenado de esta manera.

  1. Ambite
  2. Arganda del Rey
  3. Campo Real
  4. Carabaña
  5. Morata de Tajuña
  6. Nuevo Baztán
  7. Olmeda de las Fuentes
  8. Orusco
  9. Perales de Tajuña
  10. Pozuelo del Rey
  11. Rivas Vaciamadrid
  12. San Martín de la Vega
  13. Tielmes
  14. Valdilecha
  15. Villar de Olmo

¿Cuál de las dos formas de ordenar te ha parecido más sencilla de leer? Está claro que cada persona tiene un esquema perceptivo propio y es posible que a tí te resulte más fácil leer con el orden alfabético en horizontal, pero lo más probable será que te haya resultado más cómoda la opción que acabamos de ver. Por si acaso piensas que influyen demasiado los números, vamos a mostrarla sin numeración pero respetando el orden alfabético para que te cerciores.

  1. Ambite
  2. Arganda del Rey
  3. Campo Real
  4. Carabaña
  5. Morata de Tajuña
  6. Nuevo Baztán
  7. Olmeda de las Fuentes
  8. Orusco
  9. Perales de Tajuña
  10. Pozuelo del Rey
  11. Rivas Vaciamadrid
  12. San Martín de la Vega
  13. Tielmes
  14. Valdilecha
  15. Villar de Olmo

En este caso los ítems de la lista no pueden flotar, porque eso provocaría una ordenación horizontal como ya hemos visto. 

Sin embargo necesitamos que se coloquen en columnas. Para ello crearemos tantas clases como columnas necesitemos y especificaremos en ellas el margen izquierdo de forma que al aplicárselas a cada ítem hagamos que estos se sitúen escalonadamente. 

También vamos a adjudicarle una altura a la línea. Enseguida veremos para qué nos sirve.

En estos momentos nuestro código presentaría el siguiente estado:

ol { margin: 0; padding: 0; }

/*ahora especificamos ol li para que la regla afecte sólo a los items de listas ordenadas */
ol li { margin: 0; padding: 0; line-height: 1.3em; }

/*creamos las diferentes columnas. No son exactamente iguales debido a la anchura heterogénea del contenido de los ítems */
.col1 {margin-left: 1em;}
.col2 {margin-left: 15em;}
.col3 {margin-left: 31em;}

Y con eso conseguiríamos... este pequeño desastre

  1. Ambite
  2. Arganda del Rey
  3. Campo Real
  4. Carabaña
  5. Morata de Tajuña
  6. Nuevo Baztán
  7. Olmeda de las Fuentes
  8. Orusco
  9. Perales de Tajuña
  10. Pozuelo del Rey
  11. Rivas Vaciamadrid
  12. San Martín de la Vega
  13. Tielmes
  14. Valdilecha
  15. Villar de Olmo

Es verdad que el texto parece encolumnado, pero lo que habíamos dicho antes de que queríamos que las columnas se situaran escalonadamente ha resultado profético. 

Ahora bien, si lo pensamos un poco ha ocurrido lo que era de esperar: el item 6 se ha colocado donde podía esperar, esto es, debajo del ítem 5 pero respetando el margen que le hemos indicado. El 7, 8, 9 y 10 se han ido colocando cada uno debajo del anterior con su margen correctamente calculado. Del 11 al 16 se ha producido el mismo proceso acorde a lo que habíamos indicado hasta ahora.

Está claro que nos falta introducir una pequeña corrección y aquí es donde aparece la utilidad de esa altura de línea que habíamos indicado como propiedad de los selectores li. Como cada item ha ido ocupando 1.3 em quiere decir que cada columna ha consumido 1.3 x 5 = 6.5 em verticales. Si creamos una clase que tenga un margen superior negativo de esa cantidad y la aplicamos a los ítems en los que se produce el salto de columna conseguiremos que suban hasta situarse a la altura del primer ítem. Los que vayan a continuación se irán alineando correctamente bajo él hasta que llegue el siguiente salto de columna. Esto se traduciría en la siguiente clase que añadimos a nuestros estilos:

 .saltoarriba {margin-top: -6.5em;}

Con ello completaríamos las reglas necesarias y lo que haríamos dentro del código HTML sería aplicar un par de clases al mismo elemento cuando llegáramos al primero de cada columna, con lo cual conseguimos el efecto que perseguíamos.

<ol>
  <li class="col1">Ambite</li>
  <li class="col1">Arganda del Rey</li>
  <li class="col1">Campo Real</li>
  <li class="col1">Caraba&ntilde;a</li>
  <li class="col1">Morata de Taju&ntilde;a</li>
  <li class="col2 saltoarriba">Nuevo Bazt&aacute;n</li>
  <li class="col2">Olmeda de las Fuentes</li>
  <li class="col2">Orusco</li>
  <li class="col2">Perales de Taju&ntilde;a</li>
  <li class="col2">Pozuelo del Rey</li>
  <li class="col3 saltoarriba">Rivas Vaciamadrid</li>
  <li class="col3">San Mart&iacute;n de la Vega</li>
  <li class="col3">Tielmes</li>
  <li class="col3">Valdilecha</li>
  <li class="col3">Villar de Olmo</li>
</ol>

Actividad 98

Una posible aplicación de esta técnica sería la creación de una página índice que llevara a las páginas personales de cada uno de los profesores del centro o de los alumnos de una clase.

Prueba a crear una lista ordenada alfabéticamente con los alumnos de tu clase (puede ser numerada o bien sin indicadores según prefieras). 

La gran ventaja de esta forma de presentar las listas es que se aprovecha muy bien el espacio y se favorece el acceso a todos los elementos que queremos mostrar, al hacer que no sea necesario utilizar la barra de desplazamiento. Posiblemente te sobre media pantalla y a pesar de ello se verán todos los nombres de los alumnos o profesores sin dificultad.