[RESOLU] Menu déroulant (PHP, CSS et JS)

Eléphant du PHP | 188 Messages

07 janv. 2012, 23:34

Le "bienvenue" passe au dessu des boutons et il y a un espace phénoménal avant le qui est en ligne ...
ça donne ça :

Image

Mammouth du PHP | 790 Messages

07 janv. 2012, 23:37

redonne moi tout ton code, que je regarde
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 188 Messages

07 janv. 2012, 23:41

HTML et PHP :
<div id="nav" >
			<p class='fullheader'>Bienvenue 
			<?php echo $_SESSION['pseudo']; ?>
			!
			<ul id="menu" >
			<li><a href="espacemembre.php" alt="espace_membre"><img src="images/espacemembre.png" alt="espace_membre" /></a></li>
			<li><a href="mesamis.php" alt="mes amis"><img src="images/amis.png" alt="mes amis" /></a></li>
			<li><a href="mesmessages.php" alt="mes messages"><img src="images/message.png" alt="mes messages" /></a></li>
			<li>
			<a href="mesnotifications.php" alt="mes notifications"><img src="images/notif<?php echo $count_notifs; ?>.png" alt="mes notifications" /></a>
			<ul>	
				<?php
				//recuperation des notifs de l'user
				$sql = 'SELECT * FROM notifications WHERE id_user='.$_SESSION['id'].' ORDER BY timestamp DESC LIMIT 0, 10';
				$reqf = $connexion->query($sql);
				$reqf->setFetchMode(PDO::FETCH_OBJ);
					while ($dataf = $reqf->fetch())
						{
						echo '<li><a href="'.$dataf->lien.'" >'.$dataf->texte.'</a></li>';
						}
				?>
			</ul>
			</li>
			</ul>
			<?php
			}
		else
			{
			}
	?>
	
	<!--    /full header -->
	
<!-- Qui est en Ligne ? -->
<?php
//requette SQL pour trouver les timestamp récent (moins de 1800 sec de vieillesse)
$timestamp = time() - 1800; // 1800sec = 30 minutes
$sql = 'SELECT * FROM logs WHERE timestamp > '.$timestamp;
$reqb = $connexion->query($sql);
$reqb->setFetchMode(PDO::FETCH_OBJ);
$count = $reqb->rowCount();
$reqb->closeCursor();

//requette SQL pour trouver les timestamp récent d'un user enregistre
$sql = 'SELECT * FROM logs WHERE timestamp > '.$timestamp.' AND id_mbr != 0';
$reqc = $connexion->query($sql);
$reqc->setFetchMode(PDO::FETCH_OBJ);
$count_enregistre = $reqc->rowCount();
$reqc->closeCursor();

//requette SQL pour trouver les timestamp récent d'un user enregistre
$sql = 'SELECT * FROM logs WHERE timestamp > '.$timestamp.' AND id_mbr = 0';
$reqd = $connexion->query($sql);
$reqd->setFetchMode(PDO::FETCH_OBJ);
$count_invite = $reqd->rowCount();
$reqd->closeCursor();


if ($count == 0)
	{
	//personne en ligne depuis - de 30 minutes
	?>
	Personne n'est en ligne :( ...
	<?php
	}
else
	{
	//qqun en ligne
	echo $count.' user';
							if ($count != 1)
								{ echo 's'; }
	echo ' en ligne, dont '.$count_enregistre.' enregistré';
							if ($count_enregistre != 1)
								{ echo 's'; }
	echo ' et '.$count_invite.' visiteur';
							if ($count_invite != 1)
								{echo 's'; }
	}
	?>
	</p></div>
<!-- fin du "Qui est en Ligne ?" -->
CSS :

Code : Tout sélectionner

/* TOUTE cette première partie concerne l'affichage déroulant des notifications */ #nav{ margin-top:-9px; margin-left:88px; } #menu, #menu ul /* Liste */ { padding : 0; /* pas de marge intérieure */ margin : 0; /* ni extérieure */ list-style : none; /* on supprime le style par défaut de la liste */ line-height : 21px; /* on définit une hauteur pour chaque élément */ text-align : center; /* on centre le texte qui se trouve dans la liste */ } #menu /* Ensemble du menu */ { font-weight : bold; /* on met le texte en gras */ font-family : Arial; /* on utilise Arial, c'est plus beau ^^ */ font-size : 12px; /* hauteur du texte : 12 pixels */ } #menu a /* Contenu des listes */ { padding : 0; /* aucune marge intérieure */ background : #fff; /* couleur de fond */ color : #000; /* couleur du texte */ text-decoration : none; /* on supprime le style par défaut des liens (la plupart du temps = souligné) */ width : 144px; /* largeur */ } #menu li /* Elements des listes */ { float : left; /* pour IE qui ne reconnaît pas "transparent" */ border-right : 1px solid #fff; /* on met une bordure blanche à droite de chaque élément */ } /* IE ne reconnaissant pas le sélecteur ">" */ html>body #menu li { border-right: 1px solid transparent ; /* on met une bordure transparente à droite de chaque élément */ } #menu li ul /* Sous-listes */ { position: absolute; /* Position absolue */ width: 144px; /* Largeur des sous-listes */ left: -999em; /* Hop, on envoie loin du champ de vision */ } #menu li ul li /* Éléments de sous-listes */ { /* pour IE qui ne reconnaît pas "transparent" (comme précédemment) */ border-top : 1px solid #fff; /* on met une bordure blanche en haut de chaque élément d'une sous liste */ } /* IE ne reconnaissant pas le sélecteur ">" */ html>body #menu li ul li { border-top : 1px solid transparent; /* on met une bordure transparente en haut de chaque élément */ } #menu li ul ul { margin : -22px 0 0 144px ; /* On décale les sous-sous-listes pour qu'elles ne soient pas au dessus des sous-listes */ /* pour IE qui ne reconnaît pas "transparent" (comme précédemment) */ border-left : 1px solid #fff ; /* Petite bordure à gauche pour ne pas coller ... */ } /* IE ne reconnaissant pas le sélecteur ">" ... je me répète <img src="http://forum.phpfrance.com/images/smilies/icon_wink.gif" alt=";-)" title="Wink" /> */ html>body #menu li ul ul { border-left : 1px solid transparent ; /* on met une bordure transparente sur la gauche de chaque élément */ } #menu a:hover /* Lorsque la souris passe sur un des liens */ { color: #194898; background: #fff; } #menu li:hover ul ul, #menu li.sfhover ul ul /* Sous-sous-listes lorsque la souris passe sur un élément de liste */ { left: -999em; /* On expédie les sous-sous-listes hors du champ de vision */ } #menu li:hover ul, #menu li li:hover ul, #menu li.sfhover ul, #menu li li.sfhover ul /* Sous-listes lorsque la souris passe sur un élément de liste ET sous-sous-lites lorsque la souris passe sur un élément de sous-liste */ { left: auto; /* Repositionnement normal */ min-height: 0; /* Corrige un bug sous IE */ } /* FIN DE CETTE PREMIERE PARTIE pour l'affichage déroulant des notifs */ a { text-decoration: none; color: #194898; } a:hover { text-decoration: none; text-decoration: underline; color: #5368D2; } a:active { text-decoration: none; text-decoration: underline; color: #5368D2; } a:visited { text-decoration: none; color: #194898; } body { text-align: center; font-family: "Trebuchet MS", Arial; } .wio { font-style: italic; font-size: 0.7em; } p { background-color: #9C9F9E; margin-left: 100px; margin-right: 100px; } .footer { margin-bottom: 100px; border: 2px #194898 dashed; } .header .logo { position : absolute; left: 9%; } .header { text-align: left; } .fullheader { position: absolute; top: 0px; margin-top: 0px; margin-right: 0px; margin-left: 0px; text-align: center; }

JS :

Code : Tout sélectionner

sfHover = function() { var sfEls = document.getElementById("menu").getElementsByTagName("LI"); for (var i=0; i<sfEls.length; i++) { sfEls[i].onmouseover=function() { this.className+=" sfhover"; } sfEls[i].onmouseout=function() { this.className=this.className.replace(new RegExp(" sfhover\\b"), ""); } } } if (window.attachEvent) window.attachEvent("onload", sfHover);

Mammouth du PHP | 790 Messages

07 janv. 2012, 23:47

ca doit commencer comme ca et tu supprime la balise fermante p qui est en bas:
<p class='fullheader'>Bienvenue <?php echo $_SESSION['pseudo']; ?>!</p> //le p est refermer ici...
<div id="nav">

ensuite, sort les requêtes de <li>

pour l'avoir comme ça:
							<?php
							//requette SQL pour trouver les timestamp récent (moins de 1800 sec de vieillesse)
							$timestamp = time() - 1800; // 1800sec = 30 minutes
							$sql = 'SELECT * FROM logs WHERE timestamp > '.$timestamp;
							$reqb = $connexion->query($sql);
							$reqb->setFetchMode(PDO::FETCH_OBJ);
							$count = $reqb->rowCount();
							$reqb->closeCursor();

							//requette SQL pour trouver les timestamp récent d'un user enregistre
							$sql = 'SELECT * FROM logs WHERE timestamp > '.$timestamp.' AND id_mbr != 0';
							$reqc = $connexion->query($sql);
							$reqc->setFetchMode(PDO::FETCH_OBJ);
							$count_enregistre = $reqc->rowCount();
							$reqc->closeCursor();

							//requette SQL pour trouver les timestamp récent d'un user enregistre
							$sql = 'SELECT * FROM logs WHERE timestamp > '.$timestamp.' AND id_mbr = 0';
							$reqd = $connexion->query($sql);
							$reqd->setFetchMode(PDO::FETCH_OBJ);
							$count_invite = $reqd->rowCount();
							$reqd->closeCursor();


							if ($count == 0)
							{
							//personne en ligne depuis - de 30 minutes
							?>
							
						<li>
							Personne n'est en ligne <img src="http://forum.phpfrance.com/images/smilies/icon_sad.gif" alt=":(" title="Sad" /> ...
							<?php
							}
							else
							{
							//qqun en ligne
							echo $count.' user';
							if ($count != 1)
							{ echo 's'; }
							echo ' en ligne, dont '.$count_enregistre.' enregistré';
							if ($count_enregistre != 1)
							{ echo 's'; }
							echo ' et '.$count_invite.' visiteur';
							if ($count_invite != 1)
							{echo 's'; }
							}
							?>						
						</li>
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 188 Messages

07 janv. 2012, 23:51

Avec ça en haut:
<p class='fullheader'>Bienvenue 
			<?php echo $_SESSION['pseudo']; ?>
			!</p>
			<div id="nav" >
			<ul id="menu" >
			<li><a href="espacemembre.php" alt="espace_membre"><img src="images/espacemembre.png" alt="espace_membre" /></a></li>
			<li><a href="mesamis.php" alt="mes amis"><img src="images/amis.png" alt="mes amis" /></a></li>
			<li><a href="mesmessages.php" alt="mes messages"><img src="images/message.png" alt="mes messages" /></a></li>
			<li>
			<a href="mesnotifications.php" alt="mes notifications"><img src="images/notif<?php echo $count_notifs; ?>.png" alt="mes notifications" /></a>
			<ul>	
et ça en bas :
echo '<li>';
if ($count == 0)
	{
	//personne en ligne depuis - de 30 minutes
	?>
	Personne n'est en ligne :( ...
	<?php
	}
else
	{
	//qqun en ligne
	echo $count.' user';
							if ($count != 1)
								{ echo 's'; }
	echo ' en ligne, dont '.$count_enregistre.' enregistré';
							if ($count_enregistre != 1)
								{ echo 's'; }
	echo ' et '.$count_invite.' visiteur';
							if ($count_invite != 1)
								{echo 's'; }
	}
	?>
	</li>
	</div>
<!-- fin du "Qui est en Ligne ?" -->
il n'y a plus que la moitié du premier bouton de gauche qui est caché par le "bienvenue", et le who is online a gagné une magnifique petite puce ! pourquoi le mettre dans un <li> ?

Mammouth du PHP | 790 Messages

07 janv. 2012, 23:59

je ne pense pas que ça pose de soucis dans l <li> mais tu la sortis de son <ul>...
de cette façon ton texte est dans la continuité du menu...
si non tu peux mettre cette partie dans une div positionné a la suite de menu...
pour le menu, change la valeur de margin-left:
#nav{
margin-top:-9px;
margin-left:88px;
}
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 790 Messages

08 janv. 2012, 00:02

dans ton premier code, ca ne fini pas par <ul> mai< <li> et le </ul> est a ajouté tout a la fin de ton 2eme code, apres </li>
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 188 Messages

08 janv. 2012, 00:07

Ok j'ai modifié les deux (116px pour le margin-left de #nav), mais le problème c'est que là c'est bien pour le pseudo "test" or tous mes membres ne s'appeleront pas "test" et donc si le pseudo ne fait pas 4 caractères ça foire tout ...

Mammouth du PHP | 790 Messages

08 janv. 2012, 00:09

alors refais moi voir l’écran car moi j'ai pas de bdd donc je ne vois pas comme toi
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 188 Messages

08 janv. 2012, 00:10

(J'ai rajouté deux petits "position : fixed;" a .fullheader et a #nav mais ça ne change rien au problème d'espacement bienvenue/bouton)

Eléphant du PHP | 188 Messages

08 janv. 2012, 00:12

Image

Mammouth du PHP | 790 Messages

08 janv. 2012, 00:22

cherche= autour de clear both a appliqué sur ta div nav, je ne sais plus exactement mais elle va empêcher le menu de passer dessous, avant tu enlève le margin-left
si non, essaye ce que ça donne si tu met ton bonjour session dans li aussi puis tu met un style a ce li...

<div id="nav">
                    <ul id="menu" >
                         <li style="......">
                               Bienvenue <?php echo $_SESSION['pseudo']; ?>!
                         </li>
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 790 Messages

08 janv. 2012, 14:33

bon, tout ça ce n'est pas la solution, tu peut faire autrement !!!
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 188 Messages

08 janv. 2012, 18:28

le clear: both ne fonctionne pas; tu veux que j'essaye de mettre le bienvenue dans un <li> ou alors tu as autre chose apparement ?

Mammouth du PHP | 790 Messages

08 janv. 2012, 20:06

tu en es ou la, fait voir une image
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.