28172 sujets

CSS et mise en forme, CSS3

Bonjour,

Je me suis mis au CSS il y a quelque temps, grâce à l'excellent bouquin de Raphael Goetter sur le sujet. J'en profite pour appliquer mes nouvelles connaissances au site web de ma boîte, qui en a bien besoin.

Je suis parti d'un des gabarits disponibles sur ce site. Je l'ai épluché à fond, et je l'ai peaufiné et adapté à mes besoins.

Voici ce que donne le premier jet (il n'y a qu'une page, et le contenu est plus ou moins bidon):

http://www.microlinux.fr/nouveau/test.html

Vu la taille relativement réduite du site, je ne me suis pas fait suer à mettre en place un CMS. C'est du XHTML statique, et pour le menu de chaque page, je fais simplement un coup de copier/coller.

En revanche, j'aimerais bien que dans mon menu de navigation, la page actuelle se distingue des autres. J'ai réfléchi à la chose, et je vois grosso modo deux possibilités. Voici donc mon menu de navigation:


<div id="navigation">
<ul>
<li><a href="index.html">Accueil</a></li>
<li><a href="public.html">Public concerné</a></li>
<li><a href="configurations.html">Configurations sur mesure</a></li>
<li><a href="avantages.html">Linux, c'est mieux&nbsp;?</a></li>
<li><a href="#">Linux, c'est difficile&nbsp;?</a></li>
<li><a href="captures.html">À quoi ça ressemble&nbsp;?</a></li>
<li><a href="formation_utilisateurs.html">Formation utilisateurs</a></li>
<li><a href="formation_administrateurs.html">Formation administrateurs</a></li>
<li><a href="organisation_formations.html">Organisation des formations</a></li>
<li><a href="documentation.html">Linux aux petits oignons</a></li>
<li><a href="presse.html">Microlinux dans la presse</a></li>
<li><a href="contact.html">Contactez Microlinux</a></li>
</ul>
</div><!-- #navigation -->


Notez qu'ici, la page actuelle est un lien qui pointe vers soi-même (a href="#").

Le bout de CSS qui va avec :


#navigation {
  width: 22%;
  float: left;
}

#navigation ul {
  margin: 0;
  padding: 20px 10px;
  list-style: none;
}

#navigation a {
  display: block;
  height: 1%;
  padding: 2px 2px 2px 2px;
  line-height: 1.3;
  font-size: .85em;
  letter-spacing: -1px;
  font-weight: bold;
  color: #ccc;
  text-decoration: none;
}

#navigation {
  background-color: #447bd4;
}

#navigation a:hover, #navigation a:focus {
  color: orange;
  background-color: #6a93d4;
}


Alors comment faire pour que mon "lien" (bidon) vers ma page actuelle apparaisse autrement, par exemple en rouge (vous inquiétez pas pour l'esthétique, je peaufinerai la palette après).

Je vois en gros deux possibilités.

1) Soit je crée une classe .page_actuelle, dans laquelle je définis un color: red;

2) Soit j'opère une autre distinction: j'enlève le <a href=""> </a> autour de ma page actuelle (puisque de toute façon c'est un lien qui pointe vers soi-même), et j'obtiens un simple <li>.

J'avoue que je suis un peu confus pour ça. Je sens que la solution peut être simple et tenir en quatre ou cinq lignes. Mais plus j'y réfléchis, plus je trouve des trucs qui me semblent inutilement compliqués.

Quelqu'un a une idée salvatrice? Un truc simple et orthodoxe?
Modifié par kikinovak (02 Nov 2009 - 14:32)
Bonjour,

Je te conseille d'opter pour cette solution :
a écrit :
2) Soit j'opère une autre distinction: j'enlève le <a href=""> </a> autour de ma page actuelle (puisque de toute façon c'est un lien qui pointe vers soi-même), et j'obtiens un simple <li>.
Tu peux même encapsuler ton intitulé de page courante (ici "Linux, c'est difficile ?") par un <strong>.
Au passage, pourquoi as tu placé des "&nbsp;" avant tes points d'interrogation ? Ce n'est pas très propre et à priori inutile.
Modifié par mecho (02 Nov 2009 - 12:36)
Hello,

Je pense que ton idée de classe page_actuelle n'est pas mauvaise.
C'est ce que je fais sur la plupart des mes boulots, une classe active est apposée sur le <li> de la page actuelle.

Après effectivement, il y'a une condition en php derrière qui automatise cette tâche.

Tu peux aussi rajouter un <span> dans ton lien, ou encore utiliser un sélecteur du type :


li a[href="#"]{/*Mise en forme spécifique*/}


Mais ça ne fonctionnera que sur les navigateurs récents...
mecho a écrit :
Au passage, pourquoi as tu placé des "&nbsp;" avant tes points d'interrogation ? Ce n'est pas très propre et à priori inutile.

Pour respecter les conventions de typographie française, je suppose. Ce n'est pas inutile (ça sert à respecter les conventions de typographie française Smiley cligne ), et ce n'est certainement pas malpropre (il faut arrêter de dire «c'est pas propre» quand on rencontre un code qui nous interpelle, la «propreté» n'est pas un critère objectif de qualité). Par contre ce n'est pas indispensable, notamment si on opte pour d'autres conventions typographiques.

Sur le fond:

1. Je suis d'avis de ne pas supprimer ou altérer les liens sous prétexte qu'ils pointent vers la page en cours. Il n'est pas évident que l'information «ah tiens, le lien ne marche pas/plus» soit plus pertinente pour l'utilisateur que «ah tiens, si je clique ce lien je reste sur la même page». Dans le doute, je préfère ne pas introduire de perturbations du fonctionnement du menu en fonction de la page en cours.

2. Pour une petite optimisation visuelle qui indique la page ou rubrique en cours, il suffit de rajouter dans le code HTML une classe "current" (ou autre classe de son choix) sur les éléments LI ou A concernés. Faites comme vous voulez, mais l'information à retenir est que la distinction entre les différents liens se fait côté HTML (ajout d'une classe), pas côté CSS avec des pseudo-classes :active ou autres (qui n'ont rien à voir avec cette problématique).
CSS Bucherons a écrit :
Mais ça ne fonctionnera que sur les navigateurs récents...

Plus précisément, ça marchera partout sauf sur IE6.
CSS Bucherons a écrit :
une classe active est apposée sur le <li> de la page actuelle

J'évite d'utiliser "active" comme nom de classe, ou de parler de page active. Cela pour éviter la confusion courante avec la pseudo-classe :active, qui n'a strictement rien à voir (mais alors rien du tout). J'utilise plutôt "current", "encours", "en-cours", etc.
Merci pour vos réponses nombreuses et promptes. J'ai voulu tenter la mise en place d'un identificateur "page_en_cours", mais ça ne marche pas. Je dois me tromper quelque part au niveau de la syntaxe.

Voici mon code HTML:


<div id="navigation">
<ul>
<li><a href="index.html">Accueil</a></li>
<li><a href="public.html">Public concerné</a></li>
<li><a href="configurations.html">Configurations sur mesure</a></li>
<li><a href="avantages.html">Linux, c'est mieux&nbsp;?</a></li>
<li><a id="page_actuelle" href="#">Linux, c'est difficile&nbsp;?</a></li>
<li><a href="captures.html">À quoi ça ressemble&nbsp;?</a></li>
<li><a href="formation_utilisateurs.html">Formation utilisateurs</a></li>
<li><a href="formation_administrateurs.html">Formation administrateurs</a></li>
<li><a href="organisation_formations.html">Organisation des formations</a></li>
<li><a href="documentation.html">Linux aux petits oignons</a></li>
<li><a href="presse.html">Microlinux dans la presse</a></li>
<li><a href="contact.html">Contactez Microlinux</a></li>
</ul>
</div><!-- #navigation -->


Et le CSS qui va avec :


#navigation a {
  display: block;
  height: 1%;
  padding: 2px 2px 2px 2px;
  line-height: 1.3;
  font-size: .85em;
  letter-spacing: -1px;
  font-weight: bold;
  color: #ccc;
  text-decoration: none;
}

#page_actuelle a {
  color: red;
}


J'imagine que vous voyez ce que j'ai l'intention de faire. Pour ma part, je ne comprends pas bien pourquoi ça ne marche pas.

Des suggestions ?
Surement une petite erreur d'inattention, remplace
#page_actuelle a
par
#page_actuelle

Modifié par mecho (02 Nov 2009 - 13:38)
mecho a écrit :
Surement une petite erreur d'inattention, remplace
#page_actuelle a
par
#page_actuelle


Non non, je fais très attention. J'ai essayé ce que tu suggères, mais ça ne marche pas non plus.

J'ai expérimenté un peu, et j'ai trouvé ceci, qui fonctionne :


#navigation a {
  display: block;
  height: 1%;
  padding: 2px 2px 2px 2px;
  line-height: 1.3;
  font-size: .85em;
  letter-spacing: -1px;
  font-weight: bold;
  color: #ddd;
  text-decoration: none;
}

#navigation span {
  color: red;
}


Et puis :


<div id="navigation">
<ul>
<li><a href="index.html">Accueil</a></li>
<li><a href="public.html">Public concerné</a></li>
<li><a href="configurations.html">Configurations sur mesure</a></li>
<li><a href="avantages.html">Linux, c'est mieux&nbsp;?</a></li>
<li><a href="#"><span>Linux, c'est difficile&nbsp;?</span></a></li>
<li><a href="captures.html">À quoi ça ressemble&nbsp;?</a></li>
<li><a href="formation_utilisateurs.html">Formation utilisateurs</a></li>
<li><a href="formation_administrateurs.html">Formation administrateurs</a></li>
<li><a href="organisation_formations.html">Organisation des formations</a></li>
<li><a href="documentation.html">Linux aux petits oignons</a></li>
<li><a href="presse.html">Microlinux dans la presse</a></li>
<li><a href="contact.html">Contactez Microlinux</a></li>
</ul>
</div><!-- #navigation -->


Ça marche, mais ça ne me semble pas très orthodoxe.
Désolé, j'ai voulu aller trop vite. Tu peux conserver ta première méthode mais avec :
#navigation #page_actuelle{color: red}

Modifié par mecho (02 Nov 2009 - 14:09)
mecho a écrit :
Désolé, j'ai voulu aller trop vite. Tu peux conserver ta première méthode mais avec :
#navigation #page_actuelle{color: red}


Yessss. Ça fonctionne nickel à présent. Et ça m'a l'air bien plus propre.

Merci beaucoup, à tout le monde !
kikinovak a écrit :
Yessss. Ça fonctionne nickel à présent. Et ça m'a l'air bien plus propre.

Merci beaucoup, à tout le monde !

Le problème est donc [résolu] ? Smiley ravi