Vendredi le 19 mars 2010 . 10:18

CSS max-width et IE

Tags: ,
Lundi, 12 mars 2007, 14:55
Cet article a été publié dans Développement et a 5 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 .

5 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?

  3. Raymond
    2009.02.18 06:35

    J’ai le même problème, quelqu’un aurait il une solution ?

    Merci

  4. matizha
    2009.02.26 13:15

    @pascal, luka et Raymond

    le code mentionné dans cet article utilise la largeur du body pour déterminer la largeur maximal du sélecteur css. si vous désirez la grandeur du sélecteur css lui-même comme valeur de comparaison, le code suivant devrait fonctionner (je ne l’ai pas testé par contre):

    img {
    max-width: 500px;
    width: expression(this.width > 500 ? “500px” : “auto”);
    }

  5. LuCiFeR
    2009.12.07 05:04

    Bonjour,
    chez moi j’ai du utiliser “true” à la place de “auto” sinon IE6 plante ou rame trop( avec l’utilisation de this.width).

Laisser un commentaire