CSSを使って、画像などにリボンやラベルを装飾する方法を紹介します。リボンなどの画像を用意して背景画像で表示させたりすることはありますが、今回は画像は使わずにCSSだけで表現してみます。

リボン風の装飾

まずは、単純に写真のコーナーにラベルがついたようなリボンの装飾をする方法です。

//HTML
<div class="ribon">
  <img src="photo.jpg" alt="" />
  <div class="caption"><span>Ribon</span></div>
</div>

//CSS
.ribon {
  position: relative;
  display: inline-block;
  overflow: hidden;
}

.ribon .caption {
  display: inline;
}

.ribon span {
  position: absolute;
  display: inline-block;
  top: 20px;
  left: -25px;
  width: 100px;
  padding: 2px 10px;
  background: #cc0c0c;
  color: #fff;
  text-align: center;
  transform: rotate(-45deg);
}

まずは、全体を囲むボックスとテキストを囲むspan要素を「inline-block」にしておきます。あとは、リボンとなる部分の色やサイズ、配置などを指定します。そして、transformプロパティで反時計回りで45度回転させます。ボックスに「overflow: hidden;」を指定することで、はみ出してしまう部分を見えないようにしています。

画像にラベルを装飾

リボンに奥行きを出したい場合

先程の場合は、写真ぴったりにラベルがついたような感じでしたが、今度は少し奥行きを出してリボンが巻いてあるような感じにしてみます。

.ribon {
  position: relative;
  display: inline-block;
  padding: 7px; //追加
  overflow: hidden;
}

.ribon .caption {
  display: inline;
}

.ribon span {
  position: absolute;
  display: inline-block;
  top: 20px;
  left: -25px;
  width: 100px;
  padding: 2px 10px;
  background: #cc0c0c;
  box-shadow: 0px 0px 10px rgba(0,0,0,0.3); //追加
  color: #fff;
  text-align: center;
  transform: rotate(-45deg);
}

.ribon .caption:before {
  content: "";
  display: inline-block;
  position: absolute;
  width: 0;
  height: 0;
  top: -17px;
  left: 67px;
  border: 15px solid transparent;
  border-bottom-color: #662121;
  z-index: -100;
}

.ribon .caption:after {
  content: "";
  display: inline-block;
  position: absolute;
  width: 0;
  height: 0;
  top: 75px;
  left: -8px;
  border: 15px solid transparent;
  border-top-color: #662121;
  z-index: -100;
}

まずは、外側のボックスにpaddingを追加して、リボンが写真からはみ出す感じにします。

リボンを作る工程1(帯を作る)

次に疑似要素を使ってリボンの両端に三角形を描画し、奥行きを出します。三角形の作り方については「CSSのborderを使って三角形を描画」を参考にしてください。

リボンを作る工程2(奥行きを出す)

あとは、box-shadowプロパティを使って、リボン全体に少し影をつけたりしても良いかもしれません。

リボンを作る工程3(影をつける)

以上が、CSSだけで画像にリボンを装飾する方法となります。

その他の記事