Answers:
CSS渲染是特定于浏览器的,我不知道对其进行任何微调,您应该按照Ham的建议使用图像。参考:http : //www.w3.org/TR/CSS2/box.html#border-style-properties
原始的虚线边框属性值本身无法控制虚线...因此,请启用该border-image
属性!
border-image
兼容性:它提供了出色的浏览器支持(IE 11和所有现代浏览器)。可以将常规边框设置为旧版浏览器的后备。
这些边框将显示完全相同的跨浏览器!
此示例为15像素宽乘以15像素高,并且间隙当前为5px宽。这是具有透明度的.png文件。
这是放大后在photoshop中的外观:
这看起来像是要缩放:
要创建较宽/较短的间隙或笔触,请加宽/缩短图像中的间隙或笔触。
这是一个具有10px较大间隙的图像:
正确缩放=
border-image-source:url("http://i.stack.imgur.com/wLdVc.png");
可选 -定义border-image-width:
border-image-width: 1;
默认值为1。也可以使用像素值,百分比值或其他倍数(1x,2x,3x等)进行设置。这将覆盖任何border-width
集合。
在此示例中,图像的顶部,右侧,底部和左侧边框的厚度为2px,并且它们之间没有间隙,因此我们的切片值为2:
border-image-slice: 2;
切片看起来像这样,距顶部,右侧,底部和左侧2个像素:
在此示例中,我们希望模式在div周围均匀地重复。所以我们选择:
border-image-repeat: round;
写速记
可以单独设置上述属性,也可以使用border-image来简化设置:
border-image: url("http://i.stack.imgur.com/wLdVc.png") 2 round;
注意border: dashed 4px #000
后备。不支持的浏览器将收到此边框。
.bordered {
display: inline-block;
padding: 20px;
/* Fallback dashed border
- the 4px width here is overwritten with the border-image-width (if set)
- the border-image-width can be omitted below if it is the same as the 4px here
*/
border: dashed 4px #000;
/* Individual border image properties */
border-image-source: url("http://i.stack.imgur.com/wLdVc.png");
border-image-slice: 2;
border-image-repeat: round;
/* or use the shorthand border-image */
border-image: url("http://i.stack.imgur.com/wLdVc.png") 2 round;
}
/*The border image of this one creates wider gaps*/
.largeGaps {
border-image-source: url("http://i.stack.imgur.com/LKclP.png");
margin: 0 20px;
}
<div class="bordered">This is bordered!</div>
<div class="bordered largeGaps">This is bordered and has larger gaps!</div>
除了 border-image
属性外,还有其他几种方法可以创建虚线边框,并控制笔触的长度和它们之间的距离。如下所述:
我们可以使用path
或polygon
元素并设置来创建虚线边框stroke-dasharray
属性。该属性采用两个参数,其中一个定义短划线的大小,另一个确定它们之间的间距。
优点:
border-radius
涉及到也可以很好地工作。我们只想已经取代path
了circle
像这个答案(或)转换path
成一个圆圈。缺点:
vector-effect='non-scaling-stroke'
(如第二个框中所示),但是IE中浏览器对此属性的支持为nil。我们可以使用多个linear-gradient
背景图像并将其适当放置以创建虚线边框效果。也可以使用来完成此操作,repeating-linear-gradient
但由于使用了重复渐变,因此没有太大的改进,因为我们需要每个渐变仅在一个方向上重复。
优点:
缺点:
border-radius
涉及时无法使用,因为背景不会基于弯曲border-radius
。他们被剪掉了。我们可以使用伪元素创建一个小条(破折号),然后创建多个 box-shadow
它的版本以创建边框,如下面的代码片段所示。
如果破折号是正方形,那么单个伪元素就足够了,但是如果它是矩形,我们将需要一个伪元素用于顶部和底部边界,而另一个需要左侧和右侧边界。这是因为顶部边框上的破折号的高度和宽度将与左侧的不同。
优点:
缺点:
border-radius
但定位它们将非常麻烦,因为必须在圆上(甚至可能在transform
)上找到点。pointer-events:none
到svg中,以便能够与内容进行交互。
简短的一句话:不,不是。您将不得不处理图像。
它使用svg作为背景图像,可以设置所需的笔划破折号数组,非常方便。
然后,您只需将其用作元素的背景属性(代替边框)即可:
div {
background-image: url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' stroke='black' stroke-width='4' stroke-dasharray='6%2c 14' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e");
padding: 20px;
display: inline-block;
}
行程长度取决于行程宽度。您可以通过增加宽度来增加长度,并通过内部元素隐藏部分边框。
.thin {
background: #F4FFF3;
border: 2px dashed #3FA535;
position: relative;
}
.thin:after {
content: '';
position: absolute;
left: -1px;
top: -1px;
right: -1px;
bottom: -1px;
border: 1px solid #F4FFF3;
}
pointer-events: none
以防止覆盖问题。
我最近也有同样的问题。
我设法通过两个绝对定位的div来解决此问题,这些div带有边框(一个用于水平,一个用于垂直),然后对其进行转换。外盒只需要相对放置即可。
<div class="relative">
<div class="absolute absolute--fill overflow-hidden">
<div class="absolute absolute--fill b--dashed b--red"
style="
border-width: 4px 0px 4px 0px;
transform: scaleX(2);
"></div>
<div class="absolute absolute--fill b--dashed b--red"
style="
border-width: 0px 4px 0px 4px;
transform: scaleY(2);
"></div>
</div>
<div> {{Box content goes here}} </div>
</div>
注意:在此示例中,我使用了tachyons,但是我猜这些类是不言自明的。
border-style: solid
如果您忽略后备广告,则需要指定(或类似内容)。