Search code examples
htmlcsssvgbordercss-shapes

border curved css - circle with curved end


I am building a website, and I'm having a hard time doing a detail in CSS

I need to make a round border that has a curved end, for you to understand better, I will show photo and post my code

What I need (Photoshop)

enter image description here

enter image description here

I would like a CSS solution, but I could not.

Here is what I have actually:

.bottom-bar {
  background: #29a7e8;
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 50px;
  text-align: center;
}

.circle {
  display: inline-block;
  position: relative;
  top: -10px;
  border-radius: 100%;
  background: #29a7e8;
  width: 60px;
  height: 60px;
  margin: 0 1rem;
}
<div class="bottom-bar">
      <div class="circle"></div>
      <div class="circle"></div>
      <div class="circle"></div>
    </div>


Solution

  • You can do this using SVG as background:

    .bottom-bar {
      background: #29a7e8;
      position: absolute;
      bottom: 0;
      width: 100%;
      height: 50px;
      text-align: center;
    }
    
    .circle {
      display: inline-block;
      position: relative;
      top: -28px;
      border-radius: 100%;
      background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='10 10 45 15'  width='64' height='64' fill='%2329a7e8'><path d='M12 24 L52 24 L52 16 C40 16 42 10 32 10 C20 10 22 16 12 16 Z' /></svg>") 0 0/100% 100% no-repeat;
      width: 60px;
      height: 60px;
      margin: 0 1rem;
    }
    <div class="bottom-bar">
      <div class="circle"></div>
      <div class="circle"></div>
      <div class="circle"></div>
    </div>
    
    
    <svg xmlns='http://www.w3.org/2000/svg'
      viewBox='10 10 45 15'
      width='64' height='64'
      fill='#29a7e8'>
      <path d='M12 24 L52 24 L52 16 C40 16 42 10 32 10 C20 10 22 16 12 16 Z' />
    </svg>

    For a CSS only solution you can consider a combination of radial-gradient to create the curve:

    .bottom-bar {
      background: #29a7e8;
      position: absolute;
      bottom: 0;
      width: 100%;
      height: 50px;
      text-align: center;
    }
    
    .circle {
      display: inline-block;
      position: relative;
      top: -30px;
      background:
      radial-gradient(circle at top right,transparent 50%,#29a7e8 51%)100% 21px/12px 10px no-repeat,
      radial-gradient(circle at top left,transparent 50%,#29a7e8 51%)0 21px/12px 10px no-repeat,
      radial-gradient(circle at center,#29a7e8 55%, transparent 56%);
      width: 60px;
      height: 60px;
      margin: 0 1rem;
    }
    <div class="bottom-bar">
      <div class="circle"></div>
      <div class="circle"></div>
      <div class="circle"></div>
    </div>