CSS3 + jQueryによる、グラデーションのホバー効果

Windows8のタスクバーのアイコンをマウスでホバーしたときに見られる、
マウスを中心にグラデーションした効果が面白いと思ったので、
CSS3とjQueryを使って、それっぽいものを作ってみました。
↓こちらがデモです
HTML
| 1 2 3 4 5 6 7 | <ul> 	<li><a href=""#>HOME</a></li> 	<li><a href=""#>LIST</a></li> 	<li><a href=""#>PRODUCT</a></li> 	<li><a href=""#>ABOUT</a></li> 	<li><a href=""#>CONTACT</a></li> </ul> | 
CSS
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ul{ 	width: 700px; 	margin: 0 auto; } ul li{ 	width: 120px; 	height: 60px; 	font-family: Arial, Helvetica, sans-serif; 	font-size: 20px; 	list-style: none; 	margin: 10px; 	text-align: center; 	float: left; } ul li a{ 	display: block; 	width: 118px; 	height: 58px; 	background: #ff4705; 	border-radius: 8px; 	border: solid 1px #ff6405; 	line-height: 60px; 	text-decoration: none; 	color: #fff; } | 
HTMLとCSSは通常通りにします。
JavaScript
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | $(function(){ 	//関数の実行 	gradientBox("ul li a");	//gradientBox([効果をつける要素のセレクタ]); 	function gradientBox(target){ 		var target = $(target); 		target.on("mousemove touchmove", function(e){	//マウスが指定した要素上で動いたら実行 			var startClr = "#ffb76b";	//グラデーションの開始色 			var middleClr = "#ff6405";	//グラデーションの途中色 			var endClr = "#ff4705";	//グラデーションの終了色 			//要素の大きさを取得 			var boxWidth = $(this).width(); 			var boxHeight = $(this).height(); 			//要素上のマウス座標を取得 			var mx = e.clientX - $(this).offset().left; 			var my = e.clientY - $(this).offset().top; 			//要素上のマウス座標を%に変換 			var prx = (mx / boxWidth) * 100; 			var pry = (my / boxHeight) * 100; 			//ブラウザごとにグラデーションの指定方法を変更 			var ua = navigator.userAgent.toLowerCase(); 			if(ua.indexOf("safari") != -1 || ua.indexOf("chrome") != -1 || ua.indexOf("ipad") != -1 || ua.indexOf("ipod") != -1 || ua.indexOf("iphone") != -1 || ua.indexOf("android") != -1){ 				//グラデーションをCSSで指定 				$(this).css({ 					"background" : "-webkit-radial-gradient(" + prx + "% " + pry + "%, ellipse farthest-side, " + startClr + " 0%, " + middleClr + " 60%, " + endClr + " 100%)" 				}); 			}else if(ua.indexOf("firefox")){ 				$(this).css({ 					"background" : "-moz-radial-gradient(" + prx + "% " + pry + "%, ellipse farthest-side, " + startClr + " 0%, " + middleClr + " 60%, " + endClr + " 100%)" 				}); 			}else{ 				$(this).css({ 					"background" : "radial-gradient(" + prx + "% " + pry + "%, ellipse farthest-side, " + startClr + " 0%, " + middleClr + " 60%, " + endClr + " 100%)" 				}); 			} 		}).on("mouseout touchout", function(){	//マウスが指定した要素から離れたら実行 			$(this).css("background", "#ff4705"); 		}); 	} }); | 
基本的な仕組みは、要素上のマウス座標を取得して、要素上のマウス座標をパーセントに変換して、
CSS3のbackground: radial-gradientの中心の場所を当てはめるというシンプルなものです。
ちなみにCSS3での放射状グラデーションの指定方法は、
background: radial-gradient([中心の位置(横方向)] [中心の位置(縦方向)], 形状 サイズ, 開始色 位置, 途中色 位置, 終了色 位置);
ですので、今回は中心の位置に、マウスの位置を当てはめて効果をつけています。
radial-gradientの中心位置は、割合で指定する必要があるので、パーセントに変換しています。
ブラウザごとに若干指定方法が変わってくるので、指定方法の振り分けも行っています。
Author Profile

NINOMIYA
Webデザイナー兼コーダー出身のフロントエンド開発者です。 UXデザインやチーム開発の効率化など、勉強中です。
SHARE




