<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  <head>
    <title>Openweb.eu.org - Styles auteur, utilisateur et agent utilisateur : 3 raisons de lâcher prise sur votre design</title>
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
    <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
    <meta name="DC.Language" scheme="RFC3066" content="fr" />
    <meta name="DC.Identifier" content="lacher_prise" />
    <meta name="DC.Creator" content="Laurent Denis" />
    <meta name="DC.Date.created" scheme="W3CDTF" content="2005-03-21" />
    <meta name="DC.Date.modified" scheme="W3CDTF" content="2005-03-21" />
    <meta name="DC.Subject" content="debutant, expert, css, mise_en_page" />
  </head>
  <body>
    <h1>Styles auteur, utilisateur et agent utilisateur : 3 raisons de lâcher prise sur votre design</h1>
    <ul>
      <li>
        <strong>Profil :</strong> <a href="/debutant/">Débutant</a>, <a href="/expert/">Expert</a>
      </li>
      <li>
        <strong>Technologie :</strong> <a href="/css/">CSS</a>
      </li>
      <li>
        <strong>Thème :</strong> <a href="/mise_en_page/">Mise en page</a>
      </li>
      <li>
        <strong>Auteur :</strong> Laurent Denis</li>
      <li>
        <strong>Mise à jour :</strong> 21/03/2005</li>
    </ul>
    <h2>En bref</h2>
    <p>Le rendu final d'une page Web n'est pas le produit figé des règles de présentation fixée par son auteur : il résulte de la combinaison des 3 sources de styles de l'auteur, de l'agent utilisateur et de l'utilisateur lui-même.</p>
    <hr />
    <p>Les règles de cascade <acronym title="Cascading Style Sheets" lang="en">CSS</acronym> gèrent le rendu final d'une page Web en fonction de <a href="http://www.w3.org/TR/CSS21/cascade.html#cascade">trois sources simultanées</a> : les styles <acronym>CSS</acronym> auteur accompagnant le document, mais aussi les styles par défaut de l'agent utilisateur et les éventuels styles propres à chaque utilisateur. Dans cette combinaison, les styles par défaut du navigateur ont le poids le plus faible, tandis que ceux de l'utilisateur ont le poids le plus fort. Dans tous les cas, l'auteur devra tenir compte de ces styles par défaut du navigateur, et plus fortement encore des éventuels styles utilisateurs.</p>
    <h3>Les styles par défaut de l'agent utilisateur</h3>
    <p>Chaque navigateur applique aux pages Web un ensemble de styles par défaut. Il peut s'agir d'un véritable document <acronym>CSS</acronym>, comme les fichiers <code>/res/html.css</code> et <code>/resr/quirk.css</code> utilisés par les navigateurs Firefox et Mozilla. Plus souvent, il s'agit d'un autre mécanisme faisant partie du moteur de rendu du navigateur et parvenant au même résultat (Opera, Internet Explorer). Notons enfin que les navigateurs ont parfois recours à des <a href="http://www.w3.org/TR/CSS21/syndata.html#q4">extensions <acronym>CSS</acronym>
      </a>, c'est à dire à des propriétés <acronym>CSS</acronym> n'appartenant pas aux spécifications <acronym>CSS</acronym>1 ou <acronym>CSS</acronym>2, mais préfigurant les futures spécifications <acronym>CSS</acronym>2.1 et <acronym>CSS</acronym>3 (par exemple, la propriété <code>white-space: -moz-pre-wrap</code> dans les navigateurs Gecko, préfigurant le <a href="http://www.w3.org/TR/CSS21/text.html#white-space-prop">
        <code>white-space: pre-wrap</code>
      </a>
      <acronym>CSS</acronym>2.1). Il peut s'agir également d'extensions purement propriétaires (<a href="http://www.opera.com/docs/specs/#xml-css-link">
        <code>-o-link</code> et <code>-o-link-source</code>
      </a> dans Opera, <a href="http://www.mozilla.org/projects/xbl/xbl.html#attach-css">-moz-binding</a> dans Firefox).</p>
    <p>Ces styles de l'agent utilisateur ont un double rôle :</p>
    <ul>
      <li>Selon les <a href="http://www.w3.org/TR/UAAG10/glossary.html#def-default-styles">Règles d'accessibilité des agents utilisateurs</a>, ils doivent garantir en toutes circonstances l'accès à une « version brute » du document <acronym title="(eXtensible) HyperText Markup Language" lang="en">(X)HTML</acronym> qui préserve le minimum vital de présentation nécessaire à sa compréhension, lorsqu'aucunes autres données de présentation auteur ou utilisateur ne sont prises en compte ;</li>
      <li>
        <p>Selon <a href="http://www.w3.org/TR/html401/struct/global.html#h-7.5.3">la spécification <acronym title="HyperText Markup Language" lang="en">HTML</acronym>4.01</a>, ils doivent garantir « l'interprétation conventionnelle » des éléments <acronym>(X)HTML</acronym>. Il s'agit en particulier :</p>
        <ul>
          <li>de masquer la section <code>head</code> du <acronym>(X)HTML</acronym> (propriété <code>display: none</code>) ;</li>
          <li>de différencier les éléments blocs et les éléments en ligne (propriétés <code>display: block</code> et <code>display: inline</code>) ;</li>
          <li>de permettre le rendu des éléments de liste (<code>display: list-item</code>) et de leurs marqueurs ;</li>
          <li>de permettre le rendu des tableaux (<code>display: table</code>).</li>
        </ul>
      </li>
    </ul>
    <p>Cette « interprétation conventionnelle » n'est normalisée, ni pour <acronym>HTML</acronym>4.01 (malgré une <a href="http://www.w3.org/TR/REC-CSS2/sample.html">feuille de style indicative</a> proposée par la spécification, ni pour les différentes variantes <acronym title="eXtensible HyperText Markup Language" lang="en">XHTML</acronym>1.0 (aucune feuille de style de ce type n'y est proposée). Chaque navigateur a donc mis en place ses propres règles, plus ou moins étendues. On y trouve aussi bien des propriétés de marges et d'indentation de certains blocs de texte (titres, citations listes...), que la taille ou la graisse des caractères des titres, le soulignement des intitulés de liens, le comportement par défaut du pointeur de la souris au survol de certains éléments, etc. A titre d'exemple, voici un extrait des styles par défaut de Firefox :</p>
    <pre>/* Présentation des titres */
h1 {
display: block;
font-size: 2em;
font-weight: bold;
margin: .67em 0;
}
/* Soulignement des abréviations et acronymes renseignés */
abbr[title], acronym[title] {
border-bottom: dotted 1px;
}
/* Indentation des blocs de citation */
blockquote {
display: block;
margin: 1em 40px;
}
/* Mise en italique des address*/
address {
display: block;
font-style: italic;
}</pre>
    <p>On rencontre donc plusieurs différences de rendu par défaut d'un navigateur à l'autre. En particulier :</p>
    <ul>
      <li>L'<a href="http://www.opera.com/docs/specs/">élément <code>body</code>
        </a> est doté de marges de 8px par Firefox et par Internet Explorer. Opera, lui, utilise un <code>padding</code> de la même dimension ;</li>
      <li>Tandis que Firefox utilise un <code>padding-left</code> de 40px pour réserver <a href="http://blog-and-blues.org/weblog/2004/09/19/302-gerer-espace-a-gauche-liste-selon-les-navigateurs">l'espace où se placent les puces des éléments de liste (<code>ul</code>)</a>, Internet Explorer et Opera utilisent un <code>margin-left</code> (de même dimension) ;</li>
      <li>La <a href="http://www.saila.com/usage/tips/#hr">ligne de séparation horizontale <code>hr</code>
        </a> est traitée par Internet Explorer comme un élément en ligne, et sa couleur par la propriété <code>color</code>, tandis que les autres navigateurs la considèrent comme un élément bloc stylé par la propriété <code>background-color</code> ;</li>
      <li>Les éléments <code>abbr</code> et <code>acronym</code> dotés d'un attribut <code>title</code> explicitant leur signification sont soulignés en pointillés par Opera et les navigateurs Gecko. Internet Explorer n'applique aucun style par défaut à <code>acronym</code> (Il n'implémente pas <code>abbr</code>).</li>
    </ul>
    <p>Les styles par défaut des agents utilisateurs sont donc nécessaires, mais actuellement problématiques :</p>
    <ul>
      <li>D'une part, malgré leur relative homogénéité d'un navigateur à l'autre, les quelques différences rencontrées peuvent compliquer la tâche aux auteurs se fiant au rendu de leur document dans un seul navigateur. Le cas typique est celui de la suppression ou de la modification de l'indentation à gauche des éléments de liste dans un menu en colonne : un auteur se basant sur le rendu dans Firefox verra sa mise en page se dégrader fortement dans Opera et Internet Explorer. Les auteurs doivent donc tenir compte des propriétés pertinentes pour chaque navigateur, à défaut d'entreprendre leur totale suppression (Voir les essais en ce sens d'<a href="http://www.meyerweb.com/eric/thoughts/2004/09/15/emreallyem-undoing-htmlcss/">Eric Meyer</a> et de <a href="http://tantek.com/log/2004/09.html#d06t2354">Tantek Çelik</a>).</li>
      <li>D'autre part, la spécification <acronym>HTML</acronym>4.01 reste vague quant à la <a href="http://www.w3.org/TR/html401/struct/global.html#h-7.5.3">marge de manoeuvre laissée aux auteurs envers cette « interprétation conventionnelle »</a>. Tout au plus peut-on y lire que : <q>les feuilles de style fournissent les moyens de spécifier la restitution d'éléments arbitraires, y compris si l'élément est rendu comme étant de type bloc ou de type en-ligne. Cela peut être approprié, dans certains cas, tel qu'un style en-ligne pour les éléments d'une liste, mais généralement parlant, on décourage les auteurs de détourner l'interprétation conventionnelle des éléments HTML de cette façon.</q> On rencontre donc de fréquentes interrogations sur la légitimité de telle ou telle combinaison de propriétés <acronym>CSS</acronym>, telles que : des paragraphes peuvent-ils être dotés de marqueurs ou numérotés, à la manière des éléments de liste ? Ou est-ce le signe qu'une liste aurait été plus appropriée ?</li>
      <li>Enfin, leur rôle étant <a href="http://www.la-grange.net/2004/10/08.html#realite">incorrectement perçu par de nombreux auteurs</a>, ces styles par défaut ont souvent favorisé des choix de balisage en fonction du seul rendu visuel, et non de la pertinence structurelle (« je n'utilise pas <code>h1</code> car la taille est caractères est trop grande... J'utilise <code>blockquote</code> pour avoir un texte indenté... »). Ils ont également entraîné bon nombre de confusion sur le sens de certains éléments (Par exemple, entre <code>b</code> (mise en gras) et <code>strong</code> (emphase forte), <code>i</code> (mise en italique) et <code>em</code> (emphase simple)...). Ils ont enfin conduit à rigidifier certaines pratiques en règles de design ou d'ergonomie (« les hyperliens doivent être soulignés », etc.).</li>
    </ul>
    <p>La future spécification <acronym>XHTML</acronym>2 répondra à une partie de ces questions <a href="http://www.w3.org/TR/xhtml2/xhtml2-style.html#a_stylesheet">en normalisant une feuille de style par défaut</a> pour les agents utilisateurs. D'ici là, à l'exception notable des <a href="http://www.456bereastreet.com/archive/200410/styling_even_more_form_controls/">contrôles de formulaires</a> beaucoup plus liés à l'interface utilisateur, la présentation par défaut de chaque élément <acronym>HTML</acronym> peut être librement modifiée aussi bien par l'auteur que par l'utilisateur. Les seules contraintes finalement pertinentes sont celles de la lisibilité de son contenu, d'une présentation favorisant l'accès au sens, et de l'accessibilité aux personnes handicapées.</p>
    <h3>Les styles utilisateur</h3>
    <p>Côté client, les styles par défaut de l'agent utilisateur ne sont pas seuls susceptibles d'intervenir dans le rendu d'une page Web. En effet, différents agents utilisateurs, à commencer par les navigateurs graphiques, permettent à leur utilisateur d'imposer ses préférences de rendu, dans un souci de confort mais aussi d'<a href="http://www.w3.org/TR/UAAG10/guidelines.html#tech-select-style-sheets">accessibilité</a>. Ces styles utilisateurs (« user style ») peuvent être définis :</p>
    <ul>
      <li>soit via l'interface utilisateur du navigateur (Menu Préférences &gt; Style de Page dans Opera, menu Outils &gt; Options Internet dans <acronym>IE</acronym>, Menu Outils &gt; Options &gt; Générales dans Firefox) ; </li>
      <li>soit sous forme d'une feuille de style à part entière, écrite comme toute autre <acronym>CSS</acronym>, enregistrée localement et appliquée par le navigateur aux pages Web consultées.</li>
    </ul>
    <p>Dans le premier cas, les options proposées dans l'interface des navigateurs limitent la portée des styles utilisateurs à quelques données élémentaires, dont :</p>
    <ul>
      <li>Les couleurs d'arrière-plan et d'avant-plan par défaut ;</li>
      <li>Les polices et tailles de caractères par défaut (avec la possibilité de sustituer les polices utilisateurs à celles de l'auteur, ou de spécifier une taille de caractère minimale) ;</li>
      <li>L'apparence et le comportement des hyperliens au survol de la souris (couleur, soulignement) ;</li>
      <li>L'affichage des images.</li>
    </ul>
    <p>Dans le second cas, si l'utilisateur écrit sa propre feuille de style « user » (ou reproduit l'une des nombreuses <acronym>CSS</acronym> utilisateur proposées sur le Web), il dispose alors de toute la puissance des styles <acronym>CSS</acronym> et peut adapter à sa guise le contenu et le rendu des pages Web :</p>
    <ul>
      <li>Pour supprimer par exemple des contenus publicitaires dans <a href="http://www.mozilla.org/support/firefox/adblock.html">Firefox</a> ou <a href="http://members.chello.nl/b.kroonspecker/opera/">Opera</a> ;</li>
      <li>Pour empêcher le défilement des éléments <code>marquee</code> (<code>display:block</code> dans Opera, <code>-moz-binding: none;</code> dans Firefox), forcer le retour à la ligne dans les éléments <code>pre</code> (<code>white-space: pre-wrap</code> dans Opera, <code>white-space: -moz-pre-wrap</code> dans Firefox ), voire <a href="http://my.opera.com/Rijk/journal/38">activer ou désactiver à volonté les objets flash</a> intégré dans les pages <acronym>(X)HTML</acronym> ;</li>
      <li>Pour corriger le résultat d'un bug de rendu de son navigateur, tel que <a href="http://blog-and-blues.org/weblog/2005/01/01/368-opera-selecteur-attribut-hreflang-after">le sélecteur d'attribut <code>[hreflang!=foo:after]</code>
        </a> dans Opera ;</li>
      <li>Pour tirer parti d'un contenu non exploité par défaut par le navigateur, tel que l'attribut <code>cite</code> indiquant la source des éléments de citation <code>blockquote</code> et <code>q</code>, <a href="http://blog-and-blues.org/weblog/2004/08/24/284-attribut-cite-pseudo-lien">dans Opera et les navigateurs Gecko</a>, ou les <a href="http://members.chello.nl/b.kroonspecker/opera/styles/user/Accesskey.css">
          <code>accesskeys</code> non visibles</a> (<code>a[accesskey]:after {content: " [" attr(accesskey) "]"}</code>) ;</li>
      <li>Pour permettre la restitution des pages Web sur un media que leurs auteurs n'ont pas pris en compte, à l'exemple des <a href="http://www.howtocreate.co.uk/operaStuff/spokentable.css">feuilles de styles <code>speech</code>
        </a> pour le navigateur Opera en mode vocal ;</li>
      <li>Pour améliorer l'impression des pages Web en forçant celle des <acronym title="Uniform Resource Locator" lang="en">URL</acronym> après les liens (<code>a:after {content: " (" attr(href) ")"}</code>).</li>
    </ul>
    <p>Il est évident que peu d'utilisateurs auront sans doute recours à une telle feuille de style « user » avancée, et que la plupart s'en tiendront aux options configurables depuis l'interface de leur navigateur. Notons cependant qu'Opera offre <a href="http://www.opera.com/support/usingopera/stylesheets/">un choix extensible de feuilles de styles utilisateur</a> activables à la volée, pour répondre à divers besoins d'accessibilité ou de développement. En revanche, le potentiel des <code>CSS</code> « user » est encore sous-exploité par les autres navigateurs graphiques.</p>
    <p>Quelle est donc la portée finale des styles « user » ? Même en ne prenant en compte que les possibilités de personnalisation élémentaires offertes par les navigateurs les plus répandus, les auteurs ne peuvent ignorer le risque d'une conjonction malheureuse avec leurs propres <acronym>CSS</acronym>. Le simple choix d'une couleur d'arrière-plan par l'utilisateur peut suffire à rendre un document inintelligible, lorsque celle-ci se combine à une couleur similaire d'avant-plan côté auteur. De même, le non-affichage des images, ou une taille de caractère plus grande ou plus petite que ce qui était supposé par le designer peut compromettre l'accès au contenu. Dans l'immédiat, on peut retenir quelques précautions à prendre lors de la conception d'un design :</p>
    <ul>
      <li>Agir avec prudence et manière limitée sur la <a href="http://blog-and-blues.org/weblog/2004/05/24/214-font-size-em">taille des caractères par défaut du document</a>, lorsqu'on réduit celle-ci ;</li>
      <li>Ne pas compter sur <a href="http://www.cybercodeur.net/weblog/commentaires/detailsCarnet.php?idmessage=676">l'utilisation d'une police de caractère donnée</a> pour assurer la lisibilité du contenu ;</li>
      <li>S'assurer que chaque partie du contenu sera visible <a href="http://openweb.eu.org/articles/background_css">indépendamment de l'affichage des images d'arrière-plan</a> ;</li>
      <li>Toujours spécifier <a href="http://www.css.nu/articles/CSS-colours.html">simultanément une couleur d'arrière-plan et une couleur d'avant-plan</a>, comme y invitent d'ailleurs les avertissements du validateur <acronym>CSS</acronym> du <acronym title="World Wide Web Consortium" lang="en">W3C</acronym> ainsi que les <a href="http://www.w3.org/TR/WCAG10-CSS-TECHS/#style-colors">Directives pour l'accessibilité des contenus Web</a> ;</li>
      <li>Plus généralement, ne pas subordonner l'accès au sens du document à un effet de style <code>CSS</code> toujours susceptible d'être neutralisé par un style utilisateur.</li>
    </ul>
    <h3>Les styles auteurs</h3>
    <p>La troisième et dernière source de style est la plus connue : les feuilles de styles associées à la page Web par leur auteur, par le biais des éléments <code>link</code> et <code>style</code>, de la règle <acronym>CSS</acronym>
      <code>@import</code> ou de l'instruction <code>&lt;?xml-stylesheet?&gt;</code>.</p>
    <p>La cascade <acronym>CSS</acronym> qui gère la combinaison finale des styles ci-dessus avec ceux prévus par les auteurs définit deux règles de priorité :</p>
    <ul>
      <li>Les styles de l'auteur l'emportent sur ceux de l'agent utilisateur... <em>dans la mesure où les propriétés nécessaires ont été spécifiées</em> ;</li>
      <li>Les styles de l'auteur l'emportent sur ceux de l'utilisateur... <em>sauf lorsque celui-ci, par le biais de la propriété !important, décide de les outrepasser, ou que ses préférences sont exprimées par le biais des options offertes par le navigateur</em>.</li>
    </ul>
    <p>Certains agents utilisateurs appliquent par ailleurs un <a href="http://www.w3.org/TR/di-princ/#section-Delivery">procédé d'adaptation</a> supplémentaire au document. C'est typiquement le cas des navigateurs <acronym>(X)HTML</acronym> pour mobiles ou Web <acronym>TV</acronym> qui doivent redimensionner certains éléments, restructurer le layout et en modifier les couleurs afin d'optimiser le rendu sur les écrans de taille réduite aux capacités limitées (<a href="http://www.howtocreate.co.uk/operaStuff/renderingMode.html">Small Screen Rendering</a> d'Opera, <a href="http://www.access-netfront.com/help.html">Smart-Fit Rendering mode</a> de NetFront 3.1, projet Mozilla du futur <a href="http://news.com.com/2100-1032_3-5483683.html">Minimo</a>, etc.). Opera 8.0 étend ce processus d'adaptation au navigateur desktop avec <a href="http://www.howtocreate.co.uk/operaStuff/renderingMode.html">le procédé <acronym>ERA</acronym>
      </a> qui adapte les données de présentation de la page à la largeur réelle de la zone d'affichage ou de la page imprimée ;</p>
    <p>Enfin, les différences d'implémentation <acronym>CSS</acronym> entre navigateurs et les bugs de certains d'entre eux limitent la portée de diverses possibilités offertes par les styles <acronym>CSS</acronym>. On peut citer comme exemple, parmi beaucoup d'autres :</p>
    <ul>
      <li>Les <a href="http://www.w3.org/TR/CSS21/selector.html#attribute-selectors">sélecteurs d'attribut évolués <acronym>CSS</acronym>2</a> (<code>E[title~="PDF"]</code>, <code>E[lang|="en"]</code>) qui ne sont pas supportés par Internet Explorer. La lisibilité du contenu ou l'accès à l'information essentielle ne doit donc pas reposer sur leur support ;</li>
      <li>Le <a href="/articles/dimensions_boites_css/">modèle de boîte spécifique</a> suivi par Internet Explorer Windows 5.x dans tous les cas, et par <acronym>IE</acronym>6.0 en mode Quirks, qui perturbe les mises en pages ne laissant pas un jeu suffisant entre des éléments adjacents (en particulier quand interviennent des flottants) ;</li>
      <li>La <a href="http://www.w3.org/TR/CSS21/visuren.html#fixed-positioning">position fixe</a>, non supportée par Internet Explorer Windows jusqu'à la version 6.0 comprise, etc.</li>
    </ul>
    <p>Dans un certain nombre de cas, la tentation est grande de recourir à un « hack » <acronym>CSS</acronym> pour forcer la présentation ou le comportement voulu dans le ou les navigateurs problématiques. Sachant que la quasi-totalité de ces « hacks » reposent sur des combinaisons de bugs susceptibles d'être modifées dans de futures versions de ces navigateurs, ou sur des syntaxes invalidantes, ou ont des effets de bords imprévisibles selon les conditions utilisateur... Ne vaut-il pas mieux, dans ce cas, accepter que le rendu soit fonction des capacités du navigateur ?</p>
    <h3>Conclusion : lâchons prise !</h3>
    <p>Peut-on, dans ces conditions, prévoir un design au pixel près ? Peut-on vouloir forcer une présentation donnée ? Peut-on subordonner l'accès à une information au respect d'une règle de style ?</p>
    <p>Il apparaît clairement que non. Dans tous les cas, le rendu final n'est donc pas conçu pour être un simple duplicata figé du projet du designer. L'ensemble du processus de rendu via <acronym>CSS</acronym> invite au contraire celui-ci à savoir composer avec l'interopérabilité et l'accessibilité, en <a href="http://pompage.net/pompe/tao/">lâchant prise</a> sur le design souhaité : <em>l'auteur propose, l'utilisateur et l'agent utilisateur disposent</em>.</p>
  </body>
</html>
