как сверстать такой блок с изгибами?
Источник: Stack Overflow на русском
#main {
margin: 40px;
background-color: #fff;
position: relative;
overflow: hidden;
}
#main .edge {
position: absolute;
}
#main .edge.top {
top: 0;
left: 0;
right: 0;
bottom: 0;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
}
#main .edge.left {
left: 0;
top: 0;
bottom: 0;
right: 0;
border-left: 1px solid #ccc;
border-right: 1px solid #ccc;
}
#main .corner {
position: absolute;
top: -10px;
right: -10px;
width: 60px;
height: 60px;
border-radius: 0 0 0 10px;
background-color: #FFF;
border: 1px solid #ccc;
}
#main .corner-2 {
display: flex;
width: 40px;
height: 40px;
align-items: center;
justify-content: center;
position: absolute;
right: 0;
top: 0;
font-size: 20px;
border-radius: 7px;
background-color: red;
color: #fff;
border: 1px solid #ccc;
}
.head {
max-width: calc(100% - 90px);
min-height: 30px;
padding: 10px 0;
margin: 0 20px;
font-size: 20px;
border-bottom: 1px solid #ccc;
}
.desc {
padding: 10px 20px;
}
<div id="main">
<div class="edge top"></div>
<div class="edge left"></div>
<div class="corner"></div>
<div class="corner-2">3</div>
<div class="head">
Lorem ipsum dolor
</div>
<div class="desc">
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Est in eum expedita repellendus ipsam saepe incidunt mollitia! Iusto totam obcaecati, nesciunt impedit, ducimus ullam minima provident, nulla magni illo adipisci.
</div>
</div>
.wrapper {
margin: 40px;
background-color: #fff;
position: relative;
overflow: hidden;
}
.wrapper .edge {
position: absolute;
}
.wrapper .edge.top {
top: 0;
left: 16px;
right: 67px;
bottom: 0;
border-top: 1px solid #ccc;
background: #fff;
z-index: 1;
}
.wrapper .edge.left {
left: 0;
top: 16px;
bottom: 16px;
right: 50px;
border-left: 1px solid #ccc;
background: #fff;
z-index: 1;
}
.wrapper .edge.right {
left: 10px;
top: 64px;
bottom: 16px;
right: 0;
border-right: 1px solid #ccc;
background: #fff;
z-index: 1;
}
.wrapper .edge.bottom {
left: 16px;
top: 64px;
bottom: 0;
right: 16px;
border-bottom: 1px solid #ccc;
background: #fff;
z-index: 1;
}
.wrapper .edge.top-2 {
left: 16px;
top: 50px;
bottom: 0;
right: 16px;
background: #fff;
z-index: 1;
}
.wrapper .corner {
position: absolute;
top: 16px;
right: 17px;
width: 33px;
height: 33px;
border-radius: 0 0 0 10px;
background-color: #FFF;
border-left: 1px solid #ccc;
border-bottom: 1px solid #ccc;
z-index: 2;
}
.wrapper .corner-2 {
display: flex;
width: 40px;
height: 40px;
align-items: center;
justify-content: center;
position: absolute;
right: 0;
top: 0;
font-size: 20px;
border-radius: 7px;
background-color: red;
color: #fff;
border: 1px solid #ccc;
z-index: 3;
}
.head {
max-width: calc(100% - 90px);
min-height: 30px;
padding: 10px 0;
margin: 0 20px;
font-size: 20px;
border-bottom: 1px solid #ccc;
position: relative;
z-index: 3;
}
.desc {
padding: 10px 20px;
position: relative;
z-index: 3;
}
.wrapper::before {
left: 0;
}
.wrapper::before, .wrapper::after {
top: 0;
}
.wrapper::after {
right: 50px;
}
.content::before {
left: 0;
}
.content::after {
right: 0;
}
.content::before, .content::after {
bottom: 0;
}
.corner-3 {
right: 0;
top: 49px;
}
.wrapper::before, .wrapper::after, .content::before, .content::after, .corner-3 {
background-color: #fff;
border: 1px solid #ccc;
border-radius: 50%;
content: '';
position: absolute;
width: 30px;
height: 30px;
}
<div class="wrapper">
<div class="content">
<div class="edge top"></div>
<div class="edge top-2"></div>
<div class="edge left"></div>
<div class="edge right"></div>
<div class="edge bottom"></div>
<div class="corner"></div>
<div class="corner-2">3</div>
<div class="corner-3"></div>
<div class="head">
Lorem ipsum dolor
</div>
<div class="desc">
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Est in eum expedita repellendus ipsam saepe incidunt mollitia! Iusto totam obcaecati, nesciunt impedit, ducimus ullam minima provident, nulla magni illo adipisci.
</div>
</div>
</div>
<body>
<style>
.box {
width: 300px;
height: 150px;
resize: both;
overflow: auto;
border: 1px dashed #aaa;
}
svg {
width: 95%;
height: 95%;
}
</style>
<div class = "box">
<svg viewBox="0 0 694 284" fill="none">
<path d="M672.182 283H20C9.5066 283 1 274.493 1 264V20C1 9.50659 9.50659 1 20 1H552C562.493 1 571 9.50659 571 20V100C571 111.598 580.402 121 592 121H673.316C683.878 121 692.412 129.613 692.315 140.174L691.181 264.174C691.086 274.599 682.608 283 672.182 283Z" stroke="#C0D9E7" stroke-width="2"/>
<rect x="591" width="103" height="100" rx="20" fill="#CC2D46"/>
</svg>
</div>
</body>