跳到主要內容
黯羽輕揚每天積累一點點

border-image 的使用技巧

免費2015-07-30#CSS#border-image

border-image 是 CSS3 屬性,四個值切出九宮格不難理解,但存在一些小技巧與注意事項

一. 相容性

效果好不好都不要緊,第一重要的是相容性,結論:如果不用考慮 IE 瀏覽器的話,可以放心使用 border-image。具體請查看 caniuse

低版本的 Android 和 iOS Safari 都需要加供應商前綴才能生效,Opera 也需要添上前綴,所以為了最佳相容性,需要添上除 -ms- 以外的所有前綴(IE11/IE Mobile 11 直接遵循標準規範,[11-] 完全不支援)

二. 具體語法

常用的寫法:

border-image:url("bd.png") 10 20 30 40 repeat;
border-width: 10px 20px 30px 40px;

注意:10 20 30 40 是切分的位置,而且不能加 px、em 等單位,只能是數值(單位預設是 px)或者百分比。範例程式碼表示距上邊 10px,距右邊 20px,距下邊 30px,距左邊 40px 處都有切割線,四刀切出九宮格。這四個參數可以縮寫成 1、2 或者 3 個,規則和 border-width 一樣,屬性名稱是 border-image-slice

如果重複性是預設的 stretch,切出九宮格後規則是四角不變,其他格子內容都拉伸

repeat 參數也比較特別,因為不存在 no-repeat,只有 repeat(重複)、round(平鋪)和 stretch(拉伸)。預設值是stretch(拉伸)。注意平鋪和重複的區別:

這麼比方吧,您從萬科地產買了個 99.5m*99.5m 的毛胚屋,地面要貼瓷磚,都是 1m*1m 的正方形瓷磚。如果是「平鋪」,對不起,這 1m 邊長的瓷磚不行,要處理!怎麼處理法?很簡單,每個瓷磚壓成 0.995m*0.995m 的,這樣就可以了,所以,平鋪就是以完整的單元鋪滿整個區域。如果是重複,就直接把這 1m*1m 的瓷磚從一個角落一個一個地放置,放到頭放不下了怎麼辦?直接把瓷磚從中間「咔」掉,於是最後會在房子的邊角看到很多半截的瓷磚。

(引自 CSS3 border-image 詳解、應用及 jQuery 插件 ? 張鑫旭-鑫空間-鑫生活

三. 小技巧

1. 保證 border-widthborer-image-slice 值相同

能夠避免多次縮放帶來的圖像失真

2. 如何保證兩端不縮放

有些時候需要保證兩端不縮放,比如 tab 頁標籤,保證左右兩端不縮放,只把中間部分拉長,解決方案如下:

  1. 先設置 border-image-slice 的 top/bottom 值等於圖片高度,bottom/top 值為 0,這樣九宮格就少了 2 行(中間行和底部/頂部行)。剩餘的一行恰好是頂部行/底部行,左右兩端就不會縮放了

  2. 再設置 border-width 的值與 border-image-slice 相同

  3. 子元素相對於父元素絕對定位,並設置負 margin(把子元素放在父元素的邊框上)

    因為父元素邊框已經佔用了子元素的位置,必須給子元素設置 position: absolute; 讓它脫離標準文件流,不佔空間

3. 如何填充中心格

標準 border-image 實作中,中心格不會被填充,而 -webkit- 實作中心格會被填充,所以需要這樣做才能保證中心格被填充:

-moz-border-image: url("../img/btn-half.png") fill 36 20 0 20;
-o-border-image: url("../img/btn-half.png") 36 20 0 20;
-webkit-border-image: url("../img/btn-half.png") 36 20 0 20;
border-image: url("../img/btn-half.png") fill 36 20 0 20;

Opera 和 Chrome 的理解一致但與標準規範不同,而 Mozilla 符合標準實作

參考資料

評論

暫無評論,快來發表你的看法吧

提交評論