如何在其中创建带空格的边框

时间:2015-11-24 10:45:03

标签: css css3

我试图弄清楚如何使用CSS来创建以下效果。

我试图通过在父div中创建4个div并将它们放在所有四个边上来做到这一点。

这有效,但是当我需要这4个div对背景透明而不是单一颜色时会中断。

例如,我想尝试让这个工作再次成为图片背景,而不仅仅是一个坚实的背景。

如果背景是实心的,我可以使4个div与背景颜色相同,问题是如果背景是图片,我就不能让4个div与背景匹配。

另外,我理解我对这个问题的基本方法可能是错误的。我听到有人提到使用伪:之前和之后有效地完成了这个效果,但我不知道该怎么做。

enter image description here

4 个答案:

答案 0 :(得分:4)

在这里,我尽可能地使用最少的代码:

.daysleft {
    position: relative;
    padding: 20px; 
    width: 100px;
    text-align: center;
}

.daysleft span {
    display: block;
    z-index: 2;
    position: relative;
}

.white {
    background-color: #fff;
    height: 20px;
    width: 101%;
    position: absolute;
    top: 50%;
    left: 0;
    z-index: 1;
    transform: translateY(-50%);
}

.daysleft:before {
    height: 100%;
    content: "";
    position: absolute;
    border-left: 1px solid #ccc;
    border-top: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
    width: 20px;
    left: 0px;
    top: 0;
}

.daysleft:after {
    height: 100%;
    content: "";
    position: absolute;
    border-right: 1px solid #ccc;
    border-top: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
    width: 20px;
    right: 0px;
    top: 0;
}
<div class="daysleft"><div class="white"></div><span>37 Days left</span></div>

编辑:

找到了中断边界的方法! Awnser更新了。

答案 1 :(得分:2)

我猜这是你想要的那种。

.container {
    margin: 0 auto;
    position:relative;
    display: inline-block;
    padding: 15px;
    background: #ccc;
}
#content {
    margin: 0 auto;
    position:relative;
    display: inline-block;
    padding: 10px;
    background: #ccc;
    font-size: 38px;
    color: #333;
}
#content:before, #content:after, #content>:first-child:before, #content>:first-child:after {
    position:absolute;
    width:15px;
    height: 15px;
    border-color:#777;
    /* or whatever colour */
    border-style:solid;
    /* or whatever style */
    content:' ';
}
#content:before {
    top:0;
    left:0;
    border-width: 2px 0 0 2px
}
#content:after {
    top:0;
    right:0;
    border-width: 2px 2px 0 0
}
#content>:first-child:before {
    bottom:0;
    right:0;
    border-width: 0 2px 2px 0
}
#content>:first-child:after {
    bottom:0;
    left:0;
    border-width: 0 0 2px 2px
}
  

<div class="container">
    <div id="content">
        <p><i>37</i> days left</p>
    </div>
</div>

示例:

http://jsfiddle.net/link2twenty/5gjh6jkx/

答案 2 :(得分:1)

demo 试试这个......这里使用背景作为图像

<div class="parent">
   <div class="child">
    37 days Left  
   </div>
</div>

CSS:

.parent{
    background-color : #ccc;
    padding : 20px;
    width : 100%;
    margin : 0 auto;
}


.child
{
 width: 100%;
 padding: 10px;
text-align : center;
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box;    /* Firefox, other Gecko */
box-sizing: border-box;         /* Opera/IE 8+ */
border: 15px solid #ccc;
border-image: url('https://i.stack.imgur.com/1WlsT.png') 34% repeat;


}

答案 3 :(得分:0)

尝试类似FIDDLE

的内容

DEMO CODE

<强> HTML

<div class="box1">
    <div class="box2"></div>
    <div class="box3"></div>
</div>

<强> CSS

.box1{
    position:relative;
    background:#FFF;
    width:200px;
    height:200px;
    border:solid 2px #090;
    -webkit-border-radius: 3px;
    border-radius: 3px;
    margin:0 auto;
}
.box2{
    position:absolute;
    width:210px;
    height:180px;
    background-color:#FFF;
    top:10px;
    left:-5px;
}
.box3{
    position:absolute;
    width:180px;
    height:210px;
    background-color:#FFF;
    top:-5px;
    left:10px;
}