みなさん、こんにちは。ここぽてとです。駆け出しのWEBコーダーをしています。WEB制作で、ホームページを制作していると、なんかメニューがいまいちぱっとせず、動きをつけたいな~と思ったりしませんか?
動きをつけたいい感じのサイトメニューを作りたい!
そのような方のために、今回は、マウスホバー時に動きを付ける方法をご紹介したいと思います。
今日ご紹介する方法で、リンクにマウスカーソルをのせると動くアニメーションが付けられるようになります。
アニメーションをつけることで
- 訪問者がリンクできる場所が見えやすい
- ページがどこにあるかわかりやすくなる
- 単純にオシャレに見える
という感じで、良いことづくしです!
また、今回はマウスホバーでアニメーションをつける他にも、jQueryを使ってページ内リンクでクリックした要素に下線を引く方法も別で学習したので、このページにまとめたいと思います。jQueryって難しそうと思っている方にもわかりやすくまとめたので、一度読んでもらえると嬉しいです。
マウスホバー時の動きの基本
【ポイント】
hoverとtransitionをセットで使う!
transition: all 0.3s ease 0s;
transitionプロパティをつけるだけでふわーっとした動きになって視覚的にも優しくなる。
“transition: all 0.3s ease 0s;”の”all”はすべてのプロパティを対象に、”0.3s”は0.3秒かけてアニメーションを反映させる、”ease”は変化の方法、最後の”0s”はアニメーションを発動させるまでの時間で、ここではマウスを乗せてすぐにアニメーションをつけたいので、0秒にしています。
マウスホバー時の透過処理
ボタンやリンクなど視覚的にマウスがアクションできる状態であることが分かる装飾をつけてあげるとことでサイトの訪問者にも見えやすく親切です。デザイナーさんの指定がない場合は、透過処理をすると無難ということです。メニューのリンクのCSSもしくはSassに下のように打ち込んでいきます。
a {
transition: all 0.3s ease 0s;
}
a:hover {
opacity: 0.6;
}
a {
transition: all 0.3s ease 0s;
&:hover {
opacity: 0.6;
}
}
CSSでは、元の要素にアニメーションを設定するtransitionを指定し、hover要素にopacityを指定してあげるとOK。Sassであれば、&:hoverで入れ子で指定すれば、OKです。これでメニューのリンクにポインターを合わせたとき、リンクが少し透明になり、わかりやすくなります。
ヘッダーメニューの現在表示のページ+マウスホバーにアクセントをつける
ヘッダーのメニューボタンの現在のページにアクセントをつけて、リンクにマウスホバーした時にアクセント(赤い線)が入るように設定していきます。「今表示しているページ」や「クリックするとこのページを表示」と訪問者に分かりやすく表示することを目的としていますが、わかりやすさだけではなく、普通にオシャレ感が出ます。
<ul class="header__nav">
<li ><a href="" class="is-active">Card</a></li>
<li><a href="" >News</a></li>
<li><a href="">Price</a></li>
<li><a href="" >Access</a></li>
<li><a href="" >Contact</a></li>
</ul>
.header__nav{
margin-left: auto;
display: flex;
li{
&:not(:first-child){
margin-left:40px;
}
a{
color: #FFF;
text-decoration: none;
position: relative;
&::after{
content: "";
position: absolute;
bottom: -12px;
left: 0;
width: 100%;
height: 2px;
background: transparent;
transition: all 0.3s ease 0s;
}
&:hover,
&.is-active{
&::after{
background:#E81919;
}
}
}
}
}
ページ内リンクでクリックした要素に下線を引く(クリックイベントの処理)
リンクにマウスホバーした時にアクセントが入るように設定はできましたが、このままだと現在のページでないところでも、赤いアクセントが入ったままなので、他のページに移ったら赤い線が現在のページとして表示するような設定をしていきます。jQueryのaddClassとremoveClassを使って、作っていきます。
その前に、Cardをのところをクリックしたら、Cardのページまでスクロールして飛ぶようにしておきたいので、その設定をします。
ページ内リンク先のidと位置を取得してアニメーションさせる
<nav class="header__nav">
<ul>
<li><a href="#card class="is-active">Card</a></li>
<li><a href="#news">News</a></li>
<li><a href="#price">Price</a></li>
<li><a href="#access">Access</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
<section id="card" class="card">・・・</section>
<section id="news" class="news">・・・</section>
<section id="price" class="price">・・・</section>
<section id="access" class="access">・・・</section>
<section id="contact" class="contact">・・・</section>
jQuery('a[href^="#"]').on('click' , function() {
// スムーススクロールの処理を書く
//headerの位置(高さ)を取得
var header =jQuery('.header').innerHeight();
var id = jQuery(this).attr('href');
//トップに戻る(#のみ)でもアニメーションを効かせるようにするために初期値を0にする
var position = 0;
//もし、idが#だけじゃないなら
if ( id != '#'){
//offsetは位置取得(検証→コンソール→メニューリンク→位置の高さがわかる)
var position = jQuery(id).offset().top-header;//Topからヘッダーの高さを引く
}
//consoleを忘れると動かないので注意!
console.log(id);
console.log(position);
jQuery('html,body').animate({
scrollTop:position
},
300);
});
idと位置を取得したので、メニューをクリックしたら、そのページ内リンクまでスクロールされるような動きを作ることができました!次がいよいよ、本題です。
ページ内リンクでクリックした要素に下線を引く
いよいよ、ページ内リンクでクリックした要素に対してメニューに下線が付くようにしていきます!
・クリックされた時にメニューの全てのリンクの下線を削除する(removeClass)
・クリックされた要素に対して下線を引く(addClass)
jQuery('.header__nav li a').on('click', function() {
jQuery('.header__nav li a').removeClass( 'is-active' );
jQuery(this).addClass( 'is-active' );
return false;
});
jsファイルにこちらをいれることで、動画のように、メニューのCardをクリックすると、Cardに赤線、Newsをクリックすると、Newsに赤線が入るようになりました!ページ内スクロールもバッチリです。
アニメーションを加えるだけでいい感じのホームページになったね!
まとめ
本日は、メニューリンクにマウスホバー時の動きをつけて、ページ内リンクでクリックした要素に下線を引く方法をまとめました。マウス時のホバーをつける意味は、ボタンやリンクなど視覚的にマウスがアクションできる状態であることが分かる装飾をつけてあげることでサイトの訪問者にもわかりやすいからだということも学習しました。
基本、デザイナーさんからの指定がなければホバー時に透過処理をするのが無難ということなので、忘れずにホバーのアニメーションをつけていきたいと思います。
javascriptを入れてアニメーションをつけるだけで、本格的なホームページに見せることができるというのを体感できたと思います。