Использовать градиент
.box {
padding:20px;
display:inline-block;
border-right:2px solid;
border-left:2px solid;
background:
linear-gradient(to left ,#000 10px,transparent 10px 30px,#000 0) top,
linear-gradient(to right,#000 10px,transparent 10px 30px,#000 0) bottom;
background-size:100% 2px;
background-repeat:no-repeat;
}
<div class="box">
Some text inside
</div>
С переменной CSS для удобства настройки:
.box {
--b:2px; /* Thickness of border */
--g:10px; /* The gap */
--s:10px; /* The offset of the gap */
--grad:#000 var(--s),transparent var(--s) calc(var(--s) + var(--g)),#000 0;
padding:20px;
display:inline-block;
border-right:var(--b) solid;
border-left:var(--b) solid;
background:
linear-gradient(to left ,var(--grad)) top,
linear-gradient(to right,var(--grad)) bottom;
background-size:100% var(--b);
background-repeat:no-repeat;
}
<div class="box">
Some text inside
</div>
<div class="box" style="--s:20px;--g:50%;--b:5px;">
Some text
</div>
<div class="box" style="--s:80%;--g:10%;--b:1px">
Some text<br> inside
</div>
Еще одна идея с использованием пути-клипа:
.box {
--b:2px; /* Thickness of border */
--g:10px; /* The gap */
--s:10px; /* The offset of the gap */
padding:20px;
display:inline-block;
border:var(--b) solid;
clip-path:polygon(0 0,
calc(100% - var(--s) - var(--g)) 0,
calc(100% - var(--s) - var(--g)) var(--b),
calc(100% - var(--s)) var(--b),
calc(100% - var(--s)) 0,
100% 0,100% 100%,
calc(var(--s) + var(--g)) 100%,
calc(var(--s) + var(--g)) calc(100% - var(--b)),
var(--s) calc(100% - var(--b)),
var(--s) 100%,
0 100%);
}
<div class="box">
Some text inside
</div>
<div class="box" style="--s:20px;--g:50%;--b:5px;">
Some text
</div>
<div class="box" style="--s:80%;--g:10%;--b:1px">
Some text<br> inside
</div>