28172 sujets

CSS et mise en forme, CSS3

Bonjour,

J'ai un problème avec un menu qui est codé sous la forme d'une liste (ul, li).

J'utilise la police Trebuchet MS pour ce menu (sachant qu'elle est présente sur plus de 98% des MACs, de Windows et iOS). Sous Android, ça passe avec la police par défaut.
Et bien entendu sous Linux mon menu part en cacahuètes car la police n'est pas présente sur le système et la police par défaut a un espacement entre caractères supérieurs.

Voici ma liste :
<div id="menu_logo">
<nav>
	<ul id="menu">
		<li><a href="index.php?p=accueil"<?php if ($page == 'accueil') echo ' class="current"' ?>>Accueil</a></li>
		<li><a href="index.php?p=univers"<?php if ($page == 'univers') echo ' class="current"' ?>>Notre univers</a></li>
		<li><a href="index.php?p=realisations"<?php if ($page == 'realisations') echo ' class="current"' ?>>Réalisations</a></li>
		<li><a href="index.php?p=acces"<?php if ($page == 'acces') echo ' class="current"' ?>>Accès</a></li>
		<li><a href="index.php?p=contact"<?php if ($page == 'contact') echo ' class="current"' ?>>Contact</a></li>
	</ul>
</nav>
</div>


Et voici mon code CSS :

div#menu_logo
{
	height: 145px;
	background: url(../images/interface/logo.png) no-repeat 20px 20px;
}

ul#menu
{
	height: 135px;
	margin-left: 362px;
	margin-right: 20px;
	padding-left: 9px;
	list-style-type: none;
	font-size: 0.8em;
	font-weight: bold;
	border-bottom: 6px solid #F97207;
}

ul#menu li
{
	padding: 105px 26px 0px 26px;
	float: left;
	display: inline;
	text-transform: uppercase;
	text-align: center;
}

ul#menu li a
{
	height: 30px;
	display: block;
	color: #000;
	text-decoration: none;
}

ul#menu li a.current
{
	border-bottom: 6px solid #A44626;
}

ul#menu li a:hover
{
	color: #707070;
	border-bottom: 6px solid #A44626;
}


J'ai donc un div avec mon logo en fond à gauche et ma liste qui commence à 362px

Voici ce que donne le menu en image (sans la partie logo) :

http://imageshack.us/scaled/landing/132/menudw.png

J'ai essayé différentes choses sans succès. A part transformer mon texte en image, je ne vois pas comment m'en sortir mais c'est une chose que je souhaiterais éviter.

Tous mes éléments de liste on un padding de 26px à gauche et 26px à droite afin d'avoir le même espace entre chaque élément.
Avec Trebuchet MS, mon menu réparti uniformément entre la gauche et la droite. C'est une chose que je souhaite conserver. Je ne souhaite pas que le menu s'arrête aux 3/4 du bloc parent.

Si quelqu'un a une idée, je suis preneur Smiley rolleyes

Merci par avance Smiley smile
Modifié par benjaming (23 Feb 2013 - 12:41)
Bonjour,

Il faut constuire votre font stack en choisissant une police de substitution qui se rapproche de celle désirée.
A noter que Trebuchet Ms est présente sur linux à 68%.

Quelle est votre font-family?
Merci pour vos réponses.

Sib a écrit :
Bonjour,

As-tu essayé avec la propriété css &quot; letter-spacing &quot; ?

Le problème c'est que je ne veux pas modifier les propriétés de ma police par défaut "Trebuchet MS". A ma connaissance ce n'est pas possible de changer les propriétés des polices de la liste individuellement, mais peut être que je me trompe.

rodolpheb a écrit :
Bonjour,

Il faut constuire votre font stack en choisissant une police de substitution qui se rapproche de celle désirée.
A noter que Trebuchet Ms est présente sur linux à 68%.

Quelle est votre font-family?

Mon font family est le suivant : font: 100% "Trebuchet MS", Arial, Helvetica, sans-serif;

Je n'ai pas trouvé de police qui soit présente à 95%+ sur système Unix. Smiley confus

Edit: Et qui soit de la même taille que Trebuchet.
Modifié par benjaming (23 Feb 2013 - 14:58)
Est-ce que le référencement sera moins pertinent si j'utilise des images à la place de texte ?

Google et autres feront-ils autant attention au texte inscrit dans l'attribut title qu'au texte d'une liste ?

Si la réponse est oui je pense tout simplement que je vais remplacer mon texte par des images même si j'étais contre car je ne vois pas solution propre qui permette d'avoir une disposition identique de mon menu quelque soit la configuration du visiteur.
J'ai un début de solution, j'ai fixé pour chaque li une largeur que j'ai mesurée lorsque ma page s'affiche avec la bonne police.

En changeant de police le menu reste donc sur la même ligne.

Mais il me reste un petit problème.
Lorsque je survole un lien du menu, j'avais la partie correspondante en dessous qui changeait de couleur (la bordure) comme on peut voir sur ma capture du 1er post.
Maintenant, j'ai toute la largeur du li qui change de couleur car la balise a occupe 100% de l'espace du li.

http://imageshack.us/scaled/landing/259/menugo.png

Y'a-t-il une façon de remédier à ceci ?
Modifié par benjaming (23 Feb 2013 - 15:57)
Un menu avec des images!!
Et si elles sont désactivées comment naviguer.

Avez-vous un lien vers votre site en construction?
Modifié par rodolpheb (23 Feb 2013 - 16:05)
rodolpheb a écrit :
Un menu avec des images!!
Et si elles sont désactivées comment naviguer.

Avez-vous un lien vers votre site en construction?


Pas mal de sites utilisent des images pour naviguer, non ? Rien que sur ce site, en haut il y a 3 images permettant d'accéder à "Apprendre", "Forum" et "Emploi".
Ca doit être assez rare de nos jours les gens qui naviguent sans images et le site que je réalise n'a pas pour public les adeptes de Lynx Smiley biggrin .

Non je n'ai pas de lien, c'est en local pour le moment.

Voici le code modifié :

<div id="menu_logo">
	<nav>
		<ul id="menu">
			<li style="width:103px;"><a href="index.php?p=accueil"<?php if ($page == 'accueil') echo ' class="current"' ?>>Accueil</a></li>
			<li style="width:149px;"><a href="index.php?p=univers"<?php if ($page == 'univers') echo ' class="current"' ?>>Notre univers</a></li>
			<li style="width:138px;"><a href="index.php?p=realisations"<?php if ($page == 'realisations') echo ' class="current"' ?>>Réalisations</a></li>
			<li style="width:90px;"><a href="index.php?p=acces"<?php if ($page == 'acces') echo ' class="current"' ?>>Accès</a></li>
			<li style="width:110px;"><a href="index.php?p=contact"<?php if ($page == 'contact') echo ' class="current"' ?>>Contact</a></li>
		</ul>
	</nav>
</div>


Et dans le CSS, j'ai enlevé le padding du li

ul#menu li
{
	padding: 105px 0px 0px 0px;
	float: left;
	display: inline;
	text-transform: uppercase;
	text-align: center;
}

Modifié par benjaming (23 Feb 2013 - 16:20)
a écrit :
Maintenant, j'ai toute la largeur du li qui change de couleur car la balise a occupe 100% de l'espace du li.



Y'a-t-il une façon de remédier à ceci ?

Appliquez un marin-left et right à la classe a.current

Comment gérez-vous cette classe (current) parce que telle qu'elle est, elle est active (c-à-d que tous les liens ont une bordure et donc au survol on ne voit rien!)
Non la classe courante n'est appliqué que pour la page courante. Elle est écrite dans le code uniquement si le test conditionnel PHP est vrai.

Je ne peux pas appliquer de marges car je ne connais pas la largeur du texte (fonction de la police) donc je ne peux pas savoir si le texte commence à 20px ou 24px par exemple.
Administrateur
benjaming a écrit :
Est-ce que le référencement sera moins pertinent si j'utilise des images à la place de texte ?
Un peu moins.
Mais tu vas surtout figer ton design, augmenter le temps de chargement de la 1ère page affichée, etc

benjaming a écrit :
Google et autres feront-ils autant attention au texte inscrit dans l'attribut title qu'au texte d'une liste ?

title ?? C'est de l'attribut alt (texte alternatif) dont il est question ici. IE6 et peut-être IE7 se mélangeaient les pinceaux et affichaient en infobulle le alt au lieu du title (me rappelle plus ce qu'il affichait quand les images se chargeaient pas/étaient pas affichées. Peut-être bien le title Smiley sweatdrop ).
Mais ça c'était avant : Firefox, Chrome, Safari, Opera, etc ont toujours respecté la norme (et IE8, 9 et 10 également) : c'est alt.
Même si title est valide sur tous les éléments, il n'est à utiliser que sur 3 éléments : les liens quand l'intitulé n'est pas suffisant en soi (il y a beaucoup à dire sur ce point d'accessibilité...), sur frame et sur iframe.

benjaming a écrit :
je pense tout simplement que je vais remplacer mon texte par des images même si j'étais contre car je ne vois pas solution propre qui permette d'avoir une disposition identique de mon menu quelque soit la configuration du visiteur.

Oublie le fait de vouloir une disposition "identique" partout. Identique sur les navigateurs récents, similaire sur la plupart et lisible sur les autres est bien suffisant. Tu te doutes bien que les utilisateurs de Linux dont il est question voient un grand nombre de sites web comme le tien. Ton boulot c'est que le texte s'affiche, qu'il soit pas caché. Si c'est sur 2 lignes chez eux, eh ben ce sera sur 2 lignes...

benjaming a écrit :
Pas mal de sites utilisent des images pour naviguer, non ? Rien que sur ce site, en haut il y a 3 images permettant d'accéder à &quot;Apprendre&quot;, &quot;Forum&quot; et &quot;Emploi&quot;.

Désactive les images et/ou les CSS et tu verras que les intitulés sont tout à fait lisibles. La refonte date de 2009 je crois. En 2011/2012 on aurait probablement utilisé @font-face

benjaming a écrit :
Ca doit être assez rare de nos jours les gens qui naviguent sans images et le site que je réalise n'a pas pour public les adeptes de Lynx Smiley biggrin .

Quelques centaines de milliers de personnes n'ont pas le choix et naviguent sans voir les images : les aveugles. Et ils utilisent très très peu Lynx mais le dernier IE ou Firefox (ou Safari sur OS X avec VoiceOver).
D'autres (plus nombreux) ont besoin d'adaptation genre zoomer ou désactiver les images de fond (les images HTML restant affichées). D'autres... bref tu n'as aucune idée de la manière dont tes visiteurs consultent ton site, c'est une des seules certitudes du web Smiley smile (perso c'est avec AdBlockPlus et Flash souvent désactivé ou avec un smartphone qui n'est ni un Android ni un iPhone mais quand même sous WebKit, pas un des 50 autres moteurs de rendu existants...)
Modifié par Felipe (23 Feb 2013 - 22:58)
Bonsoir,

Merci pour ton message, beaucoup de choses intéressantes.

Cependant je ne suis pas d'accord sur un point :

a écrit :
Si c'est sur 2 lignes chez eux, eh ben ce sera sur 2 lignes...


Pour du texte pas de soucis bien entendu mais pour mon menu, le dernier lien allait se mettre sur un header (photo) qui se trouve sous ce menu. Donc c'était bien entendu impossible de laisser dans l'état.

Mais comme indiqué dans mon poste précédent j'ai trouvé une solution qui permet un espacement identique entre les éléments sans déborder du cadre.

Effectivement remplacer le texte par des images aurait été une mauvaise idée. Mais ne trouvant pas de solution j'ai failli glisser vers la facilité Smiley rolleyes

Dans tous les cas, le site que je développe est un tout petit site vitrine pour une petite et nouvelle entreprise. Le traffic sera donc vraiment très faible et je suis même prêt à parier qu'aucun utilisateur de Linux ne passera dessus Smiley lol