【初心者でもわかる】CSSだけで6角形を作る方法

【初心者でもわかる】CSSだけで6角形を作る方法

どうも7noteです。あまり使う機会は少ないかもですが、CSSだけで6角形の作り方について

CSSだけで6角形を作ります。6角形は英語でヘキサゴン!

8角形も似たような方法で作ったのでよければ見てってください。

・【初心者でもわかる】CSSだけで8角形を作る方法

cssだけで6角形を作る

index.html
<div class="hexagon">
  <div class="hexagon_frame"></div>
</div>
style.css
.hexagon {
  width: 69px;
  height: 80px;
  background: #000; /* 6角形の色 */
  position: relative;
}
.hexagon::before {
  content: '';
  width: 0;
  height: 0;
  border-top: 10px solid #fff;
  border-left: 17px solid #fff;
  border-bottom: 10px solid transparent;
  border-right: 17px solid transparent;
  position: absolute;
  top: 0;
  left: 0;
}
.hexagon::after {
  content: '';
  width: 0;
  height: 0;
  border-top: 10px solid #fff;
  border-left: 17px solid transparent;
  border-bottom: 10px solid transparent;
  border-right: 17px solid #fff;
  position: absolute;
  top: 0;
  right: 0;
}

.hexagon_frame::before {
  content: '';
  width: 0;
  height: 0;
  border-top: 10px solid transparent;
  border-left: 17px solid #fff;
  border-bottom: 10px solid #fff;
  border-right: 17px solid transparent;
  position: absolute;
  bottom: 0;
  left: 0;
}
.hexagon_frame::after {
  content: '';
  width: 0;
  height: 0;
  border-top: 10px solid transparent;
  border-left: 17px solid transparent;
  border-bottom: 10px solid #fff;
  border-right: 17px solid #fff;
  position: absolute;
  bottom: 0;
  right: 0;
}

結果

reslut.png

この方法でハニカム構造にするにはちょっとしんどいかも。できなくはないが・・・

もう一つ疑似要素を使った方法

index.html
<div class="hexagon"></div>
style.css
.hexagon {
  width: 70px;
  height: 40px;
  background: #000;
  position: relative;
}
.hexagon::before {
  content: '';
  width: 0;
  height: 0;
  border-top: 0 solid transparent;
  border-left: 35px solid transparent;
  border-bottom: 20px solid #000;
  border-right: 35px solid transparent;
  position: absolute;
  top: -20px;
  left: 0;
}
.hexagon::after {
  content: '';
  width: 0;
  height: 0;
  border-top: 20px solid #000;
  border-left: 35px solid transparent;
  border-bottom: 0 solid transparent;
  border-right: 35px solid transparent;
  position: absolute;
  bottom: -20px;
  left: 0;
}

結果

まとめ

どちらの方法も擬似要素を使った方法です。

1つ目の方法は、背景と同じ色の三角形で削り取って6角形に見せかけている方法。
2つ目の方法は、逆に四角形に三角形を2つ上下に重ね、6角形に見せかけている方法。

どちらもだいたい6角形に見えるだけで、数値的には正6角形ではありませんが、WEBで使用する分にはさほど問題ないと思います。

おまけ

2つ目の方法でハニカム構造を作ってみた。

index.html
<ul>
  <li>
    <div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div>
  </li>
  <li>
    <div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div>
  </li>
  <li>
    <div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div><div class="hexagon"></div>
  </li>
</ul>
style.css
ul li {
  margin-bottom: 15px;
  list-style: none;
}

ul li:nth-child(odd) {
  margin-left: -36px;
}


.hexagon {
  width: 70px;
  height: 40px;
  background: #000;
  position: relative;
  margin-right: 2px;
  display: inline-block;  /* 追記 */
}
.hexagon::before {
  content: '';
  width: 0;
  height: 0;
  border-top: 0 solid transparent;
  border-left: 35px solid transparent;
  border-bottom: 20px solid #000;
  border-right: 35px solid transparent;
  position: absolute;
  top: -20px;
  left: 0;
}
.hexagon::after {
  content: '';
  width: 0;
  height: 0;
  border-top: 20px solid #000;
  border-left: 35px solid transparent;
  border-bottom: 0 solid transparent;
  border-right: 35px solid transparent;
  position: absolute;
  bottom: -20px;
  left: 0;
}

おそまつ!