CSS - <image>

トップ > CSSリファレンス > <image>

説明

background-image などのプロパティでイメージを指定します。

形式 <image> = [
    url() |
    linear-gradient() |
    repeating-linear-gradient() |
    radial-gradient() |
    repeating-radial-gradient() |
    conic-gradient() |
    repeating-conic-gradient() |
    cross-fade() |
    image-set() |
    paint() ]
サポートhttps://caniuse.com/?search=gradients

使用例を下記に示します。

CSS
background-image: url(image/back.png);
background-image: linear-gradient(to right, yellow, red);

url()

形式 url(...)

画像ファイルのURLを指定します。

CSS
.t1 {
  width: 20rem;
  height: 5rem;
  border: 1px solid #999;
  background-image: url(img/back.png);
}
HTML
<div class="t1">背景画像</div>
表示
背景画像

linear-gradient()

形式 linear-gradient([ <angle> | to <side-or-corner>, ]? <color-stop-list>)
  <side-or-corner> = [left | right] || [top | bottom]
  <color-stop-list> = <linear-color-stop> , [ <linear-color-hint>? , <linear-color-stop> ]#
  <linear-color-stop> = <color> && <length-percentage>?
  <linear-color-hint> = <length-percentage>
サポートhttps://caniuse.com/?search=linear-gradient
詳細https://developer.mozilla.org/ja/docs/Web/CSS/gradient/linear-gradient

線形グラデーションを指定します。

第一引数はグラデーションの方向を角度または to 方向で指定します。省略した場合は to bottom と見なされます。

CSS
linear-gradient(to right, yellow, red);         /* (左から)右方向に */
linear-gradient(to bottom right, yellow, red);  /* (右上から)右下方向に */
linear-gradient(45deg, yellow, red);            /* 45度の方向に */
linear-gradient(yellow, red);                   /* 省略時は to bottm と同じ */
表示

第二引数以降には2個以上の色を指定できます。

CSS
linear-gradient(to right, yellow, red);               /* 黄 → 赤 */
linear-gradient(to right, yellow, red, green);        /* 黄 → 赤 → 緑 */
linear-gradient(to right, yellow, red, green, blue);  /* 黄 → 赤 → 緑 → 青 */
表示

色の後に長さやパーセンテージを記述すると、開始から終了方向にその長さまたはパーセント分進んだ箇所でその色がはじまります。

CSS
linear-gradient(to right, yellow 0%, red 10%, green 20%, blue 30%);
表示

最後の色以外には終了点を指定することができます。下記の例では 0~10% が黄色、10~20% が赤、20~30% が緑、40% 以降が青となります。30~40% は緑と青のグラデーションとなります。仕様書では開始点と終了点の間にカンマ(,)が必要っぽい(?)のですが、MDN ではカンマ無しで説明されています。カンマ有り/無しどちらでも動作はするようです。

CSS
linear-gradient(to right, yellow 0%, 10%, red 10%, 20%, green 20%, 30%, blue 40%);
linear-gradient(to right, yellow 0%  10%, red 10%  20%, green 20%  30%, blue 40%);
表示

repeating-linear-gradient()

形式 repeating-linear-gradient( 'linear-gradient()' )
サポートhttps://caniuse.com/?search=repeating-linear-gradient
詳細https://developer.mozilla.org/ja/docs/Web/CSS/gradient/repeating-linear-gradient

繰り返し線形グラデーションを指定します。引数は linear-gradient() と同じで、指定した色が領域いっぱいまで繰り返されます。

CSS
repeating-linear-gradient(to right, yellow 0%, red 10%, green 20%, blue 30%);
表示

radial-gradient()

形式 radial-gradient( [ <ending-shape> || <size> ]? [ at <position> ]? , <color-stop-list> )
  <ending-shape> = circle | ellipse
  <size> = <extent-keyword> | <length> | <length-percentage>{2}
  <extent-keyword> = closest-corner | closest-side | farthest-corner | farthest-side
  <color-stop-list> = <linear-color-stop> , [ <linear-color-hint>? , <linear-color-stop> ]#
  <linear-color-stop> = <color> && <length-percentage>?
  <linear-color-hint> = <length-percentage>
サポートhttps://caniuse.com/?search=radial-gradient
詳細https://developer.mozilla.org/ja/docs/Web/CSS/gradient/radial-gradient

放射線状にグラデーションをかけます。下記の様に指定すると中央から放射線状に指定した色順にグラデーションをかけます。

CSS
radial-gradient(yellow, red, green, blue);
表示

円形・楕円を指定することができます。

CSS
radial-gradient(circle, yellow, red, green, blue);             /* 円形 */
radial-gradient(circle 2rem, yellow, red, green, blue);        /* 円形(半径2rem) */
radial-gradient(ellipse 2rem 1rem, yellow, red, green, blue);  /* 楕円(横半径2rem/縦半径1rem) */
radial-gradient(ellipse 40% 20%, yellow, red, green, blue);    /* 楕円(横半径40%/縦半径20%) */
表示

長さを示すキーワードとして下記を使用できます。

CSS
radial-gradient(circle closest-corner, yellow, red, green, blue);   /* 最も近い角までの距離 */
radial-gradient(circle closest-side, yellow, red, green, blue);     /* 最も近い辺までの距離 */
radial-gradient(circle farthest-corner, yellow, red, green, blue);  /* 最も遠い角までの距離 */
radial-gradient(circle farthest-side, yellow, red, green, blue);    /* 最も遠い辺までの距離 */
表示

at <position> で中心位置を指定することができます。

CSS
radial-gradient(circle at right top, yellow, red, green, blue);   /* 右上 */
radial-gradient(circle at 2rem 1rem, yellow, red, green, blue);   /* 左から2rem/上から1rem */
表示

linear-gradient() と同様に開始点、終了点を指定することができます。

CSS
radial-gradient(circle, yellow 10%, red 20%, green 30%, blue 40%);             /* 開始点 */
radial-gradient(circle, yellow 0% 10%, red 10% 20%, green 20% 30%, blue 30%);  /* 開始点 終了点 */
表示

repeating-radial-gradient()

形式 repeating-radial-gradient( 'radial-gradient()' )
サポートhttps://caniuse.com/?search=repeating-radial-gradient
詳細https://developer.mozilla.org/ja/docs/Web/CSS/gradient/repeating-radial-gradient

繰り返し線形グラデーションを指定します。引数は radial-gradient() と同じで、指定した色が領域いっぱいまで繰り返されます。

CSS
repeating-radial-gradient(yellow 0%, red 10%, green 20%, blue 30%);
表示

conic-gradient()

形式 conic-gradient( [ from <angle> ]? [ at <position> ]?, <angular-color-stop-list>)
  <angular-color-stop-list> = [ <angular-color-stop> [, <angular-color-hint>]? ]# , <angular-color-stop>
  <angular-color-stop> = <color> && <color-stop-angle>?
  <angular-color-hint> = <angle-percentage>
  <color-stop-angle> = <angle-percentage>{1,2}
  <angle-percentage> = [ <angle> | <percentage> ]
サポートhttps://caniuse.com/css-conic-gradients

円錐形のグラデーションをかけます。

CSS
conic-gradient(yellow, red, green, blue);
表示

from で開始角度を指定することができます。

CSS
conic-gradient(from 90deg, yellow, red, green, blue);
表示

at で中心点を指定することができます。

CSS
conic-gradient(at 30% 30%, yellow, red, green, blue);
表示

色の後に角度やパーセンテージを記述すると、開始から終了方向にその角度またはパーセント分進んだ箇所でその色がはじまります。

CSS
conic-gradient(yellow, red 10%, green 20%, blue 30%);
表示

終了位置を指定することもできます。下記の例では 0~10% を黄色、10~20% を赤、20~30% を緑、40%~ を青で描画します。30~40% の間は緑と青のグラデーションとなります。

CSS
conic-gradient(yellow 0% 10%, red 10% 20%, green 20% 30%, blue 40%);
表示

repeating-conic-gradient()

形式 repeating-conic-gradient('conic-gradient()')
サポートhttps://caniuse.com/mdn-css_types_image_gradient_repeating-conic-gradient

繰り返し円錐形グラデーションを指定します。引数は conic-gradient() と同じで、指定した色が領域いっぱいまで繰り返されます。

CSS
repeating-conic-gradient(yellow 0%, red 5%, green 10%, blue 15%);
表示

cross-fade()

複数の画像を重ね合わせます。正式仕様は 形式1 ですが、Chrome, Edge, Opera では -webkit- 接頭辞付きで古い仕様(形式2)をサポートしています。

形式1 cross-fade( <cf-image># )
<cf-image> = <percentage>? && [ <image> | <color> ]
形式2 cross-fade( <image>, <image>, <percentage> )
サポートhttps://caniuse.com/?search=repeating-radial-gradient
詳細https://developer.mozilla.org/ja/docs/Web/CSS/cross-fade
CSS
-webkit-cross-fade(url(./img/image1.png), url(./img/image2.png), 50%);
表示

image-set()

画像形式や解像度の異なる画像の中からブラウザに適した画像を表示します。

形式image-set(<image-set-option># )
<image-set-option> = [ <image> | <string> ] [ <resolution> || type(<string>) ]
サポートhttps://caniuse.com/css-image-set
詳細https://developer.mozilla.org/ja/docs/Web/CSS/image-set

下記の例ではブラウザの解像度に応じて低解像度の sample_1x.jpg または高解像度の sample_2x.jpg が適切に選択されます。image-set() 未サポートブラウザのために -webkit-image-set() や url() を指定しています。

CSS
.box {
  background-image: url(./image/sample_1x.jpg);
  background-image: -webkit-image-set(
    url(./image/sample_1x.jpg) 1x,
    url(./image/sample_2x.jpg) 2x
  );
  background-image: image-set(
    url(./image/sample_1x.jpg) 1x,
    url(./image/sample_2x.jpg) 2x
  );
}

下記の例ではブラウザが AVIF形式をサポートしていれば AVIF形式を、さもなくば JPEG形式の画像を表示します。

CSS
.box {
  background-image: url(./image/sample.jpg);
  background-image: -webkit-image-set(
    url(./image/sample.avif) type("image/avid"),
    url(./image/sample.jpg) type("image/jpeg")
  );
  background-image: image-set(
    url(./image/sample.avif) type("image/avid"),
    url(./image/sample.jpg) type("image/jpeg")
  );
}

paint()

画像を JavaScript で描画することができます。canvas 以外の要素の背景を JavaScript で描画したい場合に有用です。

形式paint(<ident>)
サポートhttps://caniuse.com/css-paint-api
仕様https://drafts.css-houdini.org/css-paint-api/

描画メソッドを持つクラスを記述した JavaScript ファイルを用意し、CSS.paintWorklet.addModule() で読み込む必要があります。CORS 制限によりローカルファイルを読み込むことはできません。JavaScript は Canvas 2Dリファレンス を参照してください。

example.html
<script>
if ("paintWorklet" in CSS) {
  CSS.paintWorklet.addModule('example.js');
}
</script>
<style>
.paint-example {
  width: 300px;
  height: 120px;
  --color: blue;
  --width: 10;
  border: 1px solid #999;
  background-image: paint(myPaint);
}
</style>
<div class="paint-example"></div>
example.js
class MyPaint {
    static get inputProperties() {
        return ['--color', '--width'];
    }
    paint(context, geometry, properties) {
        context.strokeStyle = properties.get('--color').toString();
        context.lineWidth = properties.get('--width');
        const x = geometry.width / 2;
        const y = geometry.height / 2;
        context.arc(x, y, 50, 0, Math.PI * 2);
        context.stroke();
    }
}
registerPaint('myPaint', MyPaint);
表示

Copyright (C) 2022-2023 杜甫々
初版:2022年8月28日、最終更新:2023年2月26日
http://www.tohoho-web.com/css/value/image.htm