mask-image は、指定した要素(疑似要素等)に対してマスクを設定することができるプロパティで、これを利用することでSVG画像等を外部ファイルに保存したまま、CSSの修正だけでアイコンの色を変更できるようになる。
mask-image プロパティを利用する際には主に4つのプロパティを組み合わせて記述する。
- mask-image
- mask-position
- mask-size
- mask-repeat
<button>
<span class="button-text">青いアイコンのボタンです</span>
</button>
button {
display: inline-flex;
align-items: center;
padding: 15px;
}
.button-text {
position: relative;
font-size: 120%;
font-weight: 500;
padding-right: 25px;
}
.button-text::after {
content: '';
display: inline-block;
width: 16px;
height: 16px;
background-color: #00f;
-webkit-mask-image: url('./1.svg');
mask-image: url('./1.svg');
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-size: auto;
mask-size: auto;
position: absolute;
right: 0;
top: 3px;
}
#00f で背景色を指定したafter疑似要素に対してSVG形式のアイコンでマスクをかけ、それを絶対配置で文字の横に配置している。
イメージ的には background-image プロパティを利用して背景画像としてアイコンを指定しているのと大差はない。マスクされたアイコンに適用される色は background-color プロパティで指定しているため、利用用途に応じて変更可能である。
上記例では大きさはそのまま使用したが、 mask-size プロパティと疑似要素自体の大きさ(width, height)を調整することで変更可能で、マスクに利用している画像がSVG形式であれば、アイコンが荒くなる心配もない。
mask-imageの活用例
mask-image プロパティが一番活躍するのは、ボタンにマウスカーソルを合わせると色が反転したりする簡易なホバー効果を実装するときである。
<div>
<a class="button" href="#">マウスをあてると反転します</a>
</div>
.button {
position: relative;
width: 300px;
height: 80px;
padding-right: 20px;
display: flex;
justify-content: center;
align-items: center;
text-decoration: none;
color: #fff;
font-weight: 500;
border: 2px solid #000;
background-color: #000;
transition: all 0.3s;
}
.button::after {
content: '';
position: absolute;
right: 20px;
top: calc(50% - 12px);
width: 24px;
height: 24px;
display: block;
background-color: #fff;
transition: all 0.3s;
-webkit-mask-image: url("1.svg");
mask-image: url("1.svg");
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
-webkit-mask-size: 20px auto;
mask-size: 20px auto;
}
.button:hover {
background-color: #fff;
color: #000;
}
.button:hover::after {
background-color: #000;
}
今までは背景の色や文字の色(ホバー後に変わる色)に合わせて色の数だけアイコンを書き出して、個別にクラスを指定してスタイルを適用していたが、 mask-image プロパティが使えるようになってからはCSSの修正のみでアイコンの色を管理できるようになる。