28173 sujets

CSS et mise en forme, CSS3

Bonjour,

Je galère depuis un moment sur un menu horizontal (je sais, vertical c'est mieux, mais le client va piquer sa crise...).

Je voudrais qu'il prenne toute la largeur d'une page de 60 em, et que les espacement entre éléments de menu s'adaptent. Comme dans un tableau à une ligne, mais bon faut pas...

C'est un menu dynamique (PHP) de 6 éléments, dont les titres et le nombre peuvent changer. De plus certains titres sont trop longs et doivent s'afficher sur 2 lignes.

J'ai essayé avec des <div> en float:left pour chaque élément, mais les largeurs sont fixes, et le dernier élément se décale à gauche, laissant un espace à droite. Alors que je voudrais qu'il s'aligne sur la droite de la page.

J'ai essayé avec des <span>, mais si je mets un <br /> dans un titre trop long, le reliquat du titre revient sous le 1er élément de menu et pas sous le début de l'élément.

Malheureusement, j'ai pas de lien, car tout est en local actuellement, mais si vous insistez, je vous fait des captures écran.

Ah la la, les tableaux c'est quand même pratique ! Smiley decu
Laurent Denis a écrit :
Ouch Smiley eek

Il y a des choses à revoir avant Smiley cligne

Tiens, je me demandais justement si l'on pouvait faire un design viable en se basant sur une largeur relative en EM.

J'aurais tendance à dire qu'un max-width: 60em; couplé à un min-width: 760px; pourrait être intéressant. Non ?
mpop a écrit :

J'aurais tendance à dire qu'un max-width: 60em; couplé à un min-width: 760px; pourrait être intéressant. Non ?


J'avoue ma profonde méfiance, n'ayant pour l'instant encore jamais rencontré de mise en page de ce type qui soit assez robuste (et accessible) selon les conditions de rendu Smiley cligne

D'une manière générale, les dimensions en em "cassent" le flux normal du texte au détriment de sa répartition en hauteur. Or l'élasticité en hauteur est beaucoup plus facile à gérer.

D'autre part, pour la largeur d'une mise en page, un width ou un max-width en em découplent la largeur de la résolution : il pénalisent donc les utilisateurs ayant besoin d'agrandir les caractères (scroll horizontal).

Enfin, pour des blocs plus réduits, les largeurs en em manquent souvent trop de précision car leur valeur finale en pixel va être fonction de la police de caractère réelle : or, les polices ont un "emcombrement" plus variable qu'on ne le pense parfois.

Un dernier élément de réflexion, en marge mais je saute sur l'occasion Smiley cligne : les WCAG2.0 contiennent un critère particulièrement pertinent à l'usage et dont la portée dépasse le cadre strict de l'accessibilité. Elles distinguent en effet deux types de dimensions:
- dimensions ayant vocation à être élastiques (largeur de bloc, par exemple)
- dimensions ayant vocation à être fixes : paddings, marges de texte...
On rencontre souvent des paddings de blocs et surtout des marges en em, proportionnelles à l'agrandissement des caractères: c'est en fait une erreur, au sens de l'accessibilité pour les WCAG2.0 et, si j'en juge par mon expérience, également au sens de la robustesse de la mise en page. Certains espaces n'ont pas besoin de s'agrandire pour qu'une mise en page reste accessible et harmonieuse, et leur élasticité fait perdre au contraire une partie du "jeu" nécessaire en mangeant encore un peu plus de largeur...

Bref, sauf exceptions, je réserverais les em aux tailles de polices et donc à un rôle beaucoup plus souple sur les largeurs (blocs se dimensionnant selon leur contenu).
Modifié par Laurent Denis (25 Jul 2006 - 22:57)
Laurent Denis a écrit :
D'autre part, pour la largeur d'une mise en page, un width ou un max-width en em découplent la largeur de la résolution : il pénalisent donc les utilisateurs ayant besoin d'agrandir les caractères (scroll horizontal).

Un width oui, mais un max-width non. Si on place un max-width à 60em, et que cela dépasse les bords de la page, le bloc ne s'étendra pas au delà de ces limites. Donc pas de contre-indication tant que l'on se garde d'utiliser un width.

Laurent Denis a écrit :
Enfin, pour des blocs plus réduits, les largeurs en em manquent souvent trop de précision car leur valeur finale en pixel va être fonction de la police de caractère réelle : or, les polices ont un "emcombrement" plus variable qu'on ne le pense parfois.

Oui, l'encombrement variable des fontes est assez évident. Un petit exemple :
http://web.covertprestige.info/test/00-comparaison-de-fontes-pour-le-web.html

MAIS : je n'avais jamais constaté moi-même l'impact supposé de ces variations sur les dimmensions des éléments dimmensionnés en em. J'avoue être assez perplexe… aussi, j'ai fait un petit test. Voici le fichier :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Test de largeur en em</title>
	<style type="text/css">
	html {font-size: 100%;}
	body {
		font-size: .8em;
		font-family: Verdana, "Bitstream Vera Sans", "Lucida Grande", sans-serif;
		/*font-family: Times, "Times New Roman", "Nimbus Roman No9 L", serif;*/
	}
	div#page {
		width: 60em;
		height: 15em;
		background: burlywood;
	}
	</style>
</head>

<body>
<div id="page">
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas a elit eget pede molestie dignissim. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Suspendisse ligula mi, viverra hendrerit, mattis nec, laoreet non, massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent et metus sed lorem pellentesque vestibulum. Integer eget diam vel tortor vulputate varius. Etiam blandit massa at nisi tincidunt aliquam. Fusce sem ligula, lacinia non, bibendum in, egestas in, libero.</p>
</div><!-- fin de div#page -->
</body>
</html>

La dimmension du bloc #page va bien sûr dépendre des différentes indications de taille de texte dont il hérite : soit 100%*.8em = 80% de la taille du texte par défaut. Mais pour un bloc aussi haut qu'un enfant direct de body, prendre en compte l'héritage de ces propriétés est tout à fait réalisable, et le risque de s'y perdre est assez faible.

Revenons à cette histoire de police. J'ai ici deux déclarations font-family, chacune désignant une famille très différente (les polices de type Times sont très petites, le Verdana est immense). La largeur et la hauteur du bloc sont fixés en em.

Maintenant, lorsque je passe d'une famille à l'autre (on change les commentaires), que se passe-t-il ? Absolument rien. Ou plutôt : le texte change (il prend le double de l'espace, ou la moitié, suivant le sens !), mais le bloc ne bronche pas.

Testé avec Firefox 1.5, Konqueror 3.5, Opera 9 et Internet Explorer 6.

Alors soit j'ai loupé un épisode, soit le choix de la fonte n'a aucune incidence sur le dimmensionnement en EM des éléments. Ce qui a une incidence, c'est la valeur d'1em pour un bloc précis, par rapport à la valeur d'1em au niveau de la racine.

Ai-je loupé un épisode ? Smiley sweatdrop


Laurent Denis a écrit :
On rencontre souvent des paddings de blocs et surtout des marges en em, proportionnelles à l'agrandissement des caractères: c'est en fait une erreur, au sens de l'accessibilité pour les WCAG2.0 et, si j'en juge par mon expérience, également au sens de la robustesse de la mise en page.

Effectivement, en règle général il vaut mieux garder des valeurs en pixels pour les espaces horizontaux, sous peine de voir l'espace disponible pour un contenu réduit à peau de chagrin par des marges et padding trop étendus lorsque le texte est agrandi.
Pour les espaces verticaux, par contre, dans beaucoup de cas les em sont assez pertinents. Des retraits verticaux mettant en évidence l'importance (niveau) d'un titre, par exemple, peuvent ne plus être perceptibles dès le premier niveau d'agrandissement, s'ils sont exprimés en pixels.
Modifié par mpop (26 Jul 2006 - 00:41)
Bonjour,

mpop a écrit :

Un width oui, mais un max-width non. Si on place un max-width à 60em, et que cela dépasse les bords de la page, le bloc ne s'étendra pas au delà de ces limites. Donc pas de contre-indication tant que l'on se garde d'utiliser un width.


Au temps pour moi, en effet. Intéressant, ça.
Reste à déterminer la manière optimale de "dégrader" la combinaison min-with/maw-width pour IE, cependant.

mpop a écrit :

Maintenant, lorsque je passe d'une famille à l'autre (on change les commentaires), que se passe-t-il ? Absolument rien. Ou plutôt : le texte change (il prend le double de l'espace, ou la moitié, suivant le sens !), mais le bloc ne bronche pas.


Je n'ai pas le temps de rechercher ce matin dans les cas réels où la difficulté s'était posée, mais je tâcherais d'y revenir. Il me semble bien d'ailleurs qu'il y en a quelques-uns dans les archives du forum.
Laurent Denis a écrit :
utilise un tableau à une ligne

Avec un summary du type « navigation dans le site » par exemple ?
Pour ton problème, seul un tableau de width:100% peut convenir... Il faut eviter les tableaux pour la mise en page, mais quand on ne peut pas faire autrement, on ne peut pas faire autrement Smiley cligne
Voilà ma conscience apaisée... Smiley biggrin Puis-je préciser en commentaire "Avec la bénédiction d'Alsacréations. Amen" ? Smiley cligne
marabbeh a écrit :
Voilà ma conscience apaisée... Smiley biggrin Puis-je préciser en commentaire "Avec la bénédiction d'Alsacréations. Amen" ? Smiley cligne

Je propose plutôt que tu fasse un don en euros et à minimum trois chiffres AVANT la virgule, pour remercier Alsacréations et acheter ainsi ta tranquilité d'esprit. Une sorte d'Indulgence, quoi.

En tant que trésorier d'Alsacréations, j'encaisserai le chèque directement sur mon compte personnel. Contacte-moi en MP pour mes coordonnées.

Merci de ton geste. Smiley smile
Aïe, les Indulgences ça passe plutôt mal pour le descendant de huguenots que je suis...
Modifié par marabbeh (27 Jul 2006 - 11:03)