.fill-gray {
background-color: gray;
}
.semi-circle {
border-radius: 50%;
width: 150px;
height: 80px;
background-color: green;
position: absolute;
}
.semi-circle-1 {
top: -25px;
left: 0px;
background-color: gray;
}
.semi-circle-2 {
top: -60px;
left: 135px;
background-color: white;
}
.rectangle {
width: 275px;
height: 400px;
position:relative;
top: 100px;
border-top-left-radius: 15px;
}
<div class="fill-gray rectangle">
<div class="fill-gray semi-circle semi-circle-1"></div>
<div class="fill-gray semi-circle semi-circle-2"></div>
</div>
Here's a repl.it I made for a solution using positioning in CSS:
Make a wave with CSS
Or if you so desire, you could use clip-path like in these solutions: Wavy shape with css