28216 sujets

CSS et mise en forme, CSS3

Bonjour,
D'abord un petit mot sur le contexte de mon probleme. Je cree des listes avec php en interrogeant une base MySql. Les differents termes d'une liste donnee appartiennent a plusieurs categories que je choisis d'identifier par un code couleur. Pour faire joli et grace au css chaque element de ma liste est par defaut ecrit en noir avec un fond de couleur et j'inverse lorsque la souris passe sur le lien (fond noir et texte en couleur). Pour faire encore plus joli je voudrais arrondir les angles (au sens propre) de chacun de mes liens. Je vais donc ajouter 4 images qui seront des "cache-coins" en gif utilisables quel que soit la couleur-code du lien.

Voici le code HTML (pour le test je fais abstraction de php/mysql)

<div id="zone01">
<ul>
<li class="color1"><div class="corner1"></div><div class="corner2"></div><a href="#">LIEN 1_________________</a></li>
<li class="color1"><div class="corner1"></div><div class="corner2"></div><a href="#">LIEN 2_________________</a></li>
<li class="color2"><div class="corner1"></div><div class="corner2"></div><a href="#">LIEN 3_________________</a></li>
</ul>
</div>


... et le CSS (ici je considere 2 codes-couleur > color1 et color2)

<style type="text/css">
ul,li {list-style-type:none; margin:0; padding:0}
a { text-decoration: none;}

#zone01 {
position: absolute;
top: 50px;
left: 50px;
height:500px;
width:800px;
z-index:1;
background:#000000;
}

#zone01 a { 
color:#000000; font:30px; padding:10px; display:block; 
z-index:1;
background: url("imageLB.gif") no-repeat left bottom; }

#zone01 a.:hover {background: #000000; }

#zone01 li {
width:600px;
margin:5px;
}

#zone01 li.color1 {
background: #0000FF url("imageRB.gif") no-repeat right bottom;
}
#zone01 li.color1 a:hover{
color:#0000FF;
}

#zone01 li.color2 {
background: #FF0000 url("imageRB.gif") no-repeat right bottom;
}
#zone01 li.color2 a:hover{
color: #FF0000;
}

.corner1 {
position relative;
background: url("imageLT.gif") no-repeat left top;
z-index:100;
}
.corner2 {
position absolute;
background: url("imageRT.gif") no-repeat right top;
z-index:100;
}
</style>


Premierement je ne sais pas si c'est la meilleur methode mais elle fonctionne sous IE (ce qui m'interesse pour l'instant)

Le probleme est qu'avec ce code le lien n'est efficace que sur le texte.
Si je rajoute un width:100% dans la definition de mon "#zone01 a", j'ai le lien sur tout le bloc definit par les balises "li" mais je ne vois plus les 2 images que j'insere avec les classes corner1 et corner2.
j'ai essaye de jour sur les positions (relative, absolute) et les z-index mais en vain.
Pourriez-vous m'aider soit dans la definition du lien soit dans le positonnement des images soit... en me disant de tout refaire Smiley cligne ...
Modifié le 19 Nov 2004 - 14:45
Florent a écrit :

Premierement je ne sais pas si c'est la meilleur methode mais elle fonctionne sous IE (ce qui m'interesse pour l'instant)

Le probleme est...


Ben là ! Ça fonctionne ou pas ?
Deja, tu as un point là
a.:hover{}

Je sais pa ce qu'il fait là, et ensuite tu atribue un background a un lien, qui bon, il me semble est une balise inline, donc qui ne peux pas avoir de background !
Donc, il faut la passer en block :
a{
display: block;
}


Sinon, et bien comme dans le "posteur" précédant, je sais pas s'il ya un rpoblème, tout du moins où ? Smiley biggrin Smiley langue
Euh, un élément peut recevoir une image de fond Smiley cligne
Tout comme une couleur de fond d'ailleur.

display: block ;

Ca permet de passer l'élément en mode block.
Merci pour ces premieres reponses.
Je vais essayer de clarifier mon probleme. Avec le code ci dessus, chaque balise <li> definit une zone de longueur fixe (600px pour l'exemple) avec un texte cliquable et 4 images "cache-coin" au 4 coins de la zone. Lorsque j'active le lien, le background est modifiee pour toute cette zone de 600px (c'est ce que je veux) mais ce lien n'est actif que sur le texte (qui ne remplit pas toute la zone) et pas sur toute la longueur comme je le voudrais.
Actuellement j'ai deja un display block:

#zone01 a { display:block; 

Si j'ajoute :

#zone01 a { display:block; width:100%;

Je resoud le probleme de la surface cliquable (ca marche sur toute la longueur)
MAIS (attention c'est la le vrai probleme Smiley biggrin )
je ne vois plus du tout les deux images "cache-coins" definie par

.corner1 {
background: url("imageLT.gif") no-repeat left top;
z-index:100;
}
.corner2 {
background: url("imageRT.gif") no-repeat right top;
z-index:2;
}


En esperant avoir ete plus clair (mais j'ai comme un doute...)
ElMoustiko a écrit :
Euh, un élément peut recevoir une image de fond Smiley cligne
Tout comme une couleur de fond d'ailleur.

display: block ;

Ca permet de passer l'élément en mode block.


A bon, il me semblait que seul les éléments en block pouvait recevoir une image de fond, ou un fond tout court !
Enfin en tout cas, il faut un display: block; pour mettre des tailles ! C'est bien ça ?!
Administrateur
DarkNeo a écrit :


A bon, il me semblait que seul les éléments en block pouvait recevoir une image de fond, ou un fond tout court !

Non non, tu peux tester simplement :
<a href="#" style="background: yellow">toto</a>


DarkNeo a écrit :

Enfin en tout cas, il faut un display: block; pour mettre des tailles ! C'est bien ça ?!

C'est un tout petit peu plus complexe (car <img> a bien des dimensions), mais dans l'ensemble c'est ça :

Les éléments "remplacés" sont donc les seuls qui possèdent des dimensions (height, width) par défaut. Il s'agit des éléments IMG, INPUT, TEXTAREA, SELECT, et OBJECT.

Pour tous les autres éléments en-ligne (cf ici et ici ) :
- The 'width' property does not apply. A specified value of 'auto' for 'left', 'right', 'margin-left' or 'margin-right' becomes a computed value of '0'.
- The 'height' property doesn't apply, but the height of the box is given by the 'line-height' property.
Raphael a écrit :

Non non, tu peux tester simplement :
<a href="#" style="background: yellow">toto</a>



C'est un tout petit peu plus complexe (car <img> a bien des dimensions), mais dans l'ensemble c'est ça :

Les éléments "remplacés" sont donc les seuls qui possèdent des dimensions (height, width) par défaut. Il s'agit des éléments IMG, INPUT, TEXTAREA, SELECT, et OBJECT.

Pour tous les autres éléments en-ligne (cf ici et ici ) :
- The 'width' property does not apply. A specified value of 'auto' for 'left', 'right', 'margin-left' or 'margin-right' becomes a computed value of '0'.
- The 'height' property doesn't apply, but the height of the box is given by the 'line-height' property.


Merci pour ces eclaircirssements ! En fait quand je regarde bien, dans mes fichiers CSS persos, il y a en vérité plein de truc que je pourrais supprimer Smiley langue ! C'est un de mes gros defauts
Smiley langue
Bon, j'ai resolu mon probleme (y'a que moi qui bosse ici !! Smiley biggrin Smiley biggrin )
J'ai remplace ca :

<li class="color1"><div class="corner1"></div><div class="corner2"></div><a href="#">LIEN 1</a></li>

par :

<li class="color1"><span class="corner3"><span class="corner4"><a href="#">LIEN 1</a></span></span></li>

avec

ul,li {list-style-type:none; margin:0; padding:0}
a { text-decoration: none;
 }

#zone01 {
position: absolute; top: 50px; left: 50px; height:500px; width:800px;
z-index:1;
background:#000000;
}

#zone01 a { 
color:#000000; font:30px; padding:10px; display:block; width:100%;
background: url("imageLB.gif") no-repeat left bottom;}

#zone01 a:hover {background: #000000;}

#zone01 li {
width:600px; margin:5px;
}

#zone01 li.color1 {
background: #0000FF url("imageRB.gif") no-repeat right bottom;
}
#zone01 li.color1 a:hover{
color:#0000FF;
}

#zone01 li.color2 {
background: #FF0000 url("imageRB.gif") no-repeat right bottom;
}
#zone01 li.color2 a:hover, #zone01 li:hover {
color: #FF0000;
}
.corner3 {
background: url("imageLT.gif") no-repeat left top;
}
.corner4 {
background: url("imageRT.gif") no-repeat right top;
}


Merci (quand meme Smiley cligne ) a ce site et au forum, j'ai appris plein de petits trucs.
Administrateur
Ouch ça en fait des <span> Smiley ohwell
En tout cas, si ton problème est réglé, n'oublie pas de rajouter un [Résolu] en éditant le titre de ton sujet Smiley cligne
Raphael a écrit :
Ouch ça en fait des <span> Smiley ohwell

J'admets que ca manque d'elegance. Outre l'esthetique ce genre d'imbrications peut-il poser des problemes ? (conflits...)
Florent a écrit :

J'admets que ca manque d'elegance. Outre l'esthetique ce genre d'imbrications peut-il poser des problemes ? (conflits...)


Je ne pense pas mais c'est bien le premier cas de <span> imbriqué que je rencontre.