オンマウス時に背景画像の上に半透明の色を重ねたい時のCSS設定

はじめに

背景画像の上に半透明の背景色を重ねたい時のCSS設定」のページを作った時に、「オンマウス時に画像に半透明の色を重ねるという方法も紹介する」と書きましたので、その方法を紹介していきます。

簡単に説明すると、疑似要素で半透明の背景色を設定し、それをオンマウス時のみ表示するように設定すれば良いです。

仕上がりイメージ

「オンマウスでの変化」なので、リンクボタンでの作成を想定しました。

(ちなみに今回も京都の八坂神社へ行った時に撮影した物を使っています)

画像にマウスを合わせてください。

目次

リンクの大まかな全体像を作る

まずはリンクの大まかな全体像(背景画像の部分)を作ります。

今回はimageではなくbackgroundなので、display:block;として枠全体の大きさを設定します。

リンクボタンを作っていきますが、ボタン部分のデザインは次のステップで説明します。

HTML

  1. <a href="#" class="sample01">詳しくはこちら</a>

CSS

  1. .sample01 {
  2.  position: relative;
  3.  width: 240px;
  4.  height: 240px;
  5.  background: url("背景画像のURL") center center / cover;
  6.  color: #fff;
  7.  text-decoration: none;
  8. }

できあがったもの

これで外枠の背景画像が配置できましたが、さらにボタンをデザインするためにHTMLとCSSに手を加えていきます。

ボタン部分を作る

このままのHTMLだとボタン(「詳しくはこちら」の箇所)が作れないので、「詳しくはこちら」をspanで囲んだ上でCSSを設定します。

テキストを上下中央に配置するCSS設定(5種類)」で紹介したことがあるのですが、リンクの枠内で上下中央にボタンを配置するためにCSSにdisplay:flexを追記します。

HTML

  1. <a href="#" class="sample01"><span>詳しくはこちら</span></a>

CSS

  1. .sample01 {
  2.  position: relative;
  3.  width: 240px;
  4.  height: 240px;
  5.  background: url("背景画像のURL") center center / cover;
  6.  color: #fff;
  7.  text-decoration: none;
  8.  display:flex;
  9.  align-items: center;
  10.  justify-content: center;
  11. }
  12. .sample01 span {
  13.  display: inline-block;
  14.  width: 200px;
  15.  line-height: 40px;
  16.  background: #338DC9;
  17.  border: 1px solid #ccc;
  18.  box-sizing:border-box;
  19.  box-shadow:2px 2px 0 rgba(0,0,0,.2);
  20.  text-align: center;
  21. }

できあがったもの

これで背景とボタンができましたので、次にオンマウス時の半透明の背景色を作っていきます。

これ以降HTMLは編集しないので割愛します。

半透明の背景色を作る

オンマウス時の背景色を作るには「景画像の上に半透明の背景色を重ねたい時のCSS設定」と同様に疑似要素:hoverで背景色を設定していきます。

さらに今回は「オンマウス時に背景色を重ねる」という想定なので:hoverも記載していきます。

背景色のカラーは透過度50%の黒rgba(0,0,0,.5)としました。

CSS(追記部分のみ)

  1. sample01:hover:before {
  2.  position: absolute;
  3.  content: '';
  4.  width: 100%;
  5.  height: 100%;
  6.  left: 0;
  7.  top: 0;
  8.  background-color: rgba(0,0,0,.5);
  9. }

できあがったもの

これでオンマウス時に背景色が重なるようになりました。

しかし、ボタン(青い所)の上にも重なってしまうため、オンマウス時のボタンが暗くなってしまいました。

背景色の重なりを調整してボタンに背景色が重ならないようにします。

オンマウス時の重なりを調整する

重なりを調整するにはz-indexを使います。

ボタンspanが疑似要素beforeより上に配置されるようにしたら良いので、span内に大きい数値のz-indexを設定すれば良いです。

CSS

  1. .sample01 {
  2.  position: relative;
  3.  width: 240px;
  4.  height: 240px;
  5.  background: url("背景画像のURL") center center / cover;
  6.  color: #fff;
  7.  text-decoration: none;
  8.  display:flex;
  9.  align-items: center;
  10.  justify-content: center;
  11. }
  12. .sample01 span {
  13.  display: inline-block;
  14.  width: 200px;
  15.  line-height: 40px;
  16.  background: #338DC9;
  17.  border: 1px solid #ccc;
  18.  box-sizing:border-box;
  19.  box-shadow:2px 2px 0 rgba(0,0,0,.2);
  20.  text-align: center;
  21.  z-index: 2;
  22. }
  23. sample01:hover:before {
  24.  position: absolute;
  25.  content: '';
  26.  width: 100%;
  27.  height: 100%;
  28.  left: 0;
  29.  top: 0;
  30.  background-color: rgba(0,0,0,.5);
  31.  z-index: 1;
  32. }

できあがったもの

これでオンマウス時に背景画像の上に背景色を重ねることができました。

せっかくなのでもう少しデザインに手を加えてみたいと思います。

おまけ

背景色を左から右へスライドして表示させるCSS設定」のようにオンマウス時に下から上へ背景色がスライドして出てくるようなアニメーションを実装してみます。

詳しい設定は上記のページを見て頂きたいのですが、今回の場合だとsample01:hover:beforeの箇所にアニメーションを設定(追記)します。

簡単に説明するとオフマウス時はリンク枠外(Y軸で100%分下)に背景色を配置し、オンマウスでそれをリンク枠内(Y軸で0%の位置)に移動させることでアニメーションになります。

オフマウス時に背景色が枠の外に配置されるのでsample01overflow: hidden;を追記する必要があります。

CSS(追記のみ)

  1. .sample01 {
  2. ~省略~
  3. overflow: hidden; /* ここを追記 */
  4. }
  5. sample01:hover:before {
  6.  position: absolute;
  7.  content: '';
  8.  width: 100%;
  9.  height: 100%;
  10.  left: 0;
  11.  top: 0;
  12.  background-color: rgba(0,0,0,.5);
  13.  z-index: 1;
  14.  animation-name: test_link_bg;
  15.  animation-duration:.2s;
  16.  animation-fill-mode: forwards;
  17.  @keyframes test_link_bg {
  18.   0% {
  19.    transform: translate(0,100%)
  20.   }
  21.   100% {
  22.    transform: translate(0,0)
  23.   }
  24.  }
  25. }

できあがったもの