CSS : créer des blocs aux bords arrondis
Le point sur les différentes méthodes CSS permettant la création de blocs aux bords arrondis. Hauteur fluide ? Largeur fixe ? Utilisation d'image en background ?
Exemple 1: Bloc de largeur fixe, étirable en hauteur (mais pas à l'infinie !) :
XHTML: <div class="box">
<div class="content-box">
<p>Lorem ipsum dolor sit a..... sagittis magna.</p>
</div>
</div> <div class="box">
<div class="content-box">
<p>Lorem ipsum dolor sit a..... sagittis magna.</p>
</div>
</div> <div class="box">
<div class="content-box">
<p>Lorem ipsum dolor sit a..... sagittis magna.</p>
</div>
</div>
CSS:
* {margin: 0;padding: 0;}/* zero out everything !*/
body {
background-color: #99CCCC;
color: #636363;
}
.box {
background: url(../box1.gif) no-repeat center top;
padding-top: 35px;/* correspond à la hauteur de l'image du haut */
width: 200px;/*correspond à la largeur identique des deux images*/
float: left;
margin-left: 20px;
}
.content-box {
background: url(../content-box.gif) center bottom no-repeat;
padding-bottom: 30px;
}
.content-box P{
margin: 0 30px 0 30px;
}
Voici les images créées dans Photoshop (par exemple) avec un petit effet
graphique (ombre portée) et plaquées en "background" via CSS :
![]()
images du bas (content-box): 200*465px, attention au débordement de votre
contenu, l'image ne se répète pas ! voir exemple1 bis
Exemple 2: Même technique pour mettre en forme des "blocs menus":
XHTML:
<div class="box">
<div class="content-box">
<h2>Links</h2>
<ul>
<li><a id="h-home" accesskey="1" title="Page d'accueil" href="#">Home</a></li>
<li><a id="h-about" accesskey="2" title="Informations - Contact Webmaster - Sponsoring" href="#">About</a></li> <li><a id="h-links" accesskey="3" title="Liens - Ressources webmaster" href="#">Links</a></li>
<li><a id="h-sitemap" accesskey="4" title="Sommaire - Table des matières" href="#">Sitemap</a></li>
<li><a id="h-download" accesskey="5" title="Téléchargements - Thèmes et kits graphiques" href="#">Download</a></li>
</ul>
</div>
</div>
.... ....
CSS:
* {
margin: 0;
padding: 0;
}
body {
background-color: #99CCCC;
color: #636363;
}
.box {
background: url(../box1.gif) no-repeat center top;
padding-top: 35px;
width: 200px;
float: left;
margin-left: 20px;
}
.box ul, .box li {
list-style: none;
margin-left: 20px;
}
.content-box h2 {
text-align: center;
position: relative;
top: -.7em;
}
.box li a {
text-decoration: none;
}
.box li a:hover {
text-decoration: underline;
}
.content-box {
background: url(../content-box.gif) center bottom no-repeat;
padding-bottom: 30px;
}
.content-box P{
margin: 5px 30px 0 30px;
}
Les images utilisées sont identiques à celles de l'exemple 1.
Exemple 3: Bloc de largeur fixe, étirable en hauteur à l'infinie (sans style graphique):
Cet exemple n'est valable que si votre "image Photoshop" est simple, à
savoir juste les bords arrondis et une simple couleur de fond (pas
d'effets graphiques supplémentaires).
L'étirement vertical sera assuré par une simple couleur de fond identique
à celle de votre "image Photoshop".
XHTML: <div class="box">
<div class="content-box">
<p>Lorem ipsum dolor sit a..... sagittis magna.</p>
</div>
</div> <div class="box">
<div class="content-box">
<p>Lorem ipsum dolor sit a..... sagittis magna.</p>
</div>
</div> <div class="box">
<div class="content-box">
<p>Lorem ipsum dolor sit a..... sagittis magna.</p>
</div>
</div>
CSS:
* {margin: 0;padding: 0;}
body {
background-color: #99CCCC;
color: #636363;
}
.box {
background: url(../box3.gif) no-repeat center top;
padding-top: 15px;
padding-bottom: 20px;/* pour écarter du bas de la fenêtre du navigateur */
width: 180px;
float: left;
margin:30px 0 0 20px;
}
.content-box {
background: #FF66CC url(../content-box3.gif) no-repeat center bottom;
padding-bottom: 20px;
}
.content-box P{
margin: 0 8px 0 8px;
}
Les deux images utilisées:
Exemple 4: Bloc de largeur fixe, étirable en hauteur à l'infinie (avec style graphique):
Nous obtiendrons ici le même effet que l'exemple 1, même les blocs
pourront s'étirer en hauteur à l'infinie grâce à l'utilisation de trois
images plaquées en fond.
Il faudra donc trois conteneurs différents pour accueillir les images de
fond :
XHTML: <div class="box">
<div class="content-box">
<p>Lorem ipsum dolor sit a..... sagittis magna.</p>
</div> <div class="bottom-box"> </div>
</div> <div class="box">
<div class="content-box">
<p>Lorem ipsum dolor sit a..... sagittis magna.</p>
</div> <div class="bottom-box"> </div>
</div> <div class="box">
<div class="content-box">
<p>Lorem ipsum dolor sit a..... sagittis magna.</p>
</div> <div class="bottom-box"> </div>
</div>
CSS:
* {margin: 0;padding: 0;}
body {
background-color: #99CCCC;
color: #636363;
}
.box {
background: url(../box1.gif) center top no-repeat;
padding-top: 35px;
width: 200px;
float: left;
margin-left: 20px;
}
.content-box {
background: url(../content-box4.gif) center top repeat-y;
}
.bottom-box {
background: url(../xmedia/images_webdesigncss/rounded/bottom-box4.gif) center bottom no-repeat;
height: 30px;
}
.content-box P{
margin: 0 30px 0 30px;
}
Les trois images utilisées:
On aurai obtenu le même résultat avec une balise span à la place de la div.bottom-box, comme ceci:
<span class="bottom-box"></span>
span.bottom-box {
background: url(../bottom-box4.gif) center bottom no-repeat;
display: block;
height: 30px;
width: 200px;
}
Exemple 5: avec la position absolue : bloc étirable en hauteur et en largeur (sans style graphique):
Fonctionne parfaitement sous Mozilla/Firefox, mais sous IE (6) on aperçoit (quand on fait varier la taille de la fenêtre à l'aide de la souris) des petits décalages de 1 pixel faisant apparaître les bords du conteneur principal.
XHTML: <div class="box">
<div class="top_left"></div>
<div class="top_right"></div>
<div class="content-box">
.......
</div>
<div class="bottom_left"></div>
<div class="bottom_right"></div>
</div>
CSS:
* {
margin: 0;
padding: 0;
}
body {
background-color: #99CCCC;
color: #636363;
padding: 25px;
}
.box {
width: 100%; /* une largeur doit être donnée !*/
position: relative;
margin-bottom: 25px;
background-color: #FF66CC;
}
.content-box {
position: relative;
padding: 13px;
z-index: 4;
}
.top_left, .top_right, .bottom_left, .bottom_right {
height: 20px;
width: 20px;
background-repeat: no-repeat;
position: absolute;
}
.top_left {
top: 0px;
left: 0px;
background-image: url(../images_webdesigncss/rounded/top-left.gif);
z-index: 0;
}
.top_right {
top: 0px;
right: 0px;
background-image: url(../xmedia/images_webdesigncss/rounded/top-right.gif);
z-index: 1;
}
.bottom_left {
bottom: 0px;
left: 0px;
background-image: url(../xmedia/images_webdesigncss/rounded/bottom-left.gif);
z-index: 2;
}
.bottom_right {
bottom: 0px;
right: 0px;
background-image: url(../../../xmedia/images_webdesigncss/rounded/bottom-right.gif);
z-index: 3;
}
Exemple 6: avec la position float : bloc étirable en hauteur et en largeur (sans style graphique):
XHTML: <div class="box">
<div class="top_left"></div>
<div class="top_right"></div>
<div class="content-box">
.......
</div>
<div class="bottom_left"></div>
<div class="bottom_right"></div>
</div>
CSS:
* {
margin: 0;
padding: 0;
}
body {
background-color: #99CCCC;
color: #636363;
padding: 25px;
}
.box {
margin-bottom: 25px;
background-color: #FF66CC;
}
.content-box {
}
.top_left, .top_right, .bottom_left, .bottom_right {
height: 20px;
width: 20px;
background-repeat: no-repeat;
}
.top_left {
background-image: url(../images_webdesigncss/rounded/top-left.gif);
}
.top_right {
background-image: url(../images_webdesigncss/rounded/top-right.gif);
float: right;
}
.bottom_left {
background-image: url(../images_webdesigncss/rounded/bottom-left.gif);
}
.bottom_right {
background-image: url(../images_webdesigncss/rounded/bottom-right.gif);
float: right;
}
Ce tutoriel est distribué sous une licence Creative Commons by-nc-sa 3.0. Consultez la page dédiée aux licences de distributions.
- Tutoriels CSS :
- 22848 lectures

Commentaires :
Super génial
Merci beaucoup, tu m'as fait gagner du temps.
Bon courage, cordialement
Olivier
Bravo
Merci pour ton aide précieuse. Il manque juste une chose, comment fait on pour centrer ces blocs sur la page ?
Poster un nouveau commentaire