CSSのマスク(切り抜き)効果でOpen the Window!
マスク(切り抜き)によるデザインは媒体を問わず広く使われます。ウェブサイトでもCSS3の登場でマスクを取り入れたサイトをよく目にするようになりました。今回はマスクを可能にするCSSプロパティmask-image
clip-path
background-clip
の3つを見ていきたいと思います。
目 次
mask-imageを使ったマスク
mask-image
を見ていきましょう。ここではrepeating-linear-gradient
を使って縦ストライプでマスクしています。
See the Pen css-mask by ロウタ (@nqhzuqom-the-looper) on CodePen.
グラデーションを使うとこんな感じになります。
See the Pen css-mask02 by ロウタ (@nqhzuqom-the-looper) on CodePen.
ストライプや色数の多い複雑なグラデーションの記述は大変なのでジェネレーターを使うのがいいでしょう。
その他にもpngやsvgを指定することで、ロゴや複雑なシェイプでマスクすることもできます。画像指定の注意点としてはテスト環境ではローカルのHTTPサーバーを立ち上げないと画像を認識しません。なぜかmask-image
はHTTPプロトコルのリクエストがあるようです。簡単にローカルサーバーを構築できるVS Code の Live Serverがオススメです。
//ストライプでマスク
mask-image: repeating-linear-gradient(90deg, rgba(0, 0, 0, 0) 10% 15%, rgba(0, 0, 0, 1) 15% 20%);
//グラデーションでマスク
mask-image: linear-gradient(to bottom, transparent, black);
//画像のパスを指定
mask-image: url("../images/hoge-mask.png"); //ローカルサーバーが必要
その他の関連プロパティ
mask-image
に関連したプロパティには以下のものがあります。
mask-mode
: マスク画像の適用方法を指定します(alpha
やluminance
など)。mask-position
: マスク画像の位置を指定します。mask-size
: マスク画像のサイズを指定します。mask-repeat
: マスク画像の繰り返し方法を指定します。mask-origin
: マスク画像の基準となる要素の部分を指定します。mask-clip
: マスク画像のクリッピング範囲を指定します。
background
と同じようなプロパティが並びます。覚えやすく自由度も高いmask-image
がCSSでマスクするときの基本になりそうです。
clip-pathを使ったマスク
clip-path
はmask-image
ほど自由度は高くありませんが手軽にマスクがかけられるのでザックリ「菱形」や「円」で切り抜きたいときには便利です。
See the Pen clip-path01 by ロウタ (@nqhzuqom-the-looper) on CodePen.
clip-path
の記述もlinear-gradient
同様、ジェネレーターを使えば少し凝った形にすることも簡単です。
See the Pen Untitled by ロウタ (@nqhzuqom-the-looper) on CodePen.
background-clipでテキストを使ったマスク
最後にbackground-clip
を見ていきましょう。background-clip
はマスクというよりbackground
の範囲を指定するプロパティですが、値をtext
にし色指定をcolor:transparent;
することでテキストを使った切り抜きが表現出来ます。
See the Pen mask-text by ロウタ (@nqhzuqom-the-looper) on CodePen.
テキストを使ってマスクする時に気をつけたいのは、背景色と切り抜かれたテキストのコントラスト比を高くする事です。
See the Pen mask-text02 by ロウタ (@nqhzuqom-the-looper) on CodePen.
このように背景色がグレーの時、上下二つのテキスト「MASK」の見え方に違いがあるのがよくわかりますね。空の部分で切り抜かれたテキストは背景色のグレとーコントラス比が高いため、はっきりと読めますが崖の部分で切り抜かれたテキストは背景色に馴染んでしまい読みにくくなっています。これについてはマークアップというよりデザイン寄りの話になりますが、mdn web docsではこのように指摘してます。
アクセシビリティの考慮
background-clip: text
を使用する際には、背景色とその上に配置されたテキストの色のコントラスト比が、弱視の人がページの内容を読むことができる程度に高いことを確認してください。
まとめ
いかがだったでしょうか。マスクについてはSVGやCanvasを使ったよりインタラクティブな表現方法もありますが、CSSだけでもいろいろなマスク効果が実現出来ることがわかりました。transition
やanimation
など組み合わせてよりリッチな表現も可能でしょう。色々試してオリジナルな表現を探してみるのもいいかもしれません。最後までお読みいただきありがとうございました。