Parties

  1. Table des matières
  2. Exemple de mise en page
    1. body
    2. proprietés de body
    3. menu - ul
    4. menu - création
    5. présentation de div
  3. Exemple de mise en page - feuille de style
    1. mise en page - width
    2. mise en page - colonnes
    3. mise en page - bas de page
    4. mise en page - bas de page - suite
    5. mise en page - menu - liste
    6. mise en page - menu - simple
    7. mise en page - menu - mieux
    8. mise en page - menu - mieux (suite)
    9. mise en page - menu - hover
    10. mise en page - menu - details
    11. mise en page - correction
  4. Interactions client serveur
    1. role client - 1
    2. role client - 2
    3. role client - 3
    4. role client - 4
    5. role client - 5
    6. role client - 6
    7. Fichieres sur un serveur / firebug
    8. Fichiers sur aquanux
    9. Firebug - net
    10. firebug - net fsf.org
    11. fsf.org - suite
    12. fsf.org
    13. fsf.org - fichier
    14. fsf.org - machines multiples
    15. Sprites
    16. Correction - sprites
    17. sprites, hover
    18. hover: correction
  5. Exemple de mise en page CSS
    1. Decouverte du site
    2. Découverte du html
    3. h1
    4. titre
    5. pratique
  6. Formulaires
    1. formulaire complet
    2. formulmaire complet - Correction
  7. Divers
    1. onglets avec des images
    2. onglets avec des images - correction
    3. Exercice libre

1. Table des matières

1.1 Table des matières

Bienvenue au TP-4.

Pour votre progression, c'est très important de finir le TP précédent avant de commencer celui-ci.

Il est vivement recommandé de faire ce TP en ayant le cours sous les yeux. Si vous n'avez pas la version papier, vous pouvez ouvrir la version PDF dans une autre fenêtre (ou onglet) de votre navigateur.

2. Exemple de mise en page

2.1 Exemple de mise en page

Dans les exercices suivants nous allons progressivement construire une mise en page pour le fichier selecteurs.html

Commencez par effacer tout ce qu'il y dans le fichier css, pour être sur de partir de zéro.

Nous aboutirons à un résultat qui ressemblera à ceci:
r

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Un essai</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Un essai avec des selecteurs</h1>
<h2>Pingouin</h2>
<p id="defPingouin">Le <strong>pingouin</strong> est un nom vernaculaire d'oiseau de la famille des <strong>alcidés</strong>, dont la seule espèce encore vivante s'appelle le petit pingouin. Ces espèces vivent dans l'hémisphère nord. Le petit pingouin vole alors que le grand pingouin ne le pouvait pas.</p>
<h2 class="manchot">Manchot</h2>
<p class="manchot"><strong>Manchot</strong> est un terme désignant plusieurs espèces de l'ordre des sphénisciformes, actuellement inclus dans celui, plus vaste, des ciconiiformes. Ce sont des <strong>oiseaux</strong> marins de l'hémisphère austral, incapables de voler à cause de leur adaptation à la vie aquatique. L'espèce la plus connue, le manchot empereur, vit en Antarctique. Les gorfous sont aussi appelé « manchots à aigrettes »</p>
<p class="manchot">On confond souvent les termes manchots et pingouins, en raison des ressemblances physiques de ces oiseaux, et de la traduction anglaise : en:penguin. Cependant ces deux sortes d'oiseaux n'ont aucune parenté : le manchot appartient aux Sphenisciformes, tandis que le pingouin appartient aux Charadriiformes. En outre, le premier vit dans l'hémisphère sud, et le second dans l'hémisphère nord - et peut voler.</p>
</body>
</html>

2.2 body

Pour commencer nous allons changer la couleur de fond de notre page, pour cela il faut changer la couleur de fond de l'élément qui est à la racine de la partie affichable du document.

Comment s'appelle cet élément?

2.3 proprietés de body

Dans le fichier css associé au fichier selecteurs.html, changez la couleur de fond de l'élément body (par exemple, utilisez la couleur #ea6).

Nous voulons aussi changer la couleur du texte de tout le document.
Si nous spécifions une couleur de texte pour body, celle-ci sera reprise par tous les éléments contenus par body.
Changez la couleur de texte (par exemple #262)

Notez Bien : il s'agit un principe général : les valeurs des propriétés d'un élément X sont hérités par tous les éléments contenus dans X (les descendants de X)

2.4 menu - ul

On suppose que cette page fait partie d'un petit site web.
Pour aider à la navigation nous voulons ajouter un petit menu avec un lien pour chacune des principales pages de ce site.

Un menu peut-être représenté avec une liste de liens. Nous allons donc choisir de le créer à l'aide de l'élément html qui sert à créer une liste.

Quel est le nom de l'élément permettant de créer une liste?

2.5 menu - création

Créez une liste, au début de votre page, donc chacun des éléments contiendra un lien.
Elle devra ressembler à ceci:

2.6 présentation de div

Nous avons maintenant un document avec deux composantes:
  1. un menu
  2. du contenu (la région contenant du texte)
La première partie est comprise dans un élément ul . Pour la sélectionner dans la feuille de style simplement, ajoutez l'attribut id="menu" à cet élément.

La deuxième partie est constitué de plusieurs titres et paragraphes. On est embêté pour la sélectionner et la mettre en forme dans la feuille de style. On va donc regrouper ces titres et paragraphes dans un seul bloc.

Le html fournit un élément appelé "div" pour faire ce genre de regroupements.

A retenir : l'élément "div" permet de regrouper plusieurs éléments dans un même bloc. Ce regroupement permet de diviser un gros document en plusieurs parties, et aussi d'appliquer des styles différents à ces parties.

Rajoutez cet élément div regroupant tous les titres et paragraphes.

Pour pouvoir sélectionner cet élément (div) dans la feuille de style simplement, ajoutez l'attribut id="contenu" à l'élément div.

Pour finir, ajoutez un paragraphe après ce div avec un id="basDePage". Dans ce paragraphe on écrira des informations sur le site (par exemple: fait par Toto le 15 novembre 2008)

3. Exemple de mise en page - feuille de style

3.1 Exemple de mise en page - feuille de style

Voila, nous avons fini d'ajouter des éléments html à notre page. Votre fichier html devrait ressembler au html ci-dessous. Il ne bougera plus.

Il faut bien l'admettre, cette page n'est pas très jolie. Dans les exercices suivants, nous allons donc utiliser des feuilles de style (sans changer le html) pour améliorer la présentation.


<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Un essai</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<ul id="menu">
<li><a href="">accueil</a></li>
<li><a href="">liens</a></li>
<li><a href="">photos</a></li>
<li><a href="">musique</a></li>
</ul>
<div id="contenu">
<h1>Un essai avec des selecteurs</h1>
<h2>Pingouin</h2>
<p id="defPingouin">Le <strong>pingouin</strong> est un nom vernaculaire d'oiseau de la famille des <strong>alcidés</strong>, dont la seule espèce encore vivante s'appelle le petit pingouin. Ces espèces vivent dans l'hémisphère nord. Le petit pingouin vole alors que le grand pingouin ne le pouvait pas.</p>
<h2 class="manchot">Manchot</h2>
<p class="manchot"><strong>Manchot</strong> est un terme désignant plusieurs espèces de l'ordre des sphénisciformes, actuellement inclus dans celui, plus vaste, des ciconiiformes. Ce sont des <strong>oiseaux</strong> marins de l'hémisphère austral, incapables de voler à cause de leur adaptation à la vie aquatique. L'espèce la plus connue, le manchot empereur, vit en Antarctique. Les gorfous sont aussi appelé « manchots à aigrettes »</p>
<p class="manchot">On confond souvent les termes manchots et pingouins, en raison des ressemblances physiques de ces oiseaux, et de la traduction anglaise : en:penguin. Cependant ces deux sortes d'oiseaux n'ont aucune parenté : le manchot appartient aux Sphenisciformes, tandis que le pingouin appartient aux Charadriiformes. En outre, le premier vit dans l'hémisphère sud, et le second dans l'hémisphère nord - et peut voler.</p>
</div>
<p id="basDePage">exemple inspiré de css tutorial</p>
</body>
</html>

3.2 mise en page - width

Le texte de notre page est difficile à lire : les lignes sont trop longues. L'oeil a du mal à suivre les lignes trop longues, c'est pourquoi on limite souvent la largeur des zones de texte.

Pour imposer une largeur à un élément html nous pouvons utiliser la propriété css appelé "width".
Nous allons limiter le contenu (le div de id contenu) à une largeur de 40 gros caractères (donc 40 fois la largeur d'une lettre M).

Que faut-il ajouter à votre feuille de style?

(répondez en une seule ligne. Votre réponse contiendra aussi le selecteur et les acolades.)

3.3 mise en page - colonnes

Le menu est actuellement affiché au-dessus du texte. Nous voudrions l'afficher à gauche du texte.
Plusieurs solutions sont possibles, nous allons prendre la plus simple.

Il faut:
  1. décaler le contenu du document vers la droite (pour laisser la place au menu)
  2. dire au menu qu'il peut s'afficher "par-dessus" la boite horizontale du contenu
Pour la première étape (décaler le contenu vers la droite), vous pouvez laisser une marge à gauche du contenu de la taille de 12 lettres M.

Pour la deuxième étape (le menu peut s'afficher par dessus), on donnera un positionnement absolu au menu ("position: absolute;")

Votre page devrait ressembler à ceci:

x

3.4 mise en page - bas de page

Pour distinguer le bas de la page du reste nous voulons rajouter une bordure au dessus du paragraphe du bas de page.

Quel est le nom (uniquement le nom) de la propriété permettant d'ajouter une bordure uniquement sur la partie en haut d'un élément?

3.5 mise en page - bas de page - suite

Faites en sorte d'obtenir un affichage du bas de page comme indiqué sur l'image ci-dessous.
Pensez à utiliser des marges et un "padding" pour obtenir un espacement satisfaisant.
Remarquez la largeur limitée du trait.

x


3.6 mise en page - menu - liste

Le menu ressemble actuellement à une liste, mais pas encore vraiment à un menu.

On peut commencer par enlever les ronds affichés par défaut pour une liste.
Pour cela, il faut utiliser la propriété/valeur "list-style-type: none;" affectée à chacun des li contenus dans le menu.

Quel est le sélecteur nécessaire (?????) pour sélectionner "les éléments li contenus dans l'élément dont l'id est menu" ?

????? { list-style-type: none;}



3.7 mise en page - menu - simple

Menu (version simple)


En changeant le style des éléments li formant le menu faites en sorte d'obtenir l'affichage suivant:
On utilisera une bordure épaisse à droite pour la partie noire.
On jouera sur margin et padding pour obtenir le résultat désiré.

x

3.8 mise en page - menu - mieux

Menu - plus agréable

Le menu précèdent était simple, mais posait un problème ergonomique :
on est obligés de cliquer sur le texte même du lien pour le suivre. Si on clique à coté, on ne suit pas le lien.

La solution est de faire en sorte que l'élément "a" du lien occupe toute la place du menu à l'aide de propriété "display:block;" et en réglant les marges et les padding des éléments "a" et "li".

Pour changer le style des éléments "a" contenus dans le menu, nous devons les sélectionner.

Quel sélecteur (?????) peut-on utiliser pour sélectionner ces liens?

????? {display: block;}

3.9 mise en page - menu - mieux (suite)

Menu - plus agréable (suite)

Maintenant adaptons les paddings:
enlevez tout padding aux éléments "li" et rajoutez du padding aux éléments "a"

Vérifiez que vous avez le même affichage qu'avant, et qu'on peut suivre le lien en cliquant à n'importe quel endroit du menu.

N'hésitez pas à utiliser firebug pour expérimenter.

3.10 mise en page - menu - hover

La pseudo-classe :hover


Pour que l'utilisateur se rende compte qu'il peut cliquer sur le menu, il est préférable que le menu change de couleur lorsqu'il passe la souris par-dessus.

On peut utiliser la pseudo-classe ":hover" pour sélectionner un élément sur lequel se trouve la souris.
L'exemple suivant:
p:hover {color:red;}
va afficher en rouge le texte d'un paragraphe lorsqu'on passe la souris dessus.

En vous inspirant de cet exemple faites en sorte que les éléments "a" du menu s'affichent avec une couleur de fond différente lorsque l'utilisateur passe la souris dessus.

3.11 mise en page - menu - details

Petits détails


Pour finaliser la mise en page de cet exemple il vous reste quelques petits détails à régler:
  1. changez les polices de caractères pour les titres h1,h2 et les liens des menus:
    font-family: sans-serif
  2. enlevez le soulignement des liens du menu :
    text-decoration: none;
  3. changez la couleur du texte des liens des menus
  4. justifiez le texte dans les paragraphes de contenu:
    text-align: justify;
  5. ajustez les marges et paddings de quelques éléments pour équilibrer la mise en page. N'hésitez pas à utiliser des valeurs différentes selon la position des marges ou paddings. Par exemple : margin-top margin-left padding-left ...

3.12 mise en page - correction

Voici une proposition de correction pour la feuille de style élaborée aux cours des exercices précédents.


body
{
background-color: #ea6;
color: #262;
}

/******* le menu ******/
#menu
{
position: absolute;
padding:0em;
}
#menu li
{
list-style-type: none;
margin: 1em;
padding: 0em;
background-color: white;
}

#menu li a
{
padding: .5em 1.5em;
display: block;
text-decoration: none;
color: black;
border-right: 1em solid black;
}
#menu li a:hover
{
background-color:#fed;
color: #600;
border-right: 1em solid #600;
}

/******* le contenu ******/
#contenu
{
margin-left:11em;
width: 40em;
}
#contenu p
{
text-align: justify;
}

h1,h2,#menu a
{
font-family: sans-serif;
}

/******* le bas de page ******/
#basDePage
{
border-top: 1px solid #aaa;
padding-top: .7em;
width:30%;
}

4. Interactions client serveur

4.1 Interactions client serveur

Dans les questions suivantes nous allons voir plus en détails les interactions client-serveur.

Rappel cours:
rrrr

4.2 role client - 1

Dans ces questions vous jouez le rôle du client, c'est à dire du navigateur web (par exemple firefox). Nous simulons un dialogue entre le client et le serveur.

Le machine du client s'appelle "mamachine" et le serveur s'appelle "exemple.org"


Etape 1:
L'utilisateur vient de cliquer sur un lien "http://exemple.org/toto.html"

Que faites vous (le client) en premier ?


4.3 role client - 2

Dans ces questions vous jouez le rôle du client, c'est à dire du navigateur web (par exemple firefox). Nous simulons un dialogue entre le client et le serveur.

Le machine du client s'appelle "mamachine" et le serveur s'appelle "exemple.org"


Etape 2:
exemple.org vous répond en vous envoyant le fichier suivant:

<!DOCTYPE html PUBLIC ...>
<html ...>
<head>
<title>Un essai</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p>Voici une jolie photo:<img src="photo.jpg" alt="photo"/></p>
</body>
</html>

Que faites vous ?

4.4 role client - 3

Dans ces questions vous jouez le rôle du client, c'est à dire du navigateur web (par exemple firefox). Nous simulons un dialogue entre le client et le serveur.

Le machine du client s'appelle "mamachine" et le serveur s'appelle "exemple.org"



Etape 3:
Oui, il manque des choses... donc que faites vous ?

Pour rappel, le fichier html reçu est:
<!DOCTYPE html PUBLIC ...>
<html ...>
<head>
<title>Un essai</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p>Voici une jolie photo:<img src="photo.jpg" alt="photo"/></p>
</body>
</html>


4.5 role client - 4

Dans ces questions vous jouez le rôle du client, c'est à dire du navigateur web (par exemple firefox). Nous simulons un dialogue entre le client et le serveur.

Le machine du client s'appelle "mamachine" et le serveur s'appelle "exemple.org"



Etape 4:
Vous recevez le fichier style.css, maintenant que faites vous?

Pour rappel, le fichier html reçu est:
<!DOCTYPE html PUBLIC ...>
<html ...>
<head>
<title>Un essai</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p>Voici une jolie photo:<img src="photo.jpg" alt="photo"/></p>
</body>
</html>

4.6 role client - 5

Dans ces questions vous jouez le rôle du client, c'est à dire du navigateur web (par exemple firefox). Nous simulons un dialogue entre le client et le serveur.

Le machine du client s'appelle "mamachine" et le serveur s'appelle "exemple.org"



Etape 5:
Oui, il manque des choses... donc que faites vous ?

Pour rappel, le fichier html reçu est:
<!DOCTYPE html PUBLIC ...>
<html ...>
<head>
<title>Un essai</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p>Voici une jolie photo:<img src="photo.jpg" alt="photo"/></p>
</body>
</html>

4.7 role client - 6

Dans ces questions vous jouez le rôle du client, c'est à dire du navigateur web (par exemple firefox). Nous simulons un dialogue entre le client et le serveur.

Le machine du client s'appelle "mamachine" et le serveur s'appelle "exemple.org"



Etape 6:
Vous recevez le fichier photo.jpg, maintenant que faites vous?

Pour rappel, le fichier html reçu est:
<!DOCTYPE html PUBLIC ...>
<html ...>
<head>
<title>Un essai</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p>Voici une jolie photo:<img src="photo.jpg" alt="photo"/></p>
</body>
</html>

4.8 Fichieres sur un serveur / firebug

Dans les exercices suivant nous allons utiliser un serveur web appelé "aquanux" et nous allons examiner la communication entre aquanux et votre navigateur à l'aide de firebug.

4.9 Fichiers sur aquanux

Fichiers sur aquanux

Jusqu'à maintenant, tous les fichiers html, toutes les images et les fichiers CSS que vous avez crées étaient lus par votre navigateur directement sur votre disque, sans passer par un serveur web. C'est le schéma "développement local" suivant vu en cours:

r

Bien sur, ceci n'est pas possible pour un vrai site web standard se trouvant sur internet (machine distante).

Maintenant vous allez créer des fichiers html,CSS... que vous allez afficher à partir d'un serveur web qui s'appelle "aquanux". Comme ceci:

r



Dans votre répertoire personnel il y a un répertoire spécial appelé "public_html". Tout le contenu de ce répertoire est accessible à partir du serveur aquanux.

Dans "public_html" créez un fichier appelé "page.html" avec un peu de texte. Ensuite visitez l'url suivante dans votre navigateur:
http://aquanux/~XXXXXXX/page.html
(vous devez remplacer "XXXXXXX" par votre numéro d'utilisateur).

Normalement vous devriez voir s'afficher page.html.
Si ce n'est pas le cas, demandez de l'aide à votre enseignant.

4.10 Firebug - net

Ajoutez dans page.html une image et un fichier CSS.
(Attention le fichier de l'image et le fichier CSS doivent se trouver dans public_html aussi. Sinon, le serveur ne les trouvera pas.)
Vérifiez que l'image s'affiche et que le fichier CSS et bien pris en compte.

Firebug - réseau

Ouvrez firebug (en cliquant sur la petite icône en bas à droite de votre navigateur).
Cliquez sur l'onglet "réseau". Activez la fonctionalité réseau si ce n'est pas fait.

Ensuite rechargez page.html dans votre navigateur.
(appuyez sur la touche "Maj" en même temps que vous cliquez sur le bouton "recharger" e)
Vous devriez voir quelque chose comme ceci s'afficher:
r

Lisez attentivement les différentes informations affichée par firebug. Passez la souris pardessus les liens affichés par firebug.

Cliquez sur le bouton "+" à gauche de chaque requête pour comprendre les détails. Ouvrez les deux onglets "Entêtes" et "Réponse" de chaque requête.

Faites le lien avec ce transparent du cours:
r

4.11 firebug - net fsf.org

Firebug - réseau : un vrai site web

Ouvrez le site www.fsf.org dans votre navigateur.
Ouvrez firebug et activez l'onglet réseau.

Ensuite rechargez la page votre navigateur.
(appuyez sur la touche "Maj" en même temps que vous cliquez sur le bouton "recharger" e)

Au total, combien de requêtes sont faites lorsqu'on visite cette page ?

4.12 fsf.org - suite

Dans firebug - réseau, passez votre souris sur les différentes requêtes pour voir de quoi il s'agit.
La plupart des requêtes correspondent à quelle type de données ?

4.13 fsf.org

Quand on charge cette page, quelle est la taille totale de toutes les données téléchargées?

4.14 fsf.org - fichier

Quel est le nom (juste le nom) du fichier le plus gros téléchargé?
(vous pouvez trier les fichiers en cliquant en haut de la colonne)

4.15 fsf.org - machines multiples

Vous remarquerez que les fichiers sont sur des serveurs différents:
  1. fsf.org
  2. static.fsf.org
Sur quel serveur se trouvent la plupart des images?

4.16 Sprites

Sprites : Réduire le nombre de requêtes

Rappel de cours:

e

Nous allons utiliser une seule image pour quatre petits boutons.

Enregistrez l'image unique ci-dessous:
r

En utilisant le html suivant uniquement:

<ul>
<li id="ligne1">ligne 1</li>
<li id="ligne2">ligne 2</li>
</ul>

Écrivez le CSS nécessaire pour obtenir l'affichage suivant.

r

Conseils:


4.17 Correction - sprites

Correction sprites:


li
{
background-image: url(sprite.png);
list-style:none;
height: 32px;
padding-left: 38px;
background-repeat: no-repeat;
margin: 1em;
}

#ligne2
{
background-position: 0px -64px;
}

4.18 sprites, hover

Sélecteurs : "Pseudos classes"

On a vu en cours qu'il existait des "pseudo classes" qu'on pouvait ajouter aux sélecteurs.
Par exemple:
Le sélecteur "p:hover" veut dire "Tous les paragraphes, mais seulement quand la souris se trouve sur le paragraphe (hover)".

Plus généralement on peut ajouter ":hover" à n'importe quel sélecteur: "a:hover" ".toto:hover" "#titi:hover" ...

Donc, avec le CSS suivant, un paragraphe deviendra rouge lorsqu'on passe la souris dessus.
p:hover
{
color: red;
}

En reprenant l'exercice précédent (sprite), faites en sorte que la première ligne affiche le bouton vers le haut quand on passe la souris dessus et que la deuxième ligne affiche le bouton "-" quand on passe la souris dessus.


4.19 hover: correction


Correction:

#ligne1:hover
{
background-position: 0px -32px;
}

#ligne2:hover
{
background-position: 0px -96px;
}

5. Exemple de mise en page CSS

5.1 Exemple de mise en page CSS

Dans les exercices suivants nous allons examiner des mises en page sur le site suivant:
http://www.csszengarden.com/

Il propose un fichier html unique, à partir du quel on obtient différentes mises en page en changeant uniquement le CSS.

Ceci exprime et illustre fortement un point important :
Le html d'un document doit refléter la structure logique du contenu et non pas la mise en page. C'est le CSS qui doit servir à faire la mise en page.

5.2 Decouverte du site

Découverte du site

Allez sur la page suivante:
http://www.csszengarden.com/

prenez le temps de regarder attentivement sa mise en page.

Ensuite regarder la colonne de droite.
Dans "choisissez une conception" cliquez sur les liens des différentes conception (pas sur les liens vers les auteurs des conceptions).

Chaque "conception" utilise exactement le même html que la page principale.
Prenez le temps d'observer quelques "conceptions" et repérez les principaux éléments graphiques.

5.3 Découverte du html

Retournez sur la page la "conception" initiale:
http://www.csszengarden.com/

Vous avez ici le html utilisé sans aucun CSS:
http://www.csszengarden.com/zengarden-sample.html

Ouvrez ce lien et regardez bien les différents éléments.
Vous devez retrouver tout ce qui figurait dans les conceptions avec CSS.

Important: remarquez que cette version html brut sans CSS est parfaitement lisible, et clairement structuré. Il ne manque rien pour la compréhension.


5.4 h1

Retournez sur http://www.csszengarden.com/

Nous allons maintenant utiliser firebug pour explorer cette mise en page.
Vérifiez que firebug est bien installé. Activez le et vérifiez que "inspect" vous permet bien de cliquer sur la page et de visualiser le html/CSS correspondant. Si firebug ne marche pas, demandez de l'aide à votre enseignant.

Le titre:
A l'aide de "Inspect" cliquez sur le gros titre "Zen Garden".
Quel est le nom (juste le nom) de la balise utilisée?

5.5 titre

"Zen Garden" est bien un titre important de la page, c'est donc bien la balise h1 qu'il fallait utiliser.

Le dilemme est le suivant :
1. On veut utiliser une image pour que "Zen Garden" soit plus beau qu'avec du texte simple.
2. Le texte "Zen Garden" doit être présent, pour les moteurs de recherche, les mal-voyants... et pour garder le contenu indépendant de la forme.

L'idée d'utiliser une image avec <img...> n'est pas satisfaisante. Cette image ne servirait qu'à la mise en page, elle ne doit donc pas être dans le html.

La bonne solution est la suivante:
1. écrire le texte normalement dans le titre, mais dans un span: <span>Zen Garden</span>
2. utiliser une image de fond CSS (background ...) pour afficher l'image Zen Garden
3. cacher le texte du 1. avec le CSS: ... h1 span {display: none;}

De cette manière, si on enlève le CSS, tout s'affiche en texte, correctement, et avec le CSS le texte disparait et c'est l'image qu'on voit.

Cette technique est utilisé très fréquemment.

Inspectez avec firebug l'élément h1 et le span qu'il contient. Regardez les styles correspondants et retrouvez les éléments décrits ci-dessus.

Quel est le nom du fichier image utilisé pour ce titre?
(donnez juste le nom du fichier, sans le chemin)

5.6 pratique

Mise en pratique:

Reprenons un exercice précédent (titre violet + paragraphe en dégradé).

Dans gimp créez une image de 300 pixels de large avec le texte "un essai".
Reprenez l'idée vue sur CSS Zen Garden, pour changer le titre de cet exemple.

Vérifiez que l'affichage est correct avec et sans CSS.
Si vous avez le web developper toobar vous pouvez désactiver le CSS (avec le menu, ou bien avec ctrl-maj-S)

Vous pouvez utiliser les deux images de fond suivantes:
1. titre.png:
title

2. degrade.png: (elle est bien là, mais ne fait qu'un pixel de largeur!) (suiviez ce lien)
degrade

essai-image.html

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Essai CSS</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="essai-image.css" />

</head>
<body>
<h1>Un essai</h1>
<p>bla bla bla bla bla bla bla bla bla bla bla bla bla bla <br/>
bla bla bla bla bla bla bla bla bla bla bla bla bla bla</p>
</body>
</html>

6. Formulaires

6.1 Formulaires

Dans les questions suivantes nous allons apprendre à afficher des formulaires.

Nous n'allons pas pouvoir faire grande chose des données saisies, tant qu'on n'a pas appris à faire du PHP. Donc cette partie se concentre uniquement sur l'affichage du formulaire.

Rappel de cours:

rr

6.2 formulaire complet

Formulaire complet

Ecrivez le HTML et le CSS nécessaire pour obtenir le résultat ci-dessous.

Quelques indications:

1. Les éléments du formulaire devront obligatoirement être dans une liste, avec un élément "label" pour chaque élément "input", comme suit:
<ul>
<li><label ...>...</label><input .... /></li>
...
</ul>

2. pour obtenir l'affichage souhaité utilisez la propriété "display: inline-block;" pour les labels. Inline block spécifie qu'un élément doit être affiché "inline" (c'est à dire , comme du texte), mais les dimensions de sa boite (notament la largeur) peut être réglée (comme si c'etait un élément block).

3. Pour le champs "message" cherchez sur le web pour trouver le nom de l'élément à utiliser (indication: ce n'est pas un "input").

4. Pour le champs "débutant..." cherchez sur le web pour trouver le nom de l'élément à utiliser (indication: ce n'est pas un "input").

5. Faites en sorte que lorsqu'on appuie sur le boutton "envoyer", on soit envoyé sur une page "traitement.html" qui affiche "votre demande est en cours de traitement".
r

6.3 formulmaire complet - Correction

Formulaire complet - Correction

HTML:

<h2>Votre profil:</h2>
<form method="post" action="traitment.html">
<ul>
<li><label for="nom">nom</label><input type="text" name="nom" id="nom" /></li>
<li><label for="prenom">prenom</label><input type="text" name="prenom" id="prenom" /></li>
<li><label for="age">age</label><input type="text" name="age" id="age" /></li>
<li><label for="html">HTML</label><input type="checkbox" id="html" /></li>
<li><label for="css">CSS</label><input type="checkbox" id="css" /></li>
<li><label for="php">PHP</label><input type="checkbox" id="php" /></li>
<li><label for="c">C</label><input type="checkbox" id="c" /></li>
<li><label for="java">Java</label><input type="checkbox" id="java" /></li>
<li>Votre message:<br/><textarea name="message" rows="4" cols="6"></textarea></li>
<li>
<select name="niveau">
<option value="0">débutant</option>
<option value="1">confirmé</option>
<option value="2">expert</option>
</select>
</li>
<li id="submit"><input type="submit" id="envoyer" value="envoyer"/></li>
</ul>
</form>


CSS

label
{
display: inline-block;
width: 100px;
}

li
{
list-style-type: none;
padding: .2em;
border-bottom: 1px solid #ddd;
 
}

ul
{
padding: .5em;
background-color: #efe;
border: 1px solid #afa;
width: 300px;
}
textarea
{
width: 280px;
}

#submit
{
text-align: right;
}

li:last-child
{
border-bottom: none;
}

7. Divers

7.1 Divers

Les exercices suivants porteront sur divers aspects du HTML/CSS et finiront par un exercice libre, vous pourrez développer votre propre mise en page.

7.2 onglets avec des images

Onglets avec des images

Dans le TP précédent nous avons crée des onglets simples. Dans cet exercice nous allons créer des onglets plus jolis en utilisant des images de fond pour ajouter à la fois les coins arrondis (qui ne fonctionnaient pas avec tous les navigateurs) et des effets de relief.


Créez les 4 fichiers HTML suivants:
Chacun contiendra le html suivant, en changeant uniquement le id "actif".
(par ex., pour accueil.html ce sera le premier li qui aura id="actif")


<ul id="onglets">
<li><a href="accueil.html">Accueil</a></li>
<li id="actif"><a href="info.html">Info</a></li>
<li><a href="rdv.html">Rendez-vous</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
<div id="contenu">
<h2>Bla bla bla</h2>
<p>Bla bla bla bla bla bla bla bla bla bla blabla blabla bla bla bla bla bla bla bla bla bla bla blabla blabla bla bla bla bla bla bla bla bla bla bla blabla blabla bla bla bla bla bla bla bla bla bla bla blabla blabla bla bla bla bla bla bla bla bla bla bla blabla blabla bla bla bla bla bla bla bla bla bla bla blabla blabla bla bla bla bla bla bla bla bla bla bla blabla blabla bla bla bla bla bla bla bla bla bla bla blabla blabla bla</p>


Nous voulons obtenir l'affichage suivant:

r

A l'aide des 4 images suivantes:
r
r
r
r

Conseils

Cet exercice n'est pas facile. On peut utiliser deux approches différentes. A vous de choisir.
1. utiliser "display: inline-block" pour les a et les li du menu
2. utiliser float: left pour les li

La première approche parait plus simple au premier abord, mais les "li" se retrouvent sur la même ligne et il faut gérer le placement vertical, ce qui n'est pas toujours simple. Il faut utiliser les propriétés "vertical-align: top;"...

Le deuxième approche est moins intuitive (mais très utilisée). Les "li" sont "float : left" et ils viennent donc s'entasser les uns après les autres (même s'il ils sont block). Deux indications dans ce cas : utiliser "display: block" pour les "a" (sinon, on peut pas regler correctement les padding/margin). Utiliser "clear:both" pour le contenu. (sinon il s'affiche à la droite des onglets).

Dans les deux cas pensez à positionner les images de fond:
background-position: right top;
background-position: left top;




7.3 onglets avec des images - correction

Correction:

Solution inline-block

#onglets
{
margin: 0;
padding: 0;
}

#onglets li
{
vertical-align: top;
display: inline-block;
list-style-type: none;
background-image: url(onglet-droite.png);
background-position: right top;
background-repeat: no-repeat;
margin: 0em;
height: 30px;
line-height: 25px;
}

#onglets #actif
{
background-image: url(onglet-droite-actif.png);
}

#onglets a
{
display: inline-block;
color: white;
text-decoration: none;
background-image: url(onglet-gauche.png);
background-repeat: no-repeat;
background-position: left top;
padding-left: .5em;
padding-right: .8em;
padding-top: 6px;
padding-bottom: 0px;
margin: 0;
height: 24px;
}

#actif a
{
background-image: url(onglet-gauche-actif.png);
font-weight: bold;
}


#contenu
{
color: white;
background-color: #c60;
overflow: hidden;
width: 50%;
padding: 1em;
}
#contenu h2
{
font-size: 15px;
}


Solution float

#onglets
{
margin: 0;
line-height: 20px;
padding: 0;
}

#onglets li
{
float: left;
list-style-type: none;
background-image: url(onglet-droite.png);
background-position: right top;
background-repeat: no-repeat;
margin: 0em;
}

#onglets #actif
{
background-image: url(onglet-droite-actif.png);
}

#onglets #actif a
{
background-image: url(onglet-gauche-actif.png);
font-weight: bold;
}
#onglets a
{
color: white;
text-decoration: none;
background-image: url(onglet-gauche.png);
background-repeat: no-repeat;
background-position: left top;
display: block;
padding-left: .5em;
padding-right: .8em;
padding-top: .4em;
padding-bottom: .2em;
margin: 0em;
}

#contenu
{
background-color: #c60;
overflow: hidden;
width: 50%;
padding: 1em;
clear: both;
color: white;
}
#contenu h2
{
font-size: 15px;
}

7.4 Exercice libre

Exercice libre

Au cours ces TP nous avons les principaux concepts de base de mise en page en CSS.

Maintenant c'est à vous de construire votre propre page.

Trouvez une page sur le web dont la mise en page vous plait, et qui va vous servir de modèle.
Ensuite, essayez de reproduire cette mise-en-page, sans copier ni le HTML, ni le CSS du modèle (sinon l'exercice perd de son intérêt, et par ailleurs la qualité du HTML/CSS sur beaucoup de pages n'est pas exemplaire...).

Pour cet exercice, vous pouvez rependre les images du modèle. Par exemple les images CSS (background-image), que vous pouvez identifier à l'aide de firebug.

Essayez de construire du html propre. Rapplez-vous: votre html doit refléter le contenu de votre document, et (idéalement) ne pas contenir la moindre balise ajoutée juste pour la mise-en-page.