LoginSignup
14
12

More than 5 years have passed since last update.

CSS3でWebサイト上のナビゲートに使える「くり抜き(スポットライト)」を実装する

Last updated at Posted at 2016-10-12

Webサービスの初回ヘルプなどを作成するとき、ユーザーの次のアクションを示すボタン以外を暗くして、次のアクションを明示的に示したい場面というのは度々あるかと思います。

呼び方は人によって違いがあるかとは思いますが、私は「スポットライト」を呼んでいますので、以後は「スポットライト」の名称で進めていきたいと思います。

今回はそのスポットライトをCSSで実装したサンプルを見た後に、実際の実現方法を解説します。

CSSでスポットライト

スクリーンショット 2016-10-12 21.03.19.png
CSS Spotlight http://codepen.io/potato4d/pen/yaoExv

まずはじめに、完成したものが以上となります。
Click me!と書かれたボタンの周囲が明るくなっており、それ以外の部分が暗くなっています。

CodePenにアクセスしてもらうと分かる通り、Click meがClickableとなっており、ホバー・クリックが可能となっています。

動作のしくみ

それでは、詳しい説明にはいっていきます。
まず前提ですが、CSSを普段記述するかたですとおわかりの通り、明るい部分を明るくしているわけではなく、全体を大きなdiv要素.spotlightで囲っており、真ん中のみを透過しています。

スクリーンショット 2016-10-12 21.07.10.png

透過をまったくなしに書き換えて表示した場合のようす。薄暗くかかっている全体が、.spotlight要素となります。

その上で、背景(background)にradial-gradientプロパティを利用しています。
これは、円形グラデーションを作成するためのプロパティですが、radial-gradientおよびlinear-gradientのグラデーションプロパティは、
例えば0~100pxを白、100px~を赤などと指定すると、完全なる別の2色を表示することができます。

スクリーンショット 2016-10-12 21.11.04.png
CSS Gradient Double Color http://codepen.io/potato4d/pen/WGybmO

赤と緑でlinear-gradientを利用した場合のようす。中央である50%を境として、二分されています。

その上で、CSSには透明を表すtransparentがありますので、2色のうち片方にtransparentを指定してやります。
その上で、もう片方をrgba(0,0,0,0.4)などの半透明色を指定してやると、先程のスポットライトを作成することができます。

スクリーンショット 2016-10-12 21.15.17.png

transparentrgba(0,0,0,0.4)を指定した場合の見えかたの変化のようす。

これらの知識をつなぎ合わせて、実際のコードに落とし込むとき、.spotlightのコードは以下となります。

style.css
.spotlight{
  position: absolute;
  left: 0;
  top : 0;

  width: 100vw;
  height: 100vh;

  background: radial-gradient(transparent, transparent 100px, rgba(0,0,0,0.4) 100px, rgba(0,0,0,0.4));

  pointer-events: none;
}

そうして、実際の表示ははじめにあったCodePenのものとなります。

カスタマイズ

スクリーンショット 2016-10-12 21.22.07.png

今回は楕円で作成しましたが、radial-gredientcircleを足すことで正円にすることも可能です。

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12