border-image-slice - 枠線画像の切り取り範囲を調整する

投稿日: / 更新日:

スタイルシートのborder-image-sliceは、枠線画像の切り取り範囲を指定するためのプロパティです。このプロパティの値を指定するには、画像がどのようにして枠線に描画されるのか、その仕組みを理解しておく必要があります。

サンプルコード

border-image-sliceを指定したサンプルコードです。border(枠線)や、border-image-source(枠線画像)を併せて指定しておく必要があります。

div {
	border: 40px solid #9ba5a8 ;
	border-image-source: url( "/border.png" ) ;

	border-image-slice: 40 ;
}

デモ

border-image-sliceプロパティに40を指定したデモです。横幅が120px、高さが120pxある枠線画像が、横幅40px、高さ40pxごとに切り取られて配置されているのを確認して下さい。

値の指定

値は、基本的に「横幅」と「縦幅」、の2つの値を指定します。1つの値を指定した場合、その値が「横幅」「縦幅」の両方に適用されます。指定方法は主に下記の通りです。リンクをクリックすると、デモを確認できます。

項目説明
inherit親要素の値を引き継ぐ。例の場合、div要素のborder-image-sliceには、bodyに指定された値(40)が引き継がれる。
initialプロパティの初期値が適用される。この場合、100%を指定したのと同じになる。
fillfillのキーワードを値の後に加えると、上、右、下、左のエリアに画像が表示されるようになる。…という仕様だったが2016年2月現在、主要ブラウザではfillを指定しなくても、fillを指定したのと同じ状態になっている。
percentage画像のサイズに対するパーセンテージで指定する。例えば、幅が120pxの画像に対して50%を指定すれば、60pxを指定したのと同じ扱いになる。
numberpxを示す数値でサイズを指定する。例えば、40を指定すれば40pxとなる。pxなど、単位を付けると機能しないので注意。

仕組み

border-image-sliceがどのように機能するのか。見本を見ながら理解していきましょう。枠線画像を表示するには、独自のルールが存在するので、そのルールを理解しないと値を自在に指定することはできません。

項目説明
9つのエリアある要素に枠線画像を表示する時、その要素がどのような形をしていても、必ず「9つのエリア」に分解されます。「左上(1)」「上(2)」「右上(3)」「左(4)」「真ん中(5)」「右(6)」「右下(7)」「下(8)」「左下(9)」の9つです。これは全ての基本なのでまず意識するようにしましょう。
4つの優先エリア9つのエリアのそれぞれに、枠線画像のエリアが分配されます。まず、優先的に分配されるのが「左上(1)」「右上(3)」「左下(7)」「右下(9)」の角4カ所です。この4つはとても権利が強いとイメージしておいて下さい。ここだけ分かりやすいように色を強調しておきますね。
左上の取り分ここからは、各エリアに画像が分配されていきます。その分配の仕組みが肝です。前提として、今回はborder-image-slice50 30を指定したとしましょう。左上のエリアから見ていきましょう。左上には枠線画像の左上部分が割り振られます。画像の左上が起点となり、右方向に50px、下方向に30pxの部分が分配されます。
右上の取り分続いて、右上を見てみましょう。右上には、画像の右上部分を起点として、左方向に50px、下方向に30pxの部分が分配されます。
左下の取り分左下を見てみましょう。左下には、画像の左下部分を起点として、右方向に50px、上方向に30pxの部分が分配されます。
右下の取り分最後に右下を見てみましょう。右下には、画像の右下部分を起点として、左方向に50px、上方向に30pxの部分が分配されます。
上の取り分「右上」「左上」「左下」「右下」の4カ所に画像が分配された後、余りの部分が「上」「右」「左」「下」のエリアに分配されていきます。まずは上のエリアから見てみましょう。上のエリアは、「左上」「右上」に分配された部分の余りが割り振られます。余りがない場合、このエリアには画像が表示されません。
右の取り分次に「右」のエリアの取り分を見てみましょう。「右上」と「右下」に分配後に残った部分が、右エリアに配置される画像となります。
下の取り分次に「下」のエリアの取り分を見てみましょう。「左下」と「右下」に分配後、残った部分が下エリアに配置される画像となります。
左の取り分最後に「左」のエリアの取り分を見てみます。「左上」と「左下」に分配後、残った部分が左エリアに配置される画像となります。このようにして、border-image-sliceによってスライスされた画像が、9つの各エリアに配置される仕組みになっているんです。
枠線画像を描画それでは、実際に枠線画像がどのように描画されるのかを確認してみましょう。どうでしょうか?このような法則で、各エリアの画像の取り分が決定されるというわけです。
枠線画像をフィットさせる蛇足ですが、例に使用した枠線画像は、横幅40px、高さ40pxの画像が9個集まってできた、横幅120px、高さ120pxの画像です。この場合、枠線画像として綺麗に表示するには、border-image-slice40 40を指定するのが正解ですね。何故そうなのか。仕組みを理解している人ならば、分かるはずです。

ブラウザのサポート

2016年7月現在の、ブラウザのサポート状況は次の通りです。

  • Chrome

    15+

    2011年10月

  • Firefox

    15+

    2012年8月

  • Safari

    6+

    2012年7月

  • Ie

    11+

    2013年10月

  • Edge

    12+

    2015年3月

  • Opera

    15+

    2013年7月

  • Safari(iOS)

    6+

    時期不明

  • Ie Mobile

    11+

    2014年7月

  • Chrome

    47+

    2015年12月

  • Android

    4.4+

    2014年6月

  • FF Mobile

    44+

    2016年1月

  • Opera Mobile

    33+

    2015年10月