Introduction au D-HTML
Le terme de "page dynamique" est souvent employé pour décrire ce que les scripts serveurs sont capables de faire, à savoir générer un contenu programmé et non figé. Cependant il faut garder à l'esprit que ceux-ci ne permettentpas de générer autre chose que des documents fixes. La réalisation de pages animées en temps réel doit employer des cripts clients réalisant du HTML dynamique, ou D-HTML.
Je présente donc ci-dessus les fonctionnalités du HTML associé au JavaScript et aux feuilles de style permettant d'une part de emettre en forme ses pages au pixel près, et d'autre part d'animer le tout pour rendre vos sites plus attrayants.
Les feuilles de style
Le concept de feuilles de style est apparu en 1997 avec le browser Internet Explorer 3.0, puis s'est généralisé avec les versions 4.0 d'Internet Explorer et de Netscape Navigator.
Navigateurs compatibles:
- Microsoft Internet Explorer 4.0
- Netscape Navigator 4.0x
Le concept de feuilles de style consiste à attribuer des caractéristiques de mise en forme à tout un groupe d'éléments. On peut par exemple décider de mettre les titres en police Arial, en vert et en italique.
On définit par un nom une caractéristique de mise en forme, il suffit ensuite de l'appeler pour l'appliquer à un texte.
On les appelle feuilles de style en cascade ("Cascading Style Sheets") car on peut en définir plusieurs, et en cas de redondance de style un ordre de priorité est donné par le browser (navigateur). Elles permettent:
- d'avoir une présentation homogène sur tout un site.
- de pouvoir changer l'aspect du site entier en modifiant quelques lignes.
- d'offrir une plus grande lisibilité du code HTML.
- de positionnemer aux pixel près les éléments.
- d'optimiser le temps de chargement des pages
Définition d'un style
C'est une chose simple à faire:
balise {propriété de style: Valeur; propriété de style: Valeur ...}
Exemple:
A {font-family=Verdana; font-size=18px;
font-style=bold; font-color=yellow}
Incorporer les styles
Les styles peuvent être incorporés de trois manières diiférentes:
- Dans le corps (
<BODY>
) - Dans l'en-tête (
<HEAD>
) - Dans un fichier externe dont l'extension est .css
A l'intérieur des marqueurs <HEAD>
On les déclare grâce à la balise STYLE
. L'attribut
type="text/css"
prévient qu'il s'agit de feuilles de
style en cascade (c'est actuellement la seule possibilité, mais les créateurs
de la norme prévoieront peut-être une extension). La balise de
commentaire <--! ... -->
évite que des browsers peu récents
lisent ces informations.
<HTML>
<HEAD>
<STYLE type="text/css">
<!--
balise { propriete de style: valeur; ... }
..
-->
</STYLE>
</HEAD>
<BODY>
...
</BODY>
</HTML>
A l'intérieur des marqueurs <BODY>
Cette façon de définir les feuilles de style est peu courante, et peu conforme au but des feuilles de style. Cela peut néanmoins servir pour définir une exception.
<HTML>
<BODY>
<BALISE propriete de style: valeur; ...> ... </BALISE>
</BODY>
</HTML>
Dans un fichier séparé
Le fait de pouvoir stocker la définition des feuilles de style à l'extérieur du document est un "plus", car on peut, en modifiant le fichier contenant les feuilles de style, changer l'allure de toutes les pages web s'y reférant.
Ce document porte l'extension est .css et ressemble à
body {background-image: home.gif}
LI {font: 13px Verdana}
B {font: 14px Verdana; font-weight: bold}
A {font:12px Verdana; font-weight: bold;color=black;}
H1 {font: 16px Arial;font-weight: bold;color=black)
H2 {font: 14px Arial;font-weight: bold;color=black)
Pour l'utiliser dans une page web, il suffit de placer en en-tête le code
<HTML>
<HEAD>
<LINK rel=stylesheet type="text/css" href="style.css">
</HEAD>
La balise <LINK>
avertit le navigateur qu'il doit établir un lien
rel=stylesheet
précise qu'il s'agit d'une feuille externetype="text/css"
avertit (une fois de plus) qu'il s'agit de feuilles de style en cascadehref=" ... "
définit l'emplacement de la feuille de style
Les classes
Il peut s'avérer intéressant d'affecter différents style à un même type de balise. Pour cela on a introduit le concept de classe. La définition des classes est aussi simple que celles des styles
.classe {propriété de style: Valeur; ...}
Où classe
représente le nom que vous donnez à la classe.
Pour appeler cette classe il suffit de rajouter un attribut à la balise:
<BALISE class="nom_de_la_classe"> ... </BALISE>
Créons par exemple la classe "important"
.important {font-type: arial; font-color: red; font-weight: bold}
Les propriétés de style
Police | ||
Propriété | Valeur | Description |
font-family | Police précise (Arial, Times, Verdana ...) Famille (serif, fantasy, monospace) |
Définit un nom de police ou une famille |
font-style | normal, italic, oblic | Définit le style d'écriture |
font-weight | - normal, bold, light, bolder, lighter - valeur numérique |
Définit l'épaisseur de la police |
font-size | xx-small, x-small, small, medium, large, x-large, xx-large taille en points (pt), cm, % |
Définit la taille de la police |
font-variant | normale, small-caps | Définit une variante |
font | {font: bold italic} | Raccourci permettant de mettre toutes les propriétés |
Style | ||
Propriété | Valeur | Description |
text-align | left, center, right | Définit l'alignement du texte |
text-indent | en pouces (in), en cm, ou en % | Définit un retrait |
text-decoration | blink, underline, line-through, overline ou none (clignotant, souligné, barré, surligné ou aucune) | Définit une décoration |
text-transform | uppercase, lowercase, capitalize (majuscule, minuscule, première lettre en minuscules) | Définit la casse du texte |
color | "#RRGGBB" | Définit la couleur du texte |
word-spacing | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Définit l'espace entre les mots |
line-height | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Définit l'interligne |
width | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Définit la longueur d'un élément de texte ou d'une image |
height | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Définit la hauteur d'un élément de texte ou d'une image |
white-space | normal, pre, nowrap | Espacement ou blanc |
Arrière plan | ||
Propriété | Valeur | Description |
background-color | "#RRGGBB" | Définit la couleur du fond |
background-image | URL | Définit l'image d'arrière-plan |
background-repeat | repeat, repeat-x, repeat-y, no-repeat | Définit la fa�on de répéter l'arrière-plan |
background-attachment | scroll, fixed | Spécifie si l'image reste fixe avec les déplacements de l'écran |
background-position | - top, center, bottom, left, center ou right - En points (pt), pouces (in), en cm, en pixels (px), ou en % |
Position de l'image par rapport au coin supérieur gauche |
background | {background: test.jpg fixed repeat} | Raccourci pour les propriétés d'arrière-plan |
Marges | ||
Propriété | Valeur | Description |
background | {background: test.jpg fixed repeat} | Raccourci pour les propriétés d'arrière-plan |
margin-top | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Valeur de la marge supérieure |
margin-right | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Valeur de la marge de droite |
margin-bottom | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Valeur de la marge inférieure |
margin-left | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Valeur de la marge de gauche |
margin | Raccourci pour les propriétés de marge |
Bordures | ||
Propriété | Valeur | Description |
border-top-width | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Epaisseur du bord supérieur |
border-right-width | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Epaisseur du bord droit |
border-bottom-width | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Epaisseur du bord inférieur |
border-left-width | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Epaisseur du bord de gauche |
border-width | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Raccourci vers les propriétés d'épaisseur de trait |
border-color | "#RRGGBB" | Couleur de la bordure |
border | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Raccourci vers les propriétés de bordure |
padding-top | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Ecartement entre l'élément et le bord supérieur |
padding-right | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Ecartement entre l'élément et le bord droit |
padding-bottom | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Ecartement entre l'élément et le bord inférieur |
padding-left | En points (pt), pouces (in), en cm, en pixels (px), ou en % | Ecartement entre l'élément et le bord gauche |
padding | Raccourci vers les propriétés d'écartment |
Listes | ||
Propriété | Valeur | Description |
list-style-type | disc, circle ou square | Type de puces et de numérotation |
list-style-image | URL | Permet de remplacer les puces par une image |
list-style-position | inside ou outside | Spécifie si les puces sont à l'intérieur ou à l'extérieur du texte |
list-style | Raccourci vers les propriétés de liste |
Identifier les éléments d'une page HTML
Dans la plupart des balises du HTML, une propriété id permet de nommer les objets créés. Cet identificateur en fait des objets au sens JavaScript du terme. Il est ensuite aisé d'accèder à leurs propriétés et de les modifier à loisirs à l'aide de scripts.
<script>
function survole() {test.bgColor='#dddddd'; }
</script>
<table>
<tr><td id=test onmouseover="survole()">Survolez moi</td></tr>
</table>
Utilisation des ID avec les feuilles de style
De même, il est possible d'identifier les styles à l'aide de la propriété ID.
La syntaxe est alors
#nom_ID { propriété de style: Valeur; ...}
On l'appelera de la manière suivante
<BALISE ID="#nom_ID" > ... </BALISE>
On ne peut faire appel qu'à un seul même ID par page!
Les calques DIV et SPAN
Il faut pouvoir dans un même paragraphe appliquer des styles différents
à des morceaux de texte, c'est à cela que servent les balises
<SPAN>
et <DIV>
Balise SPAN
La balise <SPAN> sert à appliquer des styles à des morceaux de paragraphe. Elle s'utilise aussi bien avec ID qu'avec CLASS.
Sa syntaxe est la suivante
<SPAN class=important> Texte </SPAN>
Balise DIV
L'idée est la même pour la balise DIV, cependant au lieu de s'appliquer à quelques mots dans un paragraphe, elle s'applique sur plusieurs paragraphes.
Sa syntaxe est la suivante
<DIV class=important> paragraphes </DIV>
Notion de couche
Le DHTML est basé sur une fonctionnalité provenant de la norme 4.0 du HTML: les feuilles de style en cascade de positionnement, aussi appelée CSS-P (Cascading Style Sheets Positionning). Celles-ci permettent de définir des "couches" contenant des éléments et pouvant être positionnées sur l'écran. Il s'agit en réalité de balises HTML spéciales pouvant contenir elles-mêmes d'autres balises HTML, et dont les attributs sont entre-autres:- La position par rapport au haut du navigateur
- La position par rapport à la bordure gauche du navigateur
- La largeur
- La hauteur
- Le Z-Index, c'est-à-dire le niveau de superposition de la balise
En effet, on appelle ces conteneurs HTML "couches" car il s'agit d'éléments HTML pouvant être superposés à l'écran comme des carrés de papier calque et pouvant être déplacés séparément (chaque calque est repéré par un identifiant unique que l'on définit comme attribut) dans la fenêtre du navigateur grâce à du Javascript. De plus, le z-index définit l'ordre de superposition des calques, c'est-à-dire quel calque se trouve au-dessus des autres...
Les balises permettant de constituer des couches que nous étudierons
sont les balises SPAN
et DIV
. (LAYER
n'étant pas compatbile Internet Explorer)
La balise DIV
Avec Internet Explorer (versions 4 et supérieures), le positionnement des éléments se fait selon le concept des CSS-P, au moyen des balises DIV et SPAN. Etant donné que le navigateur Internet Explorer 4 est apparu après Netscape Navigator 4, les possibilités "dynamiques" qu'il offre sont plus vaste que celles de Netscape, c'est-à-dire qu'il offre plus d'attributs au niveau de ses balises, pouvant être modifiées par l'intermédiaire d'un code écrit en Javascript après chargement de la page (d'où la notion de HTML dynamique).
Il est possible grâce aux feuilles de style de positionner au pixel près
du texte ou des images grâce aux balises <SPAN>
et
<DIV>
.
Cela est possible avec les versions 4 de Netscape et d'Internet Explorer, cependant cette technique reste hasardeuse et montre encore quelques problèmes de compatibilité
Positionnement relatif et absolu
Le positionnement absolu {position: absolute} se détermine par rapport au coin supérieur gauche de la fenêtre du navigateur, ou du bloc DIV conteneur. Les coordonnées d'un point s'expriment alors de haut en bas (top) et de gauche à droite (left).
La position relative se fait par rapport à d'autres éléments, comme une image, c'est-à-dire que les éléments contenus dans la balises DIV ou SPAN seront positionnés à la suite des éléments HTML après lesquels ils se trouvent.
La syntaxe des balises DIV
et SPAN
est la suivante:
<DIV style="position: absolute; top: 99 px; left: 99 px;
visibility : visible;z-index : 2;">
éléments HTML
...
éléments HTML
</DIV>
Positionner du texte
Positionnons le texte "Comment ça marche?" à 80 pixels du haut de la fenêtre et à 100 pixels à gauche de la fenêtre:
<HTML>
<BODY>
<SPAN style="position: absolute; top: 80 px; left: 100 px;">
Comment ça marche?
</SPAN>
</BODY>
</HTML>
Il y a d'autres façons de procéder, en voici une:
<HTML>
<HEAD>
<STYLE>
<!--
.test{position: absolute; top: 80px; left: 100px; color: black;
font-size: x-large}
-->
</STYLE>
</HEAD>
<BODY>
<DIV class=test>
Comment ça marche?
</DIV>
</BODY>
</HTML>
Positionner une image
Positionnons l'image "test.jpg" à 80 pixels du haut de la fenêtre et à 100 pixels à gauche de la fenêtre (l'image fait 103x61):<HTML>
<BODY>
<SPAN style="position: absolute; top: 80 px; left: 100 px;
width: 103px; height: 61px">
<IMG SRC="test.jpg" >
</SPAN>
</BODY>
</HTML>
Il est important de spécifier la taille de l'image avec les feuilles de style, pour des raisons de non-compatibilité des navigateurs.
Superposer des éléments
Superposons le texte "Comment ça marche?" à l'image "test.jpg":
<HTML>
<BODY>
<SPAN style="position: absolute; top: 30 px; left: 80px;
width: 103px; height: 61px">
<IMG SRC="test.jpg" >
</SPAN>
<SPAN style="position: absolute; top: 50 px; left: 80 px;">
Comment ça marche?
</SPAN>
</BODY>
</HTML>
Il est ainsi possible de superposer des éléments de texte, ainsi
que des images.
Syntaxe des balises
LAYER | ||
Propriété | Valeur | Description |
name | chaine de caractère | Définit un identifiant unique pour la couche |
left | valeur numérique entière | distance en pixel à la bordure gauche |
top | valeur numérique entière | distance en pixel au haut de la page |
DIV et SPAN | ||
Propriété | Valeur | Description |
position | static absolute relative |
Aucun mouvement par rapport au document |
left | auto valeur numérique entière valeur en pourcentage (%) |
Distance à la bordure gauche automatique |
top | auto valeur numérique entière valeur en pourcentage (%) |
Distance au sommet automatique |
width | auto valeur numérique entière valeur en pourcentage (%) |
Largeur automatique |
height | auto valeur numérique entière valeur en pourcentage (%) |
Hauteur automatique |
overflow | visible hidden auto scroll |
Affiche le contenu même s'il est trop grand |
clip | auto bottom left right top |
Découpage automatique |
visibility | inherit hidden visible |
Visibilité par défaut |
z-index | auto valeur numérique entière |
Superposition automatique |
Les événements
Comme on l'a vu, l'intérêt des styles et des calques, outre de permettre un positionnement au pixel près et une mise en forme efficace des pages web, est d'autoriser l'accès en écriture à un grand nombre de propriétés accessibles. Il devient donc possible de réalser des animations et effets graphiques en tout genre, via JavaScript. Le modèle événementiel des pages web permet de réagir à de nombreuses actions de l'utilisateur. Les possibilités offertes sont les suivantes:
Nom | Objet affecté | Description de l'événement |
onAbort | images | arrêt de chargement (bouton stop ou clic sur un lien). |
onBlur | fenêtres, éléments de formulaire | fermeture de la fenêtre ou annulation d'un formulaire |
onChange | texte, liste de sélection | changement de sélection |
onClick | boutons, boutons radio ou liens | clique sur un élément |
onDragDrop | fenêtres | pose d'un élément à l'intérieur de la fenêtre du navigateur |
onError | images, fenêtres | erreur au chargement de l'image ou de la fenêtre |
onFocus | fenêtres, éléments de formulaire | sélection de la fenêtre ou de l'objet formulaire |
onKeyDown | documents, images, liens, zones texte | appuie d'une touche du clavier |
onKeyPress | documents, images, liens, zones texte | maintient appuyé d'une touche du clavier |
onKeyUp | documents, images, liens, zones texte | relachement d'une touche du clavier |
onLoad | documents | chargement d'un document |
onMouseDown | documents, boutons, liens | clique avec la souris |
onMouseMove | rien | déplacement de la souris |
onMouseOut | cartes, liens | le pointeur de la souris sort d'une zone graphique ou d'un lien |
onMouseOver | liens | le pointeur de la souris passe sur un lien |
onMouseUp | documents, boutons, liens | un bouton souris est relaché |
onMove | fenêtres | l'utilisateur ou un script bouge une fenêtre |
onReset | formulaires | réinitialisation d'un formulaire |
onResize | fenêtres | changement dela taille d'une fenêtre |
onSelect | champs ou zones de texte | sélection d'une zone ou d'un champ texte |
onSubmit | formulaire | envoi d'un formulaire |
onUnLoad | documents | on quitte un document |
Animations
Le principe
L'animation des éléments présents sur une page Web se fait en modifiant leur propriété (position, hauteur, largeur, visibilité, z-index, ...) ou en utilisant leur méthodes (fonctions associées à un élément). Cela ne peut se faire qu'à l'aide d'un code Javascript permettant de modifier les propriétés des éléments suite à des événements utilisateurs (clic sur la souris, déplacement de la souris, ...), et cela grâce à une structuration des éléments dans la page définie par le DOM (Document Object Model). Le Document Object Model (DOM) Le Document Object Model est un principe consistant à représenter le navigateur et le document qui y est affiché comme une hiérarchie d'objets possèdant des propriétés intrinsèques et auxquels ont peut accéder en décrivant la hiérarchie qui mène à chaque objet. Toutefois, le Document Object Model ayant été implémenté de manière "sauvage" dans les deux navigateurs concurrents (ie Netscape et Internet Explorer), la hiérarchie et les propriété diffère quelque peu entre les deux browsers.Propriétés modifiables
Selon que l'on utilise Internet Explorer ou Netscape, la façon d'accèder aux propriétés des éléments est différente, ainsi que les propriétés elles-mêmes (il s'agira donc dans un premier temps de déterminer par l'intermédiaire du script le type de navigateur utilisé, puis adapter la notation en fonction...).
- Netscape permet d'accéder aux différents layers
en utilisant la syntaxe suivante:
oudocument.layers['nom'].document.layers['nom2'].attribut
document.layers.nom.document.layers.nom2.attribut
- Internet Explorer définit un objet appelé
all
contenant tous les éléments DIV. Ainsi, l'accès aux éléments se fait par la syntaxe suivante:document.all.nom.attribut
Voici un petit aperçu des actions réalisables en DHTML et la façon de les effectuer sur les deux navigateurs
Netscape Navigator | |
Modifier l'image de fond | document.layers.nom.background |
Modifier la couleur du fond | document.layers.nom.bgColor |
Modifier le clipping | document.layers.nom.clip |
Modifier le contenu | document.layers.nom.open(); document.layers.nom.writeln(); |
Modifier la distance à gauche | document.layers.nom.left |
Accéder au nom | objet.name |
Modifier la visibilité | document.layers.nom.visibility |
Modifier la distance au haut | document.layers.nom.top |
Modifier le z-index | document.layers.nom.zIndex |
Internet Explorer | |
Modifier l'image de fond | document.all.nom.style.backgroundImage |
Modifier la couleur du fond | document.all.nom.style.backgroundColor |
Modifier le clipping | document.all.nom.style.clip |
Modifier le contenu | document.all.nom.innerHTML |
Modifier la distance à gauche | document.all.nom.style.left |
Accéder au nom | objet.id objet.name |
Modifier la visibilité | document.all.nom.style.visibility |
Modifier la distance au haut | document.all.nom.style.top |
Modifier le z-index | document.all.nom.style.zIndex |
Pour conclure, il faut bien voir que les concepts de base sont simples mais que pour réaliser de beaux effets une bonne connaissance de JavaScript peut s'avérer nécessaire. Ci-dessous en téléchargement des documentations trouvées sur la toile.
Télécharger la doc sur JavaScript |