<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://openweb.eu.org/dtd/docbkx42/docbookx.dtd">
<article lang="fr" role="article" id="initiation_flux">
  <articleinfo>
    <title>Initiation au positionnement <acronym>CSS</acronym>&#160;: 1.flux et position relative</title>
    <pubdate>2003-03-21</pubdate>
    <date>2003-03-21</date>
    <author>
      <firstname>Laurent</firstname>
      <surname>Denis</surname>
      <email>laurent.denis@openweb.eu.org</email>
    </author>
    <legalnotice>
      <para>Cet article est sous licence <ulink url="http://creativecommons.org/licenses/by-sa/1.0/legalcode">Creative Commons Attribution-ShareAlike</ulink>.</para>
    </legalnotice>
    <abstract>
      <para>Par défaut, les navigateurs affichent les boîtes issues du document html dans l'ordre du flux normal. En position relative, un élément peut être décalé verticalement et/ou horizontalement.</para>
    </abstract>
    <subjectset>
      <subject role="profil">
        <subjectterm>expert</subjectterm>
      </subject>
      <subject role="theme">
        <subjectterm>mise_en_page</subjectterm>
      </subject>
      <subject role="technologie">
        <subjectterm>css</subjectterm>
      </subject>
    </subjectset>
  </articleinfo>
  <para>Pour représenter le positionnement en flux normal, on peut imaginer le navigateur parcourant (logiquement) la page de code <acronym>HTML</acronym> du début à la fin et retranscrivant son contenu au fur et à mesure des balises rencontrées. Comme dans la lecture d'un texte, il procède verticalement, commençant en «&#160;haut&#160;» de l'écran pour aller jusqu'en «&#160;bas&#160;», et horizontalement de gauche à droite, sur la totalité de l'espace disponible et nécessaire en largeur comme en hauteur.</para>
  <section id="fluxbloc">
    <title>Boîte de type bloc en flux normal</title>
    <para>Par défaut, les boîtes de type bloc seront affichées dans une succession verticale. Prenons par exemple deux blocs différenciés par leur couleur&#160;:</para>
    <para>En <acronym>HTML</acronym>&#160;:</para>
    <programlisting>
&lt;p class="jaune"&gt;<varname>Une boîte jaune</varname>&lt;/p&gt;
&lt;p class="verte"&gt;<varname>Une boîte verte</varname>&lt;/p&gt;
    </programlisting>
    <para>En <acronym>CSS</acronym>&#160;:</para>
    <programlisting>
.jaune {
  background-color: <varname>#ffff00</varname>;
}
.verte {
  background-color: <varname>#00ff00</varname>;
}
    </programlisting>
    <para>Le résultat, illustré par la figure ci-dessous, peut être observé également dans <ulink url="annexes/annexe1.html#ex1">l'exemple 1</ulink>&#160;:</para>
    <mediaobject>
      <imageobject>
        <imagedata fileref="annexes/ex1.gif"/>
      </imageobject>
      <textobject>
        <phrase>L'un au dessus de l'autre, la boîte bloc rectangulaire jaune et la boîte rectangulaire verte</phrase>
      </textobject>
    </mediaobject>
    <para>Le navigateur traite successivement les deux éléments rencontrés. Comme il s'agit d'éléments de type bloc, il aligne la marge gauche de chaque élément sur la marge gauche de l'élément conteneur, c'est à dire ici le bloc conteneur initial.</para>
    <para>Les principaux éléments créant des boîtes bloc sont&#160;:</para>
    <itemizedlist>
      <listitem><para>l'élément <token>div</token>&#160;;</para></listitem>
      <listitem>
        <para>les titres <token>h1</token>, <token>h2</token>, <token>h3</token>, <token>h4</token>,     <token>h5</token>, <token>h6</token>&#160;;</para>
      </listitem>
      <listitem><para>le paragraphe <token>p</token>&#160;;</para></listitem>
      <listitem>
        <para>Les listes et éléments de liste <token>ul</token>, <token>ol</token>, <token>li</token>, <token>dl</token>, <token>dd</token>&#160;;</para>
      </listitem>
      <listitem><para>Le bloc de citation <token>blockquote</token>&#160;;</para></listitem>
      <listitem><para>Le texte pré-formaté <token>pre</token>&#160;;</para></listitem>
      <listitem><para>L'adresse <token>address</token>.</para></listitem>
    </itemizedlist>
  </section>
  <section id="fluxligne">
    <title>Boîte de type en-ligne</title>
    <para>Par défaut, les boîtes de type en-ligne sont affichées dans une succession horizontale. Prenons par exemple deux portions de texte différenciées par leur couleur&#160;:</para>
    <para>En <acronym>HTML</acronym>&#160;:</para>
    <programlisting>
&lt;p&gt;
  &lt;span class="<varname>jaune</varname>"><varname>Une boîte jaune</varname>&lt;/span&gt;
  &lt;span class="<varname>verte</varname>"><varname>Une boîte verte</varname>&lt;/span&gt;
&lt;/p&gt;
</programlisting>
    <para>En <acronym>CSS</acronym> :</para>
    <programlisting>
.jaune {
  background-color: <varname>#ffff00</varname>;
}
.verte {
  background-color: <varname>#00ff00</varname>;
}
</programlisting>
    <para>Le résultat, illustré par la figure ci-dessous, peut être observé également dans <ulink url="annexes/annexe1.html#ex2">l'exemple 2</ulink>&#160;:</para>
    <mediaobject>
      <imageobject>
        <imagedata fileref="annexes/ex2.gif"/>
      </imageobject>
      <textobject>
        <phrase>De gauche à droite, la boîte rectangulaire jaune et la boîte rectangulaire verte</phrase>
      </textobject>
    </mediaobject>
    <para>Les principaux éléments créant des boîtes en ligne sont&#160;:</para>
    <itemizedlist>
      <listitem><para>l'élément <token>span</token>&#160;;</para></listitem>
      <listitem><para>le lien <token>a</token>&#160;;</para></listitem>
      <listitem><para>L'image <token>img</token>&#160;;</para></listitem>
      <listitem><para>Les emphases <token>em</token> et <token>strong</token>&#160;;</para></listitem>
      <listitem><para>La citation <token>q</token>&#160;;</para></listitem>
      <listitem><para>La citation <token>cite</token>&#160;;</para></listitem>
      <listitem><para>L'élément <token>code</token>&#160;;</para></listitem>
      <listitem><para>Le texte entré par l'utilisateur <token>kbd</token>&#160;;</para></listitem>
      <listitem><para>L'exemple <token>samp</token>&#160;;</para></listitem>
      <listitem><para>La variable <token>var</token>&#160;;</para></listitem>
      <listitem><para>Les abréviations et acronymes <token>abbr</token>, <token>acronym</token>&#160;;      </para></listitem>
      <listitem><para>Le texte inséré <token>ins</token>&#160;;</para></listitem>
      <listitem><para>Le texte supprimé <token>del</token>.</para></listitem>
    </itemizedlist>
    <para>Pour résumer le flux normal&#160;: c'est un traitement linéaire du contenu de la page. L'alignement des boîtes bloc est vertical&#160;; l'alignement des éléments en-ligne dans les boîtes bloc est horizontal.</para>
    <para>Reportez-vous à notre article <ulink url="/articles/initiation_display/">Boîtes bloc, boîtes en ligne et propriété display,</ulink> pour en savoir plus sur l'utilisation de la proprieté <token>display</token> des boîtes bloc et en ligne&#8230;</para>
  </section>
  <section id="relative">
    <title>La position relative</title>
    <para>Le positionnement relatif permet d'inscrire un contenu en flux normal, puis de le décaler horizontalement et/ou verticalement. Le contenu suivant n'est pas affecté par ce déplacement, qui peut donc entraîner des chevauchements.</para>
    <para>Soit par exemple un positionnement relatif indice qui stipule un décalage vers le haut de 5 pixels et un arrière-plan jaune&#160;:</para>
    <para>En <acronym>HTML</acronym>&#160;:</para>
    <programlisting>
&lt;p&gt;
  <varname>Lorem</varname>
  &lt;span class="<varname>jaune</varname>"&gt;
    <varname>boîte en position relative</varname>
  &lt;/span&gt;
  ipsum dolor.
&lt;/p&gt;
    </programlisting>
    <para>En <acronym>CSS</acronym>&#160;:</para>
    <programlisting>
.jaune {
  position: relative;
  bottom: <varname>5px</varname>;
  background-color: <varname>#ffff00</varname>;
}
    </programlisting>
    <para>Le résultat, illustré par la figure ci-dessous, peut être observé également dans <ulink url="annexes/annexe1.html#ex3">l'exemple 3</ulink>&#160;:</para>
    <mediaobject>
      <imageobject>
        <imagedata fileref="annexes/ex3.gif"/>
      </imageobject>
      <textobject>
        <phrase>Le texte de la boîte jaune se décale de 5 pixels vers le haut par rapport au reste du paragraphe</phrase>
      </textobject>
    </mediaobject>
    <para>Pour illustrer le risque de chevauchement, ajoutons un décalage vers la droite&#160;:</para>
    <para>En <acronym>CSS</acronym>&#160;:</para>
    <programlisting>
.jaune {
  position: relative;
  bottom: <varname>5px</varname>;
  left: <varname>3em</varname>;
  background-color: <varname>#ffff00</varname>;
}
    </programlisting>
    <para>Le résultat, illustré par la figure ci-dessous, peut être observé également dans <ulink url="annexes/annexe1.html#ex4">l'exemple 4</ulink>&#160;:</para>
    <mediaobject>
      <imageobject>
        <imagedata fileref="annexes/ex4.gif"/>
      </imageobject>
      <textobject>
        <phrase>Le texte de la boîte jaune se décale de 5 pixels en haut et de 3em à droite : il déborde sur le texte qui suit</phrase>
      </textobject>
    </mediaobject>
    <para>Nous aborderons le second type de positionnement <acronym>CSS</acronym> dans <ulink url="/articles/initiation_float/">initiation au positionnement CSS&#160;: 2.position float</ulink>.</para>
  </section>
</article>
