我希望页面上的某些容器具有1px的笔触,带有八个小方块,就像下面的Photoshop选择工具一样(但中间没有十字)。我想复制装饰有正方形的边框,而不是中间的空白蓝色框,因为我的容器可以包含任何类型的内容并且可以是任何大小。
一种解决方案是在容器中创建八个绝对定位的元素,然后分别放置每个元素。另一种解决方案是使用多个背景,但是由于我的容器占据了页面的整个宽度,因此需要创建一个稍宽一些的包装来容纳多个背景。不好,因为不简单。
有没有我尚未想到的更好,或更简单的解决方案?
最佳答案
如果您不想使用大量梯度的复杂元素或复杂方法,这里是使用特殊字符的另一种想法:
.box {
width: 200px;
height: 200px;
margin: 20px;
background: linear-gradient(lightblue, lightblue) 5px 0/calc(100% - 10px) 100% no-repeat;
position: relative;
line-height: 180px;
letter-spacing: 180px;
}
.box:before {
content: "\25A1\25A1\25A1";
letter-spacing: 85px;
display: block;
line-height: 0px;
}
.box:after {
content: "\25A1\25A1\25A1";
position: absolute;
bottom: 2px;
letter-spacing: 85px;
display: block;
line-height: 0px;
}
<div class="box">
□□
</div>
这是使用多个背景,SVG和CSS变量使代码更简洁的另一种通用解决方案:
.overlay {
position: relative;
pointer-events: none;
--square: url('data:image/svg+xml;charset=UTF-8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 20 20"><rect width="20" height="20" fill="transparent" stroke="%23000" stroke-width="3"/></svg>');
}
.overlay:before {
content: "";
position: absolute;
top: -5px;
bottom: -5px;
left: -5px;
right: -5px;
background-image:
var(--square), var(--square), var(--square),
var(--square), var(--square),
var(--square), var(--square), var(--square);
background-size: 10px 10px;
background-position:
top left, top center , top right,
center left, center right,
bottom left, bottom center, bottom right;
background-repeat: no-repeat;
}
.box {
height: 200px;
width: 200px;
background: lightblue;
display: inline-block;
vertical-align: top;
margin: 10px;
}
p {
border: 1px solid;
padding: 50px;
}
<div class="box overlay"></div>
<div class="box overlay" style="width:100px;"></div>
<div class="box overlay" style="height:100px;"></div>
<p class="overlay"> some text</p>