MENU

CSSだけで見出しに使えるIE9+対応で高品質なリボンを作る

CSSでIE9+対応なリボン見出しを作るときのメモです。以下に紹介する方法ではグラデーションを使っていますが、IE9でグラデーションを使いたい場合はSVGを使うようにしましょう。

デモ

http://ithat.me/wp-content/uploads/2016/11/only-css-ribbon.html

まずは、デモをご覧ください。

リボンの基本形

only-css-ribbon-1


Ribbon


.container 
{
  position: relative;
  padding: 3.5em 3em;
  width: 500px;
  z-index: 1;
}

.ribbon 
{
  position: relative;
  margin: 0 0 .9em 0;
  padding: .6em 0;
  text-align: center;
  font-size: 20px;  /* ベースとなるサイズ */
  background: #d64b4b;  /* IE9 not support css gradient */
  background: -webkit-linear-gradient(top, #d64b4b, #ab2c2c);  /* Webkit */
  background: linear-gradient(to bottom, #d64b4b, #ab2c2c);
  box-shadow: 0 1px 1px rgba(0, 0, 0, .25);
}
.ribbon::before,
.ribbon::after 
{
  display: block;
  position: absolute;
  bottom: -.9em;
  content: '';
  border: 1.2em solid #c23a3a;
  z-index: -1;
}
.ribbon::before 
{
  left: -1.5em;
  border-left-color: transparent;
}
.ribbon::after 
{
  right: -1.5em;
  border-right-color: transparent;
}
.ribbon > em 
{
  color: #801111;
  text-shadow: #d65c5c 0 1px 0;
}
.ribbon > em::before,
.ribbon > em::after 
{
  display: block;
  position: absolute;
  bottom: -.9em;
  content: '';
  border-style: solid;
  border-color: #871616 transparent transparent transparent;
}
.ribbon > em::before 
{
  left: 0;
  border-width: .9em 0 0 .9em;
}
.ribbon > em::after 
{
  right: 0;
  border-width: .9em .9em 0 0;
}

コンテンツ幅に合わせる


Fit Ribbon


.ribbon.fit 
{
  /* .ribbon::before、.ribbon::afterの分1.5emだけ左右にマージンをとる */
  margin: 0 1.5em .9em 1.5em;
}

左右に出っ張らせる


Cover Ribbon


.ribbon.cover 
{
  /* .containerのpaddingである3remと、
     .ribbon > em::before, .ribbon > em::afterの0.9em分マイナス */
  margin-left: calc(-3rem - .9em);
  margin-right: calc(-3rem - .9em);
}