transform:属性値
変形関数を指定する。
変形、クリッピング、マスキング、フィルターについて説明します。
要素に2D変形、または、3D変形を適用するときに使用します。
transformプロパティの値に、用意されている transform 関数を指定することで、 要素にマトリクス変形、移動、縮尺、回転、傾斜などの変形を適用することができます。
transform 関数を空白で区切って複数指定することで、複数の transform 効果を適用することもできます。 この場合、最終的に要素に適用されるのは、それぞれの transform 関数の値を結合したものとなります。
移動、拡大、縮小、回転、傾斜などの変形について説明します。
変形には変形関数を指定します。変形関数は、半角スペースで区切って複数指定することができます。この場合、最終的に要素に適用される効果は、それぞれの変形をミックスしたものになります。
変形関数には「2D 変形関数」と「3D 変形関数」の 2 種類があります。
2D 変形は、X軸(水平)、Y軸(垂直)の 2方向に要素を変形させます。
3D 変形は、X軸(水平)、Y軸(垂直)、Z軸(奥行き)の3方向に要素を変形させます。
変形関数を指定する。
要素を X 方向に 2D 移動します。
要素を X 方向に 2D 移動する。
属性値 | 説明 | |
---|---|---|
X 方向距離 | 数値+単位 |
<img src="bear.png" style="transform: translateX(50px);">
本来の位置(黄色の部分)から X 方向に 50px 移動しています。
要素を Y 方向に 2D 移動します。
要素を Y 方向に 2D 移動する。
属性値 | 説明 | |
---|---|---|
Y 方向距離 | 数値+単位 |
<img src="bear.png" style="transform: translateY(20px);">
本来の位置(黄色の部分)から Y 方向に 20px 移動しています。
要素を X 方向と Y 方向に 2D 移動します。
要素を X 方向と Y 方向に 2D 移動する。
属性値 | 説明 | |
---|---|---|
X 方向距離 | 数値+単位 | |
Y 方向距離 | 数値+単位(規定値:0px) |
<img src="bear.png" style="transform: translate(50px,20px);">
本来の位置(黄色の部分)から X 方向に 50px、Y 方向に 20px 移動しています。
要素を X 方向に 2D 拡大・縮小します。
要素を X 方向の中央を基準に左右に拡大・縮小する。
拡大・縮小の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
倍率 | 1以上で拡大、1未満で縮小 |
<img src="bear.png" style="transform: scaleX(1.5);">
本来の位置(黄色の部分)から X 方向に 1.5倍にしています。
要素を Y 方向に 2D 拡大・縮小します。
要素を Y 方向の中央を基準に上下に拡大・縮小する。
拡大・縮小の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
倍率 | 1以上で拡大、1未満で縮小 |
<img src="bear.png" style="transform: scaleY(1.2);">
本来の位置(黄色の部分)から Y 方向に 1.2倍にしています。
要素を X 方向、 Y 方向に 2D 拡大・縮小します。
要素を X 方向、 Y 方向の中央を基準に拡大・縮小する。
拡大・縮小の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
X 方向倍率 | 1以上で拡大、1未満で縮小 | |
Y 方向倍率 | 1以上で拡大、1未満で縮小(規定値:1) |
<img src="bear.png" style="transform: scale(1.5,1.2);">
本来の位置(黄色の部分)から X 方向に 1.5倍、Y 方向に 1.2倍にしています。
要素の中央を中心に時計回りの 2D 回転を指定します。
要素の中央を中心に時計回りの 2D 回転を指定する。
回転の中心点を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
回転角度 | 数値+単位 |
<img src="bear.png" style="transform: rotate(60deg);">
本来の位置(黄色の部分)から 画像の中央を中心に時計回りに 60°回転しています。
要素の中央を中心に X 軸方向への傾斜を指定します。
要素の中央を中心に X 軸方向への傾斜を指定する。
傾斜の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
傾斜角度 | 数値+単位 |
<img src="bear.png" style="transform: skewX(30deg);">
本来の位置(黄色の部分)から X 軸方向に 30°傾斜しています。
要素の中央を中心に Y 軸方向への傾斜を指定します。
要素の中央を中心に Y 軸方向への傾斜を指定する。
傾斜の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
傾斜角度 | 数値+単位 |
<img src="bear.png" style="transform: skewY(30deg);">
本来の位置(黄色の部分)から Y 軸方向に 30°傾斜しています。
行列を使用して要素に 2D 変形します。
行列を使用して要素に 2D 変形する。単位はつけない
傾斜や拡大・縮小の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
sx | X 方向への拡大・縮小率 | |
ay | Y 方向への傾斜率 | |
ax | X 方向への傾斜率 | |
sy | Y 方向への拡大・縮小率 | |
tx | X 方向への移動距離 | |
ty | Y 方向への移動距離 |
<img src="bear.png" style="transform: matrix(0.8, 0, -0.5, 0.8, 20, 10);">
図形を X 方向、Y 方向とも 80% にし、本来の位置(黄色の部分)から X 軸方向に -0.5ラジアン傾斜させ、X 方向に 20px、Y 方向に 10px 移動しています。
同じように表示されている右の図は、次のように指定しています。
<img src="bear.png" style="transform:translate(20px,10px) skew(-0.5rad,0rad) scale(0.8,0.8);">
3D 効果を出すには、親要素に transform-style: preserve-3d を指定し、perspective で遠近法の視点を設定する必要があります。
要素を Z 方向に 3D 移動します。
要素を Z 方向に 3D 移動する。
属性値 | 説明 | |
---|---|---|
Z 方向距離 | 数値+単位 |
<div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform: translateZ(20px);"> </div> <div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform: translateZ(-20px);"> </div>
本来の位置(黄色の部分)から左側は Z 方向に 20px(手前に 20px)、右側は Z 方向に -20px(奥に 20px)移動しています。
Z 方向距離に負の値を指定(奥に移動)すると背景色の下に隠れて表示されなくなります。上の図は背景色の黄色を少し透明にしているので見えています。
要素を X 方向、Y 方向、Z 方向に 3D 移動します。
要素を X 方向、Y 方向、Z 方向に 3D 移動する。
属性値 | 説明 | |
---|---|---|
X 方向距離 | 数値+単位 | |
Y 方向距離 | 数値+単位(規定値:0px) | |
Z 方向距離 | 数値+単位(規定値:0px) |
<div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform: translate3D(50px,10px,20px);"> </div>
本来の位置(黄色の部分)から X 方向に 50px、Y 方向に 10px、Z 方向に 20px(手前に 20px)移動しています。
要素を Z 方向の中央を基準に 3D 拡大・縮小します。
要素を Z 方向の中央を基準に拡大・縮小する。
拡大・縮小の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
Z 方向倍率 | 1以上で拡大、1未満で縮小 |
<div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform: scaleZ(1.4);"> </div>
画像は平面なので、Z 方向に何倍しようが画像に変化はありません(①と②)。例えば左側(①)は Z 方向に 1.4倍にしています。右側(②)はそのままです。どちらも同じ画像に見えます。
しかし、これを Y 軸を中心に回転させると、その違いが明確になります(③と④)。つまり、左側(③)は Z 軸方向(手前)に 1.4倍拡大されているのが分かります。
元の平面の奥にある画像は表示されなくなります。上の図は背景色の黄色を少し透明にしているので見えています。
X 方向、Y 方向、Z 方向へ拡大縮小します。
要素を Z 方向に拡大・縮小する。
ただし、3D 効果を出すには、親要素に transform-style: preserve-3d を指定し、perspective で遠近法の視点を設定する必要がある。
拡大・縮小の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
X 方向倍率 | 1以上で拡大、1未満で縮小 | |
Y 方向倍率 | 1以上で拡大、1未満で縮小(規定値:1) | |
Z 方向倍率 | 1以上で拡大、1未満で縮小(規定値:1) |
<div style="transform-style:preserve-3d;perspective:50px;"> <img src="bear.png" style="transform: scale3d(1.5,1.2,2);"> </div>
本来の位置(黄色の部分)から X 方向に 1.5倍、Y 方向に 1.2倍、Z 方向に 2倍にしていますが、先の例と同じで Z 方向の拡縮はこのままでは分かりません。
要素の中央を基準にして X 軸方向に時計回りの 3D 回転を指定します。
要素の中央を基準にして X 軸方向に時計回りの 3D 回転を指定する。
回転の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
回転角度 | 数値+単位 |
<div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform: rotateX(60deg);"> </div>
本来の位置(黄色の部分)から X 軸を中心に時計回りに 60°回転しています。
元の平面の奥にある画像は表示されなくなります。上の図は背景色の黄色を少し透明にしているので見えています。
要素の中央を基準にして Y 軸方向に時計回りの 3D 回転を指定します。
要素の中央を基準にして Y 軸方向に時計回りの 3D 回転を指定する。
回転の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
回転角度 | 数値+単位 |
<div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform: rotateY(60deg);"> </div>
本来の位置(黄色の部分)から Y 軸を中心に時計回りに 60°回転しています。
元の平面の奥にある画像は表示されなくなります。上の図は背景色の黄色を少し透明にしているので見えています。
要素の中央を基準にして Z 軸方向に時計回りの 3D 回転を指定します。
要素の中央を基準にして Z 軸方向に時計回りの 3D 回転を指定する。
回転の基準を変更する場合は transform-origin で指定する。
属性値 | 説明 | |
---|---|---|
回転角度 | 数値+単位 |
<div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform: rotateZ(60deg);"> </div>
本来の位置(黄色の部分)から Z 軸を中心に時計回りに 60°回転しています。
指定した軸を中心に時計回りの 3D 回転を指定します。
[0,0,0]から[X 座標,Y 座標,Z 座標]に向かう直線を軸に時計回りの 3D 回転を指定する。
属性値 | 説明 | |
---|---|---|
X 座標 | 数値 | |
Y 座標 | 数値 | |
Z 座標 | 数値 | |
回転角度 | 数値+単位 |
<div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform: rotate3d(3,1,2,60deg);"> </div>
本来の位置(黄色の部分)から [ 0, 0, 0 ] から [ 3, 1, 2 ] に向かう直線を軸とし、時計回りに 60°回転しています。
元の平面の奥にある画像は表示されなくなります。上の図は背景色の黄色を少し透明にしているので見えています。
16個の数値(4x4の行列)で 3D 変形を指定します。
16個の数値(4x4の行列)で 3D 変形を指定する。
<div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform: matrix3d(2, 0.2, 0, 0, 0, 0.5, 0, 0, 0, 0, 4, 0, 10, 5, 2, 1);"> </div>
本来の位置(黄色の部分)から 3D 変形しています。
transform で要素を回転させたりする場合の中心点を指定します。
transform で要素を回転させたりする場合の中心点を指定する。
属性値が3つのときは、X軸 Y軸 Z軸
属性値が2つのときは、X軸 Y軸 0px
属性値が1つのときは、X軸 center 0px (ただし、top、bottom のときは、center Y軸 0px)
属性値 | 説明 | |
---|---|---|
X軸 | left | 左端を中心にする |
center | 中央を中心にする(規定値) | |
right | 右端を中心にする | |
パーセンテージ | 数値% | |
長さ | 数値+単位 | |
Y軸 | top | 上端を中心にする |
center | 中央を中心にする(規定値) | |
bottom | 下端を中心にする | |
パーセンテージ | 数値% | |
長さ | 数値+単位 | |
Z軸 | 長さ | 数値+単位(規定値:0px) |
<div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform-origin:top;transform:rotateX(30deg);"> </div> <div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform-origin:center;transform:rotateX(30deg);"> </div> <div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform-origin:bottom;transform:rotateX(30deg);"> </div> <div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform-origin:left top;transform:rotateZ(30deg);"> </div> <div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform-origin:center center;transform:rotateZ(30deg);"> </div> <div style="transform-style:preserve-3d;perspective:100px;"> <img src="bear.png" style="transform-origin:right bottom;transform:rotateZ(30deg);"> </div>
上の3つは、本来の位置(黄色の部分)から、上端、中央、下端を中心に X 軸方向に回転しています。
下の3つは、本来の位置(黄色の部分)から、左上、中央、右下を中心に Z 軸方向に回転しています。
元の平面の奥にある画像は表示されなくなります。上の図は背景色の黄色を少し透明にしているので見えています。
transform で 3D 変換した結果を、二次元的に表示するか、三次元的に表示するかを指定します。
transform で 3D 変換した結果を、二次元的に表示するか、三次元的に表示するかを指定する。
属性値 | 説明 |
---|---|
flat | 二次元的に表示する(規定値) |
preserve-3d | 三次元的に表示する |
スタイルシート div.parent { background-color:yellow; /* opacity:0.9; */ ← opacity を記述すると 3D にならない transform-origin:center center; transform:rotateY(45deg); } img { border:solid 1px gray; transform-origin:top left; transform:rotateX(45deg); } ボディ <div style="border:solid 1px chocolate;perspective:200px;"> <div class="parent" style="transform-style:flat;"> <img src="bear.png"> </div> </div> <div style="border:solid 1px chocolate;perspective:200px;"> <div class="parent" style="transform-style:preserve-3d;"> <img src="bear.png"> </div> </div>
親要素(黄色の部分)を Y 軸を中心に回転し、さらにその子要素(熊の絵)を X 軸を中心に回転しています。
注意
preserve-3d を指定した要素に opacity 属性の記述があると、三次元的に表示されません。
遠近法では、遠くは小さく、手前は大きく表示されます。視点が近い方が、さらに遠近法による差異が大きくなります。
transform で 3D 変換を行う際の、要素の中心から視点までの距離を指定します。
transform で 3D 変換を行う際の、要素の中心から視点までの距離を指定する。
属性値 | 説明 |
---|---|
none | 遠近法による変形を適用しない(規定値) |
数値 | 要素の中心から視点までの距離 |
スタイルシート div { width:74px; height:74px; background-color:yellow; opacity:0.8; transform-style:preserve-3d; } img { border:solid 1px gray; } ボディ <div style="perspective:100px;"> <img src="bear.png" style="transform:rotateY(60deg);"> </div> <div style="perspective:200px;"> <img src="bear.png" style="transform:rotateY(60deg);"> </div>
Z 軸方向の視点を変えて、Y 軸を中心に回転しています。
元の平面の奥にある画像は表示されなくなります。上の図は背景色の黄色を少し透明にしているので見えています。
perspective での遠近投影の基点となる位置を指定します。
perspective での遠近投影の基点となる位置を指定する。
属性値 | 説明 |
---|---|
left | 左端を基点にする |
center | 中央を基点にする(規定値) |
right | 右端を基点にする |
top | 上端を中基点にする |
bottom | 下端を基点にする |
パーセンテージ | 要素の左上隅からの距離を、要素の幅または高さに対する割合で指定する。負の値も指定可能 |
長さ | 数値+単位 |
スタイルシート div { width:74px; height:74px; background-color:yellow; opacity:0.8; transform-style:preserve-3d; perspective:100px; } img { border:solid 1px gray; transform:rotateY(90deg); } ボディ <div style="perspective-origin:left center;"> <img src="bear.png"> </div> <div style="perspective-origin:right center;"> <img src="bear.png"> </div>
Y 軸方向を中心に 90°回転した要素を視点を変えて見ています。
元の平面の奥にある画像は表示されなくなります。上の図は背景色の黄色を少し透明にしているので見えています。
要素の背面の表示/非表示を指定します。
要素の背面の表示/非表示を指定する。
属性値 | 説明 |
---|---|
visible | 背面を表示する(規定値) |
hidden | 要素を表示しない |
スタイルシート div.parent { background-color:yellow; opacity:0.8; transform-style:preserve-3d; perspective:100px; } img { border:solid 1px gray; transform:rotateY(120deg); } ボディ <div> <img src="bear.png" style="backface-visibility:visible;"> </div> <div> <img src="bear.png" style="backface-visibility:hidden;"> </div>
Y 軸方向を中心に 120°回転しているので、画像が裏側を向いている状態になっています。左側は visible なので表示されていますが、右側は hidden なので表示されていません。
元の平面の奥にある画像は表示されなくなります。上の図は背景色の黄色を少し透明にしているので見えています。
クリッピングについて説明します。
クリッピングを行う際には、クリッピングパスとクリッピング領域という2つの概念が重要となります。クリッピングパスは、要素を切り取る形を現すパス(基本的なシェイプや複雑な多角形)で、クリッピング領域を区切り取るものです。clip-path 属性で定義します。クリッピング領域は、クリッピングパス内の範囲をすべて含む領域のことです。
基本的な図形である rect や circle、画像を表示する image 要素などに clip-path 属性でクリッピングパスを指定することでクリッピングを実現します。
ようするにクリッピングパスとクリッピング領域とが重なる部分のみが表示されます。
クリッピングパスを指定します。clip-path 属性で要素をクリッピングすると、指定したクリッピングパスの外側が非表示となって内側だけが表示されます。
clip-path 属性で指定するクリッピングパスの形状には、長方形、円、楕円、多角形の基本図形や SVG の clipPath 要素の URL を指定することもできます。
ジオメトリボックスを基準として基本図形でクリッピングする。
座標や半径などの長さには数値に em や ex や px などの単位をつけて絶対的な位置や長さを指定することもできますし、数値に % を付けて相対的な位置や長さを指定することができます。
基本図形 | 説明 | ||||||
---|---|---|---|---|---|---|---|
none | クリッピングしない(規定値) | ||||||
polygon([塗りつぶし] 頂点座標, 頂点座標, ... ,頂点座標) | 多角形
| ||||||
inset(長さ round 角丸半径) | 内側へのオフセット(通常は長方形となる)
| ||||||
circle(半径 at 中心点) | 円
| ||||||
ellipse(横半径 縦半径 at 中心点) | 楕円
|
ジオメトリボックス | 説明 |
---|---|
margin-box | マージンを含めた長方形を指定 |
border-box | ボーダーを含めた長方形を指定(規定値) |
padding-box | パディングを含めた長方形を指定 |
content-box | パディングの内側のコンテント領域の長方形を指定 |
(注1)
|
(注2)
|
(注3)
|
下の例では、灰色の部分がボーダー、緑の部分がパディング、黄色の背景のクマの絵がコンテンツです。
スタイルシート img { border: solid 6px lightgrey; padding: 10px; background-color: lime; } ボディ <img src="bear.png" style="clip-path:none;"> <img src="bear.png" style="clip-path:polygon(38px 0px, 14px 72px, 76px 28px, 0px 28px, 62px 72px);"> <img src="bear.png" style="clip-path:inset(20px 10px round 20px/10px);"> <img src="bear.png" style="clip-path:circle(30px at 30px 30px);"> <img src="bear.png" style="clip-path:ellipse(20px 47px at 40px 47px);">
下の段がクリッピングされた図形です。
上の段はどのようにクリッピングされたかを示すために別途表示しています。
h1 や div などのように長さが決まっていない要素の場合には、px などの長さの単位以外に % を使用して割合を指定することもできます。
もちろん、img 要素にも % を使用することができます。
スタイルシート h2.title { padding: 5px; background-color: green; color: white; } div.balloon { width:150px; padding: 5px; background-color: blue; color: white; } ボディ <h2 title="見出し" class="title" style="clip-path:polygon(0% 0%, 100% 0%, 80% 100%, 0% 100%, 0% 0%);"> h2 要素をクリッピング <br>しています。</h2> <div title="吹き出し" class="balloon" style="clip-path:polygon(0% 0%, 100% 0%, 100% 90%, 50% 90%, 30% 100%, 40% 90%, 0% 90%);"> div 要素をクリッピングすることによって吹き出しのようにすることもできます。<br><br></div> <img title="circle" src="bear.png" style="clip-path:circle(30% at 60% 40%);">
クリッピングは img 要素だけではなく、div や video 要素などにも使用できます。
また、アニメーションも指定することもできます。
スタイルシート div.hexagon { width:100px; padding: 15px; } @keyframes hexagon { from { transition-function:ease-out; clip-path:polygon(50% 0%, 85% 25%, 85% 75%, 50% 100%, 15% 75%, 15% 25%); background-color: yellow; color: black; } 50% { transition-function:ease-in; clip-path:polygon(85% 25%, 85% 75%, 50% 100%, 15% 75%, 15% 25%, 50% 0%); background-color: lime; color: white; } to { transition-function:ease-out; clip-path:polygon(85% 75%, 50% 100%, 15% 75%, 15% 25%, 50% 0%, 85% 25%); background-color: yellow; color: black; } } ボディ <video controls src="video/criticalCat.mp4" width="200" height="110" style="clip-path:ellipse(100px 50px at 100px 50px)"></video> <div title="アニメーション" class="hexagon" style="animation-name:hexagon;animation-iteration-count:infinite;animation-duration:5s;"> div 要素をアニメーションさせています。</div>
基本図形と共に指定された場合、ジオメトリボックスはクリッピングの基準となります。
基本図形が指定されず、ジオメトリボックスだけの場合は、ジオメトリボックスの辺に沿ってクリッピングされます。
なお、下の例では、灰色の点線の矩形がマージンで、灰色の部分がボーダー、緑の部分がパディング、黄色の背景のクマの絵がコンテンツです。
<img src="bear.png" style="clip-path:margin-box circle(30% at 60% 40%);"> <img src="bear.png" style="clip-path:border-box circle(30% at 60% 40%);"> <img src="bear.png" style="clip-path:padding-box circle(30% at 60% 40%);"> <img src="bear.png" style="clip-path:content-box circle(30% at 60% 40%);">
下の段がクリッピングされた図形です。
上の段はどのようにクリッピングされたかを示すために別途表示しています。オレンジ色の矩形がジオメトリボックスです。また、ジオメトリボックスの外側を薄く表示しています。
そして、オレンジ色の円がクリッピングされる範囲です。%(割合)を指定したとき、このジオメトリボックスが基準になります。
なお、SVG 要素は表示するわけではないので、width や height は 0 にします。
<svg width="0" height="0"> <clipPath id="clip1"> <polygon points="40,0 16,72 78,28 2,28 64,72"/> </clipPath> <clipPath id="clip2"> <circle cx="61" cy="43"> <animate attributeType="XML" attributeName="r" begin="0" dur="5" from="0" to="50" repeatCount="indefinite"/> </circle> </clipPath> </svg> <img src="bear.png" style="clip-path:url(#clip1);"> <img src="bear.png" style="clip-path:url(#clip2);">
マスキングとは、表示されている要素の一部または全部のを隠すための方法です。
マスキングでは、マスクとマスキング領域という2つの概念が重要となります。
マスクは、要素を切り取る形を現す図形やグラデーション、画像などで、マスキング領域を区切り取るものです。
マスキング領域は、マスク内の範囲をすべて含む領域のことです。
マスキングの結果としては、マスクとマスキング領域とが重なる部分のみが表示されます。ただし、マスクの透明度や輝度によって濃淡の差をつけることができます。
mask-image 属性でマスキング領域(図形、画像あるいはグラデーション)を指定します。
画像やグラデーションでマスキングするために、マスクを指定する。
規定値としてマスクとして、使用する値は透明度です。以下の例でも透明度によってマスキングが行われています。
<img src="bear.png" style="mask-image:linear-gradient(white, transparent 80%);"> <img src="bear.png" style="mask-image:radial-gradient(white, transparent 60%);"> <img src="bear.png" style="mask-image:repeating-conic-gradient(white, transparent 33.3%);"> <img src="bear.png" style="mask-image:url(circle.png);">
灰色の部分がボーダーで、緑の部分がパディング、黄色の部分が画像の背景(コンテンツ部分)です。
SVG の mask 要素の ID を指定することもできます。
<svg width="0" height="0"> <mask id="mask1"> <polygon points="40,0 16,72 78,28 2,28 64,72" fill="#777777"/> </mask> </svg> <img src="bear.png" style="mask-image:url(#mask1);"> <img src="bear.png" style="mask-image:url(mask.svg);"> <svg>
<svg viewbox="0,0,74,74" width="74" height="74"> <mask id="mask1"> <polygon points="40,0 16,72 78,28 2,28 64,72" fill="#777777"/> </mask> </svg>
mask-mode 属性で、輝度(luminance)あるいは、透明度(alpha)のいずれをマスク値として使用するのかということを指定します。
輝度とは明るさのことですが、光の三原色のR(赤)G(緑)B(青)のうち、人間の目で見た際に明るく感じるG(緑)やR(赤)の重みづけを大きくし、暗く感じるB(青)の重みづけを小さくしたうえで算出されます。 そのため、黄系(R+G)の色は輝度が高く、青系(B)の色は輝度が低くなります。
輝度(luminance)あるいは、透明度(alpha)のいずれをマスクとして使用するのかということを指定する。
属性値 | 説明 |
---|---|
alpha | 透明度をマスク値とする |
luminance | 輝度をマスク値とする |
match-source | mask-image での指定が(規定値) SVG のとき輝度 画像やグラデーションのとき透明度 |
左側は透明度によって、中央は輝度によって、右側はこの例ではマスクが画像なので透明度によってマスクされます。
ただし、ほとんどのブラウザは何を指定しても透明度によってマスクしているようです。
<img src="bear.png" style="mask-mode:alpha;mask-image:radial-gradient(white, transparent 80%);"> <img src="bear.png" style="mask-mode:luminance;mask-image:radial-gradient(white, transparent 80%);"> <img src="bear.png" style="mask-mode:match-source;mask-image:radial-gradient(white, transparent 80%);"> <br> <img src="bear.png" style="mask-mode:alpha;mask-image:radial-gradient(white, black 80%);"> <img src="bear.png" style="mask-mode:luminance;mask-image:radial-gradient(white, black 80%);"> <img src="bear.png" style="mask-mode:match-source;mask-image:radial-gradient(white, black 80%);">
灰色の部分がボーダーで、緑の部分がパディング、黄色の部分が画像の背景(コンテンツ部分)です。
mask-repeat 属性で、マスクの繰り返しを指定します。
繰り返し方法を指定する。
属性値 を1つだけ指定した場合は列方向と行方向の繰り返し方法で、2つ指定した場合は1つ目が列方向2つ目が行方向の繰り返し方法となる。
属性値 | 説明 |
---|---|
repeat-x | 列方向にのみ繰り返す |
repeat-y | 行方向にのみ繰り返す |
repeat | 列方向と行方向に繰り返す(規定値) |
space | 繰り返しの最初と最後のイメージが領域の端に接するようにスペースを空けて配置される |
round | イメージのサイズが調整されて隙間なく繰り返し配置される |
no-repeat | 一度だけ配置されて、繰り返さない |
上段左側は列方向への繰り返し、上段中央は行方向への繰り返し、上段右側は両方向への繰り返しとなります。
下段左側はマスク・イメージの大きさは変えずに、隙間を作ってマスキングの領域に均等に配置しています。
下段中央はマスキングの領域に隙間なく配置できるように、マスク・イメージの大きさをちょうどよい大きさに変えて配置しています。
下段右側は繰り返しません。
スタイルシート img { mask-image:url(dia.png); } ボディ <img src="bear.png" style="mask-repeat:repeat-x;"> <img src="bear.png" style="mask-repeat:repeat-y;"> <img src="bear.png" style="mask-repeat:repeat;"> <br> <img src="bear.png" style="mask-repeat:space;"> <img src="bear.png" style="mask-repeat:round;"> <img src="bear.png" style="mask-repeat:no-repeat;">
灰色の部分がボーダーで、緑の部分がパディング、黄色の部分が画像の背景(コンテンツ部分)です。
mask-position 属性で、マスクの開始位置を指定します。マスクを繰り返す場合もこの基準位置から繰り返されます。
マスキングする際の開始位置を指定する。mask-repeat を指定したときもこの開始位置から繰り返される。
列方向位置、行方向位置の順で指定する。省略すると列方向、行方向共に center を指定したことになる。
列方向位置は、left か right と パーセント(%)か 数値(単位)を組み合わせて指定する。left も right も記述しないと left になり、パーセント(%)も 数値(単位)も指定しないと 0px の意味になる。
行方向位置は、top と bottom で同様に指定する。
属性値 | 説明 |
---|---|
center | 中央に表示する(横、縦 ともに 50% と指定したのと同じ)(規定値) |
left | 左側に表示する |
right | 右側に表示する |
top | 上部に表示する |
bottom | 下部に表示する |
パーセント(%) | その要素の表示領域に対する割合を % で指定 |
数値(単位) | その要素の数値に em や ex や px などの単位をつけて指定 |
左側は right top なので右上に配置されます。
中央は px や % などの数値が指定されていますので、右上から指定した位置に配置されます。
右側は center を1つだけ指定していますので、列方向、行方向ともに中央に配置されます。
スタイルシート img { mask-image:url(circle.png); mask-repeat:no-repeat; } ボディ <img src="bear.png" style="mask-position:right top;"> <img src="bear.png" style="mask-position:right 10px top 80%;"> <img src="bear.png" style="mask-position:center;">
灰色の部分がボーダーで、緑の部分がパディング、黄色の部分が画像の背景(コンテンツ部分)です。
mask-clip 属性で、マスキングの範囲を指定します。
マスキングの範囲を指定する。
属性値 | 説明 |
---|---|
border-box | ボーダーを含む内側の部分を範囲とする(規定値) |
padding-box | パディング(ボーダーの内側)を含む内側の部分を範囲とする |
content-box | コンテンツ(パディングの内側)を含む内側の部分を範囲とする |
左側は border-box を指定していますので、マスキングの範囲はボーダーを含む内側の部分となります。
中央は padding-box を指定していますので、マスキングの範囲はパディングを含む内側となります。
右側は content-box を指定していますので、マスキングの範囲はコンテンツ(画像)を含む内側となります。
スタイルシート img { mask-image:url(circle.png); mask-repeat:round; } ボディ <img src="bear.png" style="mask-clip:border-box;"> <img src="bear.png" style="mask-clip:padding-box;"> <img src="bear.png" style="mask-clip:content-box;">
灰色の部分がボーダーで、緑の部分がパディング、黄色の部分が画像の背景(コンテンツ部分)です。
mask-origin 属性で、マスキングの基準位置を指定します。
マスキングの基準位置を指定する。
属性値 | 説明 |
---|---|
border-box | ボーダーの左上を基準位置とする(規定値) |
padding-box | パディングの外側(ボーダーの内側)の左上を基準位置とする |
content-box | コンテンツの外側(パディングの内側)の左上を基準位置とする |
左側は border-box を指定していますので、マスク・イメージはボーダーを含む内側の部分が開始位置となります。
中央は padding-box を指定していますので、マスク・イメージはパディングを含む内側の部分が開始位置となります。
右側は content-box を指定していますので、マスク・イメージはコンテンツ(画像)を含む内側の部分が開始位置となります。
スタイルシート img { mask-image:url(circle.png); mask-repeat:round; } ボディ <img src="bear.png" style="mask-origin:border-box;"> <img src="bear.png" style="mask-origin:padding-box;"> <img src="bear.png" style="mask-origin:content-box;">
灰色の部分がボーダーで、緑の部分がパディング、黄色の部分が画像の背景(コンテンツ部分)です。
mask-size 属性で、マスクのサイズを指定します。
マスクのサイズを指定する。
属性値 | 説明 |
---|---|
auto | 自動的に算出される(規定値) |
contain | 縦横比は保持して、背景領域に収まる最大サイズになるように背景画像を拡大縮小する |
cover | 縦横比は保持して、背景領域を完全に覆う最小サイズになるように背景画像を拡大縮小する |
パーセント(%) | その要素の表示領域に対する、列方向、行方向の割合を % で指定(1つしか記述しないと列方向の割合で決まる大きさで行方向も) |
数値(単位) | その要素の数値に em や ex や px などの単位をつけて、列方向、行方向を指定(1つしか記述しなければ横縦同じ大きさ) |
上段左側は auto を指定していますので、マスク・イメージはそのままの大きさとなります。
上段中央は contain を指定していますので、マスク・イメージは縦横比が変わらない全体が収まる最大サイズとなります。
上段右側は cover を指定していますので、マスク・イメージは縦横比が変わらないマスク領域を完全に覆う最小サイズとなります。
下段はサイズや割合を指定していますので、マスク・イメージは指定したサイズや割合で決まるサイズとなります。
スタイルシート img { mask-image:url(circle.png); } ボディ <img src="bear.png" style="mask-size:auto;"> <img src="bear.png" style="mask-size:contain;"> <img src="bear.png" style="mask-size:cover;"> <br> <img src="bear.png" style="mask-size:25% 50%;"> <img src="bear.png" style="mask-size:20px 10px;">
灰色の部分がボーダーで、緑の部分がパディング、黄色の部分が画像の背景(コンテンツ部分)です。
mask-composite 属性で、複数マスクの合成方法を指定します。
複数マスクの合成方法を指定する。
mask-image 属性に複数のマスクを指定することができます。そのときのマスクの重なり具合を指定します。
なお、先に記述したマスクが上層、後に記述したマスクが下層となります。
属性値 | 説明 |
---|---|
add | 結合 … 上層マスクを下層マスクの上に重ねて合体し、すべてがマスクとなる(規定値) |
subtract | 型抜き … 上層マスクを下層マスクで型抜きし残った部分がマスクとなる (3つ以上記述した場合は右2つの結果で左を型抜きし、その結果でさらに左を型抜きする ...を繰り返す) |
intersect | 交差 … 上層マスクと下層マスクが重なった部分だけがマスクとなる |
exclude | 除外 … 上層マスクと下層マスクが重ならない部分がマスクとなる |
マスク・イメージを複数指定したときの合成方法を指定していますが、ほとんどのブラウザは add(結合)しかできないようです。
スタイルシート img { mask-image:url(square.png),url(circle.png); mask-repeat:no-repeat; } ボディ <img src="bear.png" style="mask-composite:add;"> <img src="bear.png" style="mask-composite:subtract;"> <img src="bear.png" style="mask-composite:intersect;"> <img src="bear.png" style="mask-composite:exclude;">
灰色の部分がボーダーで、緑の部分がパディング、黄色の部分が画像の背景(コンテンツ部分)です。
mask 属性は、 mask-image、mask-mode、mask-repeat、mask-position、mask-origin、mask-clip、mask-size、mask-composite の値を一度に指定します。
マスキングの複数のプロパティの値をまとめて指定する。
指定する順番は構わないが、mask-size 属性値は必ず mask-position 属性値の後に、「/」で区切って指定する必要がある。
なお、同じ属性値を持つ mask-origin と mask-clip は、この順で指定するようです。1つしか指定しない場合は mask-origin と mask-clip とも同じ値になります。
属性名 | 初期値 |
---|---|
mask-image | none |
mask-mode | match-source |
mask-position | center |
mask-origin | border-box |
mask-clip | border-box |
mask-size | auto |
mask-composite | add |
左側は border-box padding-box の順に指定していますので、mask-origin:border-box mask-clip:padding-box となります。
中央は padding-box border-box の順に指定していますので、mask-origin:padding-box mask-clip:border-box となります。
右側は padding-box を1つだけ指定していますので、mask-origin:padding-box mask-clip:padding-box となります。
<img src="bear.png" style="mask:border-box padding-box top left/20% 25% url(circle.png);"> <img src="bear.png" style="mask:padding-box border-box top left/20% 25% url(circle.png);"> <img src="bear.png" style="mask:padding-box top left/20% 25% url(circle.png);">
灰色の部分がボーダーで、緑の部分がパディング、黄色の部分が画像の背景(コンテンツ部分)です。
フィルターについて説明します。
ぼかし効果を与えます。値を大きくすればするほどぼかし効果が大きくなります。
ぼかし効果を与える。
属性値 | 説明 |
---|---|
数値 | 長さ(数値+単位) |
値が大きくなるほどぼかし効果が大きくなります。
<img src="bear.png" style="filter:blur(0px);"> <img src="bear.png" style="filter:blur(1px);"> <img src="bear.png" style="filter:blur(5px);"> <img src="bear.png" style="filter:blur(10px);">
画像を明るくまたは暗くします。
100% 未満の値では画像が暗くなり、100% を超える値では画像が明るくなります。0% の値では画像が完全に黒くなり、100% の値では変更されないままになります。
画像を明るくまたは暗くする。
属性値 | 説明 | |
---|---|---|
数値 | 明るさの割合 | 0~1:暗くなる、1~:明るくなる |
パーセント | 0%~100%:暗くなる、100%~:明るくなる |
値が大きくなるほど明るくなります。0 の値では画像が完全に黒くなります。
<img src="bear.png" style="filter:brightness(0);"> <img src="bear.png" style="filter:brightness(50%);"> <img src="bear.png" style="filter:brightness(1);"> <img src="bear.png" style="filter:brightness(200%);"> <img src="bear.png" style="filter:brightness(5);">
コントラストを調整します。
100% 未満の値では画像の明るい部分と暗い部分の差が小さくなり、100% を超える値ではその差が大きくなります。0% の値ではグレー1色になり、100% の値では変更されないままになります。
コントラストを調整する。
属性値 | 説明 | |
---|---|---|
数値 | コントラストの割合 | 0~1:コントラストが下がる、1~:コントラストが上がる |
パーセント | 0%~100%:コントラストが下がる、100%~:コントラストが上がる |
値が大きくなるほどコントラストが強くなります。0 の値では画像がグレー1色になります。
<img src="bear.png" style="filter:contrast(0);"> <img src="bear.png" style="filter:contrast(50%);"> <img src="bear.png" style="filter:contrast(1);"> <img src="bear.png" style="filter:contrast(200%);"> <img src="bear.png" style="filter:contrast(5);">
影の位置や影が広がる半径を変えます。
影の位置や影が広がる半径を変える。
属性値 | 説明 |
---|---|
X位置 | 影の水平方向の距離 |
Y位置 | 影の垂直方向の距離 |
ぼかし半径 | 影をぼかす半径(値が大きくなるほど、影は広く薄くなる)(規定値:0) |
影の色 | 影の色を指定します。(規定値:ブラウザーによる) |
影の位置は元の画像からのオフセット距離を指定します。負の値を指定すると上や左、正の値では下や右への移動になります。
影をぼかす半径は、値が小さいほどくっきりし、大きくなるほどぼやけていきます。
<img src="bear.png" style="filter:drop-shadow(-5px -10px 5px blue);"> <img src="bear.png" style="filter:drop-shadow(-5px -5px);"> <img src="bear.png" style="filter:drop-shadow(0 0);"> <img src="bear.png" style="filter:drop-shadow(10px 3px 2px green);"> <img src="bear.png" style="filter:drop-shadow(0px 0px 20px red);">
グレースケールに変換します。
グレースケールに変換する。
属性値 | 説明 | |
---|---|---|
数値 | グレースケールの効果の割合 値を大きくすればするほど、グレーに変化する | 0~1 |
パーセント | 0%~100% |
影の位置は元の画像からのオフセット距離を指定します。負の値を指定すると上や左、正の値では下や右への移動になります。
影をぼかす半径は、値が小さいほどくっきりし、大きくなるほどぼやけていきます。
<img src="bear.png" style="filter:grayscale(0);"> <img src="bear.png" style="filter:grayscale(25%);"> <img src="bear.png" style="filter:grayscale(0.5);"> <img src="bear.png" style="filter:grayscale(75%);"> <img src="bear.png" style="filter:grayscale(1);">
画像のすべての色に色相の回転を適用します。
グレースケールに変換する。
属性値 | 説明 | |
---|---|---|
角度 | 色相の回転角度(数値+単位) |
正の回転角は色相の値を増加させるのに対し、負の回転角は色相の値を減少させます。最小値または最大値はなく、hue-rotate(Ndeg) は N を 360 で割った余りと同じ意味になります。
<img src="bear.png" style="filter:hue-rotate(0deg);"> <img src="bear.png" style="filter:hue-rotate(90deg);"> <img src="bear.png" style="filter:hue-rotate(0.5turn);"> <img src="bear.png" style="filter:hue-rotate(270deg);"> <img src="bear.png" style="filter:hue-rotate(1turn);">
画像のすべての色(色相・明度・彩度)を反転します。
画像のすべての色(色相・明度・彩度)を反転する。
属性値 | 説明 | |
---|---|---|
数値 | 変換の度合い 100% の値で完全に反転される | 0~1 |
パーセント | 0%~100% |
0%で元画像のままで、100%で完全に反転します。
<img src="bear.png" style="filter:invert(0);"> <img src="bear.png" style="filter:invert(25%);"> <img src="bear.png" style="filter:invert(0.5);"> <img src="bear.png" style="filter:invert(75%);"> <img src="bear.png" style="filter:invert(1);">
不透明度を設定します。
画像の不透明度を設定する。
属性値 | 説明 | |
---|---|---|
数値 | 不透明の度合い 100% の値で完全に不透明になる | 0~1 |
パーセント | 0%~100% |
0%は完全に透明で表示されません。100%で完全に不透明です。
<img src="bear.png" style="filter:opacity(0);"> <img src="bear.png" style="filter:opacity(25%);"> <img src="bear.png" style="filter:opacity(0.5);"> <img src="bear.png" style="filter:opacity(75%);"> <img src="bear.png" style="filter:opacity(1);">
彩度を調整します。
100% 未満の値では彩度が小さくなり、100% を超える値では彩度が大きくなります。0% の値では彩度が全くなくなり、100% の値では変更されないままになります。
彩度を調整する。
属性値 | 説明 | |
---|---|---|
数値 | 彩度の割合 | 0~1:彩度が下がる、1~:彩度が上がる |
パーセント | 0%~100%:彩度が下がる、100%~:彩度が上がる |
値が大きくなるほど彩度が上がります。0 の値では彩度が全くなくなります。
<img src="bear.png" style="filter:saturate(0);"> <img src="bear.png" style="filter:saturate(50%);"> <img src="bear.png" style="filter:saturate(1);"> <img src="bear.png" style="filter:saturate(200%);"> <img src="bear.png" style="filter:saturate(5);">
セピア色の変化を調整します。
100% 未満の値では彩度が小さくなり、100% を超える値では彩度が大きくなります。0% の値では彩度が全くなく、100% の値では変更されないままになります。
セピア色の変化を調整する。
属性値 | 説明 | |
---|---|---|
数値 | セピア色の度合い 100% の値で完全にセピア色になる | 0~1 |
パーセント | 0%~100% |
値が大きくなるほどセピア色になります。100% の値では画像が完全にセピア色になります。
<img src="bear.png" style="filter:sepia(0);"> <img src="bear.png" style="filter:sepia(25%);"> <img src="bear.png" style="filter:sepia(0.5);"> <img src="bear.png" style="filter:sepia(75%);"> <img src="bear.png" style="filter:sepia(1);">
SVG で記述したフィルターの URL を指定します。
SVG で記述したフィルターの URL を指定する。
属性値 | 説明 |
---|---|
URL | SVG で記述したフィルターの URL |
SVG のフィルターを参照して使用しています。
<svg style="position: absolute; top: -99999px" xmlns="http://www.w3.org/2000/svg"> <filter id="svgBlur" x="-5%" y="-5%" width="110%" height="110%"> <feGaussianBlur in="SourceGraphic" stdDeviation="2"/> </filter> <filter id="svgSaturate" x="-5%" y="-5%" width="110%" height="110%"> <feColorMatrix type="saturate" values="0"/> </filter> <filter id="svgTurbulence" x="0" y="0" width="100%" height="100%"> <feTurbulence type="turbulence" baseFrequency="0.2" numOctaves="3" result="turbulence"/> <feDisplacementMap in2="turbulence" in="SourceGraphic" scale="10" xChannelSelector="R" yChannelSelector="G"/> </filter> </svg> <img src="bear.png" style="filter:url(#svgBlur);"> <img src="bear.png" style="filter:url(#svgSaturate);"> <img src="bear.png" style="filter:url(#svgTurbulence);">