<?xml version='1.0' encoding='iso-8859-1' standalone='no'?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"  "/usr/local/share/xml/docbook/4.2/docbookx.dtd"
[


<!ENTITY unix   "<productname>Unix</productname>">
<!ENTITY Unix   "<emphasis>Unix</emphasis>">

]

>
<article class="techreport" lang="fr">

  <!--  ================================= Entetes info ============================= -->

  <articleinfo>
    <author>
      <firstname>Ivan</firstname>
      <surname>Kurzweg</surname>  
      <email>ik-r@wanadoo.fr</email>
    </author>

    <title>HTML - CSS</title>

    <copyright>
      <year>2006</year>
      <holder>Ivan KURZWEG, <emphasis>ivan.kurzweg@wanadoo.fr</emphasis></holder>
    </copyright>

    <legalnotice>
      <para>Permission to use, copy, modify, and distribute this documentation for any purpose with or without fee is here by granted, provided that the above copyright notice and this permission notice appear in all copies.
</para>        
    </legalnotice>

    <keywordset>
      <keyword>Html, css, cours, initiation logiciel libre, </keyword>
    </keywordset>

  </articleinfo>

  <abstract> 
    <para>Ce document propose un premier apercu du langage HTML et des feuilles de styles CSS. IL doit pouvoir être suivi en 4 demi-journées, et ne se veut bien sûr pas exhaustif. Toute information complémentaire devrait être trouvée sur le site du W3C. </para>
  </abstract>


  <!--  ================================= Chapitre 1 ============================= -->
  <sect1>
    <title>HTML / XHTML - Hypertext Markup Languages</title>
    <sect2>
      <title>XHTML vs HTML vs SGML vs XML vs CSS !</title>

      <para>
HTML pour <foreignphrase>Hyper Text Markup Language</foreignphrase> est un langage de desciption de documents. C'est une application du langage de balisage SGML pour <foreignphrase>Standard Generalized Markup Language</foreignphrase> . HTML en est à sa version 4.01, la dernière.</para>
      
      <para>SGML est un méta langage de balisage, utilisé pour concevoir d'autres langages (HTML, RTF, etc..). Unanimement reconnu comme étant trop complexe à mettre en oeuvre, SGML est aujourd'hui peu à peu abanonné pour XML.</para>

      <para>
XML pour <foreignphrase>Extensible Markup Language</foreignphrase> est une norme servant à décrire des documents structurés, créé donc à partir de SGML. Il s'agit en fait d'une version simplifiée de SGML (« profil » figé de la norme, DTD optionnelle, syntaxe particulière pour les éléments vides) et plus adaptée au Web (support natif des différents codages internationaux). La version 2 de XHTML est en cours de finalisation. 
</para>

      <para>XHTML est donc un dérivé de HTML, se conformant non plus aux exigences de SGML, mais à celle de XML.</para>

      <para>
Enfin, si HTML se veut un langage de description de documents (une tentative de spécifier le fond/la structure du document sans en fixer la forme/l'affichage), CSS pour <foreignphrase>Cascading Style Sheets</foreignphrase>est un langage cette fois-ci destiné à la mise en forme du document : la façon de le présenter.  
</para>

      <sect3>
	<title>Historique</title>

	<para>
Pour bien comprendre l'évolution de ces langages, un petit retour historique (Source <ulink url="http://fr.wikipedia.com">Wikipedia</ulink>) : 
</para>
	<para>
<itemizedlist>
	    <listitem>
	      <para>	      <emphasis>1989 - 1992</emphasis> :  l'HTML a été inventé pour le World Wide Web, afin de pouvoir écrire des documents hypertextes liant les différentes ressources d'Internet. En août 1991, lorsque Tim Berners-Lee annonce publiquement le Web sur Usenet, il ne cite que le langage SGML, mais donne l'URL d'un document ayant l'extension de fichier html. Les premiers éléments du langage HTML sont le titre du document, les hyperliens, la structuration du texte en titres, sous-titres, listes ou texte brut, et un mécanisme rudimentaire de recherche par index. La description d'HTML est alors assez informelle et principalement définie par le support des divers navigateurs Web contemporains.</para>
	    </listitem>
	    <listitem>
	      <para>
<emphasis>1993</emphasis> : L'état de HTML correspond alors à ce que l'on pourrait appeler HTML 1.0. Il n'existe cependant aucune spécification portant ce nom, notamment parce que le langage était alors en pleine évolution. Un effort de normalisation était cependant en cours. À partir de fin 1993, le terme HTML+ sera utilisé pour désigner la version future de HTML. Avec le navigateur NCSA Mosaic, HTML connaît deux inventions majeures : l'invention de l'élément IMG permet d'intégrer des images (GIF ou XBM) aux pages Web (Mosaic 0.10) ; les formulaires rendent le World Wide Web interactif (Mosaic 2.0pre5) et l'ouvre aux commandes par Internet.</para></listitem>
	    <listitem>
	    <para>	     <emphasis>1994</emphasis> : Avec l'apparition de Netscape Navigator 0.9 le 13 octobre, le support de nombreux éléments de présentation est ajouté : styles de texte, clignotement, centrage... Le développement de HTML prend alors deux voies divergentes. D'une part, les développeurs de navigateurs s'attachent à maximiser l'impact visuel des pages Web. D'autre part, les concepteurs du Web proposent d'étendre les capacités de description sémantiques (logos, notes de bas de page...) et les domaines d'applications (formules mathématiques, tables) de HTML. En ceci, ils suivent les principes de SGML consistant à laisser la présentation à un langage de style. En l'occurrence, les feuilles de style en cascade (CSS) sont prévues pour HTML. Seul le support des tables est rapidement intégré aux navigateurs, notamment parce qu'il permet une très nette élaboration de la présentation. Le manque de structure du HTML alors mis en oeuvre par Netscape Navigator, puis Microsoft Internet Explorer, est parfois dénoncé comme étant de la « soupe de balises » (tag soup en anglais).</para>	 </listitem>
	    <listitem>
	    <para>
<emphasis>1995 - 1996</emphasis> : En mars 1995, le <ulink url="http://www.w3c.org">W3C</ulink> nouvellement fondé propose le résultat de ses recherches sur HTML+ : le brouillon HTML 3.0. Il comprend notamment le support des tables, des figures et des expressions mathématiques. Ce brouillon expire le 28 septembre 1995 sans donner de suites directes. Fin 1995, la RFC 1866 décrivant HTML 2.0 est finalisée. Ce document décrit HTML tel qu'il existait avant juin 1994, donc sans les nombreuses additions de Netscape Navigator.</para>	  </listitem>
	    <listitem>
	    <para>
<emphasis>1997</emphasis> : Le 14 janvier, le <ulink url="http://www.w3c.org">W3C</ulink> publie la spécification HTML 3.2. Elle décrit la pratique courante observée début 1996, donc avec une partie des additions de Netscape Navigator et Internet Explorer. Ses plus importantes nouveautés sont la standardisation des tables et de nombreux éléments de présentation. Le 18 décembre, le <ulink url="http://www.w3c.org">W3C</ulink> publie la spécification HTML 4.0 qui standardise notamment le support des styles, les cadres (frames) et les objets (généralisation des images et des applets).</para>	 </listitem>
	    <listitem>
	    <para>
<emphasis>1998 - 1999</emphasis> : La dernière spécification de HTML est la 4.01 datant du 24 décembre 1999. Elle n'apporte que des corrections mineures à la version 4.0.</para>	 </listitem>
	    <listitem>
	      
	    <para><emphasis>2000 à nos jours</emphasis> : Le développement de HTML en tant qu'application de SGML est abandonné au profit de XHTML, application de XML. La première étape est la spécification XHTML 1.0, publiée le 26 janvier 2000. Il s'agit d'une reformulation de HTML 4.01 basée sur XML au lieu de SGML. La seconde étape est la spécification XHTML 1.1, publiée le 31 mai 2001. Il s'agit d'un classement des fonctionnalités de XHTML 1.0 en modules.</para>
	 </listitem>
	  </itemizedlist>
</para>
      </sect3>    
    </sect2>

    <sect2>
      <title>Le W3C</title>
      <sect3><title>Historique</title>
	<para>
 Le W3C, le<foreignphrase> World Wide Web Consortium</foreignphrase> est fondé par Tim Berner-Lee. Depuis sa création, le W3C émet des directives et des standards web ; ces standards, appelés recommandations, sont actuellement au nombre de quelques dizaines (plus de 90).</para>
	<para>Le <ulink url="http://www.w3c.org">W3C</ulink> est un consortium international dont la mission est de : <quote>lead the World Wide Web to its full potential by developing protocols and guidelines that ensure long-term growth for the Web</quote>. Il est administré conjointement par le MIT (USA), l'ERCIM (France) et l'unversité Keyo (Japon). Il est financé par des dons provenant de particuliers, d'entreprises et de fondations.</para>

<para>Le <ulink url="http://www.w3c.org">W3C</ulink> a contribué à fournir au Web des standards permettant ainsi à n'importe quel navigateur sur n'importe quel OS de pouvoir lire les pages Internet. Le <ulink url="http://www.w3c.org">W3C</ulink> insisite également sur l'intérêt d'offrir un Internet accessible et multi langages.</para>
      </sect3>

      <sect3><title>Des standards ? </title>
	<para>
Le <ulink url="http://www.w3c.org">W3C</ulink> a établi depuis quelques années déjà des normes : HTML, CSS, DOM, XML etc...
Malheureusement, de nombreux développeurs (designers) web ne connaissent pas bien ces languages et ont encore en tête les balises propriétaires des navigateurs les plus célèbres d'avant la standardisation : Internet Explorer 4, Netscape 4.x. Et les logiciels WYSIWYG de pages HTML produisent souvent du code non standard. 
</para><para>
Ainsi, on rencontre encore des sites "<emphasis>spécifiques IE</emphasis>" et une partie de plus en plus importante d'internautes, de la bonne accessibilité à leur site. En effet, de l'eau a coulé sous les ponts et on assiste depuis 3-4 ans à la sortie régulières de nouveaux navigateurs, sur tout les systèmes (Windows, Linux, Mac, Unix, PalmOS, PocketPC...), parfois spécifiques à certaines utilisations (pour les handicapés physiques ou visuels comme les navigateurs "brailles") et qui plus est, conforme pour la plupart aux spécifications des Standards.

</para>
<para>
Il y a ainsi de nombreuses raisons de respecter les standards du <ulink url="http://www.w3c.org">W3C</ulink> :</para>
<itemizedlist>
	    <listitem>
	      <para>	     une interopérabilité et une portabilité certifiée</para>
  </listitem>
	    <listitem>
	    <para>	     une accessibilité universelle aux contenus</para>
</listitem>	    
<listitem>
	    <para>	     la production de contenu Web à moindre coût</para>
  </listitem>	    
<listitem><para>
	      tirer profit de la technologie XML
</para>  </listitem>	    
<listitem><para>
	      un contrôle qualité optimisé du travail fourni par les prestataires
  </para></listitem>	    
<listitem><para>
	      une réduction considérable du volume des documents
 </para></listitem>

	    <listitem><para>
	      un référencement plus efficace dans les moteurs de recherche
</para></listitem>
	    <listitem><para>
	      la pérennité des documents
</para></listitem>
	    <listitem><para>
	      une rétro compatibilité avec les anciens navigateurs
  </para></listitem>
	    <listitem><para>
	     pour l'avenir du Web 
  </para></listitem>	    

</itemizedlist>

      </sect3>

      <sect3><title>Validation du code </title>
	<para>Si la plupart des sites se préoccupent peu du respect des recommandations du <ulink url="http://www.w3c.org">W3C</ulink> (exemple : www.clicanoo.com, www.orange.re), il est bien sûr souhaitable de produire du code valide. La difficultés réside dans l'utilisation de plus en plus importante d'objets de toutes provenance au coeur d'une page, et surtout dans les appels à des scripts de programmation (Php, Perl, Python, Ruby, ..) qui peuvent parfois rendre la validation complexe. </para>
	<para>Le <ulink url="http://www.w3c.org">W3C</ulink> propose un moteur de validation de page HTML en ligne, à l'adresse <ulink url="http://validator.w3.org/">http://validator.w3c.org</ulink>. Je vous encourage vivement à produire du code propre et valide ! Le site <ulink url="http://www.proze.net/outils/validation-site.html?referer">www.proze.ne</ulink>t propose également un moteur de validation capable de valider l'ensemble d'un site. </para>
	</sect3>
    </sect2>

    <sect2>
      <title>La structure du langage</title>

      <sect3><title>Langage de balisage</title>
<para>	Les langages de balisage représentent une classe de langages spécialisés dans l'enrichissement d'information textuelle. Ils opèrent grâce aux balises, unités sémantiques délimitant chacune un ensemble à l'intérieur d'un fichier texte, souvent en unicode.</para>

<para>	L'inclusion de balises permet de transférer à la fois la structure du document et son contenu. Cette structure est compréhensible par un programme informatique, ce qui autorise un affichage personnalisé selon des règles pré-établies ; la typographie (en premier lieu la fonte) et d'autres éléments de présentation peuvent changer. On peut de plus inclure des éléments non-textuels. </para>

	<example>
	  <title>Une balise html</title>
	  <programlisting width="80">
<![CDATA[<p>  Voici donc un paragraphe délimité par ses 2 balises - ouvrante et fermante </p>]]> 
</programlisting>
	</example>

<para>Il existe également des balises qui n'encadre pas de texte : </para>
	<example>
	  <title>Une balise html</title>
	  <programlisting width="80">	  <computeroutput>
<![CDATA[<hr>  La balise "ligne horizontale"]]> 
</computeroutput></programlisting>
	</example>
	<para>La liste des balises autorisées par le langage est fonction de sa <acronym>DTD</acronym> - <foreignphrase>Document Type Definition</foreignphrase>. Ce jeu de tags varie donc dans un même langage, d'une version à une autre.</para>

<para>Si en HTML, la casse des mots clefs n'a pas d'importance, en XHTML les noms et les valeurs des balises doivent être écrites en minuscule. Et toutes les balises doivent être fermées en XHTML, même si elles ne le sont pas en HTML. </para>
	<example>
	  <title>Une balise xhtml</title>
	  <programlisting width="80">	  
<![CDATA[<hr></hr>  La balise "ligne horizontale" en XHTML
On peut choisir de l'écrire <hr />]]> 
</programlisting>
	</example>
      </sect3>


      <sect3><title>Attributs</title>
	<para>Les balises HTML peuvent être accompagnés d'attributs qui prennent différentes valeurs selon les besoins. Ainsi, on pouvait (on peut toujours encore !) spécifier certaines propriétés d'affichage directement en HTML, alors que c'est normalement le rôle des feuilles de styles CSS. </para>
<para>Néanmoins, certains attributs sont utiles en HTML, et permettent de donner certaines spécificités. Un exemple peut-être celui d'une liste à puce que l'on souhaite faire commencer au numéro 4 : </para>
<example>
	  <title>Atttributs d'une liste ordonée</title>
	  <programlisting width="80">	  
<![CDATA[<ol>
<li value="4"> cet item de liste a le numéro 4.</li>
<li> cet item de liste a le numéro 5.</li>
<li> cet item de liste a le numéro 6.</li>
</ol>]]> 
 </programlisting>
	</example>
	<para>La liste des attributs possibles pour une balise HTML est définie dans la recommandation du <ulink url="http://www.w3c.org">W3C</ulink>. Certains attributs sont notés <emphasis>obsolètes</emphasis>, et ne doivent plus être utilisés (mais sont tolérés dans le cadre d'une DTD transitoire </para>
      </sect3>
      <sect3><title>Identifiant / Classe</title>
	<para>Deux attributs particuliers sont applicables à toutes les balises HTML : <command>id </command>et <command>class</command>. <command>id</command> assigne un identifiant unique à un élément (qui peut être vérifié par un analyseur SGML). L'attribut <command>id</command> a plusieurs rôles dans HTML : 
<itemizedlist>
	    <listitem><para>
 comme sélecteur dans une feuille de style ;</para></listitem>
	    <listitem><para>
    comme ancre cible de liens hypertextes ;</para></listitem>
	    <listitem><para>
    comme moyen d'appeler un élément particulier à partir d'un script ;</para></listitem>
	    <listitem><para>
    comme nom d'un élément OBJECT déclaré ;</para></listitem>
	    <listitem><para>
    pour un traitement universel par les agents utilisateurs (par exemple, pour identifier les champs lors de l'extraction des données des pages HTML pour peupler une base de données, pour traduire des documents HTML dans d'autres formats, etc.).</para></listitem></itemizedlist>
</para>
	<para>L'attribut <command>class</command>, au contraire, assigne un ou plusieurs noms de classe à un élément ; on peut dire de l'élément qu'il appartient à ces classes. Un nom de classe peut être partagé par plusieurs instances d'éléments. L'attribut <command>class</command> a plusieurs rôles dans HTML :
<itemizedlist>
	    <listitem><para>
    comme sélecteur dans une feuille de style (quand l'auteur souhaite assigner une information de style à un ensemble d'éléments) ;</para></listitem>
	    <listitem><para>
    pour un traitement universel par les agents utilisateurs.</para></listitem></itemizedlist>
</para>

      </sect3>
<sect3><title>Emboitements</title>
<para>Bien que HTML soit un langage de description de documents plus qu'un langage de programmation, on retrouve certaines règles propre à la programmation dans l'écriture de code : la lisibilité, l'indentation, les commentaires et l'emboitement des blocs. </para>
<para>L'emboitement des blocs consiste à fermer les blocs fils avant les blocs parents. L'indentation du code peut aider à retrouver facilement la hiérarchie des blocs, et les commentaires de retrouver la construction de la page. </para>
<example>
	  <title>Erreurs de blocs</title>
	  <programlisting width="80">	  
<![CDATA[<p>Un exemple de paragraphe avec une liste ordonnée 
<ol>
<li value="4"> cet item de liste a le numéro 4.</li>
<li> cet item de liste a le numéro 5.</li>
<li> cet item de liste a le numéro 6.</li>
</p></ol>]]> 
 </programlisting>
	</example>
</sect3>
      <sect3><title>La documentation du <ulink url="http://www.w3c.org">W3C</ulink></title>
	<para>Vous l'aurez compris, les recommandations de <ulink url="http://www.w3c.org">W3C</ulink> vont rapidement devenir votre bible du développeur Web ! Les recommandations sont disponibles en plusieurs langues, et voici les liens pour :
<itemizedlist>
	    <listitem><para>
	      <ulink url="http://www.la-grange.net/w3c/html4.01/cover.html">HTML 4.0</ulink> </para></listitem>
	    <listitem><para>
	      <ulink  url="http://www.la-grange.net/w3c/xhtml1/">XHTML 1.0</ulink></para></listitem>
	    <listitem><para>
	     <ulink  url="http://www.yoyodesign.org/doc/w3c/css2/cover.html">CSS 2.0</ulink></para></listitem></itemizedlist>
</para>
<para>La documentation propose l'ensemble des balises et des attributs disponibles dans le langage. C'est donc LA source à consulter en cas de doute sur la syntaxe d'une balise. Voici un exemple de la documentation : </para>
<example>
	  <title>Documentation de la balise IMG</title>
	  <programlisting width="80">	  
<![CDATA[<!-- Pour éviter les problèmes avec les agents utilisateurs
   en mode texte seul ainsi que pour rendre le contenu d'une image
   compréhensible et navigable pour les utilisateurs d'agents
   utilisateurs non-visuels, il est nécessaire de fournir une
   description avec ALT, et pour éviter les images cliquables
   côté serveur -->
<!ELEMENT IMG - O EMPTY                -- image incorporée -->
<!ATTLIST IMG
  %attrs;                              -- %coreattrs, %i18n, %events --
  src         %URI;          #REQUIRED -- URI de l'image à incorporer --
  alt         %Text;         #REQUIRED -- description brève --
  longdesc    %URI;          #IMPLIED  -- lien vers une description longue
                                          (en complément de l'attribut alt) --
  name        CDATA          #IMPLIED  -- nom de l'image destiné aux scripts --
  height      %Length;       #IMPLIED  -- surclasse la hauteur --
  width       %Length;       #IMPLIED  -- surclasse la largeur --
  usemap      %URI;          #IMPLIED  -- utiliser une image cliquable côté client --
  ismap       (ismap)        #IMPLIED  -- utiliser une image cliquable côté serveur --
  >
]]> 
 </programlisting>
	</example>
      </sect3>
    </sect2>
    <sect2>
      <title>Squelette d'un fichier XHTML</title>
      <para>Nous avons donc vu que HTML est un langage de description. Mais il en existe plusieurs versions sur Internet, que chaque navigateur doit pouvoir lire. De plus, il est important pour les différents moteurs de recherches d'avoir des informations sur les documents analysés par les robots. Ainsi, une page web est composée de plusieurs parties : 
<itemizedlist>
	  <listitem><para>
Définition de type de document : quels sont la version du langage, et le codage des caractères</para></listitem>
	  <listitem><para>
Entête : des méta-informations sur la page (auteur, date, mots clefs, ...)</para></listitem>
	  <listitem><para>
Corps : ce qui s'affichera dans le navigateur</para></listitem></itemizedlist>
Globalement, un fichier HTML est donc de ce type : 
<example>
	  <title>Squelette HTML </title>
	  <programlisting width="80">	  
<![CDATA[<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//<ulink url="http://www.w3c.org">W3C</ulink>//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<!-- le contenu de ma page -->
</body>
</html>
]]> 
 </programlisting>
	</example>
</para>
<sect3><title>La DTD</title>
<para>Il est nécessaire d'indiquer en tout début de page quel est le langage que l'on va utiliser. Pour cela nous disposons pour chaque langage (HTML, XHTML) 3 types de DTD : 
	<itemizedlist>
	  <listitem><para>
	    <emphasis>transitoire</emphasis> : cette DTD permet certains abus d'écriture de code. On peut utiliser des balises obsolètes, utiliser des raccourcis (certaines balises n'ont par exemple pas besoin d'être fermées), utiliser des attributs de présentation. </para></listitem>
	  <listitem><para>
	    <emphasis>stricte</emphasis> : cette DTD demande un plus grand respect des recommandations. </para></listitem>
	  <listitem><para>
	    <emphasis>cadre</emphasis> : DTD utilisée pour les cadres (fractionnement de fenêtre)</para></listitem></itemizedlist>
</para>
<example>
	  <title>Examples de déclaration de DTD</title>
	  <programlisting width="80">	  
<![CDATA[<!DOCTYPE HTML PUBLIC "-//<ulink url="http://www.w3c.org">W3C</ulink>//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd"> 

<!DOCTYPE HTML PUBLIC "-//<ulink url="http://www.w3c.org">W3C</ulink>//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<!DOCTYPE html PUBLIC "-//<ulink url="http://www.w3c.org">W3C</ulink>//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!DOCTYPE html PUBLIC "-//<ulink url="http://www.w3c.org">W3C</ulink>//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
]]> 
 </programlisting>
	</example>
</sect3>

<sect3><title>Les balises d'entêtes</title>
	<para>L'élément <command>head</command> contient des informations sur le document courant, tels que son titre, des mots-clés que les moteurs de recherche peuvent exploiter et d'autres données qui ne sont pas considérées comme faisant partie du contenu du document. Les agents utilisateursnavigateurs ne restituent généralement pas les éléments qui apparaissent comme contenu de l'élément <command>head</command>. Il peuvent cependant rendre les informations contenues par l'élément <command>head</command> disponibles aux utilisateurs au moyen d'autres mécanismes.</para>
	<para>La balise <command>title</command> est une balise oligatoire, elle contient le titre de la page. Il apparaîtra par exemple dans la barre de titre de la fenêtre du navigateur, ou dans les moteurs de recherche.</para>
	<para>Les autres balises d'entête sont pour la plupart des balises <command>meta</command>, qui contiennent des informations complémentaires sur la page et son contenu. Ces informations sont spécifiées en renseignant des valeurs d'attributs. En particlulier on retiendra les suivants : </para>

	<itemizedlist>
	  <listitem><para>
http-equiv="Content-Type" content="text/html; charset=iso-8859-1" : indique le jeu de caractère utilisé</para></listitem>
	  <listitem><para>
name="keywords" content=" .... " : donne une liste de mots clefs</para></listitem></itemizedlist>

</sect3>
 <sect3><title>Convention de nommage des fichiers</title>
	<para>Une erreur fréquemment commise concerne le nommage des fichiers d'un site Internet. En effet, les personnes travaillant sous Windows s'autorisent tout genre de fantaisies pour nommer les fichiers. Un exemple courant est l'utiisation d'espace et de majuscules dans les noms de fichiers. Ceci n'a pas grande importance sous Windows, mais une fois le site mis en ligne, peut apporter quelques surprise ...</para>
	<para>Il faut donc prendre dès le début de bonnes habitudes pour nommer les fichiers : 
<itemizedlist>
	    <listitem>
	      <para>la page par défaut d'un répertoire est nommée index.html</para></listitem>
	    <listitem>
	      <para>les noms de fichiers (html, images, php, ...) ne comportent pas d'espaces, pas de caractères spéciaux, pas de majuscules</para></listitem>
	    <listitem>
	      <para>les noms des répertoires respectent les mêmes règles</para></listitem></itemizedlist>
 </para>	

</sect3>
 
    </sect2>


    <sect2>
      <title>Exercices d'applications</title>
      <para>
Tout au long de ce cours, nous allons utiliser comme exemple une application web présentant les stagiaires de la formation. Dans cette première partie, vous allez vous attacher à la création de deux pages distinctes, <emphasis>from scratch</emphasis> c'est-à-dire en utilisant tout simplement un éditeur de texte. 
</para>
<sect3><title>Fiche stagiaire</title>
	<para>La première page est une page de présentation d'un stagiaire, elle contiendra plus tard un certain nombre d'informations sur chacun d'entre vous. Vous devez la créer en utilisant la <emphasis>DTD XHTML STRICT</emphasis>. Une fois la page validées, faites en sorte de suivre les indications du <ulink url="http://www.w3c.org">W3C</ulink> pour faire apparaître le logo XHTML  dans la page.</para>
<para>Dans un premier temps, elle ne devra contenir qu'une seule phrase de présentation. Vous vous attacherez à soigner les balises d'entête. Bien sûr, la page devra être valide sur le <ulink url="http://www.w3c.org">W3C</ulink>.</para>
</sect3>

<sect3><title>Page de liens</title>
	<para>La seconde page est une page dans laquelle vous collerez tous les liens utiles que nous rencontrerons pendant la formation. Vous devez la créer en utilisant la <emphasis>DTD XHTML TRANSITIONAL</emphasis> </para>
<para>Dans un premier temps, elle ne devra contenir qu'une seule phrase de présentation. Vous vous attacherez à soigner les balises d'entête. Bien sûr, la page devra être valide sur le <ulink url="http://www.w3c.org">W3C</ulink>. Une fois la page validées, faites en sorte de suivre les indications du <ulink url="http://www.w3c.org">W3C</ulink> pour faire apparaître le logo XHTML  dans la page.</para>
</sect3>

     
    </sect2>
  </sect1>


  <!--  ================================= Chapitre 2 ============================= -->
  <sect1>
    <title>Formatage des données en XHTML</title>
    
    <para>
</para>

    <sect2>
      <title>Formatage du texte</title>
          <para>Dans cette section, nous allons examiner quelques balises permettant de structurer le texte d'un document. Nous ne nous intéressons pas à la mise en forme. </para>
<sect3>
	<title>Phrases</title>
<para>Un certain nombre de balises permettent d'enrichier les informations contenues dans une phrase. Même si elles ne sont pas souvent employées, il peut être intéressant de les connaître : </para>

	<para>	<itemizedlist>
	    <listitem>
	      <para><command>EM</command> :
    Indique une mise en exergue.</para></listitem>
	    <listitem>
	      <para><command>STRONG</command> :
    Indique une mise en exergue plus forte.</para></listitem>
	    <listitem>
	      <para><command>CITE</command> :
    Contient un extrait ou une référence vers une autre source</para></listitem>
<listitem>
	      <para><command>DFN</command> :
    Indique qu'il s'agit de l'instance définissante du terme englobé.</para></listitem>
<listitem>
	      <para><command>CODE</command> :
    Désigne un fragment de code informatique.</para></listitem>
<listitem>
	      <para><command>SAMP</command>:
    Désigne un exemple des sorties d'un programme, d'un script, etc.</para></listitem>
<listitem>
	      <para><command>KBD</command>:
    Indique un texte que doit saisir l'utilisateur.</para></listitem>
<listitem>
	      <para><command>VAR</command>:
    Indique l'instance d'une variable ou le paramètre d'un programme.</para></listitem>
<listitem>
	      <para><command>ABBR</command>:
    Indique une forme abrégée (par exemple, « WWW », « HTTP », « i.e. », etc.).</para></listitem>
<listitem>
	      <para><command>ACRONYM</command>:
    Indique un acronyme (par exemple, « radar », « LAN », etc.). </para></listitem></itemizedlist></para>
</sect3>
    <sect3>
      <title>Les paragraphes</title>
          <para>
Les phrases sont contenues généralement dans des paragraphes. Nous avons vu dans le premier chapitre un exemple de l'utilisation de la balise <command>p</command>. Il est possible de sauter une ligne dans un même paragraphe en utilisant la balise <command>br</command>. Une fois de plus, il est important de na pas se soucier de la présentation du document lors du découpage du contenu en paragraphe : c'est le rôle des feuilles de style CSS, et non d'HTML. 
</para>
    </sect3>   
    <sect3>
      <title>Les titres</title>
          <para>
Enfin , tout document devrait posséder une hiérarchisation de titres : titre de chapitre, titre de paragraphe, titre de sous-paragrpahe, etc... Cette hiérarchie est représentée en HTML par les balises H1, H2, H3, H4, H5, H6, du plus important au moins important. Il est important de sousligner que c'est l'agent utilisateur (le navigateur internet par exemple), qui s'occupe de la numérotation des titres ! Cette numérotation est généralement du style 1, 1.1, 1.1.1, 1.1.2, 1.2 ...
</para>
<para>Voici un exemple de document utilisant quelques unes des balises précédentes : 
<example>
	  <title>Squelette HTML </title>
	  <programlisting width="80">	  
<![CDATA[  <h1>Titre du chapitre</h1>
  <p>Un exemple de hiérarchie de paragraphes</p>
  <h2>Titre de niveau 2</h2>
  <p>Voici <abbr>qqs</abbr> exemples de balises <acronym>HTML</acronym>, enrichissant le contenu d'un 
paragraphe. Il n'agit ici de ne préciser que le <strong>fond<strong> du document, et non sa forme. </p>]]> 
 </programlisting>
	</example>
</para>
    </sect3>   
    </sect2>


    <sect2>
      <title>Liens hypertextes</title>
<sect3><title>URL, URI</title>
	<para>Une <acronym>URI</acronym> -<foreignphrase> Universal Ressource Identifier</foreignphrase> - est un pointeur qui identifie de façon certaine une ressource disponible quelque part. Une URI peut être :  <itemizedlist>
	    <listitem>
	      <para>URN : Qui permet d'appeler une ressource par son nom </para></listitem>
	    <listitem>
	      <para>URC : Qui décrit les caractéristiques d'une ressource</para></listitem>
	    <listitem>
	      <para>URL : Qui donne sa localisation (ou plutôt le mode d'emploi pour l'atteindre).</para></listitem>
</itemizedlist> </para>
	<para>L'<acronym>URL</acronym> - <foreignphrase>Uniform Ressource Location</foreignphrase> - va donc permettre à un lien hypertexte d'atteindre une ressource. Une URL est composé de la manière suivante : </para>
<para>
<programlisting width="90">	  
<![CDATA[{scheme}://<nom d'utilisateur>:<mot de passe>@<hôte ou adresse IP>:<port de connexion>/<extension spécifique au protocole>]]> 
 </programlisting>
</para>
<para> on dispose ainsi de plusieurs formes de ressources hypertextes : </para>
<para>
<example><title>URL's</title>
<programlisting width="90">	  
<![CDATA[
http://www.kurzweg.info/InitLL_2007/asrest/index.htm
ftp://ftp.freebsd.org
../../asrest/index.htm
mailto:ivan.kurzweg@wanadoo.fr
]]> 
 </programlisting></example>
</para>
	<para>Comme nous venons de le voir dans l'exemple précédent, il est possible d'écrire le lien vers la page <filename>index.hml</filename> de deux manières :
<itemizedlist>
	    <listitem>
	      <para>en utilisant la référence (<emphasis>path, chemin</emphasis>) <emphasis>absolu</emphasis></para></listitem>
	    <listitem>
	      <para>en utilisant la référence<emphasis> relative</emphasis></para></listitem> </itemizedlist>
Dans le cas de la référence relative, on cherche un objet dans le même espace de noms, en lui donnant le chemin complet depuis l'appelant. La remontée dans l'arborescence de fichier est possible en utilisant le raccourci <command>..</command> qui siginfie <emphasis>répertoire parent</emphasis>. Ainsi, l'exemple précédent<filename> ../../asrest/index.html</filename> signifie que l'on descend de deux répertoires depuis le répertoire courant (celui où la page en cours est stocké, qui apparait dans la barre d'adresse), puis on remonte dans le répertoire asrest pour atteindre la page <filename>index.html</filename>. 
</para>
	<note>
	<para>
Attention, il est important de bien comprendre la nécessité de donner des chemins relatifs quand les objets appartiennent au même espace de noms. En effet, lors, par exemple, de la mise en ligne d'un site Internet, toutes les références changent : un chemin noté <filename>/home/ikare/public_html/InitLL/images/logo.jpg</filename> sur un poste en local n'aura plus aucune valeur chez un hébergeur Internet ! Par contre,<filename> ../images/logo.html</filename> sera toujours valide.</para></note>


</sect3>

<sect3><title>La balise anchor</title>
	<para>La balise <command>a </command>a deux fonctions : 
<itemizedlist>
	    <listitem>
	      <para>faire une ancre : spécificier dans la page grâce à l'attribut <command>name</command> un point d'accès hypertexte</para></listitem>
	    <listitem>
	      <para>faire un lien : en spécifiant la valeur de l'attribut <command>href</command></para></listitem></itemizedlist>
Il est a noter que la documentation HTML spécifie que la valeur de l'atribut <command>alt</command> (texte secondaire) doit être renseignée. Elle sert dans le cas de navigateur n'affichant pas d'images. 
</para>
<para>
<example><title>Liens</title>
<programlisting width="90">	  
<![CDATA[
<a name="acces">Ici, un point dans la page qui sera accessible grâce à un lien vers la page suivi de #acces</a>

<a href="http://www.kurzweg.info/InitLL_2007/asrest/index.htm" alt="Vers une page de cours">
Cliquer ici pour acceder au cours</a>

<a href="#acces" alt="Vers une ancre dans la page">Et ici pour remonter !</a>
]]> 
 </programlisting></example>
</para>
</sect3>
    </sect2>   
    <sect2>
      <title>Images et multimedia</title>
          <para>Heureusement pour le Web, les pages HTML ne sont pas composées que de textes ! Malheureusement pour certains, il est possible d'y inclure des objets qui ne sont pas tous OpenSource, et loin d'être totalement portables (Flash, ActiveX, ... ). Nous nous contenterons dans cette partie d'aborder l'inclusion d'images dans une page HTML.</para>
      <para>Les formats les plus couramment utilisés dans les images sont GIF, JPG, PNG. La partie de la formation consacrée aux outils bureautique vous donnera plus d'informations sur ces différents formats. De nombreux sites sur Internet propose des comparatif, en voici : <ulink url="http://csrs.qc.ca/Goeland/proj/envolee/sacdestic/html/optimiser.html">http://csrs.qc.ca/Goeland/proj/envolee/sacdestic/html/optimiser.html</ulink>.</para>
      <note>
<para>Il est à noter que le format GIF est un format propriétaire, déposé par Unisys, PNG est par contre libre.</para></note>
      <para>La balise <command>img</command> permet d'inclure une image dans une page HTML. La recommandation du W3C nous donne la définition suivante : 
<programlisting width="90">	  
<![CDATA[<!-- Pour éviter les problèmes avec les agents utilisateurs
   en mode texte seul ainsi que pour rendre le contenu d'une image
   compréhensible et navigable pour les utilisateurs d'agents
   utilisateurs non-visuels, il est nécessaire de fournir une
   description avec ALT, et pour éviter les images cliquables
   côté serveur -->
<!ELEMENT IMG - O EMPTY                -- image incorporée -->
<!ATTLIST IMG
  %attrs;                              -- %coreattrs, %i18n, %events --
  src         %URI;          #REQUIRED -- URI de l'image à incorporer --
  alt         %Text;         #REQUIRED -- description brève --
  longdesc    %URI;          #IMPLIED  -- lien vers une description longue
                                          (en complément de l'attribut alt) --
  name        CDATA          #IMPLIED  -- nom de l'image destiné aux scripts --
  height      %Length;       #IMPLIED  -- surclasse la hauteur --
  width       %Length;       #IMPLIED  -- surclasse la largeur --
  usemap      %URI;          #IMPLIED  -- utiliser une image cliquable côté client --
  ismap       (ismap)        #IMPLIED  -- utiliser une image cliquable côté serveur --
  >]]> 
 </programlisting></para>
      <para>Le renseignement de l'attribut <command>ALT</command> est une obligation. Indiquer les dimensions d'une image, même si elles sont celles d'origine peut permettre un affichage plus rapide de la page</para>

    </sect2>   <sect2>
      <title>Listes</title>
<sect3>
	<title>Listes à puces et ordonnées</title>      

 <para>Il existe deux types de listes en HTML : listes à puces et liste ordonnées. Dans les deux cas, le principe de rédaction est le même : 
<itemizedlist>
	    <listitem>
	    <para>la balise globale <command>ul</command> ou <command>ol</command> (à puces ou ordonnée) englobe la liste</para></listitem>
	    <listitem>
	    <para>chaque élément de la liste est encadré par la balise <command>li</command></para></listitem></itemizedlist>
</para>
<para>Une fois de plus, il faut éviter toute inclusion de code lié à la présentation dans HTML. </para>
<para>
<example><title>Liste à puces</title>
<programlisting width="90">	  
<![CDATA[
<li class="tocline1"><a href="conform.html" class="tocxref">3 La conformité :  obligations et recommandations</a>
  <ul class="toc">
    <li class="tocline2"><a href="conform.html#q1" class="tocxref">3.1 Définitions</a>
    </li><li class="tocline2"><a href="conform.html#conformance" class="tocxref">3.2 La conformité</a>
    </li><li class="tocline2"><a href="conform.html#q3" class="tocxref">3.3 Les conditions d'erreur</a>
    </li><li class="tocline2"><a href="conform.html#text-css" class="tocxref">
3.4 <span class="index-def" title="text/css">Le type de contenu "text/css"</span></a>

  </li></ul>
  </li>

]]> 
 </programlisting></example>
</para>
</sect3>
 <sect3>
	<title>Listes de définitions</title>      
 <para>Le WEB est à l'origine un outil conçu pour les scientifiques. Ainsi on dispose d'une balise spéciale permettant de faire une liste de déifinitions : 
<example><title>Liste de définitions</title>
<programlisting width="90">	   
<![CDATA[
<DL>
  <DT>Dweeb
  <DD>Une jeune personne motivée qui peut évoluer
    en <EM>nerd</EM> ou en <EM>geek</EM>

  <DT>Hacker
  <DD>Un programmeur futé

  <DT>Nerd
  <DD>Une personne techniquement brillante mais socialement inepte

</DL>
]]> 
 </programlisting></example>
 </para></sect3>

    </sect2>   <sect2>
      <title>Tables </title>
         <para>L'utilisation des tables en HTML est fréquente, même si certains designers les utilisent à mauvais escient (pour cadrer une mise en page par exemple). Le principe d'écriture du code est le suivant : 
<itemizedlist>
	  <listitem>
	  <para>encadrement du tableau avec la balise <command>table</command></para></listitem>
	  <listitem>
	  <para>déclaration des lignes avec la balise <command>tr</command></para></listitem>
	  <listitem>
	  <para>déclaration des ccellules (colonnes) dans chaque ligne <command>td</command></para></listitem></itemizedlist>
</para>

<para>De ces principes découlent certaines contraintes : chaque ligne doit contenir le même nombre de colonnes. Dans des cas spéciaux, il est possible de fusionner plusieurs : 
<itemizedlist>
	  <listitem>
	  <para>ligne en utilisant l'attribut <command>rowspan</command></para></listitem>
	  <listitem>
	  <para>cellules en utilisant l'attribut <command>colspan</command></para></listitem></itemizedlist>
</para> 

<para>Voici un exemple de déclaration de tabeau (source W3C) : </para>
 <example><title>Un tableau avec des cellules fusionnées</title>
<programlisting width="90">	   
<![CDATA[
<TABLE border="1"
          summary="Cette table donne quelques statistiques sur les
                   drosophiles : hauteur et poids moyens, et le
                   pourcentage de celles ayant des yeux rouges
                   (pour les m&acirc;les et les femelles).">
<CAPTION><EM>Une table test avec des cellules fusionn&eacute;es</EM></CAPTION>
<TR><TH rowspan="2"><TH colspan="2">Moyenne
    <TH rowspan="2">Yeux<BR>rouges
<TR><TH>hauteur<TH>poids
<TR><TH>M&acirc;les<TD>1.9<TD>0.003<TD>40%
<TR><TH>Femelles<TD>1.7<TD>0.002<TD>43%
</TABLE>


]]> 
 </programlisting></example>
<para>Ce qui nous donnerait le résultat suivant : </para>
      <figure>
	<title>Tableau</title>
 <mediaobject>
                <imageobject>
                  <imagedata fileref="mergedcells.gif" />
                </imageobject>
              </mediaobject>
      </figure>

    </sect2>   <sect2>
      <title>Cadres</title>
      <para>Les jeux de cadres -<foreignphrase> frameset</foreignphrase> - permettent de diviser la page du navigateur en plusieurs fenêtres indépendantes. Ils sont de moins en utilisés, car posent quelques problèmes dans le référencement opéré par les robots, et par l'affichage dans des navigateurs non-visuels. Par conséquent, je vous renvoie à la documentation W3C pour plus d'informations. 
</para>    
    </sect2>
  

    <sect2>
      <title>Exercices d'applications</title>
      <para>Nous allons maintenant compléter les pages créées dans le premier chapitre. </para>
      <itemizedlist>
	<listitem>
	<para>Page "stagiaire" : vous allez devoir entrer toutes les informations nécessaires dans cette page, en utilisant comme cadre principal un tableau.</para> </listitem>
	<listitem>
	  <para>Page liens : sans utiliser de tableau, proposez une classification des liens en 4 parties : HTML, CSS, PHP, MySQL. Entrez quelques liens dans la page</para></listitem></itemizedlist>

<para>Créez ensuite une page de garde, nommée index.html, qui possède une image et deux liens vers les pages précédentes. </para>
      <note>
<para>Bien sûr, vos pages doivent être toujours valides W3C.</para></note>
    </sect2>
  </sect1>


  <!--  ================================= Chapitre 3 ============================= -->
  <sect1>
    <title>CSS</title>
   

    <sect2>
      <title>Présentation des feuilles de style</title>

      <para>La séparation du fond de la forme est une recommandation récurrente au W3C. En effet, le concepteur est responsable du fond du document : il
      organise son discours suivant une hiérarchie simple : un document est composé d'un ensemble de paragraphes qui possèdent éventuellement des
      titres. Les paragraphes peuvent prendre différentes formes : un texte simple, une citation, une liste à  puces, une liste ordonnée, un tableau,
      ... Les titres sont définis en appliquant une structuration à  six niveaux (accessibles par les balises <command>&#60;h1&#62;</command> à 
      <command>&#60;h6&#62;</command>).</para>

      <para>La responsabilité du navigateur est alors de réaliser une mise en page adaptée au document défini par le concepteur. C'est le navigateur
      qui est chargé de faire ressortir les titres des paragraphes (en changeant la police par exemple), de définir la largeur des colonnes des
      tableaux afin d'obtenir un affichage du document agréable à  lire. Pour s'acquitter de cette tàche, les navigateurs appliquent un ensemble de
      règles par défaut. Par exemple, le texte compris entre les balises <command>&#60;h1&#62;</command> et <command>&#60;/h1&#62;</command> sera
      affiché en gras avec une taille de police supérieure à  la taille d'un texte classique. Les feuilles de style (<emphasis>Cascading Style Sheets
      (CSS)</emphasis>) renforcent les concepteurs dans cette  philosophie. Elles ont été introduites en 1996 par le W3C. Aujourd'hui,
      tous les navigateurs internet supportent la définition de feuilles de style. Elles permettent de définir l'ensemble des règles par défaut
      appliquables par un navigateur à  une balise html quelconque. Ainsi, les feuilles de style permettent de préciser, par exemple, la couleur de
      fond d'un paragraphe introduit par les balises <command>&#60;p&#62;</command> et <command>&#60;/p&#62;</command>. Il existe deux recommandations du W3C concernant les feuilles de style : c'est pourquoi nous parlons des recommandations <emphasis>CSS1</emphasis> et <emphasis>CSS2.</emphasis> Ces recommandations sont disponibles en français à  l'adresse suivante : <ulink url="http://www.yoyodesign.org/doc/w3c/css.html.fr">http://www.yoyodesign.org/doc/w3c/css.html.fr</ulink></para>

      <para>Dans ce chapitre, nous verrons dans un premier temps <emphasis>la       syntaxe et les propriétés des sélecteurs</emphasis> : comment nous
      pouvons modifier l'apparence d'une balise en précisant la valeur associée à  chaque propriété liée à  cette balise. Ensuite, nous       examinerons <emphasis>la division d'un document</emphasis>, ou comment modifier l'apparence d'une partie d'un document en le séparant explicitement (à  l'aide des balises <command>&#60;div&#62;</command> et <command>&#60;span&#62;</command>) du reste du document. Enfin, nous verrons comment la recommandation CSS2 permet de <emphasis>fixer précisément la position d'une image</emphasis> ou de tout objet au sein d'une page HTML.</para>
    </sect2>

    <sect2>
      <title>Syntaxe et propriétés des sélecteurs</title>

      <para>La définition des éléments d'une feuille de style respecte une
      syntaxe relativement simple. Dans un premier temps, nous allons définir
      la syntaxe utilisée dans une feuille de style externe (c'est à  dire
      faisant l'objet d'un fichier distinct du document html). On appelle
      <emphasis>sélecteur</emphasis> toute balise HTML (<command>&#60;h1&#62;,
      &#60;p&#62;, ...</command>) privée des caractères <command>&#60;</command>
      et <command>&#62;</command>. Chaque sélecteur possède un ensemble de
      propriétés qui peuvent être définies par une (ou plusieurs) feuilles de
      style. Par exemple, la police de caractères utilisée, sa taille, sa
      couleur ou bien encore la couleur du fond,... Les recommandations CSS1
      et CSS2 définissent 53 propriétés. Pour définir un ensemble de
      propriétés associées à  une balise HTML, la syntaxe est la suivante :
      <command>sélecteur {propriété1 :valeur1;propriété2 :valeur2;...
      ;propriétén :valeurn}</command> Par exemple, si nous souhaitons fixer la
      couleur d'arrière-plan d'un document, il suffit de définir :
      <command>body {background-color :white}</command> Enfin, il est possible
      de définir une (ou plusieurs) propriété(s) pour un groupe de sélecteurs.
      La syntaxe à  utiliser dans ce cas est assez simple, il nous suffit de
      séparer chaque sélecteur par des virgules avant de définir les valeurs
      associées aux propriétés. Voici par exemple comment justifier à  droite
      les titres de niveau 1 et 2 : <command>h1, h2 {text-align : right}</command></para>

      <sect3>
        <title>Portée d'une feuille de style</title>

        <para>Les recommandations du W3C concernant les feuilles de style
        autorisent non seulement la définition de feuilles de style externes,
        mais aussi la définition de propriétés directement à  l'intérieur d'une
        page HTML. Dans ce cas, la syntaxe utilisée est légèrement différente
        que celle déjà  présentée. En fait, nous pouvons modifier localement
        les propriétés liées à  une balise particulière d'un document HTML ou
        bien définir, toujours à  l'intérieur de la page, l'ensemble des
        propriétés à  appliquer à  toutes les balises du document.</para>

        <sect4>
          <title>Utilisation locale</title>

          <para>Pour définir au niveau d'une balise précise les valeurs de ses
          propriétés, il est nécessaire de définir l'attribut style de cette
          balise. L'utilisation de l'attribut <command>&#60;style&#62;</command>
          à  l'intérieur du code HTML (entre <command>&#60;body&#62;</command>
          et <command>&#60;/body&#62;</command> permet de modifier l'apparence
          d'un élément : <programlisting>&#60;sélecteur style=&#34;propriété :valeur&#34;&#62;</programlisting>
          Voici un exemple où nous définissons la couleur de fond de la page
          et du premier paragraphe (respectivement à  blanc et à  bleu), nous
          modifions la police de caractères utilisée pour le titre du premier
          paragraphe (police helvetica) et enfin, nous modifions également la
          couleur du texte du second paragraphe (en vert foncé) :</para>

          <example>
            <title>Feuille de style locale</title>

            <para><programlisting>&#60;!DOCTYPE HTML PUBLIC &#34;//W3C//DTD HTML 4.01 Transitional//EN&#34;&#62;
&#60;html&#62;
&#60;head&#62;
&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html;charset=iso-8859-1&#34;&#62;
&#60;title&#62; Utilisation locale des feuilles de style &#60;/title&#62;
&#60;/head&#62;
&#60;body style=&#34;background-color : white&#34;&#62;
&#60;h1 style=&#34; font-family : helvetica ; border-style : inset &#34;&#62;
CE TITRE UTILISE LA POLICE HELVETICA &#60;/h1&#62;
&#60;p style=&#34;background-color : blue&#34;&#62;
La couleur du texte de ce paragraphe est le bleu. &#60;/p&#62;
&#60;h1&#62; CE TITRE UTILISE TOUTES LES VALEURS PAR DEFAUT DES PROPRIETES &#60;/h1&#62;
&#60;p style=&#34;color : darkgreen&#34;&#62; Ce deuxième paragraphe utilise la police par défaut,
la couleur choisie pour le texte est le vert foncé. &#60;/p&#62;
&#60;/body&#62;
&#60;/html&#62;
</programlisting></para>
          </example>
        </sect4>

        <sect4>
          <title>Utilisation globale</title>

          <para>L'utilisation locale des feuilles de style se montre très
          rapidement limitée. En effet dans la majorité des cas, la définition
          des attributs est suffisante pour obtenir les mêmes effets. C'est
          pourquoi, il est recommandé de définir des feuilles de style
          globales. En utilisant des feuilles de style globales, nous obtenons
          la garantie d'une mise en page uniforme de toute la page ; garantie
          que nous ne pouvons obtenir en utilisant des feuilles locales ou
          bien la définition d'attributs. La définition d'une feuille de style
          globale a lieu dans la partie entête du document (entre les balises
          <command>&#60;head&#62;</command> et <command>&#60;/head&#62;</command>).
          Une feuille de style globale est introduite par la balise
          <command>&#60;style&#62;</command> et terminée par la balise
          <command>&#60;/style&#62;</command>. Il est conseillé de placer
          entre commentaires les propriétés définies : ainsi les navigateurs
          ne supportant pas les feuilles de style les ignoreront. Dans
          l'exemple suivant, nous définissons la couleur par défaut du fond de
          la page, des paragraphes ainsi que la police des titres de niveau 1.</para>

          <para><example><title>Utilisation globale des feuilles de styles</title><para><programlisting>&#60;!DOCTYPEHTMLPUBLIC&#34;-//W3C//DTD  HTML4.01Transitional//EN&#34;&#62;
&#60;html&#62;
&#60;head&#62;
&#60;meta http-equiv=&#34;Content-Type&#34;content=&#34;text/html;charset=iso-8859-1&#34;&#62;
&#60;title&#62;Utilisation globale des feuilles de style&#60;/title&#62;
&#60;style type=&#34;text/css&#34;&#62;
&#60;!--body{background-color:white} 
p{background-color:lightgreen;color:darkgreen}
h1{font-family:helvetica}
--&#62;
&#60;/style&#62;
 &#60;/head&#62;
&#60;body&#62;
&#60;h1&#62;Propriétés de la balise &#38;lt;body&#62;&#60;/h1&#62;
&#60;p&#62;Nous redéfinissons la propriété &#60;i&#62;background-color&#60;/i&#62; du sélécteur
&#60;i&#62;body&#60;/i&#62; à  blanc.&#60;/p&#62;
&#60;h1&#62;Propriétés de la balise &#38;lt;p&#62;&#60;/h1&#62;
&#60;p&#62;Chaque paragraphe a pour couleur de fond le vert clair et le texte
est écrit en vert foncé.&#60;/p&#62;
&#60;h1&#62;Propriétés de la balise &#38;lt;h1&#62;&#60;/h1&#62;
&#60;p&#62;La police de caractères de la balise &#38;lt;h1&#62;est &#60;i&#62;helvetica.&#60;/i&#62;&#60;/p&#62;
&#60;/body&#62;
&#60;/html&#62;</programlisting>></para></example></para>
        </sect4>

        <sect4>
          <title>Feuilles de style externes</title>

          <para>Comme vous l'avez sans doute compris, une feuille de style
          regroupe un ensemble de règles qui indique au navigateur comment il
          doit interpréter (ou afficher) chaque balise.</para>

          <para>Ces règles peuvent être définies directement dans le document
          HTML (utilisation locale ou globale), ou bien  (et c'est beaucoup
          plus intéressant) à  l'extérieur du document. L'avantage des
          feuilles de style externes réside dans le fait de pouvoir appliquer
          un même ensemble de règles à  toutes les pages d'un site internet, ce
          qui est impossible avec une utilisation locale ou globale. Supposons
          définie une feuille de style nommée <filename>style.css</filename>, dont
          voici le contenu :</para>

          <para><programlisting>h1,h2{text-align:center}
h3,h4{text-align:right;color:rgb(50%,50%,0)}</programlisting></para>

          <para>Vous remarquerez comment il est aisé de créer une nouvelle
          couleur à  l'aide d'une feuille de style (ici, un jaune clair). Il
          est également possible de préciser l'intensité de chaque composante
          non pas en pourcentage mais par une valeur comprise entre 0 et 255.
          Pour lier (appliquer) cette feuille de style à  un document html, il
          nous suffit de définir la balise <command>&#60;link&#62;</command>
          dans ce document :</para>

          <para><programlisting>&#60;!DOCTYPEHTMLPUBLIC&#34;-//W3C//DTDHTML4.01Transitional//EN&#34;&#62;
&#60;html&#62;
&#60;head&#62;
&#60;meta http-equiv=&#34;Content-Type&#34;content=&#34;text/html;charset=iso-8859-1&#34;&#62;
&#60;title&#62;Feuille de style externe&#60;/title&#62;
&#60;link rel=stylesheet type=&#34;text/css&#34; href=&#34;v2l.css&#34; title=&#34;v2l&#34;&#62;
&#60;/head&#62;
&#60;body&#62;
&#60;h1&#62;Ce titre est centré&#60;/h1&#62;
&#60;h2&#62;Ce titre est également centré&#60;/h2&#62;
&#60;h3&#62;Ce titre est aligné à  droite et de couleur jaune&#60;/h3&#62;
&#60;h4&#62;Idem&#60;/h4&#62;
&#60;/body&#62;
&#60;/html&#62;</programlisting></para>

          <para>Voici quelques explications concernant les attributs utilisés
          :</para>

          <itemizedlist>
            <listitem>
              <para><command>rel</command> : précise que nous lions une
              feuille de style à  ce document.</para>
            </listitem>

            <listitem>
              <para><command>type</command> : la feuille de style est conforme
              au standard CSS.</para>
            </listitem>

            <listitem>
              <para><command>href</command> : l'URL de la feuille de style.</para>
            </listitem>

            <listitem>
              <para><command>title</command> : nous nommons la feuille de
              style au cas oà¹ le navigateur devrait ultérieurement y faire
              référence (facultatif dans la majorité des cas).</para>
            </listitem>
          </itemizedlist>
        </sect4>
      </sect3>

      <sect3>
        <title>Propriétés des sélecteurs</title>

        <sect4>
          <title>propriétés liées aux polices de caractères</title>

          <para><emphasis role="bold">font-family</emphasis> : la police de
          caractères utilisée.</para>

          <para><emphasis role="bold">font-size</emphasis> : la taille de la
          police de caractères. Cette valeur peut être définie en points ou
          bien à  l'aide d'une valeur prédéfinie : <command>xx-small, x-small,
          small, medium, large, x-large, xx-large, smaller, larger</command>.</para>

          <para><emphasis role="bold">font-style</emphasis> : définit
          l'inclinaison de la police : <command>normal, oblique, italic</command>.</para>

          <para><emphasis role="bold">font-weight </emphasis>: épaisseur du
          trait : <command>bold, bolder, lighter,normal</command>. Il est
          également possible de préciser une valeur (multiple de 100) comprise
          entre 100 (le trait le plus fin) et 900 (le trait le plus épais). La
          valeur 400 correspond à  normal.</para>
        </sect4>

        <sect4>
          <title>Propriétés liées à  la mise en page des textes</title>

          <para><emphasis role="bold"> color</emphasis> : la couleur de la
          police de caractères utilisée.</para>

          <para><emphasis role="bold"> text-align</emphasis> : précise
          l'alignement du texte, quatre valeurs sont possibles : l<command>eft,
          center, justify, right.</command></para>

          <para><command> </command><emphasis role="bold">text-decoration</emphasis>
          : définit l'enrichissement dont fait l'objet le texte, cinq valeurs
          sont possibles : <command>none</command> (valeur par défaut)
          <command>underline, overline, line-through, blink.</command></para>

          <para><emphasis role="bold">text-transform</emphasis> : autorise une
          modification automatique des textes, quatre valeurs possibles :
          <command>capitalize, uppercase, lowercase, none</command> (valeur
          par défaut).</para>

          <para><emphasis role="bold">text-indent</emphasis> : retrait du
          premier mot du paragraphe. La valeur associée à  cette propriété peut
          être exprimée en points (pt), en centimètres (cm), en millimètres
          (mm) en pouces (in) ou bien en pourcentage. Par défaut, la valeur
          est égale à  zéro.</para>
        </sect4>

        <sect4>
          <title>Propriétés liées aux arrière-plans</title>

          <para><emphasis role="bold"> background-color </emphasis>: la
          couleur de fond de l'objet.</para>

          <para><emphasis role="bold">background-image</emphasis> : définit
          l'image de fond utilisée, par défaut la valeur est
          <command>none</command> (aucune).</para>

          <para><emphasis role="bold">background-repeat </emphasis>: précise
          si la répétition d'une image de fond est autorisée, les valeurs
          possibles sont <command>repeat, repeat-x, repeat-y, no-repeat</command>
          (valeur par défaut).</para>
        </sect4>

        <sect4>
          <title>Propriétés liées aux listes</title>

          <para><emphasis role="bold"> list-style-type</emphasis> : précise le
          type de puces utilisées, les valeurs possibles sont :
          <command>disc</command> (valeur par défaut), <command>circle,
          square, decimal, lower-roman, upper-roman, lower-alpha, upper-alpha,
          none</command>.</para>

          <para><emphasis role="bold">list-style-image</emphasis> : permet
          l'utilisation d'une image comme puce, la valeur attendue est
          l'adresse de l'image. Par défaut, la valeur est <command>none.</command></para>

          <para><emphasis role="bold">list-style-position</emphasis> : précise
          si la position de la puce par rapport au texte, deux valeurs sont
          autorisées <command>inside</command> et <command>outside</command>,
          valeur par défaut.</para>
        </sect4>

        <sect4>
          <title>Propriétés liées aux bordures</title>

          <para><emphasis role="bold">border-style</emphasis> : définit les
          quatre bordures d'un élément. Les valeurs possibles sont :
          <command>none, dashed, dotted, double, groove, inset, outset, ridge,
          solid</command>.</para>

          <para><emphasis role="bold">border-color</emphasis> : définit la
          couleur de la bordure. Une couleur peut être définie de trois faà§ons
          différentes : 1. Par son nom (par exemple <command>blue</command>).
          2. Par sa définition suivant le modèle RGB en hexadécimal, la
          notation est alors la suivante : <command>color : #rrvvbb</command>.
          3. Par sa définition suivant le modèle RGB en décimal, une couleur
          est dans ce cas définie ainsi : <command>color : rgb(rrvvbb)</command>.
          Les valeurs peuvent également être des pourcentages, par exemple :
          <command>color : rgb(100%,50%,0)</command>.</para>

          <para><emphasis role="bold">border-width</emphasis> : définit
          l'épaisseur du trait de la bordure. Les valeurs autorisées sont :
          <command>thin, medium (valeur par défaut), thick</command> ou bien
          une valeur.</para>
        </sect4>

        <sect4>
          <title>Propriétés liées à  la définition des marges</title>

          <para><emphasis role="bold">margin-top </emphasis>: définie la marge
          en haut. Par exemple, la définition suivante est autorisée :
          <command>h2 { margintop : 1em }</command>. Ici, la marge en haut
          d'un titre de niveau 2 est fixée égale à  la taille de la police
          utilisée.</para>

          <para><emphasis role="bold">margin-bottom</emphasis> : définie la
          marge en bas.</para>

          <para><emphasis role="bold">margin-right </emphasis>: définie la
          marge à  gauche.</para>

          <para><emphasis role="bold">margin-left</emphasis> : définie la
          marge à  droite.</para>

          <para><emphasis role="bold">padding-left </emphasis>: définie
          l'espacement à  gauche. Les propriétés <command>padding-right,
          padding-bottom, padding-top</command> sont également définies.</para>
        </sect4>
      </sect3>

      <sect3>
        <title>Classes de style</title>

        <para>Quand il s'agit de rédiger un rapport, il est appréciable de
        pouvoir appliquer une présentation du résumé du document différente du
        reste du document. La définition de classes au niveau des feuilles de
        style autorise ce type de modification.</para>

        <sect4>
          <title>Les classes régulières</title>

          <para>Les classes régulières permettent la définition de plusieurs
          règles d'affichage pour un même sélecteur.</para>

          <para><example><title>Classes régulières</title><para><programlisting>&#60;!DOCTYPE HTML PUBLIC&#34;-//W3C//DTD HTML 4.01 Transitional //EN&#34;&#62;
&#60;html&#62;
&#60;head&#62;
&#60;meta http-equiv = &#34;Content-Type&#34; content=&#34;text/html;charset=iso-8859-1&#34;&#62;
&#60;style type=&#34;text/css&#34;&#62;
&#60;!--body{background-color:white}
 p{color:darkgreen}
 p.resume{background-color:lightyellow;
     text-align:justify;margin-left:5em;margin-right:5em}
--&#62;
&#60;/style&#62;
&#60;/head&#62;
&#60;body&#62;
&#60;p class= &#34;resume&#34;&#62;Voici le résumé du document.
Un retrait à  gauche et à  droite est appliqué.
La couleur de fond est un jaune clair.
Le texte est justifié.
Vous remarquerez que les propriétésd éfinies pour un paragraphe &#60;i&#62;classique&#60;/i&#62; s'appliquent également ici.&#60;/p&#62;
&#60;p&#62;Voici un paragraphe du corps du document.
Ici, seule la couleur de la police de couleur a été définie en vert foncé.&#60;/p&#62;
&#60;/body&#62;
&#60;/html&#62;</programlisting></para></example></para>

          <para>Nous sommes libres de définir un nombre quelconque de classes
          pour chaque sélecteur. Ces définitions peuvent également intervenir
          au niveau des feuilles de style externes. L'utilisation d'une classe
          au niveau d'un document HTML est très simple, il suffit de préciser
          le nom <command>classe</command> utilisée par l'intermédiaire de
          l'attribut <command>class</command> qui existe pour toutes les
          balises HTML.</para>
        </sect4>

        <sect4>
          <title>Les classes génériques</title>

          <para>Dans l'exemple précédent, nous avons défini une classe qui
          s'appliquait à  la balise <command>&#60;p&#62;</command>. Le standard
          CSS autorise également des définitions de classes génériques qui
          pourront être appliquées à  toutes balises.</para>

          <example>
            <title>Classe générique</title>

            <para><programlisting>&#60;!DOCTYPE HTML PUBLIC&#34;-//W3C//DTD HTML 4.01 Transitional //EN&#34;&#62;
&#60;html&#62;
&#60;head&#62;
&#60;meta http-equiv = &#34;Content-Type&#34; content=&#34;text/html;charset=iso-8859-1&#34;&#62;
&#60;title&#62; Classe générique &#60;/title&#62;
&#60;style type=&#34;text/css&#34;&#62;
&#60;!-- .bleu {color : blue }
--&#62;
&#60;/style&#62;
&#60;/head&#62;
&#60;bdy&#62;
&#60;p class= &#34; bleu &#34;&#62; Ce paragraphe est en bleu. &#60;/p&#62;
&#60;p&#62; Mais pas ici !!! &#60;/p&#62;
&#60;/body&#62;
&#60;/html&#62;</programlisting></para>
          </example>
        </sect4>
      </sect3>
    </sect2>

    <sect2>
      <title>Division d'un document</title>

      <para>Dans certains cas, il est nécessaire de pouvoir &#34;oublier&#34;
      pendant quelques mots ou lignes une feuille de style. C'est l'objectif
      des balises <command>&#60;span&#62;</command> et <command>&#60;div&#62;</command>
      qui autorisent une modification locale de la feuille de style.</para>

      <sect3>
        <title>La balise &#60;span&#62;</title>

        <para>Supposons, que nous souhaitions appliquer une classe générique à 
        plusieurs mots d'un paragraphe. L'utilisation de la balise
        <command>&#60;span&#62;</command> est alors fortement recommandée.</para>

        <para><example><title>Exemple d'emploi de &#60;span&#62;</title><para><programlisting>&#60;!DOCTYPE HTML PUBLIC &#34;-//W3C//DTD HTML 4.01 Transitional //EN&#34;&#62;
&#60;html&#62;
&#60;head&#62;
&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html;charset=iso-8859-1&#34;&#62;
&#60;title&#62;La balise span&#60;/title&#62;
&#60;style type=&#34;text/css&#34;&#62;
&#60;!--.fondvert{background-color:lightgreen}
--&#62;
&#60;/style&#62;
&#60;/head&#62;
&#60;body&#62;
&#60;p&#62;Voici un paragraphe.&#60;span class=&#34;fondvert&#34;&#62;Cette partie du texte est
affichée en utilisant la classe &#60;i&#62;fondvert&#60;/i&#62;.&#60;/span&#62;
Ici,nous appliquons de nouveau les propriétés d'affichage par défaut.&#60;/p&#62;
&#60;/body&#62;
&#60;/html&#62;</programlisting></para></example></para>
      </sect3>

      <sect3>
        <title>La balise &#60;div&#62;</title>

        <para>Comme la balise <command>&#60;span&#62;</command>, la balise
        <command>&#60;div&#62;</command> autorise une modification locale de
        la feuille de style. Cette modification portera non plus sur un
        ensemble de mots, mais sur un ou plusieurs paragraphes.</para>
      </sect3>
    </sect2>

  
    <sect2>
      <title>Exercices d'applications</title>
      <para>Il est temps de mettre en oeuvre vos talents artistiques ! Mettez un peu de gaieté aux pages précédemment créées, en utilisant une feuille de style CSS externes. Si vous êtes en manque d'inspiration, le site <ulink url="http://www.oswd.org/">http://www.oswd.org/</ulink> peut sans doute vous être utile.
     </para>
    </sect2>
  </sect1>

  <!--  ================================= Chapitre 4 ============================= -->
  <sect1>
    <title>Formulaires HTML</title>


    <para>Les formulaires sont un point important du langage HTML : ils
    représentent en effet un moyen simple et efficace pour permettre
    l'échange de données entre un site internet et un internaute.
    L'utilisateur peut remplir les champs de formulaires, et ensuite
    poster ces données au serveur du site en validant ce formulaire.</para>

    <para>Les données acceptées par les formulaires sont multiples, on compte
    parmi elles des zones de texte, des cases à  cocher, des listes de
    sélection, etc...</para>

    <para>Nous allons étudier dans ce chapitre ces différentes zones de
    saisies, et préciser les modalités de transfert des données depuis le
    navigateur vers le serveur Internet.</para>

    <sect2>
      <title>Balises &#60;form&#62;</title>

      <para>La balise <command>&#60;form&#62;</command> encadre la définition
      d'un formulaire. Ses attributs permettront de spécifier par exemple
      la méthode de passage des données vers le serveur Web.</para>

      <sect3>
        <title>Un premier exemple</title>

        <para>Voici un exemple de formulaire exploitant les différentes zones
        interactives disponibles pour le programmeur.</para>

        <example>
          <title>Exemple de formulaire</title>

          <para><programlisting>&#60;form method=&#34;post&#34; action=&#34;&#34; enctype=&#34;multipart/form-data&#34;&#62;
  &#60;p&#62;Exemple de formulaire HTML&#60;/p&#62;
  &#60;p&#62; Zone de texte : 
    &#60;input type=&#34;text&#34; name=&#34;zonetexte&#34;&#62;
    &#60;br&#62;

    Case &#38;agrave; cocher : 
    &#60;input type=&#34;checkbox&#34; name=&#34;case&#34; value=&#34;checkbox&#34;&#62;
    &#60;br&#62;
    Bouton radio : 
    &#60;input type=&#34;radio&#34; name=&#34;radio&#34; value=&#34;radiobutton&#34;&#62;
    &#60;br&#62;
    Liste d&#38;eacute;roulante : 
    &#60;select name=&#34;liste&#34;&#62;
      &#60;option&#62;Choix 1&#60;/option&#62;

      &#60;option&#62;Choix 2&#60;/option&#62;
      &#60;option&#62;Choix 3&#60;/option&#62;
    &#60;/select&#62;
    &#60;br&#62;
    T&#38;eacute;l&#38;eacute;chargement de fichier : 
    &#60;input type=&#34;file&#34; name=&#34;fichier&#34;&#62;
    &#60;br&#62;

    Champ cach&#38;eacute; : 
    &#60;input type=&#34;hidden&#34; name=&#34;cache&#34;&#62;
  &#60;/p&#62;
  &#60;p&#62; 
    &#60;input type=&#34;submit&#34; name=&#34;Submit&#34; value=&#34;Envoyer&#34;&#62;
    &#60;input type=&#34;reset&#34; name=&#34;Submit2&#34; value=&#34;Effacer&#34;&#62;
  &#60;/p&#62;
&#60;/form&#62;</programlisting></para>
        </example>
      </sect3>

      <sect3>
        <title>Balise &#60;form&#62;</title>

        <para>La balise <command>&#60;form&#62;</command> a pour attributs :</para>

        <itemizedlist>
          <listitem>
            <para><command>method</command> : précise la méthode d'envoi
            choisie pour les informations recueillies par le formulaire, il
            existe deux possibilités : les méthodes <command>GET</command> et
            <command>POST</command> liées au protocole HTTP. Par défaut, cet
            attribut prend la valeur <command>get</command>. Cependant, la
            méthode <command>post</command> est plus généralement utilisée car
            elle permet de traiter un plus grand nombre d'informations. Nous
            verrons dans les exercices d'application les différences entre
            les deux méthodes.</para>
          </listitem>

          <listitem>
            <para><command>action</command> : cet attribut définit l'URL de
            destination du formulaire. Il existe plusieurs possibilités parmi
            lesquelles demander un traitement par le serveur ou envoyer un
            courrier électronique. Dans le premier cas, le serveur pourra
            réaliser un traitement des informations avec un script CGI par
            exemple. Cet attribut ressemblera alors à  : <command>&#60;form
            action=&#34;http ://www.monserveur.com/cgi-bin/moncgi.pl&#34;
            ...&#62;</command> Pour un envoi par courrier électronique :
            <command>&#60;form action=&#34;mailto :monmail@monserveur.com&#34;
            ...&#62;. Le destinataire du courrier recevra</command> alors un
            message contenant la valeur saisie par l'internaute dans chaque
            champ du formulaire est envoyé.</para>
          </listitem>

          <listitem>
            <para><command>enctype</command> : spécifie la méthode d'encodage
            du formulaire. Ce champ est optionnel, la valeur
            <command>text/plain</command> permet une transmission des
            informations dans un format texte lisible directement par le
            destinataire.</para>
          </listitem>
        </itemizedlist>
      </sect3>

      <sect3>
        <title>Balises de formulaires</title>

        <sect4>
          <title>Boutons</title>

          <para>Les boutons permettent de valider (d'envoyer) ou
          d'effacer les champs du formulaires. Il existe la possibilité
          d'utiliser la représentation graphique par défaut du HTML, ou de
          placer une image à  la place de ces boutons, en conservant les màªmes
          comportements. L'exemple précédent utilise les boutons standards
          du HTML, alors que l'exemple ci-dessous fait appel à  des images
          :</para>

          <example>
            <title>Boutons &#34;images&#34;</title>

            <para><programlisting>&#60;FORM action=&#34;&#34; method=&#34;post&#34;&#62;
  &#60;P&#62;
  Nom : &#60;INPUT type=&#34;text&#34; name=&#34;nom&#34;&#62;&#60;BR&#62;
  Prénom : &#60;INPUT type=&#34;text&#34; name=&#34;prenom&#34;&#62;&#60;BR&#62;
  email : &#60;INPUT type=&#34;text&#34; name=&#34;email&#34;&#62;&#60;BR&#62;
  &#60;INPUT type=&#34;radio&#34; name=&#34;sexe&#34; value=&#34;Homme&#34;&#62; 
  Homme  &#60;INPUT type=&#34;radio&#34; name=&#34;sexe&#34; value=&#34;Femme&#34;&#62; Femme  
  &#60;P&#62;&#60;BR&#62;
    &#60;BUTTON name=&#34;submit&#34; value=&#34;submit&#34; type=&#34;submit&#34;&#62;
    &#60;IMG src=&#34;bouton_submit.jpg&#34; alt=&#34;envoyer&#34; width=&#34;102&#34; height=&#34;30&#34;&#62; 
&#60;/BUTTON&#62;
&#60;BUTTON name=&#34;reset&#34; value=&#34;submit&#34; type=&#34;reset&#34;&#62;
&#60;IMG src=&#34;bouton_cancel.jpg&#34; alt=&#34;Annuler&#34; width=&#34;102&#34; height=&#34;30&#34;&#62;
&#60;/BUTTON&#62;
  &#60;/FORM&#62;</programlisting></para>
          </example>
        </sect4>

        <sect4>
          <title>La balise INPUT</title>

          <para>La balise <command>INPUT</command> permet de placer des champs
          de formulaire. Elle accepte les attributs suivants :</para>

          <itemizedlist>
            <listitem>
              <para><command>type =
              text|password|checkbox|radio|submit|reset|file|hidden|image|button</command>
              Cet attribut spécifie le type de contrà´le de saisie de données à 
              créer. Les types de champs de saisie sont décrits ci-dessous.
              Cet attribut vaut <command>text</command> par défaut.</para>
            </listitem>

            <listitem>
              <para><command>name</command> Cet attribut permet d'assigner
              un nom au contrôle. Ce nom sera appairé avec la valeur courante
              du contrôle, le couple ainsi constitué étant alors transmis si
              le formulaire est soumis.</para>
            </listitem>

            <listitem>
              <para><command>value</command> Cet attribut spécifie la valeur
              initiale du contrôle. Il est optionnel sauf lorsque le type de
              contrôle est <command>radio</command>, auquel cas il devient
              obligatoire.</para>
            </listitem>

            <listitem>
              <para><command>size</command> Cet attribut indique à  l'agent
              utilisateur la largeur initiale du contrôle. La largeur est
              donnée en pixels, saufs pour les champs de saisie de texte et de
              mot de passe pour lesquels elle est exprimée en nombre de
              caractà¨res (entier).</para>
            </listitem>

            <listitem>
              <para><command>maxlength</command> Lorsque le type de champ est
              <command>text</command> ou <command>password,</command> cet
              attribut spécifie le nombre maximum de caractà¨res qui peut y
              àªtre entré. Ce nombre peut àªtre supérieur à  la valeur de
              l'attribut size, auquel cas l'agent utilisateur fournira
              un mécanisme de défilement à  l'intérieur du champ. La valeur
              par défaut correspond à  un nombre illimité de caractà¨res.</para>
            </listitem>

            <listitem>
              <para><command>checked</command> Lorsque le type de champ est un
              bouton <command>radio,</command> cet attribut booléen spécifie
              que le bouton radio est sélectionné. Cet attribut devra àªtre
              ignoré pour tous les autres types de contrôles.</para>
            </listitem>

            <listitem>
              <para><command>src = url</command> Lorsque le type de champ est
              &#34;<command>image</command>&#34;, cet attribut spécifie la
              localisation de l'image utilisée pour &#34;décorer&#34;
              graphiquement le bouton de soumission.</para>
            </listitem>
          </itemizedlist>

          <para>L'attribut <command>type</command> de l'élément
          <command>INPUT</command> détermine quel contrôle doit àªtre créé.</para>

          <itemizedlist>
            <listitem>
              <para><command>text</command> Ce type crée un champ de texte
              monoligne. La valeur émise lors de la soumission du formulaire
              est le texte entré.</para>
            </listitem>

            <listitem>
              <para><command>password</command> Comme le type
              <command>text</command>,mais le texte entré est visualisé à 
              l'écran de sorte que les caractà¨res ne puissent àªtre
              reconnus (par exemple une série d'étoiles). Ce contrôel est
              utilisé pour l'entrée de données sensibles telles que des
              mots de passe. La valeur émise lors de la soumission du
              formulaire est le texte tapé (et non pas le texte affiché (!)).</para>
            </listitem>

            <listitem>
              <para><command>checkbox</command> Une case à  cocher est une
              sorte de commutateur bipolaire. Lorsqu'elle est cochée, la
              case est dite &#34;active&#34;. Lorsqu'elle est vide, la
              case est &#34;inactive&#34;. La valeur de la case à  cocher
              n'est émise que si cette dernià¨re est active. Plusieurs
              cases à  cocher du màªme formulaire pourront partager le màªme nom.
              Au moment de la soumission, toute case à  cocher
              &#34;activée&#34; y compris celles de nom semblable émet une
              paire nom/valeur dans laquelle le nom sera identique. Ceci
              permettra aux utilisateurs de choisir des valeurs multiples pour
              une propriété unique.</para>
            </listitem>

            <listitem>
              <para><command>radio</command> Un bouton radio est aussi un
              commutateur bipolaire. Lorsqu'il est marqué, le bouton radio
              est dit &#34;active&#34;. Lorsqu'il est vide, il est réputé
              &#34;inactive&#34;. La valeur du bouton radio n'est émise
              que si ce dernier est actif. Plusieurs boutons radio du màªme
              formulaire pourront partager le màªme nom. Cependant, seul
              l'un d'entre eux pourra àªtre actif à  la fois. Lorsque
              l'un des bouton radio est marqué, tous les autres portant le
              màªme nom sont automatiquement déselectionnés. Pour cet ensemble
              de boutons radio, il ne peut donc àªtre émis qu'une seule
              paire nom/valeur.</para>
            </listitem>

            <listitem>
              <para><command>submit</command> Crée un bouton de soumission.
              Lorsque l'utilisateur clique sur ce bouton, le contenu du
              formaulaire est soumis au programme spécifié par la localisation
              définie par l'attribut <command>action</command> de
              l'élément <command>FORM</command> englobant.</para>
            </listitem>

            <listitem>
              <para><command>image</command> Crée un bouton de soumission
              graphique. La valeur de l'attribut <command>src</command>
              spécifie l'URL de l'image qui servira de représentation
              graphique du bouton. Certains utilisateurs ne pourront
              visualiser cette image. Nous recommandons fortement
              d'adjoindre la définition d'un attribut
              <command>alt</command> valant pour alternative textuelle de
              l'image</para>
            </listitem>

            <listitem>
              <para><command>reset</command> Crée un bouton de
              réinitialisation. Lorsque ce bouton est activé par
              l'utilisateur, les valeurs de tous les contrôles du
              formulaire sont remises à  leur valeur initiale, telle que
              mentionnée dans l'attribut value. Le couple nom/valeur
              d'un bouton de réinitialisation n'est jamais envoyé lors
              de la soumission d'un formulaire.</para>
            </listitem>

            <listitem>
              <para><command>button</command> Crée un bouton poussoir qui
              n'a aucun comportement prédéfini. Le comportement de ce
              bouton sera défini par ailleurs, en lui associant des scripts
              clients déclenchés lorsque certains événements affectant ce
              bouton surviennent (par exemple lorsqu'on clique dessus). La
              valeur de l'attribut <command>value</command> est utilisée
              comme libellé du bouton.</para>
            </listitem>

            <listitem>
              <para><command>hidden</command> Crée un élément qui ne doit pas
              àªtre représenté par l'agent utilisateur. Cependant, le
              couple nom/valeur de cet élément sera joint aux données envoyées
              lors de la soumission du formaulaire.Ce type de contrôle sera en
              général utilisé pour enregistrer des données d'échanges
              client/serveur qui seraient autrement perdues du fait de la
              nature volatile des processus HTTP. Les valeurs des contrôles
              <command>INPUT</command> de type <command>hidden</command> sont
              envoyées lors de la soumission du formulaire. Ceci resterait
              vrai pour tout contrôle qui ne pourrait àªtre affiché pour des
              raisons de paramétrage de style. Le contrôle suivant, bien
              qu'invisible aux yeux de l'utilisateur, émettra sa
              valeur vers le serveur lorsque le formulaire sera soumis.</para>
            </listitem>

            <listitem>
              <para><command>file</command> Demande à  l'utilisateur de
              désigner un fichier. Lorsque le formulaire est soumis, le
              contenu de ce fichier sera transmis au serveur comme une valeur
              de n'importe quel autre contrôle.</para>
            </listitem>
          </itemizedlist>
        </sect4>
      </sect3>
    </sect2>

    <sect2>
      <title>Evénements intrinsèques</title>

      <para>Un script client est un programme qui peut accompagner un document
      HTML ou y être directement inséré. Le programme s'exécute sur la
      machine cliente au moment où le document se charge, ou à  d'autres
      moments particuliers, par exemple lorsqu'un lien est activé. Le
      support des scripts par HTML est indépendant du langage utilisé pour
      l'écriture de ces derniers. Les scripts offrent aux auteurs de
      documents électroniques une méthode pour étendre considérablement les
      possibilités du HTML en lui ajoutant une interactivité et une
      dynamisation importante.</para>

      <para>Un document HTML peut se voir attaché deux types de scripts :</para>

      <itemizedlist>
        <listitem>
          <para>Ceux qui ne sont exécutés qu'une fois au moment du
          chargement du document par l'agent utilisateur. Ils sont codés
          dans un élément <command>SCRIPT</command> et sont exécutés au
          chargement du document. Les agents utilisateurs qui ne supportent
          pas les scripts, ou pour lesquels les scripts ont été désactivés
          pourront inclure des alternatives de contenu spécifiées dans un
          élément <command>NOSCRIPT</command>.</para>
        </listitem>

        <listitem>
          <para>Ceux qui sont exécutés à  chaque fois qu'un événement
          précis survient. Ceux-ci peuvent àªtre associés à  un certain nombre
          d'éléments via des attributs <emphasis role="bold">d'événements
          intrinsèques</emphasis>.</para>
        </listitem>
      </itemizedlist>

      <para>Les formulaires HTML, et plus précisément les champs qui les
      composent, ont les événements intrinsèques suivants :</para>

      <itemizedlist>
        <listitem>
          <para><command>onfocus</command> L'événement onfocus lorsque
          l'élément reà§oit le &#34;<emphasis>focus</emphasis>&#34; soit
          par action de l'organe de pointage, soit par la navigation
          tabulée. Cet attribut est reconnu par les éléments suivants :
          <command>LABEL, INPUT, SELECT, TEXTAREA, et BUTTON</command>.</para>
        </listitem>

        <listitem>
          <para><command>onblur</command> L'événement onblur intervient
          lorsque l'élément perd le &#34;<emphasis>focus</emphasis>&#34;,
          soit suite à  une action de l'organe de pointage, soit par
          navigation tabulée. Il sera utilisable sur les màªmes éléments que
          l'événement <command>onfocus.</command></para>
        </listitem>

        <listitem>
          <para><command>onkeypress</command> L'événement
          <command>onkeypress</command> intervient lorsqu'une touche du
          clavier est enfoncée puis relâchée immédiatemment alors que
          l'élément a le &#34;<emphasis>focus</emphasis>&#34;. Cet
          attribut est reconnu par la plupart des éléments</para>
        </listitem>

        <listitem>
          <para><command>onsubmit</command> L'événement onsubmit
          intervient lorsque le formulaire est soumis. Il n'est applicable
          que dans le contexte d'un élément <command>FORM.</command></para>
        </listitem>

        <listitem>
          <para><command>onreset</command> L'événement onreset intervient
          lorsqu'un formulaire est réinitialisé. Il n'est applicable
          que dans le contexte d'un élément <command>FORM.</command></para>
        </listitem>

        <listitem>
          <para><command>onselect</command> L'événement onselect
          intervient lorsque l'utilisateur sélectionne du texte dans un
          champ de texte. Cet attribut est exploitable pour des éléments
          <command>INPUT</command> et <command>TEXTAREA.</command></para>
        </listitem>

        <listitem>
          <para><command>onchange</command> L'événement
          <command>onchange</command> lorsque l'élément perd le &#34;<emphasis>focus</emphasis>&#34;
          ET sa valeur a été modifiée depuis le dernier instant où il a été
          activé. Cet attribut est applicable aux éléments suivants : I<command>NPUT,
          SELECT, et TEXTAREA</command>.</para>
        </listitem>
      </itemizedlist>

      <para>La programmation des scripts à  proprement parler n'est pas du
      ressort de ce cours.</para>
    </sect2>

  </sect1>










  <!-- =================================================================== -->
  <bibliography> 
    <title>Références</title> 

    <bibliodiv> 
      <biblioentry>
 	<title>openweb.eu.org - Pour les standards du Web</title> 
 	<edition> 
 	  <ulink url="http://openweb.eu.org/"></ulink> 
         </edition> 
      </biblioentry> 
    <biblioentry>
 	<title>Alsacreations.com - Comment choisir sa DTD</title> 
 	<edition> 
 	  <ulink url="http://css.alsacreations.com/Bases-et-indispensables/DTD-comment-choisir"></ulink> 
         </edition> 
      </biblioentry> 
    <biblioentry>
 	<title>w3C - Recommandations HTML</title> 
 	<edition> 
 	  <ulink url="http://www.w3c.org"></ulink> 
         </edition> 
      </biblioentry>
    <biblioentry>
 	<title>Open Source Web Design</title> 
 	<edition> 
 	  <ulink url="http://www.oswd.org/">http://www.oswd.org/</ulink> 
         </edition> 
      </biblioentry>

    </bibliodiv> 
  </bibliography> 
</article>


