Autres astuces en CSS - Des textes à onglets horizontaux

→ Une solution simple de textes à "onglets" horizontaux, uniquement en CSS, aménagée pour être responsive.

La proposition ci-dessous est issue de ce site : (auteur : Stan @Stanhub)

Elle a été simplifiée et aménagée afin d'être utilisée à peu près confortablement sur les smartphones.

Généralement, on utilise un texte en faux latin (le texte ne veut rien dire, il a été modifié), le Lorem ipsum ou Lipsum, qui permet donc de faire office de texte d'attente. L'avantage de le mettre en latin est que l'opérateur sait au premier coup d'oeil que la page contenant ces lignes n'est pas valide, et surtout l'attention du client n'est pas dérangée par le contenu, il demeure concentré seulement sur l'aspect graphique.

Ce texte a pour autre avantage d'utiliser des mots de longueur variable, essayant de simuler une occupation normale. La méthode simpliste consistant à copier-coller un court texte plusieurs fois (« ceci est un faux-texte ceci est un faux-texte ceci est un faux-texte ceci est un faux-texte ceci est un faux-texte ») a l'inconvénient de ne pas permettre une juste appréciation typographique du résultat final.

Il circule des centaines de versions différentes du Lorem ipsum, mais ce texte aurait originellement été tiré de l'ouvrage de Cicéron, De Finibus Bonorum et Malorum (Liber Primus, 32), texte populaire à cette époque, dont l'une des premières phrases est : « Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit... » (« Il n'existe personne qui aime la souffrance pour elle-même, ni qui la recherche ni qui la veuille pour ce qu'elle est... »).

Expert en utilisabilité des sites web et des logiciels, Jakob Nielsen souligne que l'une des limites de l'utilisation du faux-texte dans la conception de sites web est que ce texte n'étant jamais lu, il ne permet pas de vérifier sa lisibilité effective. La lecture à l'écran étant plus difficile, cet aspect est pourtant essentiel. Nielsen préconise donc l'utilisation de textes représentatifs plutôt que du lorem ipsum. On peut aussi faire remarquer que les formules conçues avec du faux-texte ont tendance à sous-estimer l'espace nécessaire à une titraille immédiatement intelligible, ce qui oblige les rédactions à formuler ensuite des titres simplificateurs, voire inexacts, pour ne pas dépasser l'espace imparti.

Contrairement à une idée répandue, le faux-texte ne donne même pas un aperçu réaliste du gris typographique, en particulier dans le cas des textes justifiés : en effet, les mots fictifs employés dans le faux-texte ne faisant évidemment pas partie des dictionnaires des logiciels de PAO, les programmes de césure ne peuvent pas effectuer leur travail habituel sur de tels textes. Par conséquent, l'interlettrage du faux-texte sera toujours quelque peu supérieur à ce qu'il aurait été avec un texte réel, qui présentera donc un aspect plus sombre et moins lisible que le faux-texte avec lequel le graphiste a effectué ses essais. Un vrai texte pose aussi des problèmes de lisibilité spécifiques (noms propres, numéros de téléphone, retours à la ligne fréquents, composition des citations en italiques, intertitres de plus de deux lignes...) qu'on n'observe jamais dans le faux-texte.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.

Sur mon site : http://www.71site.fr  et pages suivantes, j'avais proposé plusieurs versions proches mais moyennement satisfaisantes, à part la version à onglets verticaux que j'avais améliorée et qui est utilisée sur ce site à plusieurs reprises...

Le code n'était pas aisé à manipuler, les onglets avaient tous la même largeur, l'utilisation en mobile était peu satisfaisante et la hauteur des volets était fixe...

Pour cette solution, beaucoup plus simple à mettre en oeuvre, il n'en est rien, la hauteur des volets s'adapte au contenu, la largeur des onglets également, et de plus, une simple adaptation le rend utilisable avec des smartphones : les onglets sont alors superposés de haut en bas sur toute la largeur de l'écran (dont vous pourrez définir la taille). Si il n'y a pas trop d'onglets, l'ergonomie n'en souffre pas...

Le code ci-dessous est détaillé et commenté le plus possible, il a une première partie [style type="text/css"]...[/style] à mettre au début du code source de la page ou de la boîte encadrée de ces balises, ou bien tel quel, dans un fichier spécifique comme c'est le cas ici (nommé CSS_textes_onglets_horizontaux.css) dont l'appel au début du code source est le suivant :


    <link charset="utf-8" href="skin/css/CSS_textes_onglets_horizontaux.css" rel="stylesheet" />    

.tabhoriz { /*attribut du procédé*/
	margin: 0 auto; /*marges extérieures*/
	width:95%; /*largeur*/
}
.content { /*attribut du volet contenant*/
	background: linear-gradient(rgba( 75, 75, 75, .8), rgba( 0, 0, 0, .8)); /*couleur de fond*/
	color: #fff; /*couleur de texte*/
	border:1px solid #c0c0c0; /*bordure : épaisseur nature couleur*/
}
.content > div { /*attribut du volet contenant*/
	display: none;
	padding: 20px; /*marges intérieures*/
	font-size:0.9rem; /*taille police*/
}
.tabhoriz p { /*attributs des paragraphes*/
	margin: 5px; /*marges extérieures*/
	line-height: 1.5; /*hauteur de ligne*/
}

.tabhoriz>input {display: none;}
.tabhoriz label { /*attribut des titres*/
	display: inline-block;
	margin-top:0px; /*marge extérieure haute à adapter*/
	padding: 10px 15px; /*marges intérieures*/
	font-size:1.1rem; /*taille police*/
	font-weight: bold; /*gras police*/
	text-align: center; /*alignement*/
	border:1px solid #c0c0c0; /*bordure : épaisseur nature couleur*/
	border-bottom:none; /*pas de bordure basse*/
	background: linear-gradient(rgba( 0, 0, 0, .8), rgba( 75, 75, 75, .8)); /*couleur de fond*/
}
.tabhoriz label:hover { /*attribut des titres survolés*/
	color: #fff; /*couleur police*/
	background: transparent; /*couleur de fond*/
	cursor: pointer;
}
.tabhoriz input:checked + label { /*attribut des titres actifs*/
	color: #000; /*couleur police*/
	background: #eee; /*couleur de fond*/

}
#tab1:checked ~ .content #content1,
#tab2:checked ~ .content #content2,
#tab3:checked ~ .content #content3,
#tab4:checked ~ .content #content4 { /*attribution contenu et tabulation active numérotée : en ajouter ou en supprimer*/
	display: block;
}

@media screen and (max-width: 760px) { /*taille écran inférieure à 760px à adapter*/
.tabhoriz label { /*attribut des titres*/
	padding: 5px 10px; /*marges intérieures*/
	font-size:1.3rem; /*taille police*/
	width:100%; /*largeur ; ici 100% important pour les mobiles*/
}
.content > div {font-size:1.1rem;} /*attribut du volet contenant : taille police*/
}

→ Notez bien dans ce code les Id de chaque onglet #tab1 #tab2 ... et leur contenu respectif #content1 #content2 ... Vous pouvez en ajouter ou en supprimer, mais ces Id devront être repris dans le code ci-dessous.

→ Notez également la règle @media screen qui vous permet de définir la taille de l'écran en deçà de laquelle, les onglets occuperont 100% de la largeur du procédé. Vous pourrez aussi y définir des tailles de police plus adaptées à un écran de smartphone;

Puis ci-dessous le code simplifié pour ne conserver que la structure, afin de placer ces textes à onglets où vous le souhaitez dans votre page.


<div class="tabhoriz">

 <input checked="checked" id="tab1" type="radio" name="tabs" />
<label for="tab1">Titre 1</label>

 <input id="tab2" type="radio" name="tabs" />
<label for="tab2">Titre 2</label>

 <input id="tab3" type="radio" name="tabs" />
<label for="tab3">Titre 3</label>

 <input id="tab4" type="radio" name="tabs" />
<label for="tab4">Titre4</label>

<div class="content">

<div id="content1">
<p>Ici le texte du contenu 1</p>
</div><!-- fin content1 -->

<div id="content2">
<p>Ici le texte du contenu 2</p>
</div><!-- fin content2 -->

<div id="content3">
<p>Ici le texte du contenu 3</p>
</div><!-- fin content3 -->

<div id="content4">
<p>Ici le texte du contenu 4</p>
</div><!-- fin content4 -->

</div><!-- fin content -->

</div><!-- fin tabhoriz -->
  • Après la balise [div class="tabhoriz"] vous trouvez la zone dans laquelle sont définis les titres des onglets, leur ordre et celui qui est actif. Les onglets sont de type="radio" (un onglet s'ouvre et celui qui était ouvert se ferme). Il faut reprendre obligatoirement les id="tabX" tous différents et repris également dans [label for="tabX"]Titre XXXX[/label]. Vous pouvez ajouter ou supprimer autant d'onglets que nécessaire.

  • Pour ouvrir un onglet par défaut, il faut placer dans la balise [input... /] checked="checked" ainsi : [input checked="checked" id="tab1" type="radio" name="tabs" /] pour l'onglet tab1 par exemple. Important : Il est nécessaire d'en avoir un actif.

  • Dans la partie [div class="content"]...[/div][!-- fin content --] vous trouvez autant de blocs [div id="contentX"]...[/div][!-- fin contentX --] que d'onglets pour y placer le contenu du volet de chaque onglet associé. Les id="contentX" sont tous différents, bien sûr.

  • Me contacter sur le forum de ce site pour toute question ou aide pour utiliser ces procédures.


    Astuces

    adHoc

    Iframes responsives

    Camera

    Unite Gallery

    Animations au survol

    Autres astuces en CSS

    Audio-Players

    Carousels