CSSで八角形の表現をする


CSS Shapesの話とかじゃないのであしからず。

CSS

仕組みはけっこう単純。

擬似要素に角の役割をしてもらう。

.octagon {
  position: relative;
}
.octagon:before, .octagon:after {
  display: block;
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  border: 20px solid transparent;
}
.octagon:before {
  bottom: 100%;
  border-bottom-color: inherit;
}
.octagon:after {
  top: 100%;
  border-top-color: inherit;
}

.octagon-color {
  background-color: #DDAAAA;
  border-color: #DDAAAA;
}

ポイントと注意点は、

  • :before:afterの擬似要素をpositionで配置する
  • 擬似要素のborderで台形をつくる
  • positionでボックスの外側に配置しているので、実際に配置されるときには、前後の要素との余白の取り方などに注意
  • box-shadowとかで影をつけるのは辛い。

Codepen