Как сделать собственную CSS-рамку с помощью border-image?

Я пытаюсь, но с треском проваливаюсь при попытке создать пользовательскую границу CSS, как это, используя сокращенное свойство border-image. Есть ли способ сделать частичные границы? Может быть, есть лучший способ добиться того, что я пытаюсь сделать? Я всегда мог бы просто вставить это изображение, но не похоже, чтобы это изменило размер, как только вы это сделаете.

3 ответа

Решение

Мы также можем достичь этого путем прямого позиционирования content внутри container как ниже.

Здесь мы разместили content используя маржу, мы также можем сделать это путем абсолютно позиционирования контента.

.container {
  border: 5px solid #000;
  border-bottom: 0;
  height: 10px;
  margin-top: 15px;
}
.content {
  background: #fff;
  text-align: center;
  border-left: 5px solid #000;
  border-right: 5px solid #000;
  height: 25px;
  line-height: 25px;
  width: 150px;
  margin: -15px auto 0; /* height 25px + 5px border = 30/2 = 15 */
}
<div class="container">
  <div class="content">Header</div>
</div>

Вот гибкое решение с меньшим количеством кода и прозрачностью:

.container {
  text-align: center;
  overflow: hidden;
  border:5px solid;
  border-image:linear-gradient(to bottom,transparent 10px,#000 10px,#000 100%) 4;
  height:50px;
  margin:5px;
}

.top {
  display: inline-block;
  position: relative;
  padding: 0 10px;
}

.top::before,
.top::after {
  content: "";
  position: absolute;
  top: calc(50% - 8px);
  width: 100vw;
  height: 15px;
  padding: 5px 0;
  box-sizing: border-box;
  background: #000 content-box;
}

.top::before {
  right: 100%;
  border-right: 5px solid;
}

.top::after {
  left: 100%;
  border-left: 5px solid;
}

body {
 background:pink;
}
<div class="container">
  <div class="top">Hello</div>
</div>

<div class="container">
  <div class="top">More Hello</div>
</div>

<div class="container">
  <div class="top">H</div>
</div>

Ты можешь использовать display:flex обернуть и "поиграть" с border разделить внутри wrap

.wrap{
display:flex;
width:100%;
}
.wrap div{
width:calc(100vw / 3);
}
.header{
    text-align: center;
    border-right: 5px solid black;
    border-left: 5px solid black;
}
.border{
margin-top: 5px;
height:8px;
border-top: 5px solid black;
}
.b-left{
border-left: 5px solid black;
}
.b-right{
border-right: 5px solid black;
}
<div class="wrap">
      <div class="border b-left"></div>
      <div class="header">Header</div>
      <div class="border b-right"></div>
</div>

Другие вопросы по тегам