[CSS]Effet ruban sur un titre ...

NoSmoking

L'effet ruban (Ribbon en anglais) est des plus simple à réaliser en utilisant les pseudo-éléments ::before et ::after.

Structure HTML

Nous allons réaliser l'effet ruban sur base de la structure suivante :

<div class="ribbon-box">
  <h3 class="ribbon">Titre ruban</h3>
</div>

CSS

Préliminaire

On commence par appliquer le style minimum suivant aux éléments <h3> :

h3.ribbon {
  position: relative;   /* pour servir de référent */
  margin: 1em -10px;    /* pour décaler les bords */
  background: #CC0000;  /* pour visualiser */
}

Pour tracer les « plis » du ruban on utilise les pseudo-éléments :before et :after auxquels on applique les propriétés communes suivantes :

La valeur -10px, de margin: 1em -10px, signifie que la largeur du « pli » sera de 10 pixels, c'est cette même valeur que nous utiliserons plus loin lors de la définition de la propriété border-width.

Nous continue par la règle commune aux pseudo-éléments :

/* la partie commune */
h3.ribbon::before,
h3.ribbon::after {
  content: "";
  position: absolute;
  border-style: solid;
}

Maintenant pour jouer sur le rendu final il faut modifier les propriétés de positionnement, de couleur et de largeur des bordures.

Suivant le rendu voulu on pourra positionner les plis comme suit :

Réalisation des « plis »

Nous allons utiliser des classes pour définir chaque type de « pli ».

A gauche en haut

h3.left-top::before {
  left: 0;
  bottom: 100%;
  border-color: transparent #800000;
  border-width: 10px 10px 0 0;
}

A gauche en bas

h3.left-bottom::before {
  left: 0;
  top: 100%;
  border-color: transparent #800000;
  border-width: 0 10px 10px 0;
}

A droite en haut

h3.right-top::after {
  right: 0;
  bottom: 100%;
  border-color: #800000 transparent;
  border-width: 0 10px 10px 0;
}

A droite en bas

h3.right-bottom::after {
  right: 0;
  top: 100%;
  border-color: #800000 transparent;
  border-width: 10px 10px 0 0;
}

Résultat

<div class="ribbon-box">
  <h3 class="ribbon left-bottom right-top">Ribbon bottom & top</h3>
</div>

Ribbon bottom & top

<div class="ribbon-box">
  <h3 class="ribbon left-top right-bottom">Ribbon top & bottom</h3>
</div>

Ribbon top & bottom

Ressources