<?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="background_css">
	<articleinfo>
		<title>Utilisation de background</title>
		<pubdate>2005-03-21</pubdate>
		<date>2005-03-21</date>
		<author>
			<firstname>Pascale</firstname>
			<surname>Lambert</surname>
			<email>lambertp@club-internet.fr</email>
		</author>
		<subjectset>
			<subject role="profil">
				<subjectterm>debutant</subjectterm>
			</subject>
			<subject role="technologie">
				<subjectterm>css</subjectterm>
			</subject>
			<subject role="theme">
				<subjectterm>mise_en_page</subjectterm>
			</subject>
		</subjectset>
		<abstract>
			<para>Comment utiliser la propriété CSS background pour gérer des images d'arrière-plan ?</para>
		</abstract>
	</articleinfo>
	<para>Mettre une image de fond dans une page web est un exercice très répandu. Avec tout éditeur de page <acronym>HTML</acronym>, l'option classique est de générer un code du type : <token>&lt;body background="images/image_de_fond.png"&gt;</token>, auquel on peut même ajouter <token>bgproperties="fixed"</token> qui rend fixe l'image de fond ; mais cet attribut ne fonctionne qu'avec <acronym>MSIE</acronym>. Avec les feuilles de style on peut obtenir beaucoup plus, tout en séparant la présentation (la mention de cette image) de la structure (l'élément <token>body</token>).</para>
	<section>
		<title>Avertissements préliminaires :</title>
    <itemizedlist>
    	<listitem>
      	<para>Une image de fond doit être légère. Comprenez par là qu'une image de 20 <acronym>ko</acronym> c'est déjà beaucoup : cela peut être long à charger et provoquer des problèmes d'affichage.</para>
    		</listitem>
    		<listitem>
    			<para>Attention aux difficultés de lecture qu'une image de fond trop contrastée peut provoquer</para>.
    		</listitem>
    		<listitem>
    			<para>Attention aussi à toujours prendre une couleur de fond différente de celle de la police de caractère, car en attendant que l'image de fond se charge, on ne verra rien. Le résultat sera également illisible si l'utilisateur a désactivé l'affichage des images dans son navigateur, ou si l'image vient à être indisponible.</para>
    		</listitem>
    	</itemizedlist>
			<para>Pour illustrer tout cela, visionnez <ulink url="annexes/annexe1.html">ce mauvais exemple</ulink> : la photo fait 53 <acronym>ko</acronym> ; la couleur utilisée, pour la police de caractère et le fond, est blanche.</para>
		</section>
  <section>
    <title>Code CSS de base</title>
    <para>L'image de fond se déclare en général pour l'élément body (corps de page), mais on peut aussi l'appliquer à un bloc (<token>&lt;div&gt;&lt;/div&gt;</token>), ou un titre (<token>&lt;hx&gt;&lt;/hx&gt;</token>), un lien (<token>&lt;a&gt;&lt;/a&gt;</token>) afin de créer un bouton, etc.</para>
    <para>Prenons l'exemple du corps de page. La syntaxe <acronym>CSS</acronym> de base sera celle-ci :</para>
<programlisting>body {
color:black;
background-color:white;
background-image:url(images/image_de_fond.png);
margin:0;
}</programlisting>
    <itemizedlist>
      <listitem>
      	<para><token>color</token> renseigne la couleur de la police de caractère ;</para>
      </listitem>
      <listitem>
      	<para><token>background-color</token> est de la couleur de fond de page ;</para>
      </listitem>
      <listitem>
      	<para><token>background-image:url()</token> est bien-sûr l'adresse de l'image choisie pour le fond de page. Attention : cette <acronym>URL</acronym> est relative à celle du fichier <acronym>CSS</acronym>, et non à celle du document <acronym>(X)HTML</acronym>.</para>
      </listitem>
      <listitem>
      	<para>Pour éviter des problèmes de marges parasites, on peut les fixer à 0 pixels à l'aide de <token>margin:0</token>.</para>
      </listitem>
    </itemizedlist>
    <para>Sans plus de renseignements, l'image de fond apparaît en mosaïque et défile en même temps que le texte.</para>
    <para>Comme d'habitude, cette syntaxe CSS est à mettre dans l'en-tête de la page (entre les balises <token>&lt;head&gt;&lt;/head&gt;</token>) ou dans une feuille de style externe.</para>
    <para>Visionner <ulink url="annexes/annexe2.html">l'exemple 2</ulink>.</para>
  </section>
	<section>
		<title>Fond de page fixe</title>
			<para>Pour que le fond de page devienne fixe, on rajoutera dans le code :</para>
<programlisting>background-attachment:fixed;</programlisting>
			<para>Visionner <ulink url="annexes/annexe3.html">l'exemple 3</ulink>.</para>
  </section>
	<section>
		<title>Positionner l'image</title>
			<para>On peut aussi empêcher la mosaïque grâce à la propriété <token>background-repeat</token> et placer ainsi l'image dans une partie très précise de l'écran.</para>
			<itemizedlist>
				<listitem>
					<para>Par défaut, l'image se positionne en haut à gauche de l'écran :</para>
<programlisting>body {
color:black;
background-color:white;
background-image:url(images/image_de_fond.png);
background-repeat:no-repeat;
}</programlisting>
					<para>Visionner <ulink url="annexes/annexe4.html">l'exemple 4</ulink>.</para>
				</listitem>
				<listitem>
					<para>Si l'on veut qu'elle se place en haut à droite, on rajoutera le code : </para>
<programlisting>background-position:right top;</programlisting>
					<para>ou bien :</para>
<programlisting>background-position:100% 0%;</programlisting>
					<para>Visionner <ulink url="annexes/annexe5.html">l'exemple 5</ulink>.</para>
				</listitem>
				<listitem>
					<para>Pour une position au centre de la page, cela donnera :</para>
<programlisting>background-position:center center;</programlisting>
					<para>ou bien :</para>
<programlisting>background-position:50% 50%;</programlisting>
					<para>Visionner <ulink url="annexes/annexe6.html">l'exemple 6</ulink>.</para>
				</listitem>
        <listitem>
       		<para>Pour une position en bas à droite :</para>
<programlisting>background-position:right bottom;</programlisting>
					<para>ou bien :</para>
<programlisting>background-position:100% 100%;</programlisting>
					<para>Visionner <ulink url="annexes/annexe7.html">l'exemple 7</ulink>.</para>
				</listitem>
			</itemizedlist>
		</section>
		<section>
			<title>Remarques</title>
				<para><token>background-repeat</token> accepte 4 valeurs :</para>
          <itemizedlist>
            <listitem>
            	<para><token>no-repeat</token> (image unique) ;</para>
            </listitem>
            <listitem>
           	 <para><token>repeat-x</token> pour une répétition de l'image uniquement horizontale ;</para>
            </listitem>
            <listitem>
           	 <para><token>repeat-y</token> pour une répétition uniquement verticale ;</para>
            </listitem>
            <listitem>
           	 <para><token>repeat</token> pour la mosaïque complète.</para>
            </listitem>
          </itemizedlist>
					<para>Vous aurez remarqué, bien sûr, que les pourcentages dans le <token>background-position</token> offrent plus de lattitude que les attributs <token>right</token>, <token>center</token>, <token>left</token> et <token>top</token>, <token>center</token>, <token>bottom</token>.</para>
          <para>Notons enfin qu'on peut aussi cumuler ces différentes informations dans un unique <token>background</token>. Exemple :</para>
<programlisting>body {
background: white url(image_de_fond.png) no-repeat right bottom;
}</programlisting>
		</section>
</article>