28220 sujets

CSS et mise en forme, CSS3

J'essaie d'utiliser les commentaires conditionnels pour résoudre le problème de transparence sous IE, mais ça n'a pas l'air de marcher. Sous FF et IE, il rentre dans les 2 conditions.

<!–-[if !IE]>
			<link rel="stylesheet" type="text/css" href="script/style.css" />
		<![endif]-–>
		<!–-[if IE]>
			<link rel="stylesheet" type="text/css" href="script/ie_style.css" />
		<![endif]-–>

Smiley confus Smiley confused
Modifié par Trunks_ (27 Dec 2005 - 20:38)
Le <!--[if !IE]--> ne sert rien. Seul IE interprète ces commentaires et donc cela équivaut à dire à IE, ignore çà, tout en sachant que les autres navigateurs l'ignoreront aussi...

Donc

<link rel="stylesheet" type="text/css" href="script/style.css" />
<!–-[if IE]>
<link rel="stylesheet" type="text/css" href="script/ie_style.css" />
<![ endif]-–>


Avec endif sans espace (je le met car sinon le forum croit que c'est une image).
Fait un petit tour dans les sources de http://radio86.se/
Bonsoir

matgorb a écrit :
Le <!--[if !IE]--> ne sert rien.



Oh que si, il sert à quelque-chose ! Smiley cligne

Il permet de servir une feuille de style à tous les navigateurs sauf IE Windows, qui ne lira que la seconde CSS.

Il faut juste, pour cela, faire attention à la syntaxe exacte, qui est :
<!--[ if !IE]> <-->
   ... ici le code qui ne sera pas lu par IE, mais qui sera lu par tous les autres navigateurs
<!--> <![ endif]-->


(en supprimant l'espace après le crochet ouvrant [ )

Explication: les commentaires SGML (<--> et <!-->) font que les navigateurs (sauf IE Win) ignorent les deux lignes de commentaires conditionnels, mais pas ce qui est placé entre Smiley cligne
Modifié par Laurent Denis (27 Dec 2005 - 19:38)
Pour être simple une déclaration de commentaires SGML commence par <! suivie de 0 ou plus commentaires suivie par >. Un commentaire commence et fini par « -- » et ne peut pas contenir de « -- ».
Les commentaires suivant sont donc légaux:
<!-- Hello --> (ouverture, 1 commentaire, fermeture)
<!-- Hello -- -- Hello--> (ouverture, 1 commentaire, 1 autre commentaire, fermeture)
<!----> (ouverture, 1 commentaire vide, fermeture)
<!------ Hello --> (ouverture, 1 commentaire vide, 1 commentaire, fermeture)
<!>(ouverture, fermeture)

Mais pas de <--> ni de <!-->

Ensuite si on fait du XHTML, c'est XML, pas SGML.

Le if !IE est utilisé pour faire apparaître du code dans une version de IE, mais pas dans une autre. Par exemple :

<!--[if !IE 5]>
<p>Welcome to any incremental version of Internet Explorer 6!</p>
<![ endif]-->

Le paragraphe apparaîtra seulement dans IE 6 et pas dans IE 5 ou tout autre navigateur autre qu'IE qui ne voit qu'un commentaire.

Les commentaires conditionnels ne sont déjà pas standard, on ne va pas non plus commencer à hacker le hack!
Leur utilité est qu'ils sont avant tout des commentaires standards qui sont toujours vu comme tels, sauf par IE à qui ils sont destinés et qui permettent de le « corriger ».
Maintenant, ce que Trunks veut faire ce fait très bien grâce à la cascade, je le fais, et tout cela reste standard!
Modifié par matgorb (27 Dec 2005 - 20:38)
<!-- [ if !IE]> <--> = <!-- Hello -->

et :

<!--> <![ endif]--> = <!-- Hello -->

Les commentaires conditionnels ne sont pas un hack, justement. Et ceci non plus Smiley cligne
Autant pour moi. Cela doit fonctionner, mais je persiste à penser que ce n'est qu'un hack.
La seconde explication est correct du point de vue SGML.
Modifié par matgorb (27 Dec 2005 - 20:43)
matgorb a écrit :
je persiste à penser que ce n'est qu'un hack.


Enorme différence des commentaires conditionnels avec un hack : il ne s'agit pas d'exploiter un bug ou un défaut d'implémentation. Il s'agit d'une fonctionnalité documentée, et gérée de version en version d'IE.

Les hacks proprement dit n'ont aucune garantie de pérennité (voir le * html pour IE7, par exemple). Les commentaires conditionnels sont pérennes (à condition, évidemment, d'éviter les if gte IE 5 et de ne viser que les versions au comportement connu, avec des if lte IE 6. De ce point de vue, le site http://radio86.se/ mentionné ci-dessus est en fait un exemple à ne pas suivre).

Enfin, une remarque : il s'agit évidemment ici de XHTML traité en tant que HTML. S'il s'agissait de XHTML traité en tant que XML, IE y est hors-jeu et tout ceci n'y a pas lieu d'être Smiley cligne
Modifié par Laurent Denis (27 Dec 2005 - 21:28)
Je ne parle pas des commentaires en général, mais de l'utilisation qui en est faite ici pour « cacher » du code à IE.
Malgré tout je dois dire que c'est assez malin, même si je n'en ai jamais besoin.
Laurent Denis, tu es une encyclopédie à toi seul ! Smiley ravi
Impressionnantes toutes tes connaissances poussées en ce qui concerne le développement web !

Bravo et merci pour ton aide précieuse sur ce site Smiley smile
Comme j'ai rien d'autre à faire et que je me suis laissé bluffer, j'ai fait qq tests et :

<!--[ if !IE]> <-->

   ... ici le code qui ne sera pas lu par IE, mais qui sera lu par tous les autres navigateurs

<!--> <![ endif]-->

Peut se simplifier en suivant les règles SGML en (enfin je crois):

<!--[ if !IE]>-->

   ... ici le code qui ne sera pas lu par IE, mais qui sera lu par tous les autres navigateurs

<!--<![ endif]-->

Modifié par matgorb (27 Dec 2005 - 23:10)