mix-blend-mode

月

今夜は月が綺麗だった。 金色に輝いているように見えたのだが、写真だと加工中の銅って感じだな。

月を眺めた後、つまりついさっき知ったのだが、今では css だけで、背景に応じて文字色を変えることができるんだね。 具体的にはこんな感じ。

白と黒

html

<div class="box smpl1"> 白と黒 </div>

css

.smpl1 { background-color: #000000; color: #ffffff; } .smpl1::before { content: ''; position: absolute; left: 0; top: 0; width: 50%; height: 100%; mix-blend-mode: difference; background-color: #ffffff; }

ポイントは mix-blend-mode で、ここで指定している difference は、設定上の文字色と背景色のRGB各値の差分の絶対値を実際に表示する文字色とする。

上のサンプルの左半分が適用対象で、ここでは背景が白で文字も白。 白は rgb(255,255,255) なので、背景と文字のRGB各値の差の絶対値を取った色は rgb(0,0,0) となる。 つまり黒。 これが文字色として適用されるのだな。

背景が画像の場合も同じ。

十三夜

html

<div class="box smpl2"> <span>十三夜</span> </div>

css

.smpl2 { background: black url(./pht_01.jpg) no-repeat center center;; color: #ffffff; } .smpl2 span { mix-blend-mode: difference; }

設定自体は簡単だけど、背景画像と文字の組み合わせは難しいかもしれない。 写真などの精細な画像だと、文字色も同じ精細さで決められる所為か、少々見辛い結果になってしまう。

指定できるのは difference の他にも色々あるので、そのうち試してみよう。