<!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 - Initiation au centrage CSS</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="initiation_centrage" />
    <meta name="DC.Creator" content="Laurent Denis" />
    <meta name="DC.Date.created" scheme="W3CDTF" content="2003-03-21" />
    <meta name="DC.Date.modified" scheme="W3CDTF" content="2003-03-21" />
    <meta name="DC.Rights" content="Cet article est sous licence Creative Commons Attribution-ShareAlike." />
    <meta name="DC.Subject" content="expert, mise_en_page, css" />
  </head>
  <body>
    <h1>Initiation au centrage CSS</h1>
    <ul>
      <li>
        <strong>Profil :</strong> <a href="/expert/">Expert</a>
      </li>
      <li>
        <strong>Thème :</strong> <a href="/mise_en_page/">Mise en page</a>
      </li>
      <li>
        <strong>Technologie :</strong> <a href="/css/">CSS</a>
      </li>
      <li>
        <strong>Auteur :</strong> <a href="mailto:laurent.denis%40openweb.eu.org">Laurent Denis</a>
      </li>
      <li>
        <strong>Mise à jour :</strong> 21/03/2003</li>
    </ul>
    <h2>En bref</h2>
    <p>Les différentes méthodes de centrage d'un contenu <acronym title="HyperText Markup Language" lang="en">HTML</acronym>.</p>
    <hr />
    <p>Le centrage d'une boîte <acronym title="Cascading Style Sheets" lang="en">CSS</acronym> repose sur l'utilisation de ses propriétés de marges latérales. La technique et le résultat obtenu dépendent cependant du comportement attendu de la boîte : elle peut être de largeur variable selon son conteneur, ou de largeur fixe.</p>
    <h3>Centrage d'une boîte élastique par des marges spécifiées.</h3>
    <p>Une boîte élastique aura une largeur variable en fonction de celle de son conteneur (fenêtre du navigateur, conteneur…).</p>
    <p>La boîte sera centrée en la dotant de <a href="http://www.yoyodesign.org/doc/w3c/css2/box.html#margin-properties">marges latérales</a> de largeurs identiques :</p>
    <ul>
      <li>spécifiées en pixels si leur largeur doit être constante : <code>.centre { margin-left: 50px; margin-right: 50px; }</code> ;
        </li>
      <li>spécifiées en pourcentages si leur largeur doit être également proportionnelle à celle du conteneur : <code>.centre { margin-left: 15%; margin-right: 15%; }</code>.
        </li>
    </ul>
    <p>Le résultat peut être observé dans l'<a href="annexes/annexe1.html#ex1">exemple 1</a>.</p>
    <p>Les marges proportionnelles sont préférables aux marges en pixels, car elles s'adaptent mieux à un affichage de taille réduite : les marges diminuent avec la largeur d'affichage.</p>
    <h3>Centrage d'une boîte élastique par des marges calculées.</h3>
    <p>La boîte sera centrée simplement en spécifiant la valeur <code>auto;</code> pour ses marges latérales.</p>
    <p>Cette solution très élégante… <a href="http://www.bluerobot.com/web/css/center1.html">échoue</a> dans <acronym>IE</acronym> Windows. Fort heureusement, il est possible de tirer parti d'une application impropre de la propriété <code>text-align</code> aux éléments de type bloc par <acronym title="MicroSoft Internet Explorer" lang="en">MSIE</acronym> Windows : il suffit de spécifier <code>text-align: center</code> pour le conteneur, et de rétablir <code>text-align: left;</code> pour la boîte elle-même.</p>
    <pre>
.conteneur {
  text-align: center;
}
.centre {
  margin-left: auto;
  margin-right: auto;
  width: 70%;
  text-align: left;
}
    </pre>
    <p>Le résultat peut être observé dans l'<a href="annexes/annexe1.html#ex2">exemple 2</a>.</p>
    <p>Cette solution est équivalente à celle des marges proportionnelles dans un affichage de taille réduite.</p>
    <h3>Centrage d'une boîte rigide.</h3>
    <h4>Largeur de boîte en pixels</h4>
    <p>Une boîte rigide aura une largeur spécifiée en pixels, constante quelque-soit celle de son conteneur (fenêtre du navigateur, conteneur…). Elle sera centrée également en spécifiant la valeur <code>auto;</code> pour ses marges latérales</p>
    <pre>
.conteneur {
  text-align: center;
}
.centre {
  margin-left: auto;
  margin-right: auto;
  width: 400px;
  text-align: left;
}
      </pre>
    <p>Le résultat peut être observé dans l'<a href="annexes/annexe1.html#ex3">exemple 3</a>.</p>
    <p>Cette solution n'est pas à recommander, car elle entraîne un <em>scroll</em> horizontal ou un débordement dans un affichage de largeur réduite…</p>
    <h4>Largeur de boîte en <code>em</code>
    </h4>
    <p>La largeur de la boîte peut également être spéficiée en <a href="http://www.yoyodesign.org/doc/w3c/css2/syndata.html#values">unité em</a>, pour tenir compte de la taille de caractère propre à l'utilisateur :</p>
    <pre>
.conteneur {
  text-align: center;
}
.centre {
  margin-left: auto;
  margin-right: auto;
  width: 20em;;
  text-align: left;
}
      </pre>
    <p>Le résultat peut être observé dans l'<a href="annexes/annexe1.html#ex4">exemple 4</a>.</p>
    <p>Si vous <a href="http://www.blog-and-blues.org/standards/test/centrage.asp#cen5">modifiez</a> dans Mozilla ou <acronym>MSIE</acronym> la taille d'affichage des caractères, la taille de la boîte augmentera en conséquence…</p>
    <p>Cette solution n'est à recommander que pour des boîtes de petite largeur, puisqu'elle entraîne également un <em>scroll</em> horizontal ou un débordement dans un affichage de largeur réduite…</p>
    <h4>Variante : les marges négatives</h4>
    <p>Enfin, signalons une dernière méthode de centrage proposée par <a href="http://bluerobot.com/web/css/center2.html">BlueRobot</a> : le centrage par des marges négatives.</p>
    <ul>
      <li>la boîte est tout d'abord placée en position relative (ou absolue), sa marge gauche étant alignée à la moitié de la largeur de la zone d'affichage ;</li>
      <li>puis elle est dotée de marges latérales négatives égales à la moitié de sa largeur propre.</li>
    </ul>
    <pre> 
.centre {
  position: relative; /*ou absolute */
  left: 50%;
  width: 400px;
  margin-left: -200px;
}
      </pre>
    <p>Le résultat peut être observé dans l'<a href="annexes/annexe1.html#ex5">exemple 5</a>.</p>
  </body>
</html>
