jQuery - 画像ホバー時に文字(キャプション)を表示する

以前、ホームページ運営者から 「画像ホバー時の効果」について次のような相談を受けました。

相談者「下図のように、画像の下側に文字(テキスト)を表示しているのですが、 文字部分に動きをつけたいと思っています」

画像下部に文字を表示

私「どのような動きをつけたいのですか?」

相談者「普段は文字を表示せずに、 画像ホバー時に下から文字が浮き上がってくる感じにできますか?」

私「jQueryやCSSで簡単に実装できますよ」

私「下から浮き上がるだけでなく、色を変えたり、 拡大したり等いろんな効果(エフェクト)が実装できますよ」

今回はこの相談を解決するために「画像ホバー時に文字を表示させる」 方法を紹介します。

単純に文字を「フェエードイン・フェードアウト」させる

サンプル

まずは上のサンプルのような、 テキストを「フェードイン・フェードアウト」させる場合の HTML・CSS・jQeuryのソースコードを紹介します。

HTML

<div class="card-box">
  <div class="card-img">
    <img src="https://picture.brain-studio.com/img/img02/a0364-1.jpg">
  </div>
  <div class="card-text">
    テキスト1
  </div>
</div>

CSS

.card-box {
  position: relative;
  width: 200px;
  height: 150px;
  margin: 5px;
}

.card-img,
.card-img img {
  width: 100%;
}

.card-text {
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  background-color: #000;
  color: white;
  font-weight: bold;
  text-align: center;
  opacity: 0.8;
  display: none;
}

「position: absolute;」、「left: 0;」、 「bottom: 0;」でテキストを表示する位置を設定しています。

jQuery

$(document).ready(function () {

  $('.card-box').on('mouseover', function () {
    $(this).children('.card-text').stop().fadeIn();
  });
  $('.card-box').on('mouseout', function () {
    $(this).children('.card-text').stop().fadeOut();
  });

});

画像ホバー時に文字を下から表示させる

サンプル

上のサンプルのように、画像ホバー時にテキストを下から浮き上がらせる場合の HTML・CSS・jQeuryのソースコードを紹介します。

HTML

HTMLは上記のHTMLと同じなので省略。

CSS

.card-box {
  position: relative;
  width: 200px;
  height: 150px;
  margin: 5px;
  overflow: hidden;
}

.card-img, .card-img img {
  width: 100%;
}

.card-text {
  position: absolute;
  width: 100%;
  height: 25px;
  left: 0;
  bottom: -25px;
  background-color: #000;
  color: white;
  font-weight: bold;
  text-align: center;
  opacity: 0.8;
}

CSSは赤字部分がポイントとなります。

テキスト部分を「bottom: -25px;」とし、最初はボックスの下側にはみ出すように配置しています。 このはみ出た部分を表示しないように「overflow: hidden;」を設定。

jQuery

$(document).ready(function () {

  $('.card-box').on('mouseover', function () {
    $(this).children('.card-text').stop().animate({'bottom' : 0}, 200, 'linear');
  });
  $('.card-box').on('mouseout', function () {
    $(this).children('.card-text').stop().animate({'bottom' : "-25px"}, 200, 'linear');
  });
});

今回はanimate()メソッドを使ってテキスト部分を上下させています。

まとめ

今回紹介したのは、ほんの一例です。

色を変えたり、画像の透明度を変化させたり、画像を拡大したり等々、 jQeuryやCSSを使うことで、さまざまな効果(エフェクト)を実現できます。