CSS3: border-image プロパティ - 画像を使用した境界についての一括指定

■ 概要

項  目説  明
記述形式 セレクタ {border-image: }
値 の形式
 border-image-source border-image-slice
 [ / border-image-width [ / border-image-width ] / border-image-outset
 border-image-repeat
初 期 値 各プロパティの初期値
対応ブラウザー C3+ / e11+ / n?+ / Fx4+ / Op10+ / Ch9+ / Sa5+
適用可能な要素 すべての要素
border-collapse プロパティの値に collapse が指定された table内要素を除く)
継  承 しない

■ 解説

border-image プロパティ は,画像を使用した境界についての一括指定 をします。

指定できる値の形式(プロパティ)は,つぎのとおりです。

説  明
border-image-source 境界画像ファイルの URL を指定します。
border-image-slice 境界画像を分割して境界での 表示位置 を割り当てます。
border-image-width 境界画像の を指定します。
border-image-outset 境界画像の 境界ボックス外への 表示範囲の拡大 を指定します。
border-image-repeat 境界画像の 繰り返し方法 を指定します。

なお,border-image プロパティ では,境界画像の幅を指定する border-image-width は, 2つまでの値が指定可能です。 これは,境界の幅(border-width)に対しての倍数 で指定し,

  1. 1つも指定しない場合は,境界の幅(border-width と同じになります。 (初期値の 1
  2. 1つだけ指定した場合は,それが上下左右のすべての幅となります。
  3. 2つ指定した場合は,それぞれ,上下と左右の幅となります。

また,border-image-outset を指定するためには, 少なくとも1つ以上の border-image-width の指定が必要です。

境界に画像を表示するためには,

  1. border プロパティ などを用いて,境界画像を表示する要素の 境界領域を確保 する。
    border-stylesolidborder-colortransparent とする。  また,border-width で,境界画像を表示する を指定する。)
  2. border-image プロパティ などの指定により,境界画像のファイル(border-image-source), 境界画像の表示に使う部分(border-image-slice)などを指定する。
という 2段階のスタイルの指定が必要 です。

なお,border-image-slice では,画像の上端,右端,下端,左端からのオフセットを指定して, 画像を水平,垂直,それぞれ2本ずつの直線で9つの部分(左上,上中央,右上,右中央,右下,下中央,左下,左中央,中央)に分割します。  境界でのこれら9つの部分の表示の位置や方法は,次の表に示すとおりです。

位 置繰り返し配置の基準位置
左 上対象外境界画像領域 の左上端
右 上境界画像領域 の右上端
右 下境界画像領域 の右下端
左 下境界画像領域 の左下端
上中央対象境界画像領域 の上端
右中央境界画像領域 の右端
下中央境界画像領域 の下端
左中央境界画像領域 の左端
中 央対象外中央
fill を指定しない限り非表示)
つまり,
  1. 左上,右上,右下,左下は,元の画像と同様に4つのコーナーに表示されて,繰り返しはありません。
  2. 上中央,右中央,下中央,左中央の部分は角の部分を除いた の部分を埋める画像として使われます。
    これらについては,border-image-repeat の値が, stretch 以外の場合には,画像が繰り返して表示されます。
  3. 中央(上下左右の中央)は,通常,境界画像の表示には使用されません。 ただし, border-image-slicefill が指定された場合には表示されます。

border-image-outset を指定ない場合には, 上の表の配置基準の 境界画像領域(border image area)境界ボックス と一致します。   border-image-outset の指定によって,その外側まで含めたより広い領域(親要素や隣接要素の領域も含む) とできて, その範囲まで画像による境界を表示することができます。

■ 使用例 ( border-image プロパティの利用)

HTMLソース
CSS
<head> ~ </head>
<style type="text/css" media="screen, handheld, print, tv" >
<!--
   div.sample1 { width: 320px; height: 140px; 
      border: solid 31px transparent;
      border-image: url(star_border.png) 31 31 round;
      -moz-border-image: url(star_border.png) 31 31 round;
      -o-border-image: url(star_border.png) 31 31 round;
      -webkit-border-image: url(star_border.png) 31 31 round;   }
-->
</style>
HTML
<body> ~ </body>
<div class="sample1">
   これが class=&quot;sample1&quot; の部分です。
</div>

ブラウザー 表示例 (Microsoft IE = Internet Explorer 10 以前では正常に表示できません)
これが class="sample1" の部分です。

なお,この例で境界画像として用いたのは,

sample
のような画像で,border-image-slice の指定で,上下左右端からそれぞれ 31px のオフセットで, 中央部を除くとどれも同じ8個の部分に分割しています。

■ 使用例2( IE でも表示できる方法 = 背景画像で置き換え)

上の例 border-image プロパティ では,Microsoft IE = Internet Explorer では,現状では境界画像を表示することはできません。  ここまで「折角一生懸命に読んだのに」と嘆く人もいるかもしれません。 そこで,背景画像 を利用して同様の表示を得る方法を紹介しておきます。  もちろん,この方法の場合は IE でも問題なく表示できます。

HTMLソース
CSS
<head> ~ </head>
<style type="text/css" media="screen, handheld, print, tv" >
<!--
   div.sample2 { width: 320px; height: 140px; 
       border: solid 31px transparent;
       background: url(star_border_b.png) left top; 
       background-size: contain;
       background-origin: border-box; }
-->
</style>
HTML
<body> ~ </body>
<div class="sample2">
   これが class=&quot;sample2&quot; の部分です。
</div>

ブラウザー 表示例
これが class="sample2" の部分です。

そこで,作り方ですが,まずは,境界の画像を表示する部分も含めた要素のサイズ(この場合は 320px × 140px) の次のような画像ファイルを作成します。

sample

言うまでもないことですが,この画像の周囲の部分が境界画像の代替部分ですので, この幅の値が 代替境界画像の幅 = 境界の幅 となるように背景画像を作成します。 この例では,上下左右とも 31px の幅です。

もうひとつのポイントは,背景画像を表示する基準位置となる background-origin プロパティの値の初期値は padding-box ですので,これを boder-box に変更して,作成した画像の周辺部分がちょうど 透明(transparent)な境界線 の背後に来るようにすることです。

なお、この方法では,要素のサイズが固定していない場合(とくに縦横比が変わる場合)ではあまりうまく行きません。 また, 対象の要素毎に背景画像ファイルを作成する必要があります。 (私の場合,この例では,最初 border-image プロパティ を使って表示して,それを取り込みました。) ですから, border-image プロパティ の代替というよりは, 境界画像を表示できないブラウザーに対する対応策と考えた方がよいかもしれません。

■ 備考

【参考ページ】