HTML & CSS : organiser une page avec beaucoup de contenu

Pour éviter la multiplication des pages d'une certains développeurs imaginent des pages avec beaucoup de contenu chacune (textes et images).
La navigation dans une page très longue peut devenir fastidieuse sauf astuces : ancres, masquage par défaut, etc.

Première technique : les ancres

Grâce à une "ancre" on peut accéder à un endroit très précis de la page.

Extrait du code

Commentaire

Dans cette page il y a quatre ancres. Une ancre est créé avec l'attribut ID. Les ancres sont :

Pour accéder à une ancre il suffit de créer un lien hypertexte (balise A) avec en valeur de l'attribut href "#nom_ancre"
Dans l'exemple il y a six liens vers des ancres de la page qui sont :
Observez le rendu !

Lien vers une ancre située dans une autre page

Imaginons que la page en question se nomme "page_longue.htm". Dans d'autre pages vous pouvez écrire des liens avec les valeurs suivantes pour l'attribut href : "page_longue.htm#partie1" OU "page_longue.htm#partie3". Ainsi vous accédez à un endroit précis de "page_longue.htm"

Deuxième solution : masquer une grande partie du contenu

Pour qu'une page ne soit pas trop longue (ou trop haute) il suffit de masquer par défaut une grande partie de son contenu.
Ce masquage peut être réalisée avec CSS OU avec HTML5 ou avec un "widget" du framework jQuery UI.

Masquage du contenu : solution CSS

Extrait du code de la page

Commentaire

Notez la présence d'une feuille de style interne avec trois règles.
Chacune des parties est désormais contenue dans une balise ARTICLE par contre les ancres et les liens vers celles-ci ont disparu !

La feuille de style précise que la hauteur par défaut de chaque boite ARTICLE est 50 pixels seulement et que le reste du contenu est masqué (overflow :hidden).
50px c'est la hauteur (hauteur totale) de la boite H2 contenue dans ARTICLE. Donc par défaut on ne voit que que le titre de la partie !
Si survol de la boite alors la hauteur s'ajuste pour afficher tout le contenu !
Observez le rendu !

Masquage contenu : solution HTML5

La version 5 de HTML propose deux nouvelles balises doubles et de type block qui fonctionnent obligatoirement ensembles.
Le contenu d'une partie doit être à l'intérieur du conteneur details ; le contenu affiché par défaut à l'intérieur du conteneur summary.

Extrait du code

Comme dans la version précédente les ancres et les liens vers celles-ci ont disparu.

La balise double summary est obligatoirement "enfant" du conteneur details !
Donc gros avantage par rapport à la solution précédente : le développeur gère le contenu affiché par défaut. Une partie développée par le visiteur le reste tant que ce dernier n'a pas demandé la rétractation.
Mais inconvénient : le code HTML est un peu lourd puisque pour chaque partie de la page il faut rajouter quatre balises ...

Cliquez sur la flèche pour déplier ou replier.
Observez le rendu !

Masquage : solution jQuery

Vous pouvez utiliser le framework JavaScript et plus précisément le greffon jQuery UI qui propose la méthode accordion()
Je n'en dis pas plus. Il y a dans mon site tout un tuto sur jQuery dont une page sur jQuery UI : Jquery UI

Afficher en permanence la zone de navigation

Vous avez pu constater que sur certains site et lorsque vous descendez dans la page, la zone de navigation (contenant les liens vers autres pages) est toujours visible ; c'est le reste de la page qui glisse sous ce menu.
Donc la navigation est facilitée ; il n'est plus nécessaire de remonter en haut de page pour accéder au menu.

Le code HTML

Tout le contenu est dans le bloc SECTION et la zone de navigation est le bloc NAV.
Les liens ne fonctionnent pas : "liens morts".

Le code CSS

La feuille de style est un peu compliqué.
Cette solution suppose de bien maitriser la propriété POSITION et les propriétés qui sont associées (top, left, bottom, right, margin).
Et aussi de connaitre les limites. Ainsi pour des raisons mystérieuses position : absolute / fixed est incompatible avec margin: auto.
Donc pour centrer horizontalement le bloc NAV (positionné en fixe) il faut jouer sur deux propriétés left : 50% & margin-left : - moitié de la largeur du bloc donc ici 45% puisque le bloc fait 90% de large.
Notez aussi la propriété z-index qui gère l'ordre d'apparition des blocs lorsqu'ils se superposent.

Je n'en dis pas plus. Il y a dans ce même tuto tout un chapitre sur la propriété POSITION : la propriété CSS POSITION
Observez le rendu de cette dernière solution

Surtout faites défiler la page vers le bas pour constater que le menu est toujours affiché en haut de l'écran. C'est le contenu de SECTION qui glisse sous le bloc NAV.
Les liens de la zone de navigation sont des "liens morts".
Retour menu