2017-07-07 74 views
10

我试图在CSS中重新创建这个图像。 enter image description here双框/边框?这是可能的CSS?

这是我从实验中得到的,到目前为止。我用箱子阴影作为第二个箱子。我不确定是否有更好的方法来做到这一点?

h4 { 
 
    font-family: sans-serif; 
 
    text-transform: uppercase; 
 
    text-align: center; 
 
    border: solid 3px black; 
 
    border-radius: 5px; 
 
    text-decoration: none; 
 
    font-weight: 600; 
 
    color: black; 
 
    letter-spacing: 2px; 
 
    padding: 20px 15px; 
 
    background: white; 
 
    box-shadow: 10px 5px 0px 0px #ffffff, 11px 7px 0px 2px #000000; 
 
}
<h4>3. Scouting for a location</h4>

enter image description here

回答

10

您可以通过绝对定位伪元素实现这一目标。同时避免通过CSS继承的属性重复。

.border { 
 
    text-align: center; 
 
    border: solid 3px black; 
 
    border-radius: 5px; 
 
    text-decoration: none; 
 
    font-weight: 600; 
 
    color: black; 
 
    letter-spacing: 2px; 
 
    padding: 20px 15px; 
 
    margin: 15px 15px; 
 
    background: white; 
 
    
 
    position: relative; /* new */ 
 
} 
 

 
/* new */ 
 
.border:after { 
 
    content: ""; 
 
    position: absolute; 
 
    display: block; 
 
    background: inherit; 
 
    border-radius: inherit; 
 
    border: inherit; 
 
    left: 2px; 
 
    top: 2px; 
 
    width: 100%; 
 
    height: 100%; 
 
    z-index: -1; 
 
}
<div class="border">3. Scouting for a location</div>

+2

不错的使用'inherit'来保持事物的一致性。 – showdev

+0

@showdev谢谢,所以请将其复制到你的答案:) –

+0

如果我复制你的,我不妨删除我多余的答案。但是也许有两个不同的例子是有用的,例如,如果有人想要以不同的方式对两个边框进行设计。 *耸肩* – showdev

0

使用绝对定位::后或::伪元件之前和具有其的z-index比元件本身低。

+0

将尝试了这一点。谢谢! – Solus

4

试试这个例子

希望它能帮助你。

.border { 
 
text-align: center; 
 
border: solid 3px black; 
 
border-radius: 5px; 
 
text-decoration: none; 
 
font-weight: 600; 
 
color: black; 
 
letter-spacing: 2px; 
 
padding: 20px 15px; 
 
margin: 15px 15px; 
 
background: white; 
 
-webkit-box-shadow: 3px 3px 0px 0px #ffffff, 3px 3px 0px 3px #000000; 
 
-moz-box-shadow: 3px 3px 0px 0px #ffffff, 3px 3px 0px 3px #000000; 
 
box-shadow: 3px 3px 0px 0px #ffffff, 3px 3px 0px 3px #000000; 
 
}
<div class="border">Title</div>

编辑

这里,现在你可以看到我做box-shadow3px,不再右侧角落。

+3

没有必要为供应商添加前缀“box-shadow”。它们适用于非常旧的浏览器版本。 –

+1

我喜欢这个解决方案,除了阴影的“扩展半径”部分似乎放大了相对于原始边界的角部曲率。这对我来说并不是完全可取的,但其他人可能无关紧要。 – showdev

+0

请尝试boxshadow像素增加或减少,因为你需要..像8px至7px或9px .. –

5

box-shadow概念背后的概念是两个阴影,一个白色和一个黑色重叠,以模拟第二个黑色边框。但黑影只能从偏离白影的方向看到,所以原始边界与黑影之间存在明显的差距(如OP原文中所示)。

黑色阴影的“spread radius”可以用来消除此间隙(巧妙地demonstrated by Nirav Joshi),但角落的曲率被放大并且两个边框看起来不同。

要复制原始边框,我会使用::after生成绝对定位的pseudo-element并使用z-index将其放置在原始元素的后面。为了进一步确保边框完全重复,我喜欢从原始元素继承边框颜色和半径的Vadim Ovchinnikov's idea

.border { 
 
    position: relative; 
 
    text-align: center; 
 
    border: solid 3px black; 
 
    border-radius: 5px; 
 
    text-decoration: none; 
 
    font-weight: 600; 
 
    color: black; 
 
    letter-spacing: 2px; 
 
    padding: 20px 15px; 
 
    margin: 15px 15px; 
 
    background: white; 
 
} 
 

 
.border::after { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 100%; 
 
    height: 100%; 
 
    top: 3px; 
 
    left: 3px; 
 
    border: solid 3px black; 
 
    border-radius: 5px; 
 
    z-index: -1; 
 
}
<h4 class="border">3. SCOUTING FOR A LOCATION</h4>

+0

糟糕,没有看到@ebraley已经提出这个建议。 – showdev

+1

没关系,你的答案要完整得多,因为它实际上使用OP的代码实现了建议。 – TylerH