CSS3 – Effet de feuilles superposées

Cet article a 381 jours. Il commence à dater, lisez-le donc en gardant son âge en tête ! Merci

Il y a quelques jours de cela je répondais à un petit tweet d’un confrère pour donner une astuce sur la création d’un effet graphique de feuilles superposées en CSS3. Le défi était de ne pas multiplier les éléments HTML pour réaliser cet effet. C’est chose faite. Jetons un œil sur la technique utilisée.

Tweet et réponse

L’idée me semblait intéressante, voici ma proposition visible sur dabblet et correspondant au mieux à l’image fournie par Daniel :
Effet de feuilles superposées

Comment faire ? Comment l’utiliser ?

Nous allons voir plusieurs exemples pour réaliser deux effets similaires.

Démonstration

Pour réaliser le premier effet, utilisons un code HTML simple correspondant à un bloc de citation :

<blockquote>
    <p>C'est en forgeant qu'on devient forgeron</p>
</blockquote>

Ce code suffit amplement pour notre affaire. Voyons notre CSS.

/* on fixe la largeur du bloc (optionnel)
   et on le définit comme référent */
blockquote {
    position: relative;
    width: 300px;
    padding: 10px;
}
/* on ajoute des effets graphiques
   sur nos futures feuilles */
blockquote,
blockquote:after,
blockquote:before {
    background: #fff;
    box-shadow: 0 0 4px rgba(0,0,0,0.4);
}
 
/* on utilise les pseudo éléments pour ajouter des feuilles */
blockquote:after,
blockquote:before {
    position: absolute;
    top: 0; right:3px; bottom:0; left:-3px;
    content: "";
    z-index: -10;
    /* définit le centre de transformation */
    transform-origin: 100% 0;
}
blockquote:after {
    transform: rotate(-0.6deg);
}
blockquote:before {
    transform: rotate(-1.2deg);
    right: 5px; left: -5px;
}

N’oubliez pas que ce code CSS n’est pas préfixé (-webkit-, -moz-, etc.) et qu’il convient de le faire pour les propriétés CSS3 (ici box-shadow, transform-origin et transform).

Aller plus loin

L’exemple de code fourni à Daniel propose d’ajouter un auteur de la citation, ainsi que des guillemets autour de celle-ci.
Ajoutez un paragraphe portant le nom de l’auteur après le paragraphe de la citation.

Puis en CSS nous allons utiliser à nouveau les pseudo éléments pour ajouter nos guillemets. La fonte Georgia propose de jolis guillemets, soit dit en passant.

/* on style les deux paragraphes */
p {
    margin:0;
}
blockquote p + p {
    text-align: right;
    line-height: 1.2em;
    margin:-1.1em 0 0 0;
    color: #999;
}
 
/* on ajoute les guillemets */
blockquote p:first-child:before,
blockquote p:first-child:after {
	font-size: 1.75em;
	font-family: Georgia, serif;
	color: #888;
}
blockquote p:first-child:before {
	content : "“ ";
	vertical-align: -.05em;
}
blockquote p:first-child:after {
	content : " ”";
	vertical-align: -.55em;
}

Le plus difficile ici est de trouver le bon alignement pour les guillemets, tout en jouant avec les marges des paragraphes.

Toujours plus loin (toujours plus fort !)

Pour réaliser le deuxième effet de la démonstration, nous allons appliquer les mêmes styles sur des liens autour d’images. Le code HTML est plutôt simple :

<a href="#">
    <img src="http://lorempixel.com/200/200/sports/1" alt="" width="200" height="200">
</a>
<a href="#">
    <img src="http://lorempixel.com/200/200/sports/4" alt="" width="200" height="200">
</a>
<a href="#">
    <img src="http://lorempixel.com/200/200/sports/5" alt="" width="200" height="200">
</a>

Nous préparons ensuite notre code CSS, fortement ressemblant au précédent :

a {
    display:inline-block;
    position: relative;
    padding: 10px;
    margin: 0 2em;
    width: 200px;
    height: 200px;
}
/* on ajoute des effets graphiques
   sur nos futures feuilles */
a,
a:after,
a:before {
    background: #fff;
    /* ombres légèrement diminuées en opacité */
    box-shadow: 0 0 4px rgba(0,0,0,0.2);
    /* on prévoit une transition générale */
    transition: all .7s;
}
 
/* on utilise les pseudo éléments pour ajouter des feuilles */
a:after,
a:before {
    position: absolute;
    top: 0; right:0; bottom:0; left:0;
    content: "";
    z-index: -10;
    /* définit le centre de transformation */
    transform-origin: 100% 0;
}

Nous préparons notre transition sur la rotation, le déplacement et le changement d’ombre de notre élément. Pour simplifier, j’ai fait le choix d’effectuer la transition sur all.
Au survol ou au focus sur un lien, nous effectuons nos changements d’état :

a:hover:after,
a:focus:after	{
    transform: rotate(-1deg);
    right: 6px; left:-6px;
}
a:hover:before,
a:focus:before {
    transform: rotate(-2.2deg);
    right: 12px; left: -12px;
}
 
/* on ré-hausse l'opacité des ombres */
a:hover,
a:hover:after,
a:hover:before,
a:focus,
a:focus:after,
a:focus:before	{
    box-shadow: 0 0 4px rgba(0,0,0,0.4);
}

Les sélecteurs CSS sont un peu longs du fait de la prise en charge du focus et du survol sur les 3 éléments.

Démonstration

Et voilà, vous êtes arrivés au bout !
J’ai bien conscience que les commentaires au sein du code CSS ne seront peut-être pas suffisants pour tout le monde, n’hésitez pas à commenter si vous rencontrez des difficultés.

9 commentaires et un trackback sur “CSS3 – Effet de feuilles superposées”

  1. Rorty dit :
    4 juin 2012

    Très joli rendu!

    Juste penser à rajouter les préfixe -webkit- et -o- dans la démo sur les transform et transition pour que l’effet soit le même sur tout les navigateurs :)

  2. Geoffrey dit :
    4 juin 2012

    Hello,
    Merci pour le rappel à l’ordre, c’est un oubli de ma part (il n’y avait même pas les versions non-préfixées =_=)
    Bonne fin de journée.

  3. Sébastien dit :
    4 juillet 2012

    Un super rendu, bravo :)

  4. Geoffrey dit :
    4 juillet 2012

    Merci Sébastien :)

  5. css3enforce dit :
    26 juillet 2012

    Franchement, très beau rendu !!
    Le css3 m’ impressionne vraiment beaucoup dommage que IE ne soit pas à la hauteur !

  6. Geoffrey dit :
    26 juillet 2012

    Merci ^^
    Les dernières versions de IE sont très bien. Il faut savoir les apprécier. :)

  7. Nicolas dit :
    25 août 2012

    Arf, je n’y aurai jamais pensé, vraiment chouette.

  8. Geoffrey dit :
    25 août 2012

    C’est Daniel qui a lancé le défi ! :p

  9. 12 février 2013

    superbe rendu merci

Laisser un commentaire

Certains codes HTML ne sont pas échappés automatiquement. Pour afficher du code dans votre commentaire, merci d'échapper vos chevrons en utilisant "&lt;" et "&gt;" en lieu et place de "<"" et ">".

Il est difficile de proposer un support pour tous les articles de ce blog. En ne fournissant pas un moyen de consulter votre code bogué, vous vous assurez de ne pas avoir de réponse adaptée.

Les sites qui en parlent

  1. HTML5 | Pearltrees le 13 juillet 2012
 
Le studio web