The mask feature lets you use an image or gradient like a stencil to show only certain parts of an element, or fade parts of it smoothly.
mask は、画像やグラデーションを“型紙”みたいに使って、要素の見える部分だけを切り抜いたり、じわっと消したりできるCSSです。
mask は、要素の「見えるところ/見えないところ」を“マスク画像”で決めるためのCSSです。
イメージとしては「透明なシート(型紙)を上から重ねて、穴が空いてる部分だけ見せる」感じです。
この“型紙”として使えるのは、画像(PNGなど)、グラデーション、SVGなどです。
さらに 位置・サイズ・繰り返し まで細かくコントロールできます。
clip-path だと表現しづらい 柔らかいぼかし(フェード)を使いたいclip-pathmask多くのケースでは マスク画像の透明度 がそのまま「見える割合」になります。
mask-image はカンマ区切りで複数指定できて、重ね方(合成)もできます。
mask-position / mask-size / mask-repeat は、背景画像の指定方法にかなり近いです。
「背景が分かってる人は覚えやすい」です。
写真やカードの“下端フェードアウト”に超よく使います。
HTML
<div class="photoFade">
<img src="photo.jpg" alt="プログラミングしている女性の写真">
</div>
CSS
.photoFade {
text-align: center;
}
.photoFade img {
width: 100%;
max-width: 360px;
/* 下に行くほど透明になるマスク */
mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0));
}
ポイント:
rgba(0,0,0,1) は “黒” だけど α=1 なので「見える」側です。“ロゴ形に写真を抜く” みたいな使い方。
HTML
<div class="masked"></div>
CSS
.masked {
width: 360px;
height: 220px;
/* 見せたいコンテンツ(下地) */
background-image: url("photo.jpg");
background-size: cover;
background-position: center;
/* 型紙(マスク) */
mask-image: url("logo-shape.png");
mask-repeat: no-repeat;
mask-position: center;
mask-size: contain;
}
mask-size: containmask-repeat: no-repeatlogo-shape.png は「見せたい形が不透明、隠したい部分が透明」な画像を用意します。
色そのものより 透明度(アルファ値) が決定的に重要です。
イメージとしては、
これだけです。
基本形(最もおすすめ)
例:
この白い部分だけが 「見える窓」 になります。
いいえ。色はほぼ関係ありません。
大事なのは:
つまり、
不透明なら見えます。
ただし実務では 白ベタで作るのが一番分かりやすく、事故が少ない という理由で白がよく使われます。
はい。むしろ mask の強み です。
例:エッジをふんわりさせたい場合
こうすると、
ただし初心者のうちは まずはベタ塗り → 慣れたらグラデーション がおすすめです。
Plaintext
[ 透明 ] [ 透明 ] [ 透明 ]
[ 透明 ] [ ロゴ ] [ 透明 ]
[ 透明 ] [ 透明 ] [ 透明 ]
この「ロゴ」の部分だけが表示されます。
❌ 背景が白いJPEG
❌ ロゴだけ透明、背景が不透明
「見せたい形=不透明」 を常に意識します。
小さいPNGを無理に拡大しない
実務的な目安
使えます。むしろ理想的です。
SVGマスクのメリット
ただし注意点
Photoshop / GIMP / Figma など
それだけでOKです。
CSS側でまずこれを試します:
CSS
.test {
mask-image: url("logo-shape.png");
mask-repeat: no-repeat;
mask-position: center;
mask-size: contain;
}
もし効かなければ、一度こうします:
CSS
mask-image: linear-gradient(black, black);
これで効くなら CSSは正しい、画像側の問題 と切り分けできます。
マスクを「ちょうどこの位置に置きたい」「ちょっと拡大したい」が出てきます。
mask-positioncenter, right 20px top 10px)mask-sizecover/contain や 200px 100px)mask-repeatno-repeat, repeat)例:右上に小さめのマスクを置く
HTML
<div class="badgeMasked">
<img src="photo.jpg" alt="プログラミングしている女性の写真">
</div>
CSS
.badgeMasked img {
width: 360px;
height: 220px;
mask-image: url("badge.png");
mask-repeat: no-repeat;
mask-position: right 12px top 12px;
mask-size: 113px 41px;
}
ここは混乱しやすいので、最初はこう覚えるのが楽です。
mask-originmask-clip値としては、だいたいこの3つがよく出ます:
content-boxpadding-boxborder-box例:ボーダー部分にはマスクを効かせない(中身だけ抜く)
HTML
<div class="maskCard">
<div class="maskInner">
MASK
</div>
</div>
CSS
/* 外側:ボーダー枠 */
.maskCard {
width: 260px;
height: 160px;
border: 8px solid #000;
padding: 16px;
background: #fff;
}
/* 内側:マスクをかける対象 */
.maskInner {
width: 100%;
height: 100%;
/* 中身が分かりやすいように派手な背景 */
background: linear-gradient(135deg, #ff7a18, #ffd200);
/* 文字を中央に */
display: flex;
align-items: center;
justify-content: center;
font-size: 32px;
font-weight: bold;
color: #000;
/* ここが今回の主役 */
mask-image: radial-gradient(circle, rgba(0,0,0,1) 60%, rgba(0,0,0,0) 61%);
mask-origin: content-box;
mask-clip: content-box;
}
マスクは複数指定できる
mask-image をカンマ区切りで複数書けます。
CSS
.multiMask {
mask-image:
radial-gradient(circle at 30% 50%, rgba(0,0,0,1), rgba(0,0,0,0)),
linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0));
mask-repeat: no-repeat, no-repeat;
mask-size: 240px 240px, 100% 100%;
mask-position: left 24px center, center;
}
合成ルール(mask-composite / mask の合成)
複数マスクをどう混ぜるかで表現が一気に増えます。
ただしここは ブラウザ差分 が出やすい領域なので、実戦では「対応状況を確認しながら」が安全です。
mask は複数のマスク関連プロパティをまとめて書けます。
ただ、最初は 読みやすさ優先で個別指定のほうが学習しやすいです。
「慣れてきたら短くする」くらいがおすすめです。
マスクは演出と相性が良いです。たとえば「横から現れる」演出。
HTML
<div class="reveal">Hello mask</div>
CSS
.reveal {
font-size: 40px;
font-weight: 700;
display: inline-block;
mask-image: linear-gradient(to right, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 40%, rgba(0,0,0,1) 100%);
mask-size: 300% 100%;
mask-position: 100% 0;
transition: mask-position 800ms ease;
}
.reveal:hover {
mask-position: 0 0;
}
コツ:
mask-position や mask-size を動かすと分かりやすいマスクは「見た目を隠す」だけで、要素自体が消えるわけではありません。
そのため、見えないのにクリックできる みたいな違和感が起きることがあります。
対策の考え方:
clip-path を検討mask を使うなら、クリック領域の要件を設計側と相談mask-size が中途半端な拡大になっているこの2つが多いです。
対策:
大きい要素に重いマスク(巨大画像+アニメーション)をかけると、端末によってはカクつきます。
実務のコツ:
マスクは比較的新しい表現が多く、環境差が出ることがあります。
本番導入するなら、対象ブラウザでの目視チェックはかなり大事です。
最初はこれだけで十分です。
mask-imagemask-repeatmask-positionmask-size慣れてきたら追加
mask-clipmask-origin上級者の引き出し
mask-compositemask-type などclip-path も検討してください。mask-position と mask-size は background-position / background-size にかなり近い感覚で使えます。mask-image が指定できているか、URLのパスが正しいかを確認します。まずは linear-gradient(...) を指定して動くか試すと切り分けが早いです。mask-repeat が既定で repeat 扱いになっていることがあります。no-repeat を指定してみてください。mask-position / mask-size を明示します。さらに必要なら mask-origin / mask-clip の基準(content-box など)を合わせます。mask-size の調整を検討します。