Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Officiels > Site Web > Apprenez à créer votre site web ! > XHTML & CSS, toujours plus forts ! > Mise en boîte (partie 2/2) > Lecture du tutoriel

Mise en boîte (partie 2/2)

Avatar
Auteur : M@teo21
Note : 20 / 20 (12 votes)
Visualisations : 448 260

Plus d'informations Plus d'informations
Dans la première partie de ce chapitre "Mise en boîte", nous avons fait le tour des propriétés CSS permettant de modifier l'apparence et la taille des blocks. Pour résumer rapidement, on a vu :



Dans cette seconde partie, nous allons apprendre à les positionner. Bah oui, il va bien falloir apprendre à dire : "Je veux que mon menu soit à gauche, que mon contenu soit à droite, qu'il y ait le logo de mon site en haut à droite à 12 pixels du bord droit" etc...
Autant que les choses soient claires : le positionnement en CSS, c'est pas franchement évident... Il y a la théorie, et il y a la pratique. Dans ce chapitre, nous verrons seulement la théorie (c'est un passage obligé), et dans le chapitre suivant nous passerons à la pratique (ce qui sera beaucoup plus concret pour vous)

Une chose est sûre, et vous devriez déjà vous mettre ça en tête, c'est que vous ne pourrez jamais avoir un site qui s'affiche pareil au pixel près sur tous les navigateurs. A la place, nous apprendrons à faire en sorte que notre site s'affiche "à peu près correctement" sur chacun de ces navigateurs, et ça sera déjà pas si mal :lol:
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Transformer un inline en block (et vice-versa)

Dans le genre, "je suis là juste pour vous embrouiller l'esprit", je crois que je vais gagner le premier prix là :D
Je vais vous apprendre ici à repousser les lois de la physique à modifier les lois du CSS (brrr...).

Les images ( <img /> ) sont des balises de type inline, et vous préféreriez que ce soient des blocks ? Pas de problème !
Les titres ( <h1> ) sont de type block, et ça vous a toujours embêté, vous préféreriez que ça soient des balises inline ? Aucun problème !

Il existe une propriété CSS très puissante, elle s'appelle display (à manipuler avec précaution, sinon vous risquez de tout faire péter :p)
Cette propriété peut prendre les valeurs suivantes :



En fait, display peut prendre beaucouuuup d'autres valeurs (c'est ça d'être une propriété puissante ;)), mais je vous en fais volontairement grâce et je vous montre juste les 2 plus utilisées.

Pour transformer une balise inline en balise de type block, vous allez devoir taper :
display:block;

Par exemple, si je veux que TOUTES mes images soient de type block, j'écrirai donc ceci :

Code : CSS
1
2
3
4
img
{
   display: block;
}


Attention, après avoir fait cela toutes vos images vont aller automatiquement à la ligne, comme le font les autres balises de type block.


Rien n'impose que TOUTES vos images soient de type block, hein. J'espère que vous l'avez compris depuis le temps : on peut très bien utiliser l'attribut "class" sur une balise pour qu'elle ait une présentation différente.
Par exemple :

Code : HTML
1
2
<img src="image.png" alt="Cette image est normale (type inline)" />
<img src="image.png" class="imageblock" alt="Cette image est modifiée (type block)" />


Bien entendu, il faudra écrire le code CSS suivant pour que la deuxième image soit de type block :

Code : CSS
1
2
3
4
.imageblock
{
   display: block;
}


J'espère que je ne vous apprends rien sur le fonctionnement de l'attribut class, sinon retournez voir le premier chapitre de la partie II au triple galop :p

Et l'inverse alors ? Pour transformer une balise de type block en balise de type inline ?


Bah c'est pareil, sauf qu'on utilise display:inline; ^^
Je ne vous refais pas un exemple de code, je pense que vous êtes assez grands pour deviner tous seuls comment il faut faire ;)

Petite remarque en passant : on transforme généralement des inline en block, mais on fait plus rarement l'inverse. Il faut dire que les balises block ont pas mal d'avantages : on peut modifier leur taille, leur bordure, leurs marges etc... Bref, tout ça vous le savez déjà :)

Les flottants

La première technique que nous allons voir, ce sont les flottants. C'est un nom un peu bizarre je vous l'accorde, mais c'est en fait pas si sorcier que ça.
Pour que vous voyiez bien de quoi on parle, voici ce que nous allons apprendre à faire :

Image utilisateur
Une image flottant à gauche

Image utilisateur
Une image flottant à droite



Cela permet en gros d'"entourer" un élément (ici une image) par du texte. Ca permet d'avoir une jolie présentation facilement.

J'imagine que la question qui vous brûle les lèvres maintenant est : "Mais quelle est donc la propriété magique qui fait flotter ?!".
La réponse est... float ("flottant" en anglais). Cette propriété peut prendre 2 valeurs, que vous pourriez d'ailleurs avoir deviné tous seuls :p :


L'utilisation des flottants est très simple, tellement simple qu'on a parfois tendance à se compliquer la vie (et je parle en connaissance de cause). En fait, il n'y a que 2 choses à faire :
  1. Vous appliquez un float à une balise.
  2. Puis vous continuez à écrire du texte à la suite normalement.


On peut aussi bien utiliser la propriété float sur des balises block que sur des balises inline, vous allez voir...


Faire flotter une image



Nous allons apprendre ici à faire flotter une image (qui est de type "inline" je vous rappelle). Voici le code XHTML que nous devons taper dans un premier temps :

Code : HTML
1
2
3
4
<p><img src="../images/flash.gif" class="imageflottante" alt="Image flottante" /></p>

<p>Ceci est un texte normal de paragraphe, écrit à la suite de l'image mais qui l'"entourera" car l'image est flottante.<br />
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vestibulum mollis scelerisque nulla. Donec feugiat augue et sem. Nulla ut purus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla volutpat leo quis magna. Donec accumsan lobortis ligula. Donec nec ante eu wisi tempus dictum. Sed nulla est, laoreet nec, consequat quis, iaculis non, tortor. Nunc sed purus. Sed metus. Donec posuere. Pellentesque porttitor tortor non eros. Ut rutrum erat a nunc. Duis non erat et orci viverra mollis. Sed lacinia velit a magna. Etiam aliquam, felis eu imperdiet auctor, ante augue dignissim odio, a pharetra tellus neque vel urna. Cras gravida adipiscing lectus. Nullam lorem ipsum, convallis eleifend, congue placerat, dictum non, leo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.</p>


Une erreur courante que l'on a tendance à faire, c'est de mettre l'image flottante après le texte. Non, il ne faut pas : le flottant doit être avant le texte, qu'il flotte à droite ou qu'il flotte à gauche c'est pareil.
Vous essaierez de mettre la balise <img /> après le paragraphe, et vous verrez que ça ne marche plus ;)


Ce qu'il faut bien comprendre maintenant, c'est qu'on a juste besoin de modifier le CSS de l'image, et non pas du paragraphe. Le paragraphe n'a pas besoin d'être modifié, il sera automatiquement placé comme il faut.
Voici le seul bout de code CSS qu'on a besoin de taper, qui permet de faire flotter l'image à gauche :

Code : CSS
1
2
3
4
.imageflottante
{
   float: left;
}



Amusez-vous aussi à faire flotter l'image à droite, c'est tout bête : mettez float:right; et le tour est joué ! :D

Créer une lettrine (exercice)



Parfois, il m'arrive de faire un cauchemar. J'imagine que je suis en train de rédiger un long cours sur les flottants en CSS, et que tout le monde bâille, s'endort, bref s'ennuie. Brrr... Cette vision me fait froid dans le dos à chaque fois

Alors, pour éviter que le pire de mes cauchemars se produise, j'ai eu l'idée de vous faire travailler un peu sur un exercice amusant (du moins je l'espère :p).

Vous savez ce qu'est une lettrine ? Non.
Bon c'est pas gagné ^^

Une lettrine, c'est la première lettre d'un paragraphe écrite beaucoup plus grosse. On en voit tout le temps dans les journaux (si vous lisez le journal ;o). Voici ce que vous devez arriver à faire :


Image utilisateur


La seule consigne, c'est d'utiliser le code XHTML suivant, que vous n'avez pas le droit de changer :
Code : HTML
1
<p>Les visiteurs de l'hypermarché Carrefour de Haidian, un quartier nord de Pékin où sont installées les universités et les entreprises high-tech, ne sont pas accueillis en ce moment par le Père Noël mais par... la Vénus de Milo. Carrefour a décidé de donner dans le culturel en présentant, dans le cadre de l'année de la France en Chine, quarante reproductions de sculptures célèbres issues de collections des musées français. L'initiative remporte un grand succès, à en croire le nombre de personnes qui se prennent en photo devant les oeuvres, ou l'affluence aux visites commentées par des guides.</p>


Votre consigne, c'est de créer un fichier CSS qui permettra de créer cette présentation sous forme de lettrine. Vous ne pouvez pas modifier le fichier XHTML, mais par contre sur le CSS tous les coups sont permis : vous pouvez utiliser les propriétés que vous voulez.

Au boulot ! :diable:

...
...
...

Drrring ! Allez c'est l'heure de la correction !
Bien évidemment il fallait utiliser un float:left;, mais comment faire pour que la première lettre uniquement soit affectée ? Sans changer le XHTML ?
Si vous avez trouvés tous seuls qu'il fallait utiliser le pseudo-élément :first-letter (= "première lettre"), eh bien bravo ! C'était la seule vraie difficulté, après le reste coule de source et on peut s'amuser à mettre les propriétés qu'on veut.
Il faut penser en particulier à utiliser font-size, pour modifier la taille de la première lettre pour qu'elle fasse disons... 3 hauteurs de lignes. Pour cela, j'ai mis la valeur "3em" (= 3 hauteurs de lignes), mais si vous avez tapé "300%" c'est tout aussi bon ! Par contre, il vaut mieux éviter de mettre une valeur en pixels comme "50px" parce qu'on ne connaît pas la taille d'une ligne (ça peut changer).

Voici le code que j'ai fait pour réaliser la lettrine :

Code : CSS
1
2
3
4
5
6
7
8
p:first-letter /* Je veux que la première lettre de mes paragraphes... */
{
   float: left; /* Flotte à gauche */
   font-size: 3em; /* Fasse une hauteur de 3 lignes */
   font-family: Arial, Georgia, "Times New Roman", Times, serif; /* Soit mise en Arial si possible*/
   font-weight: bold; /* Soit écrite en gras (c'est plus voyant) */
   margin-right: 5px; /* Qu'il y ait une marge de 5px à droite pour que ça colle pas trop au reste du texte */
}



Ne vous arrêtez pas là ! Rien ne vous empêche d'écrire la lettrine en blanc sur fond noir, ou même d'utiliser une image de fond ! Laissez donc libre cours à votre imagination :)

Stopper un flottant



Quand vous mettez en place un flottant, le texte l'"entoure", ça on l'a compris.
Mais comment faire si vous voulez qu'au bout d'un moment le texte continue en-dessous du flottant ? On pourrait faire plusieurs <br /> à la suite, mais ça serait pas pratique ni très propre...

En gros, on aimerait pouvoir faire ça :

Image utilisateur


Il existe en fait une propriété CSS (sans blague) qui permet de dire : "Stop, ce texte doit être en-dessous du flottant et non plus à côté". C'est la propriété clear qui peut grosso modo prendre 3 valeurs :



Pour simplifier, on va utiliser tout le temps le clear:both, qui marche après un flottant à gauche et après un flottant à droite (ça marche à tous les coups quoi).
Pour illustrer son fonctionnement, on va prendre ce code XHTML :

Code : HTML
1
2
3
<p><img src="../images/flash.gif" class="imageflottante" alt="Image flottante" /></p>
<p>Ce texte est écrit à côté de l'image flottante.</p>
<p class="dessous">Ce texte est écrit sous l'image flottante.</p>


Code : CSS
1
2
3
4
5
6
7
8
.imageflottante
{
   float: left;
}
.dessous
{
   clear: both;
}



Et voilà le travail :D
On applique un clear:both; au paragraphe que l'on veut voir continuer sous l'image flottante, et le tour est joué !

Positionnement absolu, fixe et relatif

Hormis les flottants, il existe 3 façons de positionner un block en CSS :



Comme pour les flottants, le positionnement absolu, fixé et relatif fonctionne aussi sur des balises de type inline comme <img />
Toutefois, vous verrez qu'on l'utilise bien plus souvent sur des balises block que sur des balises inline.


Il faut d'abord faire son choix entre les 3 modes de positionnement disponibles. Pour cela, on utilise la propriété CSS position à laquelle on donne une de ces valeurs :



Nous allons étudier chacun de ces positionnements un à un.

Le positionnement absolu



Vous savez que, pour effectuer un positionnement absolu, il faut taper :
position:absolute;

Mais ça ne suffit pas ! :waw:
On a dit qu'on voulait un positionnement absolu, mais encore faut-il dire où on veut que le block soit positionné sur la page.
Pour faire cela, on va réutiliser 4 propriétés CSS que vous commencez certainement à bien connaître :



On peut leur donner une valeur en pixels, comme "14px", ou bien une valeur en pourcentage, comme "50%".

Si ce n'est pas très clair pour certains d'entre vous, ce schéma devrait vous aider à comprendre :

Image utilisateur


Avec ça, vous devriez être capables de positionner correctement votre block :)

Il faut donc utiliser la propriété position et au moins une des 4 propriétés ci-dessus (top, left, right ou bottom). Si on écrit par exemple :
position:absolute;
right:0px;
bottom:0px;

... cela signifiera que le block doit être positionné tout en bas à droite (0 pixels par rapport à la droite de la page, 0 par rapport au bas de la page).

Pour le coup, on va utiliser la balise universelle <div> (de type block). Je vais rédiger un paragraphe, et je vais mettre dans le block <div> deux ou trois mots :

Code : HTML
1
2
3
4
5
6
<p>
Ceci est un paragraphe normal.<br />
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer vel libero. Cras dolor. Quisque quis odio eget justo pulvinar aliquet. Morbi luctus mi. Fusce leo. Integer eleifend condimentum felis. Phasellus vitae nibh. Mauris pellentesque porta magna. Quisque at turpis. Praesent semper odio eget risus. Praesent bibendum imperdiet massa. Quisque ac arcu ac augue dapibus vestibulum. Pellentesque gravida. Mauris turpis. Aenean molestie. Praesent at quam et ligula pellentesque luctus.
</p>

<div>Block positionné</div>



Rien d'extraordinaire, vous avez un paragraphe suivi d'un block div qui contient un peu de texte. Jusque là, rien de bien excitant.
Maintenant, ajoutons un peu de CSS pour positionner où on veut notre block div :

Code : CSS
1
2
3
4
5
6
7
8
9
div
{
   background-color: yellow;
   border: 1px solid green;
   
   position: absolute;
   left: 35px;
   top: 50px;
}



J'ai mis un fond jaune et une bordure pour qu'on repère mieux le block.

Comme vous pouvez le constater, le block se met au-dessus du paragraphe. Il le masque. Ca, c'est un des grands avantages et défauts du positionnement absolu : il n'y a aucun contrôle, vous pouvez mettre votre block vraiment où vous voulez sur la page, mais il faut faire attention à ce qu'il ne masque pas de texte.

Voici un autre exemple pour vous montrer qu'on peut vraiment mettre le block n'importe où :

Code : CSS
1
2
3
4
5
6
7
8
9
div
{
   background-color: yellow;
   border: 1px solid green;
   
   position: absolute;
   right: 50%;
   bottom: 20px;
}



Une petite précision technique pour ceux qui veulent aller plus loin (les autres fermez les yeux) : si vous positionnez un block A en absolu, et qu'à l'intérieur de ce block vous positionnez un autre block B en absolu, ce positionnement-là ne se fera plus par rapport au coin en haut à gauche de la fenêtre mais par rapport au coin en haut à gauche du block A.
Ah... Les joies du positionnement CSS ^^


Le positionnement fixe



Le fonctionnement est exactement le même que pour le positionnement absolu, sauf que cette fois le block reste fixe, même si on descend plus bas dans la page.

Le positionnement fixe fonctionne sur tous les navigateurs, sauf sur Internet Explorer 6 et les versions antérieures. Hélas, sur ce navigateur le block ne sera tout simplement pas positionné...


Au lieu de faire position:absolute;, on va taper position:fixed; dans notre CSS. Comme tout à l'heure, on s'aide de top, left, right et bottom pour placer notre block où on veut sur la page.

Le position:fixed; est particulièrement utile pour faire un menu qui reste toujours visible :

Code : CSS
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
div
{
   background-color: yellow;
   border: 1px solid green;
   width: 150px;
   height: 250px;
   
   position: fixed;
   right: 40px;
   top: 60px;
}

p
{
   width: 300px;
}



Si vous vous demandez pourquoi le menu est tout en bas et que ça ne marche pas du tout, c'est que vous utilisez Internet Explorer 6 :(
A cause de ce problème sous Internet Explorer, nous ne pourrons pas vraiment utiliser de menu fixe sur notre site. On préfèrera généralement se rabattre sur une position absolue, comme on a vu un peu plus haut.

Le positionnement relatif



Plus délicat, le positionnement relatif peut vite devenir une grosse prise de tête si on n'y fait pas très attention. Personnellement, je ne l'utilise pas beaucoup.
Le positionnement relatif sert généralement à faire des "ajustements".

Prenons par exemple un texte important, situé entre 2 balises <strong>.
Pour commencer, je le mets sur fond rouge pour qu'on puisse mieux le repérer :

Code : CSS
1
2
3
4
5
strong
{
   background-color: red; /* Fond rouge */
   color: yellow; /* Texte de couleur jaune */
}



Cette fois, le schéma que je vous ai montré tout à l'heure pour les positions absolue et fixe ne marche plus. Pourquoi ? Parce que l'origine a changé : le point de coordonnées (0, 0) ne se trouve plus en haut à gauche de votre fenêtre comme c'était le cas tout à l'heure. Non, cette fois l'origine se trouve en haut à gauche de la position actuelle de votre élément.
Tordu n'est-ce pas ? Bah oui, c'est une position relative. Ce schéma devrait vous aider à comprendre où se trouve l'origine des points :

Image utilisateur


Donc, si vous faites un position:relative et que vous appliquez une des propriétés top, bottom, left, right, le texte sur fond rouge va se déplacer par rapport à la position où il se trouve.

Je vous l'avais dit que c'était tordu :p En fait, il faut faire des tests pour bien comprendre.
Prenons donc un exemple : je veux que mon texte se décale de 55 pixels vers la droite et de 10 pixels vers le bas. Je vais donc demander à ce qu'il soit décalé de 55 pixels par rapport au "bord gauche", et de 10 pixels par rapport au "bord haut" :

Code : CSS
1
2
3
4
5
6
7
8
9
strong
{
   background-color: red;
   color: yellow;
   
   position: relative;
   left: 55px;
   top: 10px;
}



Le texte s'est décalé par rapport à sa position initiale, comme ceci :

Image utilisateur


Voilà le principe. A vous de voir si vous avez besoin de l'utiliser, maintenant vous savez comment ça marche ;)

Q.C.M.

Quelle propriété CSS permet de transformer un inline en block et inversement ?
Si je mets display:block; à la balise span, que va-t-il se passer ?
Lequel de ces positionnements n'existe pas ?
Si je fais flotter une image à droite avec un float:right, et que j'applique au paragraphe qui suit un clear:left, que va-t-il se passer ?
Si je veux que mon bloc soit positionné de façon absolue en haut à droite, avec un décalage de 10 pixels, comment dois-je procéder ?
Je veux procéder à un ajustement. Je souhaite que mes titres soient tous décalés de 5 pixels vers la gauche et de 4 pixels vers le bas. Quels valeurs top, bottom, left ou right utiliser avec mon position:relative ?
Si un bloc est positionné de façon absolue, où se trouve l'origine des points ?
Même question pour un bloc positionné de façon relative.

Statistiques de réponses au QCM


Comme quoi, être attentif en cours de maths ça peut servir : au moins vous savez ce que c'est l'origine d'un repère (le point de coordonnées 0, 0).
Dès qu'on parle de positionnement absolu, il y a forcément une origine... Cela nous permet de placer un block (ou même une balise inline comme img) n'importe où sur la page !

Avec ces connaissances-là, vous êtes parés pour la suite...
D'ailleurs, la suite du programme c'est quoi déjà ?... Ah oui ! La suite, c'est un TP (= Travaux Pratiques)
En effet, le chapitre suivant ne va rien vous apprendre de nouveau, mais il va pourtant beaucoup vous intéresser : je vais vous montrer comment on crée le design d'un site de A à Z avec ce qu'on a appris ! :D

Eh oui, vous savez tout ce qu'il faut, encore faut-il maintenant savoir s'y prendre... Quand vous êtes prêts, on y va :)
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 20/07/2005 à 23:22:56
Modifié : le 08/09/2008 à 18:47:58
Avancement : 100%
Licence : Copie non autorisée

20 commentaires

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 61 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0833s (0.0697s)