I. Le carré▲
Ici, rien de bien compliqué, il suffit de définir une largeur et une hauteur identiques pour chaque côté de notre élément HTML.
.carre
{
width:
200
px;
height:
200
px;
background:
#069
;
}
II. Le rectangle▲
Le principe est le même que le carré sauf que la largeur est plus grande que la hauteur (ou l'inverse selon l'effet désiré).
.rectangle
{
width:
400
px;
height:
200
px;
background:
#069
;
}
III. Le rond▲
Le rond est obtenu grâce à la propriété border-radius sur un élément carré. La valeur du border-radius sera égale à la moitié de la valeur d'un côté.
.rond
{
width:
200
px;
height:
200
px;
background:
#069
;
-webkit-border-radius:
100
px;
-moz-border-radius:
100
px;
-o-border-radius:
100
px;
border-radius:
100
px;
}
IV. L'ovale▲
J'ai appris récemment que l'on pouvait donner deux valeurs au border-radius équivalant à l'arrondi de départ et l'arrondi d'arrivée d'un coin de bordure.
Par exemple :
border-top-left-radius :
150px 100px;
Le code ci-dessus va donner pour la bordure haut et droite, un arrondi commençant à 100px en radius sur le left pour arriver à 150px en radius sur le top.
Ainsi en appliquant ce procédé à toutes les bordures, on arrive à une forme ovale. Il faudra le faire sur un bloc ayant une forme rectangle.
.ovale
{
width:
300
px;
height:
200
px;
background:
#069
;
-webkit-border-radius:
150
px / 100
px;
-moz-border-radius:
150
px / 100
px;
-o-border-radius:
150
px / 100
px;
border-radius:
150
px / 100
px;
}
équivaut à :
.ovale
{
width:
300
px;
height:
200
px;
background:
#069
;
border-top-left-radius:
150
px 100
px;
border-top-right-radius:
150
px 100
px;
border-bottom-right-radius:
150
px 100
px;
border-bottom-left-radius:
150
px 100
px;
}
V. Les triangles▲
Le principe du triangle est simple car il équivaut à manipuler la largeur des bordures ainsi que leur visibilité - par le biais de la couleur de la bordure - sur un élément HTML ayant des dimensions égales à 1px.
.triangle
{
width:
1
px;
height:
1
px;
border:
1
px solid
#069
;
border-color:
transparent
transparent
#069
transparent
;
border-width:
100
px;
}
Pour avoir un triangle orienté vers un autre côté, il suffit juste de changer les valeurs de border-color.
VI. La transformation au service de la géométrie : le parallélogramme▲
Dans mon article précédent, je parlais des propriétés transform introduites en CSS3. Celles-ci nous permettent de modifier la forme de nos éléments (dans un plan 2D).
Voici un rappel des principales fonctions de transformation :
- skew ;
- rotate ;
- translate.
La fonction qui va nous intéresser sera la fonction skew. On part de la base d'un rectangle auquel on applique la transformation :
.parallelogramme
{
width:
300
px;
height:
100
px;
background:
#069
;
-webkit-transform:
skew
(
30
deg);
-moz-transform:
skew
(
30
deg);
-o-transform:
skew
(
30
deg);
tranform:
skew
(
30
deg);
}
VII. Le trapèze▲
Un trapèze se fait sur la même base que le triangle mais au lieu d'avoir une hauteur ou une largeur à 1px, on a un des deux côtés à 1px et l'autre ayant une valeur supérieure à 1px (100px par exemple).
.trapeze
{
width:
1
px;
height:
100
px;
border:
1
px solid
#069
;
border-color:
transparent
transparent
transparent
#069
;
border-width:
100
px;
}
VIII. Les autres formes : la magie des pseudoéléments :after et :before▲
Jusque-là, on a vu la puissance du CSS/CSS3 pour produire de la géométrie. Grâce aux pseudoéléments :after et :before (ou ::after et ::before), on peut concevoir des formes beaucoup plus complexes.
Dans le tutoriel d'Alen Grakalic (tags pour vos billets blogs en css3 pure), on voit un peu ce que l'on peut obtenir grâce à ces pseudoéléments. Voyons ce que l'on peut en faire.
IX. L'étoile▲
L'astuce est assez simple, car il suffit juste de créer un triangle. Puis grâce au pseudoélément :after, on refait un triangle mais dans le sens opposé.
Une fois ces deux triangles créés, il suffit de positionner le triangle créé en :after afin de le superposer au deuxième triangle (via la propriété position de valeur absolute).
.etoile
{
background:
#000
;
margin:
100
px auto
;
width:
0
;
height:
0
;
border-left:
50
px solid
transparent
;
border-right:
50
px solid
transparent
;
border-bottom:
100
px solid
#069
;
position:
relative
;
}
.etoile
:
after
{
content:
''
;
border:
1
px solid
#069
;
border-left:
50
px solid
transparent
;
border-right:
50
px solid
transparent
;
border-top:
100
px solid
#069
;
width:
0
;
height:
0
;
position:
absolute
;
top
:
30
px;
left
:
-50px;
}
X. Triangle et rond▲
C'est le même principe que pour l'étoile.
.rondTriangle
{
margin:
100
px auto
;
width:
0
;
height:
0
;
border-left:
50
px solid
transparent
;
border-right:
50
px solid
transparent
;
border-bottom:
100
px solid
#000
;
position:
relative
;
}
.rondTriangle
:
after
{
content:
''
;
background:
#069
;
-webkit-border-radius:
50
px;
-moz-border-radius:
50
px;
-o-border-radius:
50
px;
border-radius:
50
px;
width:
75
px;
height:
75
px;
position:
absolute
;
top
:
30
px;
left
:
-37px;
}
XI. Le losange▲
Il s'agit de deux triangles juxtaposés.
.losange
{
margin:
100
px auto
;
width:
0
;
height:
0
;
border-left:
50
px solid
transparent
;
border-right:
50
px solid
transparent
;
border-bottom:
100
px solid
#069
;
position:
relative
;
}
.losange
:
before
{
content:
''
;
border:
1
px solid
#069
;
border-left:
50
px solid
transparent
;
border-right:
50
px solid
transparent
;
border-top:
100
px solid
#069
;
width:
0
;
height:
0
;
position:
absolute
;
top
:
100
px;
left
:
-50px;
}
On aurait pu faire ce losange en passant par un carré avec deux fonctions de transformation : skew et rotate.
XII. Conclusion▲
A partir de là, on peut imaginer plein de possibilités de formes grâce aux nouvelles propriétés CSS3 et aux pseudoéléments.
XIII. Remerciements▲
Un grand merci à ClaudeLELOUP pour sa relecture attentive et ses conseils.