htmlcssbordercss-shapesconcave

How do I create concave shaped borders around <div> elements?


I am trying to make concave shaped top and bottom borders around a <div> like this:

Example of what I would like to do

My current CSS:

.div:after {    
    content:'';
    position:absolute;
    left:-600%;
    width:1300%;
    padding-bottom:1300%;
    top:80%;
    background:none;
    border-radius:50%;
    box-shadow: 0px 0px 0px 20px #f2f2f2;
    z-index:-1;
}

But it only works only on the bottom border and sometimes disappears on mobile devices.

Here is JS Fiddle.


Solution

  • You can use :before and :after pseudo elements to draw this shape.

    .div {
      position: relative;
      overflow: hidden;
      padding: 50px 0;
    }
    
    .div-inner {
      position: relative;
      background: black;
      height: 120px;
    }
    
    .div-inner:before,
    .div-inner:after {
      box-shadow: 0 0 0 80px #000;
      border-radius: 100%;
      position: absolute;
      height: 150px;  /* You can change height to increase or decrease concave radius */ 
      content: '';
      right: -20%;
      left: -20%;
      top: 100%;
    }
    
    .div-inner:after {
      bottom: 100%;
      top: auto;
    }
    <div class="div">
      <div class="div-inner"></div>
    </div>