Подтвердить что ты не робот

Как создать границу, которая полностью покрывает смежные углы в CSS?

У меня есть div с 1px-границей, и я пытаюсь создать границу 3px в другом цвете для этого div. Я использую этот код:

box {
  border: 1px solid #ddd;
  border-top: 3px solid #3F9BD0;
}

но на углах граница не очень хорошая, см. изображение:
плохая граница

Как я могу сделать эту границу хорошо выглядеть, например:
желаемая граница с прямоугольными углами

скрипт: https://jsfiddle.net/15tory3z/

4b9b3361

Ответ 1

Вместо border-top попробуйте использовать псевдо-элемент :after, чтобы воссоздать необходимый эффект.

.box {
  width: 200px;
  height: 100px;
  border: 1px solid #ddd;
  position: relative;
}
.box:after {
  position: absolute;
  content: "";
  width: 100%;
  height: 5px;
  top: -5px;
  background: dodgerblue;
  padding: 1px;
  left: -1px;
}
<div class="box"></div>

Ответ 2

Вы можете нарисовать их с помощью вложенных теней и дополнений:

div {
  padding:12px 5px 5px;
  width: 40%;
  height: 200px;
  box-shadow: inset 0 10px #3F9BD0, inset 4px 0 gray, inset -4px 0 gray, inset 0 -4px  gray
}
<div></div>

Ответ 3

Это также помещает строку сверху:

.box1 {
  border: 10px solid #ddd;
  border-top: 0;
  box-shadow: 0 -30px 0 #3F9BD0;
  float: left;
  width: 300px;
  height: 300px;
}
<div class="box1"></div>

Ответ 4

Используйте css :after псевдокласс, docs

.box_big {
  border: 10px solid #ddd;
  position:relative;
  z-index: 1;
}
.box_big:after{
    height: 10px;
    position: absolute;
    top:-10px; left:-10px; right:-10px;
    content: " ";
    z-index: 2;
    background: red;
}
.box {
  border: 1px solid #ddd;
  position:relative;
  z-index: 1;
}
.box:after{
    height: 3px;
    position: absolute;
    top:-3px; left:-1px; right:-1px;
    content: " ";
    z-index: 2;
    background: red;
}
<div class="box_big">
    big box
</div>
<hr />
<div class="box">
    your box
</div>

Ответ 5

Добро пожаловать в рамки css. Единственный способ сделать это - использовать псевдоэлементы :after или :before.

Fiddle

.box {
    border: 1px solid #ddd;
    position: relative;
}
.box:after {
    position: absolute;
    display: block;
    content:'';
    /* Positioning */
    top: 0;
    width: 100%;
    height: 3px;
    left: 0;
    right: 0;
    /* Color */
    background-color: #3F9BD0;
}

Ответ 6

Попробуйте следующее:

.box {
  outline: 2px solid #ddd;
  margin-top: -2px;
  border-top: 10px solid #3F9BD0;
  min-width:100px;
  min-height:100px;
  float:left;
}
<div class="box"></div>