Créer une liste de texte survolable et cliquable

Sam Rayner

Une technique émerge de plus en plus du net, c'est la création d'une liste, ayant un contenu plus que conséquent, survolable en utilisant des balises a. Ce tutoriel aura donc pour unique but de vous la présenter.

Cet article a été publié à l'origine en version anglaise à l'adresse suivante : Building a Better Blocklist

- Titre : Créer une liste de texte survolable et cliquable

- Auteur : Sam Rayner

- Parution : 20 mai 2008

- Mise à jour : 22 mai 2008

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 20/05/2008 Sam Rainer. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Introduction

- L'approche

- Quel est le problème ?

- Un regard nouveau sur ces éléments

- Astuces pour styliser votre Blocklist

- Le Bon, le Méchant et IE

- Remerciements

Introduction

Depuis peu, il existe une technique, que j'appellerai blocklist, est de plus en plus utilisée des concepteurs de sites web. Par blocklist, je veux dire une liste de liens, empilés verticalement, avec un contenu assez conséquent. Pour vous donner une idée, Veerle Pieters a gentiment acceptée, à titre d'exemple, de me laisser utiliser la rubrique Approved de son blog.

Je n'ai pas inclus tout le code nécessaire à l'obtention de la version finale, étant donné que c'est assez compliqué. Cependant, vous pouvez voir un exemple d'utilisation de cette technique et jeter un œil au code source. Même s'il est assez détaillé, je vous recommande de lire l'explication qui suit plutôt que de vous précipiter sur la démo; ça vous aidera à vous faire une idée sur le fonctionnement en cas de problèmes ou quand vous voudrez faire des modifications ultérieures.

L'approche

Allez voir l'implémentation de Veerle : interagissez avec elle (survolez et cliquez sur les éléments de la liste). N'est-elle pas belle ? Cette large zone cliquable apporte du caractère à ce qui serait qu'un simple titre lié à une description positionnée à sa suite, sans oublier les avantages que cela apporte en termes d'accessibilité pour les personnes à motricité réduite.

Jetons un coup d'oeil au code :

<h2>Approved</h2>
<ul>
<li><a href="#">
FF Meta Serif<br>
<em>A gorgeous, all-purpose typeface.</em><br>
<span> December 11 at 09.47 am</span>
</a></li>
</ul>

Actuellement, la seule manière de rendre le bloc entièrement cliquable est d'entourer chaque élément contenu dans le lien, c'est-à-dire le titre, la description et la date, d'une seule et unique balise a.

Comme a est un élément inline, il ne peut pas contenir de balises de type bloc (block-level), ce qui signifie que le titre ne peut être codé avec une entête (hN) et qu'il en va de même pour les paragraphes (p). Pour personnaliser le blocklist, chacun des trois composants a besoin de son propre élément. Avec des choix limités, Veerle a optée pour un élément em afin d'y mettre la description, et pour la date, un élément span et des balises br pour effectuer un retour à la ligne.

Veerle n'est certainement pas la seule à choisir cette approche. J'espère que Elliot Jay Stocks ne me tiendra pas rigueur d'utiliser la rubrique Recent Reads de son site comme un autre exemple. En effet, sur tous les sites où j'ai pu trouver une liste similaire, les auteurs ont dû employer des balises strong, em, span, small voire même q pour marquer le contenu de leurs liens.

Quel est le problème ?

Coder la liste de cette manière soulève quelques interrogations. Faut-il vraiment souligner la description par rapport au reste du contenu du lien ? Y a-t-il une quelconque relation entre le titre de l'élément et sa description ? Qu'en est-il de la date ?

Deuxièmement, appliquer un style à la liste a été rendu plus difficile par le type inline des éléments. Des sauts de ligne ont dû être utilisés pour séparer ce qui aurait été une ligne continue de texte avec le CSS désactivé (sans les avantages du display: block).

Troisièmement, utiliser un élément comme la balise em juste pour contenir la description, empêche son utilisation pour du texte qui devrait être mis en valeur. Il en va de même pour les liens. Comment faire si vous souhaitez un lien supplémentaire dans la description ? Vous ne pouvez pas avoir un lien imbriqué.

Un regard nouveau sur ces éléments

Quand je développais mon site, j'avais prévu d'y intégrer une liste de Quicklinks (liens rapides), c'est-à-dire un ensemble d'éléments externes à mon site renvoyant vers des sujets intéressant sur le Web, essentiellement le même que celui de la rubrique Approved de Veerle. J'ai pensé qu'il devait avoir une meilleure façon de construire une liste avec de larges zones cliquables, et donc je me suis mis à faire des tests.

Pour démarrer, j'ai retranscris la manière dont je voulais voir s'afficher les balises :

<h2>Liens Rapides</h2>
<ul>
<li>
<h3><a href="#">Titre du lien rapide</a><h3>
<p>Une courte description du lien</p>
<p>1er Janvier</p>
</li>
</ul>

L'astuce de cette technique est que les liens se trouvent uniquement sur les titres. Les éléments a deviennent ensuite des éléments de type block (display: block;) qui recouvrent les éléments qui les suivent à la même manière qu'un calque transparent, qui rend l'ensemble cliquable.

Je tiens à souligner que tout le texte couvert par la balise étendue a ne pourra pas être sélectionné. Si cela vous pose un gros problème alors cette technique ne correspond peut-être pas à ce que vous recherchez.

Pour que le lien soit en haut du contenu qui lui est consécutif sans tout remettre en bas, il faut le retirer du flux du document (positionnement absolu) et lui attribuer un z-index assez important.

Le plus gros obstacle à surmonter est de prendre en compte un contenu variable ou l'augmentation de la taille du texte. Il serait facile de donner à chaque balise a une hauteur fixe et de la laisser telle quelle, mais elle ne a) couvrirait pas l'ensemble du contenu ou b) limiterait la quantité de texte qu'un lien pourrait avoir. Pour surmonter ce problème, la liste en elle-même doit avoir une position relative et chaque élément a une hauteur de 100%. Cela permet à chaque lien de s'étendre sur toute la hauteur de la liste. Les éléments qui apparaissent plus bas dans le code source ont à la base un z-index plus important, de ce fait chaque lien recouvre convenablement le précédent, ce qui coupe la zone cliquable depuis son origine (le haut du titre étant lié) jusqu'au point où le lien suivant débute (le haut du prochain titre).

En touche finale, on peut appliquer à la liste l'instruction " overlay: hidden; ". Attribuer à chaque lien une hauteur de 100% fait que ces derniers surplombent la liste qui doit se terminer à la hauteur des cases précédentes, cela donne une liste de 200% par rapport à la hauteur de base. Mettre la propriété overlay de liste à hidden découpe l'ensemble et la rétablit à la bonne hauteur. (Si vous avez du mal à assimiler tout cela, ne vous inquiétez pas. Reprenez le code de la page de démonstration et supprimez l'instruction overflow: hidden; pour voir ce que je veux dire).

Une des caractéristiques de la technique dont je ne me satisfais pas est l'obligation d'attribuer une certaine hauteur au titre du lien étant donné qu'il a été supprimé du flux du document. Pour y remédier, un padding d'environ 3em doit être ajouté en haut de l'élément qui suit immédiatement le titre. On fait cela en appliquant une classe à l'élément liste si son titre est susceptible de s'étendre sur deux ou plusieurs lignes et on applique un style à l'élément qui le suit de la manière suivante:

.longtitle h3 + p
{
padding-top: 5em;
}

.verylongtitle h3 + p
{
padding-top: 7em;
}

Si vous pensez qu'il y a une meilleure façon de surmonter cette difficulté, n'hésitez pas à manipuler le code et à me le faire savoir.

Eh bien, nous y sommes. La structure de base derrière cette technique est terminée. Tout ce qui nous reste à faire est de lui donner un style agréable.

Astuces pour styliser votre Blocklist

Le Bon, le Méchant et IE

Eh bien, voici un petit tour d'horizon des avantages et inconvénients de cette technique :

Avantages

Inconvénients

Ancienne Méthode

Grande zone cliquable sous IE6

Difficile à styliser

Oblige à utiliser les retours à la ligne

Exploite de façon incorrecte des éléments qui pourraient être mieux utilisés

Nouvelle Méthode

Propre, balisage sémantique

Ne vous restreint pas à une utilisation des éléments inline

Pas de balisage superflu

Peut contenir des liens supplémentaires

La hauteur approximative du titre doit être connue

A part le titre, le texte n'est pas sélectionnable

Petite zone cliquable sous IE6

Comme vous pouvez le constater, c'est loin d'être parfait mais les avantages sont notables en comparaison de la méthode traditionnelle. Votre blocklist ne fonctionnera pas aussi bien sous IE6. Cependant n'ayez crainte, tel quel (en utilisant le code de la démonstration) le blocklist devrait s'afficher parfaitement, avec seulement des zones cliquables réduites à la taille de leurs titres.

L'un des avantages liés à l'utilisation de sélecteurs de parenté pour styliser le blocklist est qu'IE6 ignore la plupart des choses sur lesquelles il s'arrête habituellement. Bien sûr, les résultats peuvent varier si vous personnalisez le code en fonction de vos besoins, mais avec une ligne ou deux d'instructions CSS spécifiques cela devrait suffire à IE pour résoudre n'importe quel problème. Par défaut, IE7 le gère plutôt bien.

Et voilà ! Encore une fois, je tiens à remercier Veerle pour m'avoir permis d'utiliser son site à titre d'exemple. Assurez-vous d'avoir regardé la démonstration pour voir la technique en action. Elle inclut deux blocklists : l'un dans le même style que mes Quicklinks et l'autre, qui reprend à titre de comparaison la toute récente technique de Veerle dans sa rubrique Approved. Cependant, gardez à l'esprit que n'importe quel CSS fourni au-delà de la structure de base est seulement à titre de démonstration et ne doit pas être recopié aveuglément. J'espère que les styles que j'ai pu inclure vous donneront de quoi démarrer les vôtres.

Si vous avez un quelconque avis sur cette technique, positif ou négatif, n'hésitez pas à me le faire savoir.

Remerciements

Tous mes remerciements à RideKick pour sa relecture.