僕は記事に画像を挿入する際は毎回「代替テキスト(Alt属性値)」を入力しています。
これは、画像の説明となる「代替テキスト」を入力し、画像内容を検索エンジンに正確に伝えることによって、多少なりともSEO的な効果があるのではないかと思ってのことです。実際どのくらい効果があるのかは、わからないのですけど。
それはさておき僕は、毎回Alt属性値を入力するたびに常々こう思っていました。「(ほぼ)検索エンジンに向けてAltを入力するのはもったいないなぁ。何か入力したテキストを有効利用できないもんか。」と。
で、先日ネットで紹介されていたエフェクトを見たときに、「これだ!」と思い、「Altを利用しキャプションを表示するホバーエフェクトの実装方法」を思いついたので紹介です。
目次
今回のカスタマイズをすると
今回紹介するカスタマイズを行うと、Wordpress記事作成時にAlt属性とともに画像を挿入すると、Alt属性値がキャプションとなって以下のように表示されます。
PCで画像の上にマウスを乗せてみてください。
WordPressテーマのカスタマイズ方法
カスタマイズに必要な主な手順は以下です。
- エフェクト用のスタイルシートを書く(コピペ)
- imgをエフェクト用ラッパーで囲む処理を書く(コピペ)
単に、Wordpressテーマ(子テーマ)に2回コピペするだけなので、かなり簡単にできるカスタマイズになっていると思います。
エフェクト用のスタイルシートを書く
まずは、マウスホバー時にキャプションをアニメーション表示するスタイルシートを記入します。
テーマ(子テーマ)のstyle.cssに以下のように追記してください。
.hover-image { display: inline-block; margin: 10px; text-align: left; opacity: .99; overflow: hidden; position: relative; border-radius: 3px; box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.05); } .hover-image:before { content: ''; background: -webkit-linear-gradient(top, transparent 0%, rgba(0, 0, 0, 0.7) 100%); background: linear-gradient(to bottom, transparent 0%, rgba(0, 0, 0, 0.7) 100%); width: 100%; height: 50%; opacity: 0; position: absolute; top: 100%; left: 0; z-index: 2; -webkit-transition-property: top, opacity; transition-property: top, opacity; -webkit-transition-duration: 0.3s; transition-duration: 0.3s; } .hover-image img { display: block; max-width: 100%; backface-visibility: hidden; -webkit-backface-visibility: hidden; } .hover-image .details { font-size: 16px; padding: 20px; color: #fff; position: absolute; bottom: 0; left: 0; z-index: 3; } .hover-image .details span { display: block; opacity: 0; position: relative; top: 100px; -webkit-transition-property: top, opacity; transition-property: top, opacity; -webkit-transition-duration: 0.3s; transition-duration: 0.3s; -webkit-transition-delay: 0s; transition-delay: 0s; } /*今回は使用しない .hover-image .details .title { line-height: 1; font-weight: 600; font-size: 18px; }*/ .hover-image .details .info { line-height: 1.2; margin-top: 5px; font-size: 12px; } .hover-image:hover:before, .hover-image:hover span { opacity: 1; } .hover-image:hover:before { top: 50%; } .hover-image:hover span { top: 0; } /* 今回は使用しない .hover-image:hover .title { -webkit-transition-delay: 0.15s; transition-delay: 0.15s; }*/ .hover-image:hover .info { -webkit-transition-delay: 0.25s; transition-delay: 0.25s; }
エフェクトのスタイルシートは、以下のコードを参考にさせていただきました。
上記の方法では、キャプションとなるテキストをspanタグを用いて、手入力する必要がありました。けれど、今回はPHPを利用して、「本文内にimgがあったら自動でタグを挿入する」ようにしたいと思います。
PHP側で、このように自動処理させることで、これまで書いてきた過去記事のIMGタグは変更する必要がなく、Alt属性値を勝手に利用し表示してくれます。
imgをエフェクト用ラッパーで囲む処理を書く
で、上記のスタイルを適用させるには、functions.phpに「本文中にimgが出てきたら、適切にエフェクト用のラッパーでくるむ処理」を書く必要があります。
その処理が以下。こちらを、functions.phpにコピペで追記します。
//画像が出てきたらキャプション表示用のラッパーを装着 function wrap_hover_image($the_content) { if ( is_singular() ) { //Alt属性値のある画像タグをラッパー付きのタグで置換する $the_content = preg_replace( '/(<img.+?alt=[\'"]([^\'"]+?)[\'"].+?>)/i', '<div class="hover-image">${0}<div class="details"><span class="info">${2}</span></div></div>', $the_content); } return $the_content; } add_filter('the_content','wrap_hover_image');
これは、本文を表示する前に、「通常の画像タグ」を、「エフェクト用のタグ」でくるむよう正規表現を使って置換処理をしています。
利用方法
あとは、記事編集で画像を挿入するとき「代替テキスト(Alt属性値)」を入力して投稿に挿入すればOKです。
ソースはこんな感じです。
<img alt="記事編集時に「代替テキスト(Alt属性値)」を入力して投稿に挿入する" src="https://nelog.jp/wp-content/uploads/2015/06/Alt1.jpg" />
画像へのリンクが入っていても大丈夫です。
<a href="#"><img alt="画像へのリンクが入っていてもホバーエフェクト用のラッパーは装着されます" src="https://nelog.jp/wp-content/uploads/2015/06/thumb6.jpg" /></a>
ただし、Alt属性値が設定されていないとホバーエフェクトは表示されません。
<img src="https://nelog.jp/wp-content/uploads/2015/06/428ea6f60b4a63342f62e6baae25b414.jpg" />
なので、「代替テキスト(Alt属性値)」を設定していない、アイキャッチ画像などは、通常通りエフェクトなしで表示させることもできます。
まとめ
今回、SEO以外でもAlt属性値を有効活用すべく、Wordpressテーマのカスタマイズ方法考えてみました。
Alt属性値は、1度入力してしまうと、確認が面倒くさいため誤字脱字に気づきにくいのです。けれど、今回のようなエフェクトで手軽に表示できるようにすると、入力内容の確認が容易にもなるかと思います。
もちろん、今回のカスタマイズをしてもスマホでは表示されません。
けれど、PCで見ている人が「このサイトは画像1つ1つに説明が入っているなんて手間がかかっているなぁ。これだけちゃんと作ってあるとこの情報なら信頼できるかも。」なんてことを少しでも思ってくれたら、めっけもんだと思います。