28173 sujets

CSS et mise en forme, CSS3

Bonjour, voici mon code :

#container {
position: relative;
float:left;
background-image: url(images/icon_1.jpg);
background-repeat: no-repeat;
background-position: 15px 0px;
}

#container a.gallery span {
position:absolute;
width:1px;
height:1px;
top:-1px;
left:-1px;
overflow:hidden;
}

#container ul {
list-style-type: none;
margin: 163px 0 0 0;
padding: 0px;
float: left;
}

#container a.gallery:hover span {
position:absolute;
width:142px;
height:139px;
top:0px;
left:15px;
}

#container a.gallery, #container a.gallery:visited {
display:block;
height:27px;
width:159px;
color:#BEBFB3;
text-decoration:none;
text-align:left;
background-image: url(images/square.gif);
background-repeat: no-repeat;
padding-left: 30px;
line-height: 27px;
font-size: 90%;
}


Et voici le HTML

<div id="container">
<ul>
<li>
<a class="gallery" href="news.php">NEWS
<span><img src="images/icon_2.jpg"/></span>
</a>
</li>
<li>
<a class="gallery" href="aboutus.php">ABOUT US
<span><img src="images/icon_1.jpg"/></span>
</a>
</li>
<li>
<a class="gallery" href="products.php">PRODUCTS
<span><img src="images/icon_4.jpg"/></span>
</a>
</li>
<li>
<a class="gallery" href="contact.php">CONTACT US
<span><img src="images/icon_3.jpg"/></span>
</a>
</li>
</ul>
</div> 


Voici mon problème :

J'ai un menu, et lorsqu'on survolle le menu il y a l'icone au dessus du menu qui change vers l'icone qu'aura la nouvelle page.

Pour les personnes qui n'ont pas de souris, firefox met une bordure de 2 pixels à gauche et en haut de mes icones.

Comme vous pouvez le voir dans mon code, j'ai l'icone de la page sur lequel je suis actuellement (icon_1.jpg) qui est déclaré en arrière plan sans répétitions et placé verticalement (15px) et horizontalement (0px)

Les icones qui apparaissent lors du survol sont déclaré au départ comme 1px par 1px avec overflow: none; pour qu'on ne les voient pas. Puis lors du survol elles reprennent leur taille normale et se placent par dessus l'icone de la page ouverte.

Hors voici mon problème : Pour les icones qui s'affichent lors du survol des differents éléments du menu firefox rajoute une bordure à gauche et en haut, opéra ajoute une bordure mois épaisse et IE pas de tout.

Je peux colorier la bordure de la couleur de l'arrière plan (avec color: couleur ) mais l'icone du survol se décale toujours par rapport à l'icone d'origine qui est positioné verticalement et horizontalement.

J'ai essayé plusieurs méthodes pour dire à firefox de ne pas afficher cette bordure... en déclarant #container a.gallery:hover span ave border: 0; et padding: 0; sans resultat, ensuite j'ai essayé avec outline:none; toujours rien...

Merci par avance,

Richard [code]
Modifié par wonker (24 Jun 2007 - 19:30)
Bonjour,

Pour commencer :

Pour conserver une bonne lisibilité des messages sur le forum, il est demandé d'utiliser les balises code pour présenter le code source des exemples.
Pourrais-tu éditer ton message pour te conformer à cette règle de mise en forme ?
Merci d'avance.

Pour ton problème :

J'ai du mal à visualiser de quoi il s'agit exactement. Ce serait plus simple avec une page visible en ligne. Avec le code que tu donnes, je ne pourrais même pas recréer la page en local, vu que je n'ai pas les images...
Hum... (<taquin>Ah, ces petits jeunes. Ils sont très bons, mais ils n'ont pas encore compris que la plupart du temps, ce n'est pas un problème de solution technique, mais de choix de techniqie erroné Smiley cligne </> )

Y a-t-il quelque-chose qui nécessite ce mécanisme curieux de superposition de l'icône spécifique au :hover (gérée en image HTML) sur l'icône par défaut (gérée, elle, en CSS) ?

Parce que sinon, tant qu'on est à gérer le code HTML de chaque itam du menu, il est beaucoup plus simple de lui adjoindre un id et de s'en servir pour modifier au :hover l'icône CSS...

(et là, paf! j'ai lu trop vite, et ça n'est absolument pas la question Smiley ravi )
Modifié par Laurent Denis (24 Jun 2007 - 16:54)
Bon je ne peux pas pour l'instant poster de lien,ce n'est pas encore en ligne, je vais essayer de vous faire une demonstration pour que vous ayez une idée ce soir ou demain matin.

Sinon j'utilise cette méthode pour ne pas devoir utiliser du javascript pour faire un rollover à distance. Sur beaucoup de sites ils disent que c'est beaucoup mieux en CSS mais si vous avez une autre solution pour faire un rollover à distance en CSS je suis prenneur !

Je vous ai limité le code au minimum pour que ce soit facile à visualiser, mais je vais essayer de vous le décrire.

Une colonne, avec une icone centre horizontalement et en dessous de l'icone le menu.

Lorsque on passe la souris sur chaque element du menu l'icone change.

Cependant l'icone étant un <span> contenant une image firefox lui met un contour, lors du survol du menu... il doit bien avoir une commande simple pour dire à firefox de ne pas mettre de bordure, j'ai aussi essayé text-decoration: none sans résultat ...
wonker a écrit :
Sinon j'utilise cette méthode pour ne pas devoir utiliser du javascript pour faire un rollover à distance.

Il n'y a pas de raison particulière d'éviter Javascript pour ce genre d'effets... sauf une ignorance totale de Javascript, qui s'excuse facilement pour un projet perso en amateur, mais moins pour une réalisation pro. Smiley cligne

Cependant, s'il s'agit d'ajouter une image décorative (ou même une image significative de type pictogramme) en plus d'un texte que l'on laissera affiché, utiliser une image de fond en CSS n'est pas problématique. On privilégiera par contre le rollover Javascript lorsque l'information principale est contenue par l'image elle-même (les techniques de remplacement d'image consistant à cacher du texte via CSS pour afficher à la place une image de fond étant problématiques pour l'accessibilité).

Donc, si tu gardes le texte visible mais veut changer une texture de fond, voire une icône ou un pictogramme qui accompagne l'image, gère le tout avec des images de fond en CSS.

<ul id="navigation">
	<li id="lien-news"><a href="news.php">News</a></li>
	<li id="lien-aboutus"><a class="gallery" href="aboutus.php">About us</a></li>
	<li id="lien-products"><a class="gallery" href="products.php">Products</a></li>
	<li id="lien-contact"><a class="gallery" href="contact.php">Contact us</a></li>
</ul>

Reste alors à placer les images de fond en CSS, directement comme image de fond de chacun des liens. Penses à utiliser les padding pour ménager de l'espace pour l'image de fond si elle ne doit pas être recouverte par le texte. Penses aussi à bien utiliser les propriétés de gestion des images de fond comme background-image, background-repeat, background-position.

Nota : on peut utiliser un sélecteur de type ul#navigation li#lien-news a pour cibler le lien pointant vers les News.
Nota 2 : j'ai passé les intitulés des liens en bas de casse (minuscules). On pourra les afficher en majuscules via la propriété text-transform: capitalize. Ce qui laisse plus de libertés pour une mise en forme différente du texte.
bon si je comprends bien ce que tu veux me dire, alors javascript pour les réalisations pro et css pour les réalisations perso ...

Moi la raison pour avoir évité le javascript c'etait justement pour faire plus pro, pas par méconnaissance du langage mais parceque généralement sur le net les gens disent que c'est mieux de faire ainsi et aussi il y a qeulques personnes, rares je sais mais ils éxistent qui désactivent le javascript.

De plus ma question n'étant pas de pouvoir modifier l'image d'arrière plan, si tu regardes bien le code les images des icones ne sont pas en arrière plan, et que j'utilises effictivement des images nommés "square.gif" en arrière plan des liens du menu.

Mais de plus en plus je pense que je vais éviter de me prendre la tête et de tout faire en javascript.
Bon, je crois que tu as un peu tout compris de travers, là...

wonker a écrit :
alors javascript pour les réalisations pro et css pour les réalisations perso ...

Non. Javascript quand l'utilisation de Javascript donne un résultat de meilleure qualité, et CSS quand l'utilisation de CSS donne un résultat de meilleure qualité. Ce qui veut dire qu'il faut savoir utiliser à bon escient ces deux langages, ce qui demande pas mal de connaissances... donc pour un projet perso par quelqu'un qui n'est pas un professionnel du Web et qui ne souhaite pas apprendre deux langages, on peut accepter plus facilement certaines utilisations abusives de l'un ou l'autre langage.

wonker a écrit :
Moi la raison pour avoir évité le javascript c'etait justement pour faire plus pro, pas par méconnaissance du langage mais parceque généralement sur le net les gens disent que c'est mieux de faire ainsi

Ni Javascript ni CSS ne sont à bannir ou à privilégier systématiquement. C'est vrai que l'on peut difficilement faire un site sans CSS alors que l'on peut plus facilement se passer de Javascript (notamment pour un site rédactionnel... plus difficilement pour une application en ligne), mais cela ne signifie pas que les CSS sont « meilleurs ». Les deux langages ont des objectifs et des possibilités très différents. Il faut donc utiliser chacun à bon escient.

wonker a écrit :
et aussi il y a qeulques personnes, rares je sais mais ils éxistent qui désactivent le javascript.

De même qu'il y a des personnes qui désactivent tout ou partie des CSS. Smiley cligne

wonker a écrit :
si tu regardes bien le code les images des icones ne sont pas en arrière plan

Le fait qu'elles ne soient pas en arrière-plan dans le code que tu fournis ne signifie pas que l'on ne peut pas faire autrement, si ?
Modifié par Florent V. (25 Jun 2007 - 00:54)
merci pour ta réponse, biensur qu'on peut faire autrement. Sauf que là, en css je ne vois pas comment, pour le lien j'avais deja une image en arrière plan au niveau du lien, c'est pour cela que l'autre image n'était pas en arrière plan.

J'ai finalement opté pour du javascript, ma page ne passera plus le test W3C strict mais devrait bien passer le transitional.
Modifié par wonker (25 Jun 2007 - 11:01)
Bonjour,

a écrit :
J'ai finalement opté pour du javascript, ma page ne passera plus le test W3C strict mais devrait bien passer le transitional.


Juste une question en passant :

En quoi le javascript empêcherais de valider du ??? (du quoi d'ailleurs) Strict ?

Jean-Pierre
W3C définit les normes à suivre pour tout code CSS.

Son validateur est ici : http://validator.w3.org/

Un site qui respecte tous les normes W3C en strict a plus de chances d'être bien affiché sur un maximum de navigateurs.

Le pluspart des sites se contentent de la norme XHTML 1.0 Transitional, qui est moins pointilleux que la norme XHTML 1.0 Strict.

La norme W3C strict ne permet pas par exemple de nommer les differents éléments, (formulaires images etc...) donc a mon avis, mais je ne l'ai pas encore testé, la proprieté "name" attribué à une image risque de ne pas passer.

Mais c'est pas grave la norme W3C transitional me suffit.
wonker a écrit :

Un site qui respecte tous les normes W3C en strict a plus de chances d'être bien affiché sur un maximum de navigateurs.


Non, pas forcément; cela tiendra à des types d'erreurs très précis, en tout petit nombre.

wonker a écrit :

Le pluspart des sites se contentent de la norme XHTML 1.0 Transitional, qui est moins pointilleux que la norme XHTML 1.0 Strict.


Non plus. XHTML transitional est tout aussi binaire qu'XHTML strict. Le stock de balises et une règle d'imbrication diffèrent, ce qui n'a rien à voir.
Modifié par Laurent Denis (25 Jun 2007 - 12:14)
wonker a écrit :
La norme W3C strict ne permet pas par exemple de nommer les differents éléments, (formulaires images etc...) donc a mon avis, mais je ne l'ai pas encore testé, la proprieté "name" attribué à une image risque de ne pas passer.

L'attribut id, par contre, passe bien. Et en Javascript on a aussi getElementById().

Pour le pas possible en CSS : pour avoir deux images de fond superposées en CSS, il suffit d'avoir deux éléments imbriqués. Ce qu'on a par exemple dans le code suivant :
<li><a href="...">Bla bla</a></li>

background sur le li, et background + padding sur le a.