On touche ici à la mise en forme profonde de la page HTML qui donnera
le véritable rendu de votre future page Web. Avant 90% des
mises en forme (positionnement des objets) étaient réalisées à
l'aide des tableaux : c'était pratique et cela donnait un très bon
résultat. Avec l'arrivée en force des feuilles de style css,
certains puristes ont décrété que les tableaux utilisés pour la mise
en forme, étaient à proscrire définitivement. Il est vrai que les
feuilles de style ont apporté une grande souplesse, et des facilités
d'évolution et de maintenance, toutefois la reconnaissance des
feuilles de style pour le positionnement est diversement interprétée
par les navigateurs et l'on peut se retrouver devant de belles
surprises lors de la visualisation du résultat final. Alors ne
rejetons pas tout de suite l'utilisation des tableaux, ils
peuvent nous être encore dans certains cas d'une grande utilité.
Le positionnement est souvent lié à l'utilisation de la balise
<div>
Généralités
Sans rentrer dans le détail du décryptage de l'imbrication des
balises au fur et à mesure que le navigateur charge la page HTML, on
peut dire qu' il existe deux modes de positionnement des
éléments HTML :
Le mode par défaut : le navigateur construit la page Web qui va
être affichée au fur et à mesure qu'il reçoit les informations
(types de balises et contenu) contenues dans la page HTML demandée.
Ainsi les éléments seront positionnés les uns à la suite des autres
dans l'ordre ou ils ont été écrits dans la page HTML et en tenant
compte des types de chaque balise (bloc ou en ligne) et des feuilles
de style qui lui sont associées. On appelle aussi cela la méthode de
positionnement dans le flux.
Rappelons que les balises bloc introduisent systématiquement un
retour à la ligne et voyons le résultat obtenu sur le positionnement
des éléments avec le flux ci-dessous..
Le mode qui sort l'élément du Flux de 4 façons différentes :
- le positionnement relatif, se fait par rapport à d'autres
éléments, comme une image, c'est-à-dire que les éléments
contenus dans la boite seront positionnés à la suite des
éléments HTML après lesquels ils se trouvent.
- le positionnement absolu se détermine par rapport au coin
supérieur gauche de la fenêtre du navigateur. Les coordonnées de
positionnement de la boite s'expriment par rapport au sommet de
la fenêtre du navigateur (variation en y), et par rapport au
coté gauche de la fenêtre du navigateur (variation en x).
- le positionnement fixé,
- le positionnement flottant.
Attributs de positionnement
Il s'agit d'un ensemble d'attributs qui outre le type de
positionnement et les références X/Y du positionnement lui-même,
associe les notions de dimensions, les modes d'affichage des
contenus et des priorités des différents objets les uns par rapport
aux autres.
Une définition de style complète sera de la forme :
{type de positionnement;position X/Y;dimension L/H;mode
affichage;priorités des éléments superposés}
Attributs de positionnement
Attributs
Actions
Valeurs
Commentaires
Les attributs suivants sont relatifs au type de positionnement.
position
Type de positionnement d'un objet.
static : C'est la valeur par défaut de cet attribut. L'élément est
dans le flux normal et sera positionné dans l'ordre ou il a été
écrit dans la page HTML. On n'a pas a spécifier cette valeur si
on ne désire pas un positionnement spécifique pour cet élément.
absolute : Permet de positionner l'élément n'importe ou à l'intérieur
de son conteneur Parent. Si le conteneur parent est body
l'élément peut être positionné n'importe ou sur l'écran du
navigateur. Un élément positionné absolu est sensible
au scrolling.
relative : Positionnement d'un bloc dans le flux normal, pouvant être
décalé horizontalement avec top ou bottom ou
verticalement avec left et right.
fixed : Permet de positionner l'élément n'importe ou dans la
fenêtre du navigateur. Un élément positionné fixed est
insensible au scrolling.
float
Souvent utilisé pour enrouler un texte autour d'une image.
left : la partie enroulée est à gauche.
numérique, entier (pixel, em) ou %
right : la partie enroulée est à droite.
numérique, entier (pixel, em) ou %
none
Aucun flottement n'est appliqué
clear
S'utilise avec float pour signaler l'arrêt du flottement
left : l'élément avec l'attribut clear:left n'accepte pas d'élément float sur sa gauche.
right : l'élément avec l'attribut clear:right n'accepte pas d'élément float sur sa droite.
both : l'élément avec l'attribut
clear:both n'accepte pas d'élément float ni sur sa droite,
ni sur sa gauche.
- none : Dans ce cas rien n'est affecté par rapport aux
éléments flottants et cette propriété n'influence pas le
positionnement en cours.
Les attributs left, top,
width et height font références aux modes de
positionnement définis par la propriété position
left
Positionnement gauche
auto
numérique entier (pixel, em)
%(1)
Note1 Il existe un bug dans le navigateur
Internet Explorer: si l'on spécifie une largeur relative comme par
exemple width:50%, la largeur sera basée sur la dimension du
parent et non sur l'élément lui-même. Note2
Suivant les navigateurs et sans la propriété width sur
l'élément ce dernier peut prendre des largeurs par défaut un peu
différentes et spécialement sous Internet Explorer qui affecte à
l'élément tout l'espace compris entre la fin de l'élément lui même
et le bord droit de son parent (on retrouve la même remarque dans la
fiche HTML concernant les bordures). Cela se passe plutôt bien avec
les autres navigateurs.
top
Positionnement haut
width
Largeur de l'élément(2)
auto
numérique entier (pixel, em)
%(1)
height
Hauteur de l'élément
L'attribut suivant est relatif aux priorités des éléments superposés.
z-index
superposition automatique
auto
C'est la valeur par défaut. Dans les cas de position:absolute
ou position:fixed avec des positionnement
identiques, les éléments superposés sont empilés les uns sur les
autres de telle façon que c'est le dernier du flux qui se place
devant tous les autres.
valeur indiquant la profondeur
valeur numérique entière
Dans les cas de position:absolute ou position:fixed
avec des positionnement identiques, les éléments superposés sont
empilés les uns sur les autres dans l'ordre croissant de la
propriété z_index. L'élément ayant le z-index de
plus grande valeur se place devant tous les autres.
Positionnement relatif
Généralités
Par défaut, un navigateur affiche les différents éléments de la
page dans l'ordre où ils ont été placés dans la page HTML (flux
normal). Un bloc en position relative reste dans le flux normal,
mais peut être décalé (horizontalement avec top ou bottom
et verticalement avec left ou right) par rapport
aux autres éléments frères ou parents.
Le
contenu suivant n'est pas affecté par ce déplacement, qui peut donc
entraîner des chevauchements. En fait ce type de positionnement n'est pas beaucoup utilisé
d'autant que si l'on se permet quelques fantaisies le résultat, en
fonction des navigateurs, est souvent surprenant.
Voici un exemple d'une image et d'un morceau de texte auxquels on
applique un positionnement relatif.
Syntaxe
Afin d'éviter les surprises en fonction des
divers navigateurs, il est conseillé de définir l'ensemble des
attributs de positionnement (right,left...) et éventuellement ceux
de dimensionnement (width et height)..
1. Le conseil des gouverneurs de la Banque centrale européenne se compose des membres du
directoire de la Banque centrale européenne et des gouverneurs
des banques centrales nationales des
États membres ne faisant pas l’objet d’une dérogation au sens de l’article III-91.
2. a) Le directoire se compose du président, du
vice-président et de quatre autres membres.
Commentaires
Remarquez l'utilisation de la balise <span> pour délimiter
la chaîne de caractères "Le directoire" et ainsi pouvoir lui
affecter un positionnement relatif et une couleur d'arrière plan.
Positionnement absolu
Généralités
Permet de positionner l'élément n'importe ou à l'intérieur
de son conteneur Parent. Si le conteneur parent est body
l'élément peut être positionné n'importe ou sur l'écran du
navigateur. Un élément positionné absolu est sensible
au scrolling.
Si on positionne plusieurs éléments susceptibles de se chevaucher on
utilisera la propriété z-index pour indiquer quel élément se
positionnera au dessus des autres.
Boite en affichage absolu par rapport à une boite div en position relative déclarée à partir de la fin du texte ci dessus
Lorsque l'on positionne un objet et s'il est différent d'une
image ou d'un élément multimédia (<object>) sa couleur de fond est
celle héritée de son parent : en l'absence d'arrière plan (image,
mais surtout couleur) le contenu de l'élément que l'on positionne va
se retrouver mêlé au contenu du parent. Cela peut être
pratique si l'on est sûr que le contenu du parent ne sera pas une
gêne.
Exemple de disposition des éléments
Positionnement fixed
Permet de positionner l'élément n'importe ou dans la
fenêtre du navigateur à l'aide des attributs top, left, right,
buttom. Un élément positionné fixed est
insensible au scrolling.
Syntaxe
position:fixed;top:xx;left:zz;.....
Je suis un texte dans une boite en position:fixed
Imbrication d'éléments
Il est possible d'imbriquer par exemple
des éléments "relatif" et/ou "absolu" dans un élément "fixed"
mais attention aux surprises et aux divers débordement d'un
élément sur un autre. Les précautions minimales à prendre
dans ce type de construction est de fixer précisément les
valeurs de margin et padding : si on ne les
utilise pas veillez à les initialiser à 0 em ou 0 px.
Exemple
Commentaires sur le code
Priorité des éléments superposés z-index
Généralités
Dans les cas de position:absolute ou position:fixed
avec des positionnement identiques ou susceptibles de se
chevaucher, les éléments superposés sont
empilés les uns sur les autres dans l'ordre croissant de la
propriété z_index. L'élément ayant le z-index de
plus grande valeur se place devant tous les autres. z-index
varie de 0 (valeur par défaut) jusqu'a 999 valeur la plus forte. En
l'absence de prérogative z-index, c'est le dernier objet lu dans le
flux qui se superpose aux autres.
Attributs et valeurs
z-index
superposition automatique
auto
C'est la valeur par défaut. Dans les cas de position:absolute
ou position:fixed avec des positionnement
identiques, les éléments superposés sont empilés les uns sur les
autres de telle façon que c'est le dernier du flux qui se place
devant tous les autres.
valeur indiquant la profondeur
valeur numérique entière
Dans les cas de position:absolute ou position:fixed
avec des positionnement identiques, les éléments superposés sont
empilés les uns sur les autres dans l'ordre croissant de la
propriété z_index. L'élément ayant le z-index de
plus grande valeur se place devant tous les autres.
Exemple
Positionnement flottant
Généralités
La propriété float est essentiel pour assurer une qualité
professionnelle à la présentation de votre page Web, à la condition
de savoir bien le manipuler et d'en connaître les limites.
Cette propriété permet de sortir un élément du flux, par
exemple une image ou une colonne de contenu et l'afficher à gauche
ou à droite à l'intérieur de son parent. En plaçant un élément
déterminé à l'intérieur du conteneur, le reste du flux, est décalé à
droite (si la propriété float est spécifié à
gauche) de l'élément flottant, et se poursuit en
dessous selon sa longueur.
De fait, si l'on peut facilement déduire le comportement de
l'élément flottant, celui du reste du flux devra être deviné par le
designer, qui devra prévoir l'écoulement des autres éléments : c'est pourquoi il est nécessaire de préciser
la taille d'un élément flottant, ainsi que de prévoir la place prise
par le reste du flux.
Le comportement inattendu du reste du flux se retrouve souvent
sous la forme d'autres éléments flottants qui n'occupent pas la
place voulue. C'est ici que la propriété clear entre en jeu
et contrôle le comportement des éléments qui suivent, dans le
flux, un élément flottant. Par défaut, l'élément standard suivant un
élément flottant s'affichera dans l'espace laissé par la largeur du
flottant dans le contenu parent. Ce comportement n'étant pas forcément voulu,
clear a été
conçue pour préciser que cet élément et bien sur ce qui suivent ne seront pas influencés par le
comportement d'un flottant. Cette précision peut se faire pour les
éléments flottant sur chaque
côté ou sur les deux à la fois. En fait clear permet de
libérer l'élément de l'influence de la propriété float.
Les attributs et valeurs de float et clear
float
left : la partie enroulée est à gauche
numérique, entier (pixel, em) ou %
right : la partie enroulée est à droite
numérique, entier (pixel, em) ou %
none
Aucun flottement n'est appliqué
clear
S'utilise avec float pour signaler l'arrêt du flottement
left : l'élément avec l'attribut clear:left
n'accepte pas d'élément float sur sa gauche.
right : l'élément avec l'attribut clear:right
n'accepte pas d'élément float sur sa droite.
both : l'élément avec l'attribut clear:both
n'accepte pas d'élément float ni sur sa droite, ni sur sa gauche.
none : Dans ce cas rien n'est affecté par rapport aux
éléments flottants et cette propriété n'influence pas le positionnement en cours.
Exemple de disposition des éléments
Voici le résultat d'une page HTML dont certains éléments utilisent la propriété float.
La partie encadrée par le rectangle rouge constitue la
boite de type <div>, conteneur de la présentation.
La boite générale contient du texte et des éléments de type
image <img> (avec propriété float:left), un petit
mémo <div> (avec propriété float:right) et un formulaire
<form> (avec propriété float:right).
Un arrêt de l'action des float est spécifié par un bloc
<div> spécifique en fin de conteneur.
Des marges internes et externes ont été appliquées pour obtenir une bonne présentation de l'ensemble.
Exemple d'un positionnement en colonnes
La musique country, ou country (autrefois « country and western ») est un....
Le directoire se compose du président, du vice-président et de quatre autres membres
Le conseil des gouverneurs de la Banque centrale européenne se compose des membres....
Banque centrale européenne se compose des membres du directoire de la Banque centrale européenne et des gouverneurs ...
Bien que la country ait été décriée par certains critiques français comme étant .......
Exemple d'application de la propriété clear pour la structuration finale d'objets flottant
En fonction des feuilles de style , l'élément doté de la propriété
clear
risque de réagir non seulement à l'élément flottant
situé dans le même conteneur, mais aussi à d'autres éléments flottant
extérieurs à celui-ci, ce qui le repoussera beaucoup plus bas que le
but désiré.
Pour éviter tout effet indésirable, il faut limiter l'action de
la propriété clear au conteneur englobant le flottant souhaité, le
texte qui le suit et le clear lui-même.
Avant l'application de clear
Je suis du texte avant.....
Un petit mémo plus grand que le texte de la boite....
Le conseil des gouverneurs ....
je suis du texte après ...
Aprés l'application de clear
Je suis du texte avant.....
Un petit mémo plus grand que le texte de la boite....
Le conseil des gouverneurs ....
je suis du texte après
Commentaire
Attention à la réaction des ces attributs en fonction des
navigateurs. Tant que l'on reste dans des configurations simples et
que l'on suit les recommandations précédentes on évitera les plus
gros problèmes, mais attention en cas d'emboîtements compliqués
certaines réactions peuvent être imprévisibles.
Alignement des éléments
Méthode avec l'attribut margin
Les marges sont transparentes et ne font pas partie de la dimension de l'élément.
Valeurs de l'attribut margin
Attributs
Fonctions
Valeurs
margin associé à 1 valeur
Spécifie l'espace externe pour les quatre cotés. Exp. margin:0.3em
pixels, %2, em, auto
margin associé à 2 valeurs
La première valeur défini l'espacement externe en haut et en bas, la seconde défini l'espacement externe à gauche et à droite.
Exp. margin:0.3em 5px
margin associé à 4 valeurs
Espaces externes définis pour chacun des cotés dans le sens haut, droite, bas, gauche (à partir de haut dans le sens des aiguilles d'une montre.
Exp. margin:0.3em 01em 5px 2px
margin-top
Spécifie la marge externe individuellement coté par coté.
Exp. margin-top:0.3em.
top : haut
bottom : bas
left : gauche
right : droite
pixels, %2, em, auto
margin-bottom
margin-left
margin-right
Note2 : Pour les valeurs en % la dimension de référence est la largeur de la boîte mère.
Exemple
Méthode avec les attributs de positionnement de texte.
Ces attributs relatifs au positionnement de texte ont été vus dans la fiche "Style et structuration de texte", mais ils peuvent être aussi utilisés dans le cadre de positionnement d'éléments.
vertical-align permet de gérer l'alignement vertical
text-align permet de spécifier l'alignement horizontal
Attributs de la propriété text-align utilisables pour le positionnement
Attributs
Commentaires
left
alignement du texte gauche
center
alignement du texte au milieu
right
alignement du texte à droite
inherit
hérite de la propriété du son parent
Exemple
Remarques
Le fait d'utiliser text-align pour aligner des éléments aligne aussi le contenu des éléments eux-mêmes, il faut donc réajuster les éléments inclus à votre convenance. C'est le cas par exemple de la boite jaune qui est positionnée avec text-align:center, et dont le contenu "Element secondaire" doit être réajusté si on ne veut pas qu'il soit lui aussi centré par un text-align:left (p {text-align:left}.
Les bonnes habitudes
L'utilisation de la propriété background-color ou
background-image est fortement recommandé en association avec les
propriétés position:absolute et position:fixed.
Spécifiez systématiquement la propriété width et
éventuellement la propriété height afin d'obtenir
une présentation homogène par les différents navigateurs.
Pour les éléments
float prévoir systématiquement une largeur afin d'éviter des débordements imprévisibles.
Application au projet de site web
Le but de cet exercice est de positionner les différents partie de notre site de manière à le rendre convivial et ergonomique.
Étape 1 : Centrage du site. Pour cela :
Dans la page index.html de la racine créez une boite div qui encadre l'ensemble de la page (départ de la boite juste après <body> et fin de la boite juste avant </body>). Cette boite aura pour identificateur "Site".
Faire de même pour les pages Bouquets.htm, Compositions.htm, Fleurs.htm et Plantes .htm du répertoire "Site".
Sauvegardez les divers fichiers
Dans le fichier CSSExterneScreen.css créez la feuille de style pour la boite "Site", lui donner une largeur de 65% puis centrez la boite en utilisant la propriété margin:auto.
Étape 2 : Positionnement de la liste "Choisissez et commandez" sur la gauche et positionnement du tableau d'images à droite sur la même horizontale. On donnera une largeur de 15em à la liste.