Alsacreations, tableaux ou div une comparaison

Transcription

Alsacreations, tableaux ou div une comparaison
Alsacreations, tableaux ou div une comparaison
Création de sites web, cours et tutoriels CSS et XHTML
●
●
●
●
●
●
●
Aller sur Alsacréations.
CV.
Liens.
Doc CSS.
Forum CSS.
Blog.
Accueil.
Galeries et Modèles
●
●
Modèles de mise en page CSS : Des dizaines de gabarits en XHTML pour construire vos sites sans tableaux
Galeries de menus : Des menus de toutes sortes pour vous inspirer (simples, graphiques, déroulants,...)
Dernier tutoriel
●
Les Principes Fondamentaux : Quelles bases minimales doit-on connaître pour apprendre (et enseigner) le HTML
et s'auto-proclamer 'webmaster' ?
Les plus visités
●
●
●
Construire un site sans tableaux
Un menu déroulant en CSS
Savoir positionner les calques et balises en CSS
Tableaux ou Div, petite comparaison concrête
La théorie
A l'heure actuelle, la grande majorité des sites web sont construits grâce à l'utilisation de tableaux. Les tableaux,
permettent en effet de structurer la page en plusieurs parties, et chaque partie peut contenir un menu, un entête, un
contenu,...
Cependant, cette méthode quasi-universelle présente de nombreux désavantages :
●
●
●
l'imbrication multiple de tableaux est souvent nécessaire, même pour des design simples.
le nombre de balises (table, tr, td, colspan, rowspan... sans oublier les horribles spacer.gif) devient vite considérable
et alourdir le code, la lisibilité et donc la mise à jour
ce code très lourd augmente souvent inutilement le poids de la page et du chargement.
De plus, pour des questions d'Accessibilité (aux handicaps par exemple), il est recommandé d'utiliser chaque balise de
façon sémantiquement correcte.
Un tableau est conçu initialement pour afficher des données... tabulaires (un forum, des statistiques par exemple) et non
pour faire la présentation de sa page.
Vous découvrirez en détails les différent problèmes que posent une mise en page en tableaux sur les sites suivants :
http://www.alsacreations.com/articles/tableaux/ (1 sur 5) [12/08/2004 18:02:13]
Alsacreations, tableaux ou div une comparaison
OpenWeb et Cybercodeur.
Notre exemple
Nous allons utiliser un exemple concret de site web pour effectuer une comparaison entre les deux mises en pages afin de
savoir ce que peut apporter concrêtement une mise en page avec des blocs div.
Le site que nous allons prendre en exemple est www.ink2art.com (inutile d'aller visiter le site : la mise en page vient de
changer depuis avril 2004)
L'ancienne mise en page du site (celle que nous allons reproduire et comparer) est assez simple et était composée de
grosses lettres en images qui changeaient au survol de la souris :
En pratique...
Pour pouvoir faire notre comparaison "tableaux" contre "div", nous avons reproduit exactement cette mise en page de
référence (même visuel, même comportements de rollovers) de trois manières différentes :
●
●
●
Première solution : reproduire la mise en page à l'aide d'outils WYSIWIG (What You See Is What You Get),
Macromedia Fireworks pour le design et Macromedia Dreamweaver pour le code HTML. Voir le résultat.
Deuxième solution : refaire la mise en page à la main, à l'aide de tableaux. Voir le résultat.
Troisième solution : reproduire la mise en page à la main, à l'aide de balises div et de feuilles de styles CSS. Voir
le résultat.
Notons que chacune des trois solutions doit obligatoirement donner un résultat compatible (même visuel + comportement
rollover) sur les navigateurs standards récents: IE5.5+ Netscape6+ Mozilla1+ Opera6+ et Safari1+
Le poids des pages
Le poids des différentes mises en pages est celui-ci :
●
●
●
Mise en page tableaux wysiwyg : 4.73ko
Mise en page tableaux à la main : 3.86ko
Mise en page tableaux avec div et css : 1.73ko
Bien sûr, certains codes auraient pu être bien plus optimisés (on a réussi à compresser le document en div à moins de 600
http://www.alsacreations.com/articles/tableaux/ (2 sur 5) [12/08/2004 18:02:13]
Alsacreations, tableaux ou div une comparaison
octets, mais sa lisibilité s'en est trouvé considérablement réduite), cependant le constat en terme de poids est facile à
prononcer : la mise en page tableaux à la main (solution 2) a permis une économie de 18% par rapport au code généré par
les logiciels wysiwygs
Loin devant, en terme de légèreté de code, la mise en page avec div et css (solution 3) a permis une économie de 55% sur
le code à la main et de près de 64% sur le code wysiwyg !
Séparation des styles
Le principe de la mise en page à l'aide de styles CSS permet un avantage que n'ont pas les autres techniques : la séparation
des styles sur une feuille de style externe (fichier .css séparé) est un excellent moyen d'économiser du poids de page.
En effet, le document ne contiendra que la partie de code pur (partie HTML située dans les balises body), tout le design
sera sur une feuille CSS externe. Cette feuille externe sera chargée par le navigateur la première fois, puis mise en cache
dans le disque dur de l'ordinateur et rechargée instantanément. De plus, une feuille unique pour tout le design facilite
considérablement les mises à jour et les modifications du site : en un clic vous pouvez modifier tout le design de toutes les
pages du site.
Au final, en séparant les styles CSS sur une feuille externe, le poids de la mise en page avec div et css est de ... 498 octets,
soit près de 90% d'économie de code par rapport au document produit par les logiciels wysiwyg !
Bien-sûr un allègement de 90% sur un code de 4.73ko est infime et négligeable. Par contre, imaginez un instant des pages
plus complexes, un site de plusieurs centaines de ces pages lourdes, et quelques centaines de visiteurs quotidiens. Vous
arrivez rapidement à plusieurs Méga-octets de données économisées sur votre bande passante chaque jour.
L'Accessibilité
Autre point de différences : l'Accessibilité des pages aux handicaps.
Pour tester l'accessibilité des mises en page réalisées, nous allons utiliser un navigateur texte qui ne tient pas en compte les
images ou les scripts : Lynx. Nous testerons les documents à l'aide de ce visualiseur Lynx.
Les résultats sont sans appel : les deux documents réalisés en tableaux n'affichent strictement rien sur Lynx. En effet, les
images (même avec la balise alt) ne sont pas du tout utilisables et cliquables par exemple.
Voici ce que donne l'affichage des deux premieres solutions sur un navigateur texte :
Comme vous le constatez, il n'apparaît aucun élément significatif, ni aucune navigabilité sur le site.
Voici ce que donne l'affichage de la 3ème solution (div) sur un navigateur texte :
http://www.alsacreations.com/articles/tableaux/ (3 sur 5) [12/08/2004 18:02:13]
Alsacreations, tableaux ou div une comparaison
Bien que sommaires, les liens du site sont présents et cliquables.
Autre domaine à prendre en compte dans l'Accessibilité : votre document web ne sera pas obligatoirement vu sur un
navigateur et un écran d'ordinateur. A l'heure des technologies actuelles, un document doit être multisupports et passer
aussi bien sur un écran que sur un téléphone wap, un palm, ...
Lisibilité du code
Imaginons à présent que l'on vous donne pour mission de modifier une partie du code HTML, par exemple pour décaler
l'une des images. Là encore, les trois solutions offrent des codes très différents.
Voici un (court) extrait du code de la solution "wysiwyg" :
<td colspan="4"><img name="titrec1" src="images/titre.gif" width="387" height="52"
border="0" alt=""></td>
<td bgcolor="#000000"><img src="images/spacer.gif" width="33" height="52"
border="0" alt=""></td>
<td rowspan="2"><img name="t" src="images/t.gif" width="149" height="228"
border="0" alt=""></td>
<td><img src="images/spacer.gif" width="1" height="52" border="0" alt=""><
/td>
</tr>
<tr>
<td colspan="3" bgcolor="#000000" valign="top"><font color="#FFFFFF" size="2"
face="Arial, Helvetica, sans-serif">© InkArt 2003</font></td>
<td colspan="2"><a href="#" onMouseOut="MM_swapImgRestore();"
onMouseOver="MM_swapImage('a','','images/aon.gif',1);"><img name="a"
src="images/a.gif" width="177" height="176" border="0" alt=""></a></td>
Avouez qu'il est difficile de s'en sortir et de savoir à quoi correspond quelle partie du code. En réalité, vous ne pourriez
quasiment pas vous en sortir sans l'aide d'un logiciel qui déchiffrerait ce charabia.
Imaginez à présent ce document visité par un utilisateur aveugle, utilisant un lecteur braille qui "lit" les balises : cet
utilisateur sera totalement incapable d'avoir une représentation globale du document.
Voici à présent le code HTML complet de la solution 3, à l'aide de div et CSS :
<img id="i" src="images/i.gif" alt="lettre i" />
<a id="n" href="">bouton n </a>
<a id="k" href="">bouton k </a>
<a id="two" href="">bouton 2 </a>
<img id="ti" src="images/titre.gif" alt="titre" />
<a id="imga" href="">bouton a </a>
<a id="r" href="" >bouton r</a>
<img id="t" src="images/t.gif" alt="lettre t" />
<div id="copyright">© Ink2Art 2003</div>
http://www.alsacreations.com/articles/tableaux/ (4 sur 5) [12/08/2004 18:02:13]
Alsacreations, tableaux ou div une comparaison
Ce code n'est composé que de deux balises principales qui ne s'enchevêtrent pas : les images <img> (pour les lettres fixes
comme le titre ) et les balises de lien <a> (pour les liens en images réactives) : c'est simple et clair !
Il suffit de connaitre les deux balises (img, a) pour pouvoir se représenter la structure du document, même si on ne connait
pas les feuilles de styles CSS. Cette facilité de lecture va grandement améliorer les mises à jour et les modifications du
document.
Note : si vous êtes totalement néophyte dans le domaine des CSS, ce code peut vous paraître complexe au premier abord...
quelques connaissances de base des CSS vous feront vite comprendre qu'il n'en est rien.
Pour les débutants, lire l'excellent article "un cheminement vers les Standards"
Conclusion
Les tableaux ne sont pas fait pour la mise en page et ce petit exemple concrêt (même s'il a des limites) le démontre.
Les tableaux semblent pratiques mais vous obligent à bidouiller pour obtenir un affichage correct : passage obligé des
rowspan, colspan, spacer.gif et autres tables imbriquées; Tout cela est bien plus simple à structurer à l'aide de div... pour
peu que vous soyez motivé à laisser tomber les vieilles habitudes et suivre l'évolution du web.
Raphaël GOETTER
www.alsacreations.com
http://www.alsacreations.com/articles/tableaux/ (5 sur 5) [12/08/2004 18:02:13]
Alsacreations, faire une mise en page en CSS et XHTML
Création de sites web, cours et tutoriels CSS et XHTML
●
●
●
●
●
●
●
Aller sur Alsacréations.
CV.
Liens.
Doc CSS.
Forum CSS.
Blog.
Accueil.
Galeries et Modèles
●
●
Modèles de mise en page CSS : Des dizaines de gabarits en XHTML pour construire vos sites sans
tableaux
Galeries de menus : Des menus de toutes sortes pour vous inspirer (simples, graphiques, déroulants,...)
Dernier tutoriel
●
Les Principes Fondamentaux : Quelles bases minimales doit-on connaître pour apprendre (et enseigner) le
HTML et s'auto-proclamer 'webmaster' ?
Les plus visités
●
●
●
Construire un site sans tableaux
Un menu déroulant en CSS
Savoir positionner les calques et balises en CSS
Faire une mise en page grâce aux CSS
L'objectif est de créer un canevas de page web entièrement en CSS et qui s'adapte automatiquement à la taille du
navigateur et de l'écran. Voir le résultat / voir une variante
Introduction
Les feuilles de style (CSS) sont des outils très puissants, qui ne se résument pas qu'à modifier la couleur des liens,
comme on le croit parfois. Vous trouverez une introduction à l'utilisation des CSS dans ce tutoriel.
En fait, les feuilles de style prennent de plus en plus d'importance avec l'évolution du web et il est possible de
construire des sites entiers uniquement à l'aide de CSS.
Techniquement, il existe trois sortes de design pour le web :
●
●
●
Le design ICY : la largeur du site est fixée en pixel (en général 760px) et le site est placé à gauche du
navigateur
Le design JELLY : la largeur est toujours fixe, mais le site est centré dans l'écran
Le design FLUID : le site s'adapte automatiquement à la largeur de l'écran. C'est ce que nous allons faire
http://www.alsacreations.com/articles/design/ (1 sur 9) [12/08/2004 18:02:57]
Alsacreations, faire une mise en page en CSS et XHTML
dans ce tuto.
Avantages, inconvénients et compatibilités
Les CSS ont de nombreux avantages, notamment celui d'alléger le code et le poids de la page web, mais aussi de
permettre des choses irréalisables en html ou en javascript.
De plus, les CSS facilitent la mise à jour de gros sites : avec une feuille de style séparée, il suffira de modifier une
ligne pour changer l'aspect de tous les cadres d'un site entier.
Un aspect très intéressant des CSS c'est de pouvoir changer en un claquement de doigt tout l'aspect physique de la
page. Vous pouvez vous en apercevoir avec le choix des designs sur Alsacréations, mais surtout sur le site de
référence en la matière, un véritable caméléon : le fameux CSS Zen Garden.
Enfin, les CSS permettent le respect des standards du web, de la sémantique des balises, et facilitation de
l'Accessibilité. (voir sur le site de référence français : OpenWeb)
Du côté des inconvénients, il faut admettre que les éditeurs visuels html, comme Dreamweaver, ont encore du mal à
suivre ces techniques et se limitent généralement à l'utilisation de tableaux pour construire les pages, ou alors à une
mauvaise utilisation de calques. En clair, même si l'exercice de ce tutoriel pourra être réalisé grâce aux outils de
CSS intégrés de Dreamweaver, il est probable que vous ayez à mettre les mains dans le cambouis du code pour
passer aux étapes supérieurs et aux techniques plus évoluées.
Pour ce qui est de la compatibilité navigateurs, il faut savoir que les CSS étaient intégrées en partie dès Internet
Explorer 3 et qu'à l'heure actuelle tous les navigateurs récents gèrent très bien les feuilles de styles évoluées.
Cependant, vous devez savoir que les anciens navigateurs, comme Netscape 4, gèrent très mal (voire pas du tout)
les positionnement en CSS que nous allons utiliser dans ce tutoriel. C'est un parti pris : il faut bien bouger les
choses si l'on veut que ces dinosaures disparaissent un jour.
Démarche :
Nous n'utiliserons aucun tableau ni cellules pour construire notre canevas, mais uniquement des balises DIV pour
délimiter nos "zones".
NOTE : Les balises <div> sont des balises neutres servant de conteneurs, de blocs. Ils désignent une boite
rectangulaire invisible.
Généralement, la balise <div> est assimilée au concept de "calque" (surtout sur les éditeurs html comme
Dreamweaver).
Un calque est un <div> qui a été positionné avec la propriété "position: absolute" ou "position: relative".
Mais rien ne nous oblige à imposer cette propriété de position, on peut souvent s'en passer en plaçant les div
les uns par rapport aux autres grâce à la propriété "margin".
Afin de définir et différencier chaque bloc div, nous leur appliquerons une classe différente. Par exemple, le div
class="gauche" (celui qui servira de menu) sera un bloc placé à gauche de la page et aura une largeur définie à 200
pixels.
Voici comment nous allons procéder :
●
●
Nous commencerons par délimiter 4 parties sur notre page : un entête, un menu, une partie centrale et un
pied-de-page. Chaque partie sera un bloc (div) que nous définierons (taille, position, couleur, ...) grâce au
CSS et que distinguerons par une classe différente.
Nous placerons le code HTML dans la partie BODY de la page. Le code HTML sera très court et ne
http://www.alsacreations.com/articles/design/ (2 sur 9) [12/08/2004 18:02:57]
Alsacreations, faire une mise en page en CSS et XHTML
●
contiendra que des balises div.
Nous construirons ensuite le code CSS à placer en partie HEAD de la page. C'est ce que l'on appelle une
feuille de style interne, mais vous pouvez bien sûr faire de même en utilisant une feuille externe.
Note : tous les attributs CSS utilisées ne seront pas expliqués en détail, parce qu'en général leur signification
sera suffisamment explicite. Si toutefois certaines balises ou attributs vous paraîtraient obscur, voici une liste
courte et expliquée des attributs que nous utiliserons :
http://www.commentcamarche.net/css/cssproperty.php3
Réalisation générale
1.
Code HTML
La structure générale (le code HTML que vous placerez au sein de vos balises <body>), est celle-ci :
<div class="entete"></div>
<div class="contenu">
<div class="menu"></div>
<div class="centre"></div>
</div>
<div class="pied"></div>
Nous avons donc nos quatre blocs (entête, menu, centre et pied de page). Nous remarquons que les blocs "menu" et
"centre" sont eux-même contenus dans un bloc nommé "contenu", ceci afin que nos deux parties centrales soit au
diapason (même hauteur, et positionnement l'une par rapport à l'autre par exemple)
A présent que la partie html est faite, il nous suffit de nous occuper de la partie CSS !
Important : par défaut, les blocs DIV se placent automatiqument les uns en-dessous des autres et prennent
toute la largeur de l'écran. A nous donc de nous servir de cet avantage à bon escient.
1.
Code CSS
Voilà donc le code CSS de notre mise en page, à placer entre les balises HEAD de la page html. Vous trouverez les
explications détaillées en-dessous du code :
<style type="text/css">
<!-html, body {
margin:0;
padding:0;
height: 100%;
}
.entete {
background-color: #3333CC;
height: 10%;
}
.contenu {
height: 80%;
http://www.alsacreations.com/articles/design/ (3 sur 9) [12/08/2004 18:02:57]
Alsacreations, faire une mise en page en CSS et XHTML
background-color: #66CCFF;
}
.menu {
background-color: #330066;
float: left;
width: 200px;
height: 100%;
color: #ffffff;
}
.centre {
margin-left: 200px;
}
.pied {
background-color: #336699;
height: 10%;
}
-->
</style>
Explication du code CSS et réalisation :
1) Commençons par supprimer les marges de la page en cliquant sur l'ajout d'un nouveau style avec Dreamweaver
(Maj+F11). Cochez l'option "redéfinir une balise existente" et sélectionnez la balise BODY dans la liste déroulante.
Dans la catégorie "box", donnez la valeur 0 (zéro) à toutes les marges (gardez cochée la case "identique pour tous").
http://www.alsacreations.com/articles/design/ (4 sur 9) [12/08/2004 18:02:57]
Alsacreations, faire une mise en page en CSS et XHTML
2) Ensuite, on va définir notre entête (div class="entete") en cliquant sur l'ajout d'un nouveau style. Nommons
notre style .entete (ne pas oublier le point avant le nom).
Dans la catégorie "background", choisissons une couleur de fond pour l'entête (j'ai choisi la couleur #3333CC).
Dans la catégorie "box", nous allons lui donner une hauteur de 10% (c'est un exemple que vous pouvez modifier).
Voilà tout pour notre entête : pas besoin de lui indiquer une position car il sera automatiquement placé en haut à
gauche. Inutile de lui indiquer une largeur : il occupera toute la largeur de l'écran.
http://www.alsacreations.com/articles/design/ (5 sur 9) [12/08/2004 18:02:57]
Alsacreations, faire une mise en page en CSS et XHTML
3) Continuons de la même manière à définir notre bloc de contenu (div class="contenu") qui s'appellera .contenu
et qui va contenir les blocs de menu et central.
Donnez à ce bloc une hauteur de 80% et une couleur de fond (#66CCFF chez moi).
Inutile de donner une position à ce bloc "contenu" : il sera automatiquement placé à la suite du bloc "entête"
4) Passons au bloc de menu (div class="menu"). Ce bloc sera le seul à posséder une valeur de largeur car il ne doit
pas s'étaler sur toute la page. Il sera également différent des autres car il devra être placé à gauche et non endessous du bloc central, comme c'est le cas par défaut.
Créez donc cette classe en cliquant sur l'ajout d'un nouveau style. Appelez-la ".menu" et donnez-lui une couleur de
fond.
Dans la catégorie "box", vous allez lui spécifier une largeur (200px), mais vous allez également lui donner la valeur
"float: left" pour lui indiquer de se placer à gauche dans son conteneur.
Enfin, vous lui spécifierez une hauteur de 100%, ce qui veut dire qu'elle utilisera toute la hauteur de son conteneur,
c'est à dire le bloc "contenu".
http://www.alsacreations.com/articles/design/ (6 sur 9) [12/08/2004 18:02:57]
Alsacreations, faire une mise en page en CSS et XHTML
5) Au tour du bloc central (div class="centre"), celui qui contiendra le contenu de la page. Ce bloc aura
simplement à être positionné par rapport au menu, c'est à dire avec une marge gauche de 200 pixels.
Créez cette classe en cliquant sur l'ajout d'un nouveau style. Appelez-la ".centre", inutile de lui donner une couleur
de fond : elle aura celle de son conteneur c'est à dire "contenu".
Dans la catégorie "box", vous allez lui spécifier une marge à gauche de 200px. Il faut décocher l'option "identique
pour tous", sinon la marge va s'appliquer dans tous les sens.
Inutile de donner une largeur à ce bloc "centre" : il prendra automatiquement la largeur qu'il reste dans l'écran.
http://www.alsacreations.com/articles/design/ (7 sur 9) [12/08/2004 18:02:57]
Alsacreations, faire une mise en page en CSS et XHTML
6) On termine en définissant notre pied de page (div class="pied") en cliquant sur l'ajout d'un nouveau style.
Nommons notre style .pied.
Dans la catégorie "background", choisissons une couleur de fond pour l'entête (j'ai choisi la couleur #336699).
Dans la catégorie "box", nous allons lui donner une hauteur de 10% (c'est un exemple que vous pouvez modifier).
Voilà tout pour notre pied : pas besoin de lui indiquer une position car il sera automatiquement placé en dessous
des autres. Inutile de lui indiquer une largeur : il occupera toute la largeur de l'écran.
A vous de jouer !
Ce tutoriel est basique, il permet de créer un canevas-type simple. Vous pouvez très bien vous approprier cet
exercice pour réaliser des structures beaucoup plus complexes, par exemple en remplaçant les couleurs de fond par
des images.(voir cet exercice)
Les CSS permettent également de faire des menus évolués : verticaux, déroulants, animés,... (voir la page générale
et les exemples)
Attention : avec le design que nous avons créé, nous "bloquons" la hauteur du bloc centre à 80%. En effet si le
texte est trop long dans le DIV «centre» le texte passe sous le DIV «pied». Pour ne pas bloquer cette hauteur, il est
préférable d'utiliser la propriété "min-height" que "height"
Pour finir, voici toute une panoplie de modèles de mise en page CSS.
Note finale : pour aller plus loin dans le positionnement CSS, n'hésitez pas à suivre les explications sur le site de
référence, OpenWeb (http://openweb.eu.org/articles/initiation_flux/)
http://www.alsacreations.com/articles/design/ (8 sur 9) [12/08/2004 18:02:57]
Alsacreations, faire une mise en page en CSS et XHTML
Raphaël GOETTER
www.alsacreations.com
http://www.alsacreations.com/articles/design/ (9 sur 9) [12/08/2004 18:02:57]
Alsacreations, faire un site web sans tableaux : CSS et XHTML
Création de sites web, cours et tutoriels CSS et XHTML
●
●
●
●
●
●
●
Aller sur Alsacréations.
CV.
Liens.
Doc CSS.
Forum CSS.
Blog.
Accueil.
Galeries et Modèles
●
●
Modèles de mise en page CSS : Des dizaines de gabarits en XHTML pour construire vos sites sans tableaux
Galeries de menus : Des menus de toutes sortes pour vous inspirer (simples, graphiques, déroulants,...)
Dernier tutoriel
●
Les Principes Fondamentaux : Quelles bases minimales doit-on connaître pour apprendre (et enseigner) le HTML et s'autoproclamer 'webmaster' ?
Les plus visités
●
●
●
Construire un site sans tableaux
Un menu déroulant en CSS
Savoir positionner les calques et balises en CSS
Construire un site sans tableaux (CSS-P)
Niveau de pratique : intermédiaire
Prérequis : initiation aux CSS de base
A l'heure actuelle, la grande majorité des sites web sont construits grâce à l'utilisation de tableaux. Les tableaux, permettent en effet de
structurer la page en plusieurs parties, et chaque partie peut contenir un menu, un entête, un contenu,...
Cependant, cette méthode quasi-universelle présente de nombreux désavantages :
- l'imbrication multiple de tableaux est souvent nécessaire, même pour des design simples.
- le nombre de balises (table, tr, td, colspan, rowspan...) devient vite considérable et alourdir le code, la lisibilité et donc la mise à jour
- ce code très lourd augmente souvent inutilement le poids de la page et du chargement.
De plus, pour des questions d'Accessibilité (aux handicaps par exemple), il est recommandé d'utiliser chaque balise de façon
sémantiquement correcte.
Un tableau est conçu initialement pour afficher des données... tabulaires (un forum par exemple) et non pour faire la présentation de sa
page.
Le full-CSS, ou Positionnement-CSS (CSS-P) est l'application stricte des recommandation des Standards du web actuels.
Le XHTML, successeur de feu le HTML, est conçu pour faire une stricte séparation entre le Contenu et la Mise en page.
L'orientation des Standards est claire : tous les attributs de taille, de position, de couleurs, d'alignement (width, height, align, font,
color,...),... NE DOIVENT PAS figurer sur la page html, mais sur ce qui va gérer l'affichage, c'est à dire la feuille de style CSS.
Nous allons donc créer notre site proprement, intégralement en CSS (pas de tableaux pour l'affichage). Ce site sera respectueux des
Standards du W3C, mais aussi de l'Accessibilité aux non-voyants, non-entendants, personnes présentant des handicaps divers (sensoriels,
moteurs...) .
Note : tous les attributs CSS utilisées ne seront pas expliqués en détail, parce qu'en général leur signification sera suffisamment explicite.
http://www.alsacreations.com/articles/tutocss/ (1 sur 7) [12/08/2004 18:03:28]
Alsacreations, faire un site web sans tableaux : CSS et XHTML
Si toutefois certaines balises ou attributs vous paraîtraient obscur, voici une liste courte et expliquée des attributs que nous utiliserons :
http://www.commentcamarche.net/css/cssproperty.php3
AVANTAGES DU POSITIONNEMENT CSS
- Meilleure Accessibilité : aux navigateurs, aux moteurs de recherche, aux machines, aux personnes handicapées
- Pérennité : le respect des Standards nous assure d'avoir un site compatible avec tous les futurs navigateurs
- Mise à jour : la séparation Structure/Contenu permet une bonne lisibilité du code, mais aussi une mise à jour facilitée
- Poids de page : chaque page HTML est réduite de 1/3 à 2/3
Pour plus d'info sur ce concept général :
- http://ljouanneau.free.fr/standards/pourquoi.html : Pourquoi respecter les Standards
- http://openweb.eu.org/ : LA référence sur les Standards et quelques tutos pour les mises en page CSS
Voici le design que l'on va construire (design conçu par Alsacréations, tous droits réservés) :
PREMIERE PARTIE : LE HEADER
On va s'intéresser à la mise en page générale
On va essayer de raisonner différemment : pas en tableaux ou cellules, mais en "zones" ou "blocs"
On voit clairement plusieurs Blocs dans le design du site :
http://www.alsacreations.com/articles/tutocss/ (2 sur 7) [12/08/2004 18:03:28]
Alsacreations, faire un site web sans tableaux : CSS et XHTML
- une surface contenant le Header
- une zone contenant le Menu horizontal (Accueil, Produits, Catalogue,...)
- une zone à gauche qui contient le Menu principal
- une zone centrale avec le contenu de page
Si on construisait ce design à l'aide de tableaux, il nous faudrait tricher en créant plein de colspan, rowspan, ... et des colonnes ou des
lignes séparatrices... ou pire encore, des fameux gifs transparents (spacers).
Dans notre cas, on va conserver l'idée des Blocs : chaque zone sera placée sur la page tout simplement... et chaque zone sera définie
(taille, structure interne, backgrounds, ...) sur la feuille de style.
NOTE : nous allons construire notre mise en page à l'aide de balises <div>, qui sont des balises neutres servant de conteneurs, de
blocs.
Généralement, la balise <div> est assimilée au concept de "calque" (surtout sur les éditeurs html comme Dreamweaver).
Un calque est un <div> qui a été positionné avec la propriété "position: absolute" ou "position: relative".
Mais rien ne nous oblige à imposer cette propriété de position, on peut souvent s'en passer en plaçant les div les uns par rapport
aux autres grâce à la propriété "margin".
Le premier avantage du CSS est facile à deviner : si on veut déplacer ou inverser des parties du site, il suffit de changer une ou deux
lignes sur la feuille de style... au-lieu de modifier chaque cellule de TOUTES les pages du site.
Commençons par étudier le HEADER ; voiçi comment je conçois la structure visuelle du Header :
Le header sera découpé en deux blocs divs conteneurs :
- le div "head1" contiendra une image de fond ainsi que le logo (Adminews) collé à droite
- le div "head2" contiendra une image de fond ainsi que le menu horizontal
Le code en page html est enfantin, le voici :
<html>
<head>
<title>mon site</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="head1">
<img src="design/logo.gif" class="logo" alt="logo" /></div>
<div class="head2"></div>
</body>
</html>
Le logo sera placé dans le premier bloc (dans la div class="head1"). Ne pas oublier l'attribut ALT obligatoire en XHTML.
Le code CSS de la feuille de style (styles.css) n'est pas compliqué non-plus (explications en-dessous)
Note : /* ces textes sont des commentaires explicatifs, ils peuvent être supprimés*/
body {
margin: 0;/* sans marges, la page sera collée aux bords */
http://www.alsacreations.com/articles/tutocss/ (3 sur 7) [12/08/2004 18:03:28]
Alsacreations, faire un site web sans tableaux : CSS et XHTML
font-family: verdana, arial, sans-serif; /* on définit la police de base dans la page
*/
font-size: 12px; /* on définit la taille de police de base dans la page */
}
.head1 {
background-image: url('design/head1.gif');
width: 770px;
height: 91px;
}
.head2 {
background-image: url('design/head2.gif');
width: 770px;
height: 36px;
}
.logo {
float: right; /* alignement du logo à droite */
margin-right: 10px; /* placement du logo dans son conteneur, head1 */
margin-top: 3px;
border: 0;
}
On élimine les marges de la page (pour qu'elle colle aux côtés). On définit les deux blocs de header (image de fond et tailles). On crée
une classe pour le logo (afin de préciser sa position dans le div, ici aligné à droite avec une marge de 10px à droite et 3px en haut).
L'image devra avoir une border de 0 car se sera sans-doute un lien cliquable. Or les images-liens ont toujours une border 1 par défaut... il
faut donc la supprimer en CSS.
PS : il ne faut pas oublier les ";" à la fin d'une instruction CSS
Voilà, notre header est fini ! On s'occupera du menu horizontal plus tard
DEUXIEME PARTIE : le menu et le contenu central
Le bloc de menu est aligné à gauche.
Le bloc de contenu principal prend toute la place restante laissée par le menu, soit 586px.
Voici le code CSS pour cette partie :
.gauche {
position: absolute;
left:0; /* on place le bloc gauche à gauche en position absolue */
background-image: url('design/menu.gif');
width: 181px;
height: 337px;
}
.centre {
margin-left: 181px; /* on place le bloc centre par rapport à la largeur du bloc
gauche */
width: 586px;
height: 337px;
}
Pour la partie HTML, nous ne faisons que rajouter les deux div :
http://www.alsacreations.com/articles/tutocss/ (4 sur 7) [12/08/2004 18:03:28]
Alsacreations, faire un site web sans tableaux : CSS et XHTML
<div class="gauche"></div>
<div class="centre"></div>
TROISIEME PARTIE : le menu de gauche
Le menu est composée d'un cadre bleu clair avec une bordure bleue foncée. Le texte interne sera construit sous forme de liste, puisque
cette balise est tout à fait appropriée à ce genre d'affichage.
Vous placerez évidemment le bloc de menu (<ul class="menu">) à l'intérieur du bloc de gauche (<div class="gauche">) sinon il
s'affichera ailleurs, dans un autre bloc.
Voici donc le CSS pour définir tout ça :
.menu { /* on définit un conteneur pour le menu */
margin-top: 30px;
width: 160px;
border: 1px solid #060C6F;
background-color: #B7D3F0;
font-family: verdana, arial;
font-size: 110%;
text-align: center;
}
Et voiçi ce qu'on rajoute dans la partie HTML :
<ul class="menu">
<li>Menu 1</li>
<li>Menu 2</li>
<li>Menu 3</li>
<li>Menu 4</li>
<li>Menu 5</li>
</ul>
On va tout de suite rajouter un contenu fictif pour la partie centrale :
<div class="centre">
<h1>Mon site web</h1>
<h2>Comment je l'ai construit en CSS et sans tableaux</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse potenti.
Cras leo nibh, aliquet nec, interdum et, consequat sed, nulla. Praesent
nec quam quis augue auctor pulvinar. Nunc vehicula wisi et mi. Quisque ultricies
volutpat metus. Nulla eu erat sed mauris euismod tempor. Aliquam sit amet quam
vitae massa dignissim fringilla. Nam pharetra lobortis velit. Donec scelerisque,
nisl a molestie vulputate, urna lectus rhoncus ante, in congue lacus erat ac
urna. Duis quam. Phasellus diam eros, ullamcorper dictum, lacinia in, accumsan
vel, felis. Ut at sapien. Class aptent taciti sociosqu ad litora torquent per
conubia nostra, per inceptos hymenaeos.</p>
<p>Sed gravida leo sed quam. Aenean vitae pede a felis semper vestibulum.
Mauris non ante. Pellentesque suscipit lectus at erat. Integer et risus id tortor
pellentesque tempus. Aliquam dui nulla, suscipit nec, consectetuer a, fringilla
sit amet, luctus at, purus. Integer nec arcu ac dui placerat rutrum. Maecenas
dignissim, justo nec rhoncus dignissim, nulla felis vehicula massa, in commodo
tempus nec, erat</p>
</div>
On en profite pour définir les balises de titres dans le CSS :
h1 {
http://www.alsacreations.com/articles/tutocss/ (5 sur 7) [12/08/2004 18:03:28]
Alsacreations, faire un site web sans tableaux : CSS et XHTML
font-size: 140%;
text-align: right;
}
h2
{
font-size: 100%;
text-align: right;
}
Et enfin les balises de listes, qui nous permettent de construire le menu de façon logique :
ul,li {
list-style-type: none; /* pour ne pas avoir de puces */
margin: 0;
padding:0;
line-height: 30px; /* interligne */
}
DERNIERE PARTIE : le menu horizontal
Chaque lien du menu (Accueil, Produits, Catalogue,...) sera structuré avec la classe "lienhaut" comme ceci : taille de police 16px, grasse
et une marge gauche de 20px pour être espacé du lien précédent.
Vu que le menu est horizontal, nous pouvons éviter d'utiliser une liste (car les éléments de liste vont à la ligne par défaut) et nous
contenter des balises <a> auxquelles on se contentera de donner des marges pour les espacer.
Ces différents liens sont placés dans un bloc conteneur qui indique la structure générale du menu (placement aligné à droite et marges)
Voiçi le code CSS :
.menuhaut {
float: right; /* on aligne le menu vertical à droite de son conteneur, head3 */
margin-right: 10px;
margin-top: 10px;
}
.menuhaut a {
font-size: 16px;
font-weight: bold;
color: #060C6F;
text-decoration: none; /* pour éviter le soulignement au survol */
margin-left: 20px; /* espacement entre chaque sous-menu */
}
Et enfin la partie HTML (à placer au bon endroit, c'est à dire dans la DIV "head2") :
<div class="menuhaut">
<a href="...">Accueil</a>
<a href="...">Produits</a>
<a href="...">Catalogue</a>
<a href="...">Forum</a>
<a href="...">Contacts</a>
</div>
NOTE : il aurait été judicieux de construire le menu horizontal sous forme de liste aussi (comme le menu de gauche), mais cela aurait
demandé quelques paragraphes explicatifs supplémentaire, notamment pour expliquer comment placer les éléments de liste les uns à côté
des autres. Plus de renseignement sur ce point de détail sur ce site.
http://www.alsacreations.com/articles/tutocss/ (6 sur 7) [12/08/2004 18:03:28]
Alsacreations, faire un site web sans tableaux : CSS et XHTML
Et plus si affinités...
Le design général est à présent terminé. Et voilà le résultat !
La technique du Positionnement CSS peut paraître rebutante au début pour les webmasters habitués à ne réfléchir qu'en termes de
tableaux... mais les avantages des CSS deviennent très vite indéniables.
La preuve est qu'il est possible de modifier entièrement le design entier de la page, rien qu'en modifiant un attribut dans les CSS...
imaginez le gain de temps pour des sites de quelques centaines de pages !
Pour finir, et c'est important de le souligner, le positionnement CSS permet de suivre l'évolution des standards du Web proposés par le
W3C.
Note finale : pour aller plus loin dans le CSS-P, n'hésitez pas à suivre les explications sur le site de référence, OpenWeb
(http://openweb.eu.org/articles/initiation_flux/)
ANNEXES, LIENS ET BIBLIOGRAPHIES
1. les ressources CSS en français dans les sites de Macromedia + le forum ;
2. les pages du W3C sur les CSS2, traduites par yoyodesign aux adresses suivantes :
chapitre 8 : www.yoyodesign.org/doc/w3c/css2/box.html : le modèle des boîtes ;
chapitre 9 : www.yoyodesign.org/doc/w3c/css2/visuren.html : le modèle de mise en forme visuelle ;
chapitre 10 : www.yoyodesign.org/doc/w3c/css2/visudet.html : détails du modèle de mise en forme visuelle ;
chapitre 11 : www.yoyodesign.org/doc/w3c/css2/visufx.html : le rendu visuel.
3. Livres sur les CSS :
initiation : CSS, le web avec du style : J Maxwell, Compétence Micro ;
initié-e-s : CSS précis et concis édition française : Meyer/Guérin, O'Reilly ;
HTML4 et CSS : Beuzit ;
Aide-mémoire CSS2 (13 mars 2003) : Beuzit, OEM Eyrolles.
Raphaël GOETTER
www.alsacreations.com
http://www.alsacreations.com/articles/tutocss/ (7 sur 7) [12/08/2004 18:03:28]
Alsacreations, centrer un site et un calque div en CSS
Création de sites web, cours et tutoriels CSS et XHTML
●
●
●
●
●
●
●
Aller sur Alsacréations.
CV.
Liens.
Doc CSS.
Forum CSS.
Blog.
Accueil.
Galeries et Modèles
●
●
Modèles de mise en page CSS : Des dizaines de gabarits en XHTML pour construire vos sites
sans tableaux
Galeries de menus : Des menus de toutes sortes pour vous inspirer (simples, graphiques,
déroulants,...)
Dernier tutoriel
●
Les Principes Fondamentaux : Quelles bases minimales doit-on connaître pour apprendre (et
enseigner) le HTML et s'auto-proclamer 'webmaster' ?
Les plus visités
●
●
●
Construire un site sans tableaux
Un menu déroulant en CSS
Savoir positionner les calques et balises en CSS
Centrer les éléments ou un site web en
CSS
Niveau de pratique : débutant
Prérequis : initiation aux CSS de base
Le centrage horizontal
Pour centrer horizontalement un élément (bloc, balise ou un site web entier) en CSS, il suffit de donner
une largeur (width) à l'élément et les valeurs "auto" aux marges latérales.
http://www.alsacreations.com/articles/centrer/ (1 sur 5) [12/08/2004 18:04:23]
Alsacreations, centrer un site et un calque div en CSS
Donnons à notre bloc (div) conteneur l'id "global" :
#global {
margin-left: auto;
margin-right: auto;
width: ...; /* largeur obligatoire pour être centré */
}
Note : /* ces textes sont des commentaires explicatifs, ils peuvent être supprimés*/
De cette manière, il équilibrera automatiquement les marges latérales.
Vous placerez votre bloc (div) conteneur dans votre code HTML :
<div id="global"></div>
Il suffit ensuite de placer le reste du site dans conteneur et votre site sera centré proprement.
Très simple, me direz-vous ! Petit hic : Internet Explorer qui est buggué ne comprend pas cette syntaxe
logique et il faut tricher avec lui.
Pour que ça fonctionne sous IE, il faut aligner le texte de façon centrée dans le body (car IE interprête
mal cette propriété et s'en sert pour tout aligner : texte, mais aussi images et tous les éléments en
général).
Donc :
body {
margin: 0; /* pour éviter les marges */
text-align: center; /* pour corriger le bug de centrage IE */
}
Il faudra ensuite rétablir l'alignement texte dans le conteneur, ce qui donne :
#global {
margin-left: auto;
margin-right: auto;
width: ...;
text-align: left; /* on rétablit l'alignement normal du texte */
}
Attention à ne pas oublier de définir une largeur pour le conteneur, sinon il ne pourra
logiquement pas être centré. Attention également : cette méthode de marges automatiques ne va
pas centrer un bloc s'il est positionné en absolu (voir la technique des marges négatives pour ces
http://www.alsacreations.com/articles/centrer/ (2 sur 5) [12/08/2004 18:04:23]
Alsacreations, centrer un site et un calque div en CSS
blocs).
Cas des éléments positionnés.
Pour les sites dont les éléments internes sont positionnés en "position: absolute" ou "position: relative",
la technique des marges latérales automatiques ne fonctionne pas par défaut.
En effet, si votre conteneur est placé dans le flux (avec des marges) et que votre contenu est positionné
(absolu ou relatif), ce dernier sort du flux et donc du conteneur. Il se placera alors par rapport au
dernier parent positionné : le document.
Pour éviter ce problème, il faut absolument que le conteneur soit lui-même positionné. En lui donnant
une position relative, vous pouvez garder son centrage avec marges automatiques, tout en incorporant
du contenu lui aussi positionné. Note : vous pouvez aussi utiliser la solution des marges négatives (cf
chapitre suivant).
Exemple de conteneur prévu pour un contenu avec des éléments positionnés :
#global {
position: relative; /* on positionne le conteneur */
margin-left: auto;
margin-right: auto;
width: ...;
text-align: left;
}
Et voilà pour le centrage horizontal
Le centrage vertical
Pour le centrage vertical, c'est une autre histoire !
Il existe un attribut vertical-align, mais il ne permet pas :
●
●
De positionner verticalement un texte dans un bloc quelconque (DIV, P, etc...)
De positionner verticalement un bloc dans un autre bloc.
Il n'est pas fait pour ça, mais en général pour aligner deux éléments l'un par rapport à l'autre. Il n'y a
que dans les cellules de tableaux que cette propriété aligne tout le contenu verticalement.
Là encore, il est possible de "feinter" en faisant croire que le bloc conteneur est une tableau (car dans
ce cas, l'attribut vertical-align fonctionne), et donc de déclarer ce bloc en display: table-cell;
Mais une fois de plus, IE ne gère pas le table-cell, malheureusement. Nous allons donc utiliser une
http://www.alsacreations.com/articles/centrer/ (3 sur 5) [12/08/2004 18:04:23]
Alsacreations, centrer un site et un calque div en CSS
autre solution :
Les marges négatives
La technique des marges négatives permet de centrer un bloc dont on connait les dimensions.
Le centrage pourra être horizontal, vertical ou les deux à la fois.
Prenons un bloc conteneur de 700px de large et 400px de haut. Nous voulons qu'il soit centré
exactement dans le navigateur quelle que soit la résolution (800x600, 1024x768 ou plus).
Pour cela, l'astuce est de placer dans un premier temps ce bloc à top 50% et left 50%, ce qui placera le
coin supérieur gauche du bloc au milieu de page.
Ensuite, nous définirons des marges négatives dont la valeur est exactement la moitié de la largeur et
hauteur du bloc, ce qui le positionnera au milieu de page.
Voici le code CSS du bloc conteneur :
#global {
position:absolute;
left: 50%;
top: 50%;
width: 700px;
height: 400px;
margin-top: -200px;
margin-left: -350px;
border: 1px solid #000;
}
Il suffit ensuite de placer le conteneur juste en-dessous de la balise <body> :
<div id="global"></div>
Et notre bloc est centré. (Voir le résultat ici)
Note : Les marges négatives verticales en CSS semblent poser des problèmes sur Explorer Mac
(Inspiré librement de http://bluerobot.com/web/css/center2.html)
Raphaël GOETTER
http://www.alsacreations.com/articles/centrer/ (4 sur 5) [12/08/2004 18:04:23]
Alsacreations, centrer un site et un calque div en CSS
www.alsacreations.com
http://www.alsacreations.com/articles/centrer/ (5 sur 5) [12/08/2004 18:04:23]
Alsacreations, faire un cadre arrondi en CSS et XHTML
Création de sites web, cours et tutoriels CSS et XHTML
●
●
●
●
●
●
●
Aller sur Alsacréations.
CV.
Liens.
Doc CSS.
Forum CSS.
Blog.
Accueil.
Galeries et Modèles
●
●
Modèles de mise en page CSS : Des dizaines de gabarits en XHTML pour construire vos sites sans tableaux
Galeries de menus : Des menus de toutes sortes pour vous inspirer (simples, graphiques, déroulants,...)
Dernier tutoriel
●
Les Principes Fondamentaux : Quelles bases minimales doit-on connaître pour apprendre (et enseigner) le HTML et
s'auto-proclamer 'webmaster' ?
Les plus visités
●
●
●
Construire un site sans tableaux
Un menu déroulant en CSS
Savoir positionner les calques et balises en CSS
Faire un cadre arrondi ou graphique en CSS et
XHTML (nouvelle version)
Premier cas : un cadre de largeur fixe
Cette nouvelle version du tutoriel va vous permettre de réaliser un cadre arrondi, ou graphique en général, qui ne pourra
s'allonger qu'en hauteur (par exemple pour des menus dont le nombre varie), de manière simple en CSS.
Pour créer un cadre étirable dans les deux directions, passez directement Second Cas.
Nous allons réaliser ce cadre à l'aide de trois images et sans aucun tableau ni aucune balise <div>. Nous partirons du principe
que la largueur du cadre sera fixée à 275px.
Voici les images utilisées pour le cadre :
●
haut.gif (partie haute. Dimension : 275px X 40px)
●
milieu.gif (partie centrale qui va se répéter. Dimension réelle: 275px X 1px)
●
bas.gif (partie basse qui va se coller en bas. Dimension réelle: 275px X 40px)
http://www.alsacreations.com/articles/cadre/ (1 sur 5) [12/08/2004 18:04:57]
Alsacreations, faire un cadre arrondi en CSS et XHTML
Note : Nous aurions très bien pu n'utiliser que deux images pour construire le cadre (en liant milieu.gif et bas.gif pour créer
une image globale très allongée). Cependant, cette technique aurait pu être lourde pour des cadres très graphiques en jpg par
exemple.
Nous utiliserons les Listes de Définition (balises <dl>, <dt> et <dd>) pour structurer notre cadre. La balise <dl> englobera
l'ensemble. Le <dt> sera le titre du cadre et la balise <dd> désignera le contenu du cadre (possibilité d'utiliser plusieurs <dd>
pour des éléments de menu par exemple).
Listes de définitions ?
Notre structure sera de la forme "titre + description" (la description étant le contenu du tableau qui va se rapporter au titre et le
définir). Sémantiquement parlant, les listes de définitions sont idéales pour structurer ce genre de cadre.
En effet, les spécifications du W3C suggèrent que les listes de définitions peuvent s'appliquer à partir du moment où il existe
une relation directe entre les éléments "titre" et "élément(s)".
Une liste de définition est composée de trois balises : <dl> est le conteneur global (comme la balise <ul> des listes simples);
<dt> indique le titre de la liste et <dd> est un élément de la liste qui est décrit par le titre.
Certains sites ont développé assez loin cette structuration, je vous recommande la lecture de cet article très clair : Les listes de
définitions : mal utilisées ou mal comprises ?
Le CSS se contentera de définir notre cadre global (dl), notre titre (dt) et le contenu (dd).
Voici la construction du cadre étirable en hauteur
Code CSS :
dl { /* positionnement du cadre, que vous pouvez modifier */
position: absolute;
left: 50px;
top: 20px;
width: 275px; /* largeur du cadre, selon votre image de fond */
}
dl, dt, dd { /* suppression de toutes les marges et paddings */
margin: 0;
padding: 0;
}
dl { /* arrière-plan par défaut sur l'ensemble du cadre */
background: url(bas.gif) bottom left no-repeat;
padding-bottom: 40px; /* pour que le texte ne s'affiche pas sur l'arrondi du bas */
}
dt { /* définitions du titre du cadre */
height: 40px;
background: url(haut.gif) top left no-repeat;
font-size: 1.3em;
font-weight: bold;
text-align: center;
http://www.alsacreations.com/articles/cadre/ (2 sur 5) [12/08/2004 18:04:57]
Alsacreations, faire un cadre arrondi en CSS et XHTML
}
dd {
padding: 0 20px 0 10px; /* gestion des espaces internes du cadre */
text-align: justify;
background: url(milieu.gif) top left repeat-y; /* arrière-plan intérieur */
}
Et voici le code HTML complet :
<body>
<dl>
<dt>Mon cadre joli</dt>
<dd>Lorem ipsum dolor sit amet, bla bla bla bla...</dd>
</dl>
</body>
Revoir le résultat obtenu
Variante : la création d'un menu
Cette technique est également tout à fait adaptée à la création d'un menu entouré de cadre.
Il suffit pour cela d'utiliser les éléments de liste <dd> pour chaque item de menu
Et voici le code HTML adapté à un menu (notez l'utilisation des accesskey pour faciliter l'Accessibilité aux utilisateurs sans
souris) :
<body>
<dl>
<dt>Mon menu joli</dt>
<dd><a href="#" title="menu1"
<dd><a href="#" title="menu2"
<dd><a href="#" title="menu3"
<dd><a href="#" title="menu4"
<dd><a href="#" title="menu5"
accesskey="1">Menu
accesskey="2">Menu
accesskey="3">Menu
accesskey="4">Menu
accesskey="5">Menu
1</a></dd>
2</a></dd>
3</a></dd>
4</a></dd>
5</a></dd>
</dl>
</body>
Voir le résultat obtenu : le menu encadré
Deuxième cas : un cadre totalement fluide
L'objectif est à présent de créer un cadre de contenu, aux bords arrondis et qui s'adapte automatiquement selon le contenu, en
hauteur et en largeur. Voir le résultat.
Comme pour le premier cas, nous définirons un bloc conteneur (dl) qui contiendra l'ensemble du cadre.
Dans notre tutoriel, la largeur globale du cadre est définie à 75% de la largeur de page (c'est juste un exemple)
Vous pouvez très bien donner une autre valeur que 75% et l'adapter à la taille de cadre que vous voulez. Vous pouvez donner
une valeur fixe aussi, en pixels, à condition qu'elle soit supérieure à la longueur du titre-image.
Voici les images utilisées pour les bordures :
http://www.alsacreations.com/articles/cadre/ (3 sur 5) [12/08/2004 18:04:57]
Alsacreations, faire un cadre arrondi en CSS et XHTML
●
●
●
●
haut.gif (dimension réelle : 1200px X 50px)
hautd.gif (coin haut droit. Dimension : 30px X 50px)
bas.gif (dimension réelle : 1200px X 50px)
basd.gif (coin bas droit. Dimension : 30px X 50px)
Comme vous le voyez, les images "haut.gif" et "bas.gif" mesurent 1200px de largeur, ceci pour pouvoir s'adapter à la fluidité
du cadre : seule la partie gauche des images est affichée, le reste est caché et se dévoile si le cadre est étiré ou si la fenêtre du
navigateur s'agrandit.
La structure générale ressemble au premier cas, mais nécessite quelques arrangements pour assurer la fluidité de la largeur : Le
titre (dt) contiendra l'image "haut.gif" en arrière-plan, ainsi que le coin haut droit en image flottante.
Le dernier terme de la liste de définition, le dd nommé "bas" contiendra l'image "bas.gif" en arrière-plan, ainsi que le coin bas
droit en image flottante.
Les côtés seront simplement des bordures (border) appliquées aux éléments de liste (dd).
Voici la structure générale (partie HTML à placer entre les balises BODY) :
<dl>
<dt><img id="droitehaut" src="hautd.gif" alt="" />
<img id="titre" src="titre.gif" alt="titre" /></dt>
<dd>Contenu du cadre...</dd>
<dd id="bas"><img id="droitebas" src="basd.gif" alt="" /></dd>
</dl>
Et voici les définitions de la feuille de style CSS :
Note : /* ces textes sont des commentaires explicatifs, ils peuvent être supprimés*/
dl, dt, dd { /* suppression de toutes les marges */
margin: 0;
padding: 0;
}
dl {
width: 75%; /* dimensions et positions modifiables à loisir */
position: absolute;
left: 3em;
top: 2em;
}
dt {
height: 50px;
background: #fff url(haut.gif) top left no-repeat;
line-height: 0;
text-align: center; /* centrage du titre, bug IE*/
}
dd {
border: solid #5A6C84; /* couleur et taille des bordures droite et gauche */
border-width: 0 5px;
http://www.alsacreations.com/articles/cadre/ (4 sur 5) [12/08/2004 18:04:57]
Alsacreations, faire un cadre arrondi en CSS et XHTML
padding: 0 10px; /* padding g et d pour éviter que le texte ne chevauche les bordures
*/
}
#bas {
height: 50px;
background: #fff url(bas.gif) bottom left no-repeat;
border: 0 none; /* pas de bordure latérale pour la partie basse */
padding: 0; /* pas de texte donc pas de padding */
}
#titre {
display: block; /* mise en bloc de l'image titre pour éviter un bug d'espacements */
margin: auto; /* centrage du titre */
}
#droitehaut, #droitebas { /* placement des coin droits en flottants */
float: right;
}
Notre cadre est fini. Revoir le résultat.
Note importante pour certains cadres : Il se peut que votre haut ou bas de cadre se dédouble. C'est normal: sur IE toutes les
images (et autres balises en-ligne) occupent par défaut une hauteur minimale (celle du texte par défaut), soit environ 13px.
Donc toutes les images de moins de 13px prendront quand-même 13px. On peut feinter IE en affichant les images en bloc
(comme sur notre exemple) ou en mettant font-size à 0 dans les balises concernées.
Raphaël GOETTER
www.alsacreations.com
http://www.alsacreations.com/articles/cadre/ (5 sur 5) [12/08/2004 18:04:57]