How to make a curved edge hexagon by using CSS

前端 未结 5 1903
囚心锁ツ
囚心锁ツ 2020-11-27 22:46

This is my CSS.

CSS

#hexagon-circle { 
    width: 100px; 
    height: 55px; 
    background: red; 
    position: relative;
    borde         


        
5条回答
  •  粉色の甜心
    2020-11-27 23:20

    I understand this is a fairly old question, but I thought I'd add an answer to show more about how it works.

    So, first off, we need to create a single element on the page. I have gone for a size of height:300px; width:180px; and a border radius of 10px. Just because I like the roundness of the number (forgive the pun). Giving this element a position:relative; means that we can herein position everything absolutely in relative terms to this div.

    We then need to create two pseudo elements, with the same height and width as the parent.

    Because the pseudo elements are exactly that, pseudo elements, we need to add a content: to them. And since because we can put stuff within the parent, we don't really need these, so set them to "";

    this leads us onto how to create the hexagon, rather than the rectangle we currently have. To do that, we're going to have to include a rotation in order to generate the other sides of the hexagon. With there being 6 sides, and the angles needing to add to 360, we can rotate one of the pseudo element by 60 degrees. The other we'll rotate by -60 degrees (or 300degrees, if you'd prefer).

    This leaves us with our 'hexagon' in which we can add some nice styling and hover animations as need be:

    .roundHex {
      position: relative;
      margin: 0 auto;
      background: rgba(0, 0, 0, 0.2);
      border-radius: 10px;
      height: 300px;
      width: 180px;
      transition: all 1s;
      line-height:300px;
      text-align:center;
      color:white;
      font-size:20px;
    }
    .roundHex:before,
    .roundHex:after {
      content: "";
      position: absolute;
      top: 0;
      left: 0;
      background: inherit;
      border-radius: inherit;
      height: 100%;
      width: 100%;
      z-index:-1;
    }
    .roundHex:before {
      -webkit-transform: rotate(60deg);
      -moz-transform: rotate(60deg);
      transform: rotate(60deg);
      transition: all 1s 0.5s;
    }
    .roundHex:after {
      -webkit-transform: rotate(-60deg);
      -moz-transform: rotate(-60deg);
      transform: rotate(-60deg);
      transition: all 1s 1s;
    }
    .roundHex:hover {
      background: tomato;
    }
    HOVER ME

    Jsfiddle demo also available

提交回复
热议问题