2017-02-17 153 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

好吧,我們來分解它。你是否同意邊界圖像寬度總是以邊界寬度計算,而不管邊界圖像開始是否被提及? –