我试图理解在渐变边界图像的情况下,边界图像切片是如何工作的。在规范中,边界图像切片值可以是
表示光栅图像的边缘偏移量(以像素为单位)和矢量图像的坐标。对于矢量图像,数字是相对于元素的大小,而不是源图像的大小,因此在这些情况下,百分比通常是更可取的。
在CSS-tricks文章中的示例中,边界图像设置如下:
border-image: repeating-linear-gradient(45deg,
#000, #000 1.5%,
transparent 1.5%, transparent 5%) 80;
因此,根据规范,80是相对于div的大小(宽度:26em;高度:23em;)。但我还是不明白这是什么意思。当我改变div的宽度或高度时,边框图像不会改变它的外观。但是当我改变边框-图像-切片或边框宽度时,外观会发生显著变化。因此,数字80和边界宽度5em之间似乎存在相关性。(数字40的边框看起来相同,边框宽度为2.5em,1em的边框宽度为16,等等)。
我的问题是如何计算数字80,这意味着给定div和梯度的切片过程是什么?(一个草图将非常感谢),它似乎80不是在px,em或%,因为当我加入这些单位,外观是改变的。
完整代码如下:
null
div {
box-sizing: border-box;
position: relative;
border: solid 5em #000;
border-image: repeating-linear-gradient(45deg,
#000, #000 1.5%,
transparent 1.5%, transparent 5%) 80;
padding: 2em;
width: 26em; height: 23em;
background: linear-gradient(to right bottom,
#e18728, #4472b9);
background-size: 50% 50%;
}
<div></div>
null
当使用渐变时,图像的大小就是元素的大小。border-image-width
将定义我们将放置切片的9个区域(如果未定义,则使用border-width
)。border-image-slice
将考虑初始图像来创建切片。将无单位值视为像素值,并根据元素的大小解析百分比值。
为了获得完美的结果,我们应该使切片等于区域,为此,我们需要使border-image-slice
等于border-image-width
(或border-width
),当不使用单元时。如果使用百分比,则计算出的值应相同。
在您的示例中,切片中的80
表示80px
,您的边框为5em
,即5x16px=80px
。
让我们举一个简单的例子。
null
div {
width: 100px;
height: 100px;
display: inline-block;
border: 10px solid transparent;
}
div.box {
background: repeating-linear-gradient(45deg, #000, #000 5px, transparent 5px, transparent 10px) border-box, red;
}
div.border {
border-image: repeating-linear-gradient(45deg, #000, #000 5px, transparent 5px, transparent 10px) 50 fill;
border-image-width: 50px;
background: red;
}
<div class="box"></div>
<div class="border"></div>
在下一个例子中,我使用px而不是em,因为我认为这样更清楚。
这是用于边框图像的图像。
null
div{ width: 416px; height: 368px;
background:repeating-linear-gradient(45deg,
#000, #000 1.5%,
transparent 1.5%, transparent 5%);
}
<div></div>