来自div CSS的所有角落的部分边框

时间:2016-09-27 12:28:05

标签: html css html5 css3 css-shapes

是否可以从每个角落开始在div的所有边缘上设置部分边框? 我想避免 background-image 属性&使用CSS Only解决方案来实现这一目标。

使用伪:after 属性可以实现部分边框,但我无法弄清楚如何在所有边缘上使用它?

div应该看起来像焦点小部件,如附图所示。

Desired result

感谢。

2 个答案:

答案 0 :(得分:0)

当然,试试这个:

HTML:

<div></div>

CSS:

div {
    background: white;
    padding: 1.7em;
    position: relative;
    width: 300px;
    height: 300px;
    margin: 3em auto;
    border: solid 2px #d00;
}
div::before, div::after {
    position: absolute;
    background: inherit;
    content: '';
    z-index: 1;
}
div::before {
    width: 100px;
    left: calc(50% - 50px);
    height: calc(100% + 4px);
    top: -2px;
}
div::after {
    height: 100px;
    left: -2px;
    width: calc(100% + 4px);
    top: calc(50% - 50px);
}
div > * {
    position: relative; z-index: 2; /* ensure any child elements sit above pseudos */
}

Fiddle

答案 1 :(得分:-1)

您可以使用两个额外的边框元素来执行此操作,这样您就不必屏蔽背景,并且可以拥有透明背景。

.element {
  width: 200px;
  height: 200px;
  margin: 50px;
  position: relative;
  padding: 10px;
}
.top-border,
.bottom-border {
  position: absolute;
  display: flex;
  justify-content: space-between;
  width: 100%;
  height: 30%;
  left: 0;
}
.top-border {
  top: 0;
}
.bottom-border {
  bottom: 0;
}
.top-border:after,
.top-border:before,
.bottom-border:after,
.bottom-border:before {
  content: '';
  width: 30%;
  height: 100%;
}
.top-border:after,
.top-border:before {
  border-top: 1px solid green;
}
.bottom-border:after,
.bottom-border:before {
  border-bottom: 1px solid green;
}
.top-border:before,
.bottom-border:before {
  border-left: 1px solid green;
}
.top-border:after,
.bottom-border:after {
  border-right: 1px solid green;
}
<div class="element">
  <div class="top-border"></div>
  <div class="bottom-border"></div>
  <div class="content">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis, libero!</div>
</div>