Arrondir les angles…
icone web
Signature :
Linux Pratique
Sommaire de l'article :

Retrouvez cet article dans : Linux Pratique 39

Par défaut, les divers éléments de type " bloc " en HTML (<div>, <p>, etc.) sont rectangulaires, donc à angles droits. Le langage CSS dans sa version 3 prévoit l'intégration d'une nouvelle propriété permettant d'obtenir des angles arrondis (1), mais ce n'est pas pour tout de suite. En attendant, nous vous proposons d'employer une technique qui repose sur l'utilisation d'une image d'arrière-plan.

Cas d'un bloc " figé "

(1) Voir les futures spécifications pour arrière-plans et bordures : http://www.w3.org/TR/css3-background/ Nous allons tout d'abord considérer le cas d'un bloc de largeur fixe, mais étirable en hauteur. Classiquement, nous créons un bloc <div>, qui va contenir du texte. Observez sur la figure 1 que l'on obtient bien un cadre standard, aux coins carrés. Les couleurs d'arrière-plan et de bordure ont été définies dans la feuille de style.

/img-articles/lp/39/art-16/fig-1-2.jpg

Notre objectif est d'obtenir le résultat illustré par la figure 2. Pour y parvenir, certains proposeraient peut-être de simplement placer une image d'arrière-plan aux coins arrondis. Cependant, nous écartons cette solution, car nous souhaitons que ce cadre, bien qu'il ait une largeur fixe, soit étirable en hauteur. En réalité, nous allons " découper " le bloc en deux entités distinctes :
  •  la bordure supérieure du bloc constituera une image ;
  •  le contenu et la bordure inférieure du bloc constitueront notre deuxième image.
Ces images d'arrière-plan ont été obtenues à l'aide d'Inkscape, dans lequel nous avons dessiné un rectangle aux coins arrondis, de la couleur souhaitée. Puis, ce rectangle a été exporté au format PNG ; nous l'avons ensuite découpé à l'aide de The Gimp : la partie supérieure (chapeau.png) d'une hauteur de 40px, puis le reste de l'image (contenu.png) : Du point de vue du code HTML, nous obtenons :
  • un conteneur <div>, qui va contenir l'ensemble des éléments ; il aura pour arrière-plan l'image de la partie supérieure du bloc ;
  • un " sous-conteneur " <div>, qui va recevoir le contenu textuel ainsi que la bordure inférieure du bloc.
On obtient finalement le code suivant :
<body>
<div id="conteneur">
	<div id="bloc">
		<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur luctus mauris sit amet metus. Cras tincidunt neque nec arcu. Praesent elit sapien, egestas ac, blandit quis, eleifend a, est. Nunc quis arcu. Vivamus tortor. Cras blandit semper nibh. Vivamus risus est, auctor ac, eleifend non, lacinia ut, mauris. Maecenas tristique, risus id fringilla rhoncus, pede neque egestas neque.</p>
	</div>
</div>
</body>
</html>
Associé à la feuille de style suivante :
#conteneur {
width: 250px;
padding-top: 40px; /* à ajuster...*/
background: url(chapeau.png) left top no-repeat;
}

#bloc {
background: url(contenu.png) left bottom no-repeat;
padding-bottom: 40px;
}

#bloc p {
margin: 0 40px 40px 40px;
}
La propriété background-position permet de spécifier la position du coin supérieur gauche de l'image. La position se rapporte à l'élément HTML pour lequel l'image est définie. Remarquez que nous avons fixé les marges internes supérieure et inférieure (padding) à 40 px. La propriété padding-top est indispensable ici sinon l'image du haut du bloc (chapeau.png) est entièrement recouverte par les autres éléments du conteneur ; la propriété padding-bottom évite, quant à elle, que le texte ne dépasse du bloc. L'astuce est de créer une image d'une hauteur raisonnable (au moins 500 px), de manière à anticiper un allongement du texte que le bloc va contenir. Si votre image n'est pas suffisamment longue, vous pourriez obtenir la chose suivante (Fig. 3) :

/img-articles/lp/39/art-16/fig-3-4.jpg

Cette technique permet diverses fantaisies pour l'habillage du bloc : bordure, contour ombré, remplissage avec un dégradé, etc. Mais un problème se pose : qu'en est-il de l'élasticité du bloc ? En effet, même si cette technique peut être satisfaisante, le webmestre reste limité quant à la quantité de texte contenue dans le bloc. En outre, s'il est amené à élargir le bloc, que va-t-il advenir de notre image d'arrière-plan ? Celle-ci est en effet figée par définition...

Cas d'un bloc " étirable "

Nous venons de considérer le cas où le bloc doit être étirable en hauteur. À présent, considérons le cas plus complexe où l'on souhaiterait que notre bloc soit étirable aussi bien en hauteur qu'en largeur.

La propriété -moz-border-radius

Il existe une propriété qui permet d'arrondir automatiquement les angles des éléments de type bloc. Il s'agit de la propriété -moz-border-radius. Constatez sur la figure 4 (cadre bleu) que l'on obtient un résultat très satisfaisant. Cette propriété reçoit pour valeur le rayon de courbure de l'arrondi :
<p class="curve">blandit quis, eleifend a, est. Nunc quis arcu. Vivamus tortor. Cras blandit semper nibh. Vivamus risus est, auctor ac, eleifend non, lacinia ut, mauris. Maecenas tristique, risus</p>

.curve {
width: 300px;
background-color: #CCCCFF;
border: 3px solid #0033FF;
-moz-border-radius: 30px;
padding: 20px;
}
Cette propriété règle notre problème : nous obtenons un bloc étirable dans les deux sens. Cependant, comme le laisse entendre son intitulé, seuls les navigateurs Web basés sur Gecko (le moteur de rendu de Mozilla) savent interpréter cette propriété... Elle sera donc inefficace aux yeux des internautes utilisant Internet Explorer. Espérons que le W3C inclura une propriété du même genre dans la norme CSS 3, ce qui simplifierait la vie de nombreux webmestres.

Utilisation de 4 images en coin

La technique que nous allons employer ici consiste à créer les quatre coins arrondis du bloc à l'aide d'un logiciel de dessin, puis à les positionner en absolu dans un conteneur. Le plus important ici est de veiller à ce que la couleur de fond des 4 images soit identique à la couleur d'arrière-plan de votre page. Il ne faut pas songer à créer un cadre avec bordure (ou rempli d'un dégradé, ou tout autre " effet " visuel). En effet, vous allez voir que seuls les 4 coins du cadre seront constitués d'une image. Pour que notre bloc donne l'impression d'être extensible, on se contentera de lui appliquer une couleur d’arrière-plan (la même couleur que les 4 coins bien sûr). Les 4 coins se positionneront automatiquement en fonction des dimensions du bloc. Comme précédemment, le plus simple pour réaliser vos coins-images est de dessiner un rectangle aux coins arrondis dans Inkscape, puis de l'exporter en bitmap pour finir par découper les 4 coins à l'aide de The Gimp. Nous obtenons les 4 images suivantes :

/img-articles/lp/39/art-16/fig-5.jpg

La couleur utilisée a pour code hexadécimal : #53937a. Ce code devra être utilisé pour définir la couleur d'arrière-plan du cadre. Notre code HTML est le suivant :
 <body>
<div id="cadre4">
	<div id="coinhd"></div>
	<div id="coinhg"></div>
	<div id="contenu">
	         <p>Duis ligula augue, dignissim lacinia, commodo quis, tempus sit amet, justo. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi placerat eleifend arcu. Maecenas blandit rutrum risus. Sed fringilla. Quisque nulla. Nulla facilisi. Aliquam erat volutpat. Duis in risus ut metus aliquet fringilla.</p>
	</div>
	<div id="coinbd"></div>
	<div id="coinbg"></div>
</div>
</body>
Notez qu'on définit ici, dans un ordre logique : les coins supérieurs, suivis du contenu textuel pour terminer par les coins inférieurs. Mais remarquez que les coins de droite sont déclarés AVANT les coins de gauche. En effet, dans le cas contraire, le coin supérieur droit se positionne bien à droite, mais au-dessous du coin gauche (de manière à ce qu'ils ne se trouvent pas sur la même ligne). Notre feuille de style ressemble à ceci :
body {
	font-family: verdana, arial, sans-serif;
	margin: 0;
	padding: 0;
	background-color: #FFFFFF;
}
#cadre4 {	
	width: 400px;
	background-color: #53937a;
}
#coinhd, #coinhg, #coinbd, #coinbg {
	height: 45px;
	width: 45px;	
}
#coinhd {
	background-image: url(coin4hd.png);
	float: right;
}
#coinhg {
	background-image: url(coin4hg.png);	
}
#coinbd {
	background-image: url(coin4bd.png);
	float: right;
}
#coinbg {
	background-image: url(coin4bg.png);	
}
#contenu p {
	margin: 0;
	padding: 0 45px 0 45px;
	color: #FFFFCC;
}
Remarquez que nous avons précisé une couleur d'arrière-plan (blanc) pour <body>. De cette manière, les utilisateurs qui auraient défini une couleur d'arrière-plan autre que le blanc pour leur navigateur (pour leur confort visuel), visualiseraient obligatoirement notre page en blanc ; ce qui nous arrange, puisque c'est la couleur de fond que nous avons choisie pour nos coins-images. Nous avons ensuite défini une largeur quelconque pour le conteneur principal (400 px), ainsi qu'une couleur d'arrière-plan identique à la couleur utilisée pour les images. Les conteneurs destinés à recevoir les images des 4 coins reçoivent les mêmes dimensions que ces dernières (45 px sur 45 px). Sans cela, les conteneurs seraient réduits à une ligne, car ils ne contiennent aucun élément de type " bloc ". Notez enfin que les coins de droite reçoivent la propriété float:right; sans quoi, ils ne seraient pas positionnés correctement dans le conteneur. Vous pouvez essayer de modifier la largeur du cadre et/ou d'augmenter la quantité de texte contenu dans le bloc : ce dernier conserve ses coins arrondis quoi qu'il arrive... (Fig. 6)

/img-articles/lp/39/art-16/fig-6.jpg

 Fig. 6

Il y a : 0 commentaire(s)

Donnez votre avis

Vous devez avoir ouvert une session pour écrire un commentaire.

Brèves
Édito : Linux Pratique Essentiel N°24
Édito : Linux Pratique HS N°23
Édito : GNU/Linux Magazine 146
Édito : GNU/Linux Magazine HS N°58
Édito : Open Silicium N°5
Communication
Linux Pratique HS 23 – Communiqué de presse
Linux Pratique Essentiel N°24 – Communiqué de presse
Gnu/Linux Magazine sponsor et partenaire de PROLOGIN
Linux Essentiel partenaire des Rencontres du Libre de Lion sur Mer (Normandie)
GNU/Linux Magazine HS 58 – Communiqué de presse
prochainement moteur de recherches des articles
 
:
:
Jours heures minutes secondes
En kiosque
Le tout nouveau Linux Pratique Essentiel est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau Linux Pratique est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau GNU/Linux Magazine est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau GNU/Linux Magazine HS est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau Open Silicium est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau Linux Pratique est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau Misc est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau GNU/Linux Magazine est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...