Основная идея - создать блок, в котором расположены несколько заголовков пронизанных вертикальной линией так, что виден задний фон.
Такое проще показать, чем объяснить:
Сразу приведу код:
HTML
<div class="block">
<div class="block__content">
<div class="block__title">
Какой-то крупный заголовок
</div>
<div class="block__subtitle">
Маленький заголовок
</div>
</div>
</div>
CSS
body {
background-color: #D0D0D0;
}
.block {
background-color: #EE6E39;
width: 400px;
height: 320px;
margin: 100px auto 0;
padding: 50px;
}
.block__content {
width: 300px;
padding: 0 40px;
border: 10px solid #ff43aa;
border-image: linear-gradient(to right, transparent calc(50% - 5px), #ff43aa calc(50% - 5px));
border-image-slice: 1;
}
.block__title {
font-size: 32px;
text-align: center;
}
.block__title::before,
.block__title::after {
content: "";
display: block;
background-color: #ff43aa;
width: 10px;
height: 100px;
margin: auto; /*!*/
}
.block__title::after {
height: 50px;
}
.block__subtitle {
display: block;
text-align: center;
font-size: 22px;
line-height: 50px;
color: white;
padding: 0;
margin: 0;
}
.block__subtitle::after {
content: "";
display: block;
background-color: #ff43aa;
width: 10px;
height: 30px;
margin: auto; /*!*/
}
Основные свойства, на которые нужно обратить внимание, это:
border-image: linear-gradient(to right, transparent calc(50% - 5px), #ff43aa calc(50% - 5px));
border-image-slice: 1;
- для контейнера (.block__content ).
А для псевдоэлементов ::after и ::before заголовков, это
- это нужно для выравнивания вертикальных полос по середине.
Для наглядности заменим у контейнер linear-gradient с transparent на red:
Получается, что "магия" в linear-gradient, который создает рамку, половина которой прозрачная.
Известная проблема
При ресайзе окна css calc не пересчитывается и происходит небольшое выпирание вертикальных линий.