Jeudi le 4 décembre 2008 . 13:37

CSS max-width et IE

Tags: ,
Lundi, 12 mars 2007, 14:55
Cet article a été publié dans Développement et a 2 commentaires à ce jour .

Comme vous le savez probablement, Internet Explorer 6 ne supporte pas plusieurs des propriétés du CSS 2. C’est le cas notamment de la propriété max-width (et min-width). Heureusement, IE permet de spécifier des propriétés à l’aide de JavaScript directement dans le CSS en utilisant la fonction expression().

Ainsi, supposons qu’on veut une largeur maximale, on peut utiliser le code suivant. La propriété max-width sera utilisée par les navigateurs compatibles css2 et ignoreront la propriété contenant la fonction expression(). L’inverse se produira avec ie. Le code javascript pour la propriété width se traduit: si la largeur du body est plus grande que 900, mettre la largeur du selecteur à 900px, sinon laisser le sélecteur se dimensionner automatiquement.

#selecteurCss {
    max-width:900px;
    width:expression(document.body.clientWidth > 900 ? "900px": "auto" );
}

Par ailleurs, cette fonctionnalité devient également utile si on l’utilise en combinaison avec une largeur en pourcentage. Par exemple, le code suivant permet de spécifier une largeur de 75% jusqu’à un maximum de 500px.

#selecteurCss {
    /* Les 2 lignes suivante seront utilisées par les navigateurs compatibles css2 */
    max-width: 500px;
    width: 75%;
    /* celle-ci sera utilisée par ie6 et moins, et remplacera la ligne précédente */
    width:expression(document.body.clientWidth > 500 ? "500px" : "75%" );
}

C’est bien beau tout ça, mais cette méthode n’est évidemment pas valide selon les normes. La validation devient toutefois possible en plaçant le code spécifique à ie dans une feuille css à part et uniquement accessible à ie. Ainsi dans la page, on insère le code suivant qui ne sera lu que par ie6 et moins (car max-width est supposé être fonctionnel dans ie7).

<!--[if lt IE 7]>
    <style type="text/css" media="all">@import "ie.css";</style>
<![endif]-->

En reprenant l’exemple précédent, dans votre feuille de style de base, vous auriez:

#selecteurCss {
    /* Les 2 lignes suivante seront utilisées par les navigateurs compatibles css2 */
    max-width: 500px;
    width: 75%;
}

Et dans ie.css:

* html #selecteurCss {
    width:expression(document.body.clientWidth > 500 ? "500px" : "75%" );
}

Voilà, même si ce n’est pas la plus jolie des méthodes, elle fonctionne et n’empêche pas votre code css de valider. Si vous avez une meilleure façon d’émuler le max-width dans ie6, laissez-le nous savoir dans les commentaires.

Vous pouvez laisser une réponse , ou faire un trackback depuis votre propre site .

2 Commentaires sur “CSS max-width et IE”

  1. pascal
    2007.11.01 04:38

    Hello,
    Je viens de tester … j’ai besoin que mes images ne dépasse pas 500px de large. Voici donc mon code dans ie.css :
    img{
    width:expression(document.body.clientWidth > 500? “500px”: “auto”);
    }
    … Bah toutes mes images font 500px de large !!

  2. luka
    2008.07.15 05:04

    Pascal j’ai le même problème que toi… IE 6 devrait être interdit maintenant!! Est ce que tu as trouvé le problème?

Laisser un commentaire