skip to Main Content

I need to make a shape like the picture below using CSS. There will be a number in the corner and content inside. Please tell me how to do it?

enter image description here

I was only able to do this:

.container {
  position: relative;
  width: 200px;
  height: 200px;
  background-color: #f2f2f2;
  border-top-right-radius: 80px;
  border-bottom-left-radius: 80px;
}

.background {
  position: relative;
  top: -20px;
  left: -20px;
  width: 0;
  height: 0;
  border-top: 100px solid red;
  border-right: 100px solid transparent;
}

.number {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100%;
  color: #ffffff;
  font-size: 24px;
}
<div class="container">
  <div class="background">
    <span class="number">1</span>
  </div>
</div>

2

Answers


  1. Try this out. Basically it’s just a square with one rounded corner. Then the two angled pieces are the ::before and ::after elements rotated and manually placed. It’s not perfect but it’s close.

    body{padding:2rem; background-color: #333;}
    
    .container {
      position: relative;
      width: 200px;
      height: 200px;
      background-color: #FCFCFC;
      border-top-right-radius: 80px;
      border-bottom-left-radius: 80px;
    }
    
    .shape {
        position: relative;
        left: -20px;
        top: -20px;
        background: #b43b41;
        width: 100px;
        height: 100px;
        border-bottom-right-radius: 100%;
    }
    
    .shape::before,
    .shape::after {
      display: block;
      content: ' ';
      background: #b43b41;
      width: 30px;
      height: 30px;
      transform: rotate(45deg);
      position: absolute;
      z-index: -1;
    }
    
    .shape::before {
      top: 6.5px;
        right: -14px;
    }
    
    .shape::after {
      bottom: -14px;
      left: 6.5px;
    }
    
    .number {
      position: absolute;
      top: -10px;
      left: -10px;
      color: #fff;
      font-size: 24px;
      width: 35px;
      text-align: center;
    }
    <div class="container">
      <div class="shape"></div>
      <div class="number">1</div>
    </div>
    Login or Signup to reply.
  2. Here is a fairly close version. There is definitely some "magic numbers" going on in here, but visually it’s pretty close.

    body {
      font-family: sans-serif;
      background: #25272b;
      padding: 40px;
    }
    
    .shape {
      position: relative;
      width: 380px;
      height: 300px;
      border-radius: 0 140px;
      background: #fff;
    }
    
    .shape__accent {
      position: absolute;
      top: -15px;
      left: -15px;
      width: 140px;
      height: 140px;
      border-radius: 0 0 130px 0;
      background: #b43b41;
    }
    .shape__accent:before, .shape__accent:after {
      position: absolute;
      width: 0;
      height: 0;
      border-top: 11px solid transparent;
      border-bottom: 11px solid transparent;
      transform: rotate(-45deg);
      content: "";
    }
    .shape__accent:before {
      top: 0;
      right: -9px;
      border-right: 11px solid #b43b41;
    }
    .shape__accent:after {
      bottom: -15px;
      left: 6px;
      border-left: 11px solid #b43b41;
    }
    
    .shape__content {
      position: relative;
      font-size: 30px;
      color: #fff;
    }
    <div class="shape">
      <div class="shape__accent"></div>
      <span class="shape__content">13</span>
    </div>

    Codepen version:
    https://codepen.io/seanstopnik/pen/ZEmBJrL/e14888d3196306b79a82cfecbcb44eb4

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search