<?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="bouton_css">
  <articleinfo>
    <title>Bouton <acronym>CSS</acronym>
    </title>
    <pubdate>2003-04-21</pubdate>
    <date>2003-04-21</date>
    <author>
      <firstname>Pascale</firstname>
      <surname>Lambert</surname>
      <email>pascale.lambert@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>Pour créer un bouton changeant d'aspect au passage de la souris, on peut utiliser les styles légers et accessibles.</para>
    </abstract>
    <subjectset>
      <subject role="profil">
        <subjectterm>debutant</subjectterm>
      </subject>
      <subject role="theme">
        <subjectterm>mise_en_page</subjectterm>
      </subject>
      <subject role="technologie">
        <subjectterm>css</subjectterm>
      </subject>
    </subjectset>
  </articleinfo>
  <para>Pour créer un bouton changeant d'aspect au passage de la souris, nombreux sont les sites utilisant des javascripts, ou du flash, inaccessibles et gourmands en bande passante. Ces méthodes peuvent être très avantageusement remplacées par les styles qui ne présentent pas ces inconvénients.</para>
  <para>Les techniques décrites ci-après fonctionnent avec les navigateurs modernes (<acronym>MSIE</acronym> 5.x, Netscape 6 et 7, Mozilla 1.x, Opéra 7). Avec Opéra 5.x et 6.x les images de fond ne seront pas chargées.</para>
  <para>Document annexe&#160;: <ulink url="annexes/">page de test</ulink>.</para>
  <section id="simple">
    <title>Bouton simple</title>
    <para>Ce premier exemple permet de créer un bouton de navigation dont le fond sera agrémenté d'une image lors du passage de la souris.</para>
    <mediaobject>
      <imageobject>
        <imagedata fileref="annexes/simples.png"/>
      </imageobject>
      <textobject>
        <phrase>illustration de l'effet :hover sur un bouton css simple</phrase>
      </textobject>
    </mediaobject>
    <para>Les caractéristiques communes de l'aspect du lien sont déclarées dans <token>a.bouton</token>, l'effet de changement de couleur et d'image de fond sont indiquées ensuite à l'aide de la pseudo classe <token>:hover</token>. A noter que cette image peut-être fixe ou animée.</para>
    <section>
      <title>source <acronym>XHTML</acronym></title>
      <programlisting>
&lt;p&gt;
  &lt;a href="#" class="bouton"&gt;Retour&lt;/a&gt;
&lt;/p&gt;
    </programlisting>
    </section>
    <section>
      <title>Source <acronym>CSS</acronym></title>
      <programlisting>
a.bouton {
  color: white;
  background-color: #000080;
  text-decoration: none;
  font-weight: bold;
  text-align: center;
  padding: 5px;
}
a.bouton:hover {
  background-color: #6495ED;
  background-image: url(aqua.jpg);
}
      </programlisting>
      <para><ulink url="annexes/#simple">Tester le résultat (bouton simple)</ulink>.</para>
    </section>
    <para>On peut aussi compléter l'aspect du bouton à l'aide de <token>a.bouton:active</token> pour l'instant du click et <token>a.bouton:visited</token> pour son aspect après visite de la page liée. Attention&#160;: veillez à mettre le style <token>a.bouton:hover</token> en fin de code si vous voulez que celui-ci reste actif même après l'activation du bouton&#160;!</para>		
  </section>
  <section id="relief">
    <title>Bouton en relief</title>
    <para>Pour un effet de relief d'un bouton qui s'enfonce au passage de la souris, on rajoutera des attributs de style de bordures&#160;: <token>outset</token> pour en effet relief vers l'extérieur et <token>inset</token> pour un effet relief inverse.</para>
    <mediaobject>
      <imageobject>
        <imagedata fileref="annexes/relief.png"/>
      </imageobject>
      <textobject>
        <phrase>bouton en relief qui semble s'enfoncer au passage de la souris</phrase>
      </textobject>
    </mediaobject>
    <section>
      <title>source <acronym>CSS</acronym></title>
      <programlisting>
a.bouton-relief {
  color: white;
  background-color: #000080;
  text-decoration: none;
  font-weight: bold;
  text-align: center;
  padding: 5px;
  border: 2px outset #c0c0c0;
}
a.bouton-relief:hover {
  background-color: #6495ED;
  background-image: url(aqua.jpg);
  border: 2px inset #c0c0c0;
}
      </programlisting>
      <para>
        <ulink url="annexes/#relief">Tester le résultat (bouton en relief)</ulink>.</para>
    </section>
  </section>
  <section id="boutonniere">
    <title>«&#160;Boutonnière&#160;»</title>
    <para>Les techniques précédentes sont adaptées à un bouton isolé dont la taille s'adapte à la longueur du texte. Mais si l'on veut faire un menu vertical, on cherche en général à faire des boutons de même taille.</para>
    <mediaobject>
      <imageobject>
        <imagedata fileref="annexes/boutonniere.png"/>
      </imageobject>
      <textobject>
        <phrase>menu en bouton css</phrase>
      </textobject>
    </mediaobject>
    <para>Ceci se fait sans difficulté grâce à l'attribut <token>display:block</token>, dont le principe est détaillé dans l'article <ulink url="/articles/initiation_display/">boîtes bloc, boîtes en ligne et propriété display</ulink>.</para>
    <section>
      <title>source <acronym>XHTML</acronym></title>
      <programlisting>
&lt;p&gt;
  &lt;a href="#" class="vertical"&gt;Sommaire&lt;/a&gt;
  &lt;a href="#" class="vertical"&gt;Bla bla&lt;/a&gt;
  &lt;a href="#" class="vertical"&gt;Retour&lt;/a&gt;
&lt;/p&gt;
    </programlisting>
    </section>
    <section>
      <title>source <acronym>CSS</acronym></title>
      <programlisting>
a.vertical {
  color: white;
  background-color: #000080;
  text-decoration: none;
  font-weight: bold;
  text-align: center;
  padding: 5px;
  border: 2px outset #c0c0c0;
  display: block;
  width: 100px;
}
a.vertical:hover {
  background-color: #6495ED;
  background-image: url(aqua.jpg);
  border: 2px inset #c0c0c0;
}
    </programlisting>
    </section>
    <section>
      <title>Variante</title>
      <para>Pour éviter de marquer à chaque lien <token>class="vertical"</token>, on peut coder comme ceci&#160;:</para>
      <section>
        <title>source <acronym>XHTML</acronym></title>
        <programlisting>
&lt;div class="vertical"&gt;
  &lt;p&gt;
    &lt;a href="#"&gt;Sommaire&lt;/a&gt;
    &lt;a href="#"&gt;Bla bla&lt;/a&gt;
    &lt;a href="#"&gt;Retour&lt;/a&gt;
  &lt;/p&gt;
&lt;/div&gt;
      </programlisting>
      </section>
      <section>
        <title>source <acronym>CSS</acronym>
        </title>
        <programlisting>
.vertical a {
  color: white;
  background-color: #000080;
  text-decoration: none;
  font-weight: bold;
  text-align: center;
  padding: 5px;
  border: 2px outset #c0c0c0;
  display: block;
  width: 100px;
}
.vertical a:hover {
  background-color: #6495ED;
  background-image: url(aqua.jpg);
  border: 2px inset #c0c0c0;
}
        </programlisting>
        <para><ulink url="annexes/#boutonniere">Tester le résultat (bouton en relief, variante)</ulink>.</para>
      </section>
    </section>
  </section>
</article>
