28220 sujets

CSS et mise en forme, CSS3

Bonjour,
J'ai vu que ce sujet a déja été traité dans le forum. Débutante, je n'arrive pas à appliquer les réponses fournies.
le lien donné : http://www.biblographia.net/article/17/css--mettre-envidence-la-page-courante

mon problème : mettre en évidence la page courante dans mon menu.

ma source :


<div id="navcontainer">
<ul id="navlist">
<li><a href="http://yolineg.free.fr/blog/index.php?General" id="Generalnav">Divers</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?Perso" id="Personav">Perso</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?Amis-du-web" id="Amis-du-webnav">Amis du web</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?Mes-passions" id="Mes-passionsnav">Mes passions</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?gallery" id="gallerynav">Photos</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?Paroles" id="Parolesnav">Paroles</a></li>
</ul>

[#blue][i]
<!-- c'est écrit mettre un id unique aux pages de chaque rubrique
 dans le tutoriel , est-ce ainsi qu'il faut faire et à cet endroit du fichier ???-->[/i]
[#black]

<body id="General">  <body id="Perso">
<body id="Amis du web">
<body id="Mes passions">
<body id ="Photos">
<body id ="Paroles">
</div>


la feuille : style.css


/* La barre horizontale
-------------------------------------------------------- */
#navcontainer
{
background: #EED6FF;
margin: 0 auto;
padding: 1em 0 0 0;
font-family: georgia, serif;
text-align : center;
}

/* to stretch the container div to contain floated list */
#navcontainer:after
{
content: ".";
display: block;
line-height: 1px;
font-size: 1px;
clear: both;
}

ul#navlist
{
list-style: none;
padding: 0;
margin: 0 auto;
width: 80%;
font-size: 0.9em;
font-weight: bold;
}
/* pourcentage à diminuer si on ajoute des onglets*/
ul#navlist li
{
display: block;
float: left;
width: 14%;
margin: 0;
padding: 0;
}

ul#navlist li a
{
display: block;
width: 100%;
padding: 0.5em;
border-width: 1px;
border-color: #ffe #aaab9c #ccc #fff;
border-style: solid;
color: #7A7A7A;
text-decoration: none;
background: #f7f2ea;
}

#navcontainer>ul#navlist li a { width: auto; }

ul#navlist li.active a
{
background: #f0e7d7;
color: #7700FF;
}

ul#navlist li a:hover, ul#navlist li#active a:hover
{
color: #7700FF;
background: transparent;
border-color: #aaab9c #fff #fff #ccc;
}

§§



En tout cas, mon menu fonctionne correctement, quand on clique sur un onglet, il devient violet mais le problème c'est qu'il ne le reste pas.... Smiley ohwell

il est écrit de mettre un code dans le fichier CSS mais si je remplace le mien par celui écrit, j'obtiens une liste à puces et le problème reste le même.

J'espère que j'ai été claire et que quelqu'un pourra m'aider à résoudre mon problème.

Merci



j'ai vu que mon message a été édité deux fois.. Smiley ohwell
désolée...mais je ne peux pas suppimer

Modération : Bonjour, yoline, et bienvenue dans le forum Smiley smile

Je restaure ton message original : il semble que tu aies fait une fausse manoeuvre quelque-part ? Il n'y a en tous cas aucune raison de le supprimer Smiley cligne

--Laurent Denis

Modifié par Laurent Denis (24 Jul 2005 - 18:24)
Bonjour et bienvenue par ici Smiley smile

Le détail qui est peu mis en avant dans l'article que tu cites, est que chaque page du site soit être différente au niveau de la balise body (serait-ce plus clair ? hum Smiley langue ). Donc pour chaque lien, une page différente avec une balise <body> spécifique.

Imagine donc ta pages Divers.html qui sera la cible de ton lien Divers aura une structure :

ton entete
<body id="divers">
ton menu


Mais ta page perso.html aura une structure :

ton entete
<body id="perso">
ton menu


Mais en fait je crois que tu utilises un systeme d'include pour ta navigation et du coup il faut un peu modifier la technique et rajouter du php. Donc est tu à l'aise avec le php?

petit détail, le code css est à rajouter et à adapter

mais non pas à remplacer ton code actuel Smiley cligne

edit: Pourquoi tu veux supprimer ton msg? C'est très certainement une histoire de mise en forme qui a valu ton msg qql modifications par les modérateurs, pour une meilleur lisibilité.
Modifié par tyx (24 Jul 2005 - 17:59)
Une chose à propos de tes id : tu ne peux pas utiliser d'identifiants comportant des espaces, comme ceux-ci :


<body id="Amis du web">
<body id="Mes passions">
</div>
Heu... Une version simple et sans PHP, peut-être, pour débuter ? Smiley biggrin

Je reprends ton menu de navigation qui indique tes différentes pages :

<div id="navcontainer">
<ul id="navlist">
<li><a href="http://yolineg.free.fr/blog/index.php?General" id="Generalnav">Divers</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?Perso" id="Personav">Perso</a></li>
...


Dans ta page yolineg.free.fr/blog/index.php?General, tu modifies la balise <body> pour qu'elle devienne par exemple :
<body id="general">


Dans ta page yolineg.free.fr/blog/index.php?Perso, la balise <body> devient :
<body id="perso">


Et dans ta feuille de style, tu ajoutes :


body#general a#Generalnav,
body#perso a#Personav {
   color:#ff0000;
}


Comme la combinaison <body id="general">... <a id="Generalnav"> n'existe que dans une seule de tes pages, il n'y a que dans celle-ci que le code CSS va s'appliquer pour ce lien précis.
Modifié par Laurent Denis (24 Jul 2005 - 18:47)
Oui, il est écrit qu'il faut indiquer une "id" à chaque page (body). Mais tu n'es pas obligée de t'arrêter là... Une "id" pour ton bloc de menu différente à chaque page ( ou rubrique ) fonctionne très bien aussi.
J'ai utilisé ce principe "en liste" pour un test des accesskeys. Voir ici : chaque page y est mise en évidence
Merci à tous pour votre accueuil.
Je débute et cela ne fait pas longtemps que j'ai ouvert un fichier .php ou .css....
C'est pour un blog et non un site.
Je m'attaquerais au site plus tard....

Laurent Denis, j'ai oublié les traits d'unions, tu as raison Smiley smile
a écrit :
<body id="Amis-du-web">
<body id="Mes-passions">
</div>


mais je ne vois pas comment modifier mes fichiers pour appliquer vos conseils.

a écrit :
Dans ta page yolineg.free.fr/blog/index.php?General, tu modifies la balise <body> pour qu'elle devienne par exemple :
<body id="general">

Dans ta page yolineg.free.fr/blog/index.php?Perso, la balise <body> devient :
<body id="perso">


j'ecris quoi pour faire ma barre de menu alors...suis perdue Smiley decu

ma barre de menu fonctionne mais c'est rendre active la page où on est...ça j'arrive pas à le faire.

j'ai remis le fichier que j'avais à l'origine :

<div id="navcontainer">
<ul id="navlist">
<li><a href="<?php dcInfo('url'); ?>" >Accueil</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?Divers" >Divers</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?Perso" >Perso</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?Amis-du-web" >Amis du web</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?Mes-passions" >Mes passions</a></li> 
<li><a href="http://yolineg.free.fr/blog/index.php?gallery" >Photos</a></li>
<li><a href="http://yolineg.free.fr/blog/index.php?toc/home/tocbis" >Sommaire</a></li> 
</ul>
</div> 



je ne connais pas bien le PHP... je ne demande qu'à progresser ;

je modifie où ? je supprime quoi ? Smiley confus

merci
Alors, reprenons calmement Smiley smile

Donc, tu as différents éléments à prendre en compte :

* un identifiant différent pour chacune des pages (l'id dans le body dans l'exemple)
* un menu de navigation, qui ne subit aucun changement
* ton code CSS qui s'occupera de gérer le style de l'item de ton menu

Ne nous occupons pas de la méthode pour gérer l'identifiant des pages, concentrons nous sur le principe mis en oeuvre.

Tes pages sont identifiées chacune différement grâce à l'id que tu leur as attribué, ainsi il est simple d'attribuer un style différent à telle ou telle partie de la page en fonction de cet identifiant, et ce grâce aux CSS.

Donc, imaginons, tu as une page "general" (<body id="general">) et une autre "perso" (<body id="perso">).

Dans ton menu de navigation tu auras (par exemple) :

<ul id="navigation">
<li id="m_general">General</li>
<li id="m_perso">Perso</li>
</ul>


Il faut donner un identifiant à chacun des éléments qui compose ton menu pour pouvoir leur donner un style, et à eux seuls. J'ai ajouté un préfixe "m_" pour les différencier des identifiant du body (un id doit être unique sur une page), "m" pour menu, mais tu choisis comme tu veux.

Alors maintenant, dernier point, les styles CSS

body#general li#m_general { /* style pour la page general en cours */ }
body#perso li#m_perso { /* style pour la page perso en cours */ }


Cette déclaration de style veut dire :
Je sélectionne l'élément <li> qui a pour ID "m_general" contenu dans l'élément <body> qui a pour ID "general" et je lui appliques les styles suivant.

Je sélectionne l'élément <li> qui a pour ID "m_perso" contenu dans l'élément <body> qui a pour ID "perso" et je lui appliques les styles suivant.

Voilà Smiley smile
Le principe est assimilé ?

Ensuite, pour gérer de façon automatique l'identification de chacune des pages, tu peux modifier le code PHP du moteur de ton blog.
C'est doclear là ?
Tu peux récupérer la catégorie de la page en cours assez simplement avec dotclear, tu récupères en gros l'élément dans l'URL
et tu l'écris dans le body en valeur d'id.

En gros :

$categorie = // on récupère par un moyen quelconque la catégorie
$id = 'id="'.$categorie.'"';
// à la partie où il y a le body :
<body <?php echo $id; ?>>

Il faudrait tester que la page affichée correspond bien à une catégorie et si ce n'est pas le cas, n'afficher aucun ID, mais là il faut affiner.

Pour la modification niveau PHP du code, je te suggère le forum DotClear qui sera plus à même de t'y aider (si tu utilises dotclear bien sûr Smiley langue )
http://dotclear.net/forum

p.s. j'ai à peu près repris la même chose que ce qu'expliquait Laurent en fait Smiley langue
N'hésite pas à reprendre calmement les explications sur biblographia, celles de Laurent, celle ci, les autres.
Peut être comprendra tu mieux l'une d'entre elle Smiley cligne
Modifié par Olivier (26 Jul 2005 - 01:26)
Je comprends le principe c'est un peu plus clair, merci.

il faut donc que je refasse complétement mon menu et la partie de la feuille de style correspondante. Ce que j'ai fait ne va pas.

Sur Dotclear, ils n'ont pas su me dire comment rendre active la page où on est, à partir de mes fichiers.
J'espère trouver de l'aide ici.

Je vais essayer de faire ce qui est écrit....

merci
Bonsoir,

toujours au même point.... je continue de chercher...
sur le forum dotclear, aucune réponse.

Est ce que quelqu'un, a un menu de ce genre, où la page reste active quand on est dessus ?

Si oui, est-il possible d'avoir le code .php et celui .css ?

Avec un exemple concret, j'arriverai à mieux comprendre le principe.

merci
faut pas désespérer Smiley biggrin

il faut reprendre la réponse d'Olivier. tout y est (à mon avis) :
- ajouter des id à chaque éléments de ton menu
- modifier ton css
- modifier le code php pour ajouter le bon id à la balise body (-> pour cette partie,le mieux est de récupérer le nom de la catégorie à partir de l'url mais je pense qu'il doit déjà y avoir une variable qui contient ce nom, faut voir avec ceux qui utilisent dotclear)

le CSS

body#MaCategorie li#MaCategorie_nav, body#perso li#m_perso { /* ton style pour l'onglet actif */ }



<?php
// je ne suis pas sûr du tout de ce code, j'ai juste fouillé un peu dans les explications de Kozlika, dans ton sujet sur le forum de DotClear
if ($mode == 'cat') {
$categorie = 'id=" '. $cat_id .' " ';
}
?>
<body <?php if(isset($categorie) {echo($categorie);} ?>>
<ul>
<li><a id="MaCategorie_nav" href="http://blabla/index.php?MaCategorie">blabla</a></li>
<li><a id="MaCategorie2_nav" href="http://blabla/index.php?MaCategorie2">blabla</a></li>
</ul>
</body>


yoh
Bonsoir,

merci, je vais regarder tout ça...

j'ai fait les modifs d'olivier mais ça n'a pas fonctionné ; mon menu est devenu une liste à puces et toujours pas de changement de couleur pour la page active...

j'ai du faire des erreurs. je vais tester ta solution.


merci beaucoup
Modifié par yoline (03 Aug 2005 - 02:08)