2017-02-17 157 views
3

背景:计算边界图像宽度与边界图像首先

Here是规范如何W3C定义border-image-width
Here是MDN如何解释border-image-width

Here是规范如何定义W3C border-image-outset
Here是MDN如何解释border-image-outset

我们都知道border-image-width是如何工作的。它需要边框并根据它计算它的值。但是,当我们将它与边界图像开始一起使用时,它是如何计算它的价值的,因为边界图像 - 起始属性改变了边界图像区域以超出元素框区域。请看下图:(图片来自here拍摄)

enter image description here

声明:

下面的例子告诉我们,边框图像宽度仍然得到计算的高度和宽度边框的外边(无论如何都没有意义)

使用的边框图像:

enter image description here

<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Border-image-width</title> 
 
    <style> 
 

 
     p.ShowingBorderImageOutsetExample1{ 
 
      border: 3px solid black; 
 
      width:500px; 
 
      border-image-source: url("https://i.stack.imgur.com/BlCZO.png"); 
 
      border-image-slice: 20%; 
 
      border-image-width: 1; 
 
      border-image-outset: 6px; 
 
      outline: 1px solid black; 
 
     } 
 

 
     p.ShowingBorderImageOutsetExample2{ 
 
      border: 1px solid black; 
 
      width:500px; 
 
      border-image-source: url("https://i.stack.imgur.com/BlCZO.png"); 
 
      border-image-slice: 20%; 
 
      border-image-width: 1; 
 
      border-image-outset: 6px; 
 
      outline: 1px solid black; 
 
     } 
 

 
    </style> 
 
</head> 
 
<body> 
 
<p class="ShowingBorderImageOutsetExample1">Hi this is just a demo</p> 
 
<p class="ShowingBorderImageOutsetExample2">Hi this is just a demo</p> 
 
</body> 
 
</html>

正如你可以看到,我们一直保持边界图像,一开始就和边界图像宽度constant.Only事情的变化是由于发生改变边框宽度。这暗示边界图像宽度是根据boder-width计算的。

问:

不过,现在看来,为什么边框图像宽度仍然被计算在边界框有点怪异,我的问题是它如何再调整那些角落的图像片段,那些顶部宽度图像片等在扩展的新维度?

请注意,border-image-slices会给我们一些片段,并且这些片段会被border-image-width给定的尺寸拉伸(默认情况下)。但由于使用了边界图像开始,尺寸已经改变。没有任何人拥有这些尺寸。边框图像宽度仍然紧贴由边框指定的尺寸。

+0

由于'边境image'性质是有点复杂的解释,我不知道,如果要交一个答案。这篇文章可能会提供一些启示,所以让我知道它是否使事情更加清晰:https://tympanus.net/codrops/css_reference/border-image-width/ – LGSon

+0

@LGSon文章在上下文中没有提到边界图像开始。它只是解释了MDN中的正常工作。 –

+1

明天我将发布一个答案(现在下午11点50分)......你在问题中有几句话是不准确的,当我们将这些问题排除后,我相信你会理解它是如何工作的 – LGSon

回答

3

border-image-width的计算实际上并不取决于border-image-outset。一开始只有指定了一个偏移量,在该偏移量处应绘制边框图像并且不会影响边框的宽度。

如在规范中提到,当使用纯数字值(不百分比符号或任何单位)为border-image-width属性,计算宽度值是border-width的倍数。

<数> 数字代表相应的计算出的边界宽度的倍数。

(在说明书中强调的是矿)

因此,对于您情况下,border-image-width是1 * 3PX(= 3PX),用于所述第一实例,并且是1×1像素(= 1像素)为第二个例子。这也是你从输出中看到的。在第一个例子中边界图像是比在第二个例子中更厚。

border-image-outset只是告诉UA,border-image应该绘制在与元素的原始边框相距X个像素的偏移处。 偏移量不在元素的原始边框,因为它是开始边框。在你的情况下,它会将6px偏移到元素原始边框的顶部,底部,左侧和右侧。因此,对于第一个示例,我们看到一个3像素宽的边框和一个3像素宽的间距(起始像素总共为6像素),而对于第二个示例,我们看到1像素宽的边框和5像素宽的间距(又是6像素总共)。在注释


摘要的讨论:

正如你正确地指出,一旦一开始就加入外部矩形(一个由一开始就创建)的尺寸会比的大内部矩形(元素的原始border-box),但不会导致尺寸增加border-image-widthborder-image-width只是定义了边界图像的厚度(实际上,措辞差异也可能是有时引起误解的原因)并且厚度保持相同,而不管边界是否围绕内部矩形绘制(原始border-box)或外部矩形(偏移框)。

实际上会发生什么事是,一个用于边界(border-image-source)图像切片在基于该border-image-slice物业片,然后将各个部分首先被放置在基础上,border-image-width的4个角。然后,基于border-image-repeat设置(圆形/空格/重复),位于中心的其余部分将被填满。没有。中间的棋子比正常棋子要多,因为偏移的外矩形在顶部和底部较宽,而左右两侧较高。

这可以通过一看first example that is available under the border-image section in the specs理解:

enter image description here

+0

假设border-image-width是3px,如第一个示例中所示。这意味着在顶部宽度上绘制的图像将具有3px宽度和长度=(外部边界到边缘的长度 - 6px)。现在,我们也已经确定了开始。因此,上边缘图像片必须被绘制的新位置将具有长度>(外边缘到边缘的长度-6px)。你有没有得到我指向的地方?但是border-image-width将该尺寸值保存为=(外边框到边框的长度 - 6px)。 –

+0

不,我没有得到你。起点是一个固定的位置。它是由您为该属性给出的值定义的,然后从边界图像上的这一点开始,根据图像本身的宽度向内绘制值。如果图像的宽度等于偏移量,它会将整个空间填充到原始边框的外边缘。如果图像的宽度较小,则会在绘制图像和原始边框之间留下间隙。 – Harry

+0

好吧,我们来分解它。你是否同意边界图像宽度总是以边界宽度计算,而不管边界图像开始是否被提及? –