|
Visitez quelques sites des membres d'Eklesia.net |
Niveau avancé
> Comment faire ? > CSS
Fixer la largeur minimum et maximum d’une page sous Internet Explorer
Internet Explorer (IE/win) ne reconnaît pas les propriétés CSS min-width et max-width. Il est pourtant possible en utilisant une "propriété dynamique" (une fonction spécifique à IE, ce que nous aurions souhaité éviter) d’obtenir un résultat voisin et, dans l’exemple que nous allons voir, d’encadrer une mise en page fluide entre deux limites au moyen d’une expression du type : Internet Explorer (IE) ne gère pas les propriétés min-width et max-width telles que définies dans la "spécification CSS2" éditée par le W3C. Cela est particulièrement gênant pour les concepteurs de pages Web dans un univers marqué par la diversité croissante de la définition des écrans utilisés par les internautes :
Une réponse peut être une mise en page fluide (la largeur de la page est définie en pourcentage, par exemple 100%, de l’espace disponible dans la fenêtre de son navigateur). Mais, sans limite supérieure, les pages peuvent s’étirer de manière excessive et perdrent en lisibilité. De même, sans limite inférieure, ces pages "fluides" peuvent "s’écraser" et perdre en cohérence. Face à ce constat, une réponse intéressante, que nous allons explorer plus avant ici, peut consister à proposer :
Pour obtenir une telle mise en page, le premier élement inclu dans le body sera une div#page : Cette division se verra associer les règles suivantes dans la feuille de style : Bien, mais le concepteur Web bute alors sur le fait que ce "grand dadais" d’Internet Explorer, toutes versions confondues, ne supporte pas ces propriétés min-width et max-width. Une solution propriétaire pour IEEn fait, une solution propriétaire existe. Elle permet à Internet Explorer d’obtenir un résultat analogue. Un étudiant danois, Svend Tofte, a popularisé cette piste dans un article intitulé "max-width in Internet Explorer" (en). Il recourt à des instructions propres à Internet Explorer appelées "propriétés dynamiques" (en). Celles-ci sont construites comme suit :
De plus, ces informations :
A la fin de son article, sous le titre "With pixels (easier !)", Svend Tofte prend l’exemple suivant : max-width: 800px;Il indique de plus une seconde expression permettant de définir une largeur minimale : min-width: 800px;Première tentative : cumuler ces 2 expressionsPour définir à la fois un minimum (740px dans mon exemple) et un maximum (950px) à la largeur de ma div#page, une voie serait de cumuler ces 2 expressions : Mais, à travers mes tests, le cumul de ces 2 mentions ne se passe pas bien du tout. Deux problèmes apparaissent :
Une solution : regrouper les 2 expressions en une seuleEn regardant le fonctionnement de l’expression Jscript, une solution simple se dessine. La syntaxe JavaScript utilisée étant du type "condition ? alors : sinon", je vais donc dire à IE :
Soit : En fait, je pose un compromis : sous IE, la largeur de div#page correspondra soit à la valeur définie comme min-width (ici 740 pixels), soit à la valeur en pixels définie comme max-width (ici 950 pixels). Entre ces 2 limites, IE n’évolue pas progressivement, il bascule brusquement d’une largeur à l’autre lorsque j’agrandis ma fernêtre (ou lorsque je la réduis et demande de recharger la page). Malgré ce petit inconvénient, cette solution semble vraiment intéressante dans le contexte évoqué plus haut, marqué par la variété croissante des définitions (et donc des largeurs) des écrans utilisés par les internautes. Quelques précisions complémentairesL’instruction utilisée étant propriétaire, il est souhaitable de l’appeler depuis un commentaire conditionnel. Par exemple, dans la section "head" de sa page HTML, on trouvera quelque chose comme : Vous noterez que j’ai limité l’effet de cette propriété au "media écran", de manière à ne pas perturber l’impression (pour la même raison, j’ai placé à cet endroit la mention text-align : center ; nécessaire à IE 5/win pour centrer div#page). Dans la même perspective, une feuille de style d’impression (non indiquée ci-dessous) pourrait contenir la règle : #page margin : 0 ; afin que la valeur auto, appliquée ici aux marges gauche et droite, ne perturbe pas l’impression par ce "grand dadais" d’IE. Récapitulatif du code utiliséDieu vous bénisse ! [1] "For scripting, a dynamic property can be any legal JScript or Microsoft Visual Basic Scripting Edition (VBScript) statement" [2] attention, si vous appliquez cette propriété a un autre élément, il importe de s’assurer que la propriété, elle aussi totalement spécifique, haslayout correspondante est positionnée à "true", sinon clientWidth retournera une valeur nulle, comme indiquée sur l’article on having layout traduit et annoté ici Avoir le layout - Le concept de hasLayout dans IE/Win Dès lors, l’élément considéré aura toujours la largeur minimale. Ici, le problème ne se pose pas, "BODY, IMG, INPUT, TABLE and TD elements always have layout".
24 février 2006
|