Search code examples
htmlcsscss-transformscss-shapes

Trying to create this css ribbon. Struggling with the curve of the ribbon


This is a ribbon image

I've tried to create this css shape (ribbon) using border radius but I'm unable to do so, the curve I'm able to get isn't exactly matching the div's curve in the image.

background: #008712;
  width: 89px;
  height: 22px;
  box-shadow: #d0dae0;
  background-color: #008712;
  border-bottom-left-radius: 70px;
}

If I get this curve right that solves the problem, I would like avoid svgs if possible.


Solution

  • Use pseudo element with some skew transformation:

    .box {
      width:200px;
      padding:8px;
      font-size:25px;
      color:#fff;
      position:relative;
      overflow:hidden;
      text-align:right;
      z-index:0;
    }
    .box:before {
      content:"";
      position:absolute;
      z-index:-1;
      top:0;
      left:0;
      bottom:0;
      right:0;
      background:green;
      border-bottom-left-radius:20px;
      transform:skewX(28deg);
      transform-origin:top;
    }
    <div class="box">
      some text
    </div>