Svg
As Harry suggested in the comments, SVG would be your best option since a double curve in CSS is not possible without using multiple elements, pseudo-elements, or using possibly unsupported CSS3 properties.
SVG stands for scalable vector graphics. The web browser views it as an image, but you can add text and regular HTML elements to SVG.
It is well supported in all browsers as visible here: CanIUse
<svg width="466" height="603" viewbox="0 0 100 100" preserveAspectRatio="none"> <path d="M0,0 L100,0 C25,50 50,75 0,100z" fill="#8aa7ca" /> </svg>
CSS
Of course, this is still possible with CSS, but it uses the :before and :after pseudo-elements. It is also not suitable for curves, as they will render them without smoothing.
div { background: blue; width: 50px; height: 75px; position: relative; } div:before { content: ''; background-image: radial-gradient(circle at 100% 100%, rgba(204, 0, 0, 0) 100px, blue 100px); position: absolute; top: 0; left: 100%; width: 100px; height: 75px; } div:after { content: ''; position: absolute; width: 50px; height: 75px; background: blue; border-radius: 0 0 100% 0 / 0 0 100% 0; top: 100%; left: 0; }
<div></div>
source share