WordPress で wp_list_categories()で出力したリストに CSS で背景画像を設定して、マウスオーバーしたときに表示するようにする。
<div id="cat_list">
<h3>リスト</h3>
<ul>
<?php wp_list_categories(array('title_li' => '')); ?>
</ul>
</div>
出力されるHTML
<div id="cat_list">
<h3>リスト</h3>
<ul>
<li class="cat-item cat-item-4"><a href="http://localhost/wp/category/jquery/" title="jQuery に含まれる投稿をすべて表示">jQuery</a>
</li>
<li class="cat-item cat-item-5"><a href="http://localhost/wp/category/php/" title="PHP に含まれる投稿をすべて表示">PHP</a>
</li>
・・・
</ul>
</div>
CSSは
#cat_list ul li {
margin-left: 20px;
background:url(images/arrow-trans.png) no-repeat ;
}
#cat_list ul li a {
font-size: 0.8em;
padding: 0 30px 0 15px;
border-bottom: 1px solid #999999;
}
jQuery でまず、「background」を「none」にしておく。
マウスオーバーしたら、背景画像を指定して、マウスアウトしたら、「background」を「none」にする。
WordPress で jQuery を使い画像のパスを指定する場合、絶対パスで指定しないと表示されない。
jQuery(document).ready(function($) {
$('#cat_list ul li').css('background', 'none');
$('#cat_list ul li a').hover(
function() {
$(this).parent().css('background', 'url(http://localhost/画像への絶対パスを指定/images/arrow-trans.png) no-repeat');
},
function() {
$(this).parent().css('background', 'none');
});
});
リストの背景画像としてではなく、jQuery で「insertBefore」を使って<li>と<a>の間に画像を挿入することも可能。(あえてそうする理由はあまりないと思おうが)
その場合の CSS は、画像要素の「position」を「absolute」にして、その親要素の li 要素の「position」を「relative」にする必要がある。
#sidebar #cat_list ul li {
margin-left: 20px;
position: relative;
}
#sidebar #cat_list ul li img {
float: left;
position: absolute;
}
#sidebar #cat_list ul li a {
font-size: 0.8em;
padding: 0 30px 0 15px;
border-bottom: 1px solid #999999;
}
$('<img src="http://localhost/画像への絶対パスを指定/images/arrow-trans.png" width="10" height="10" alt="" />').insertBefore($('#cat_list ul li a'));
list_images$ = $('#cat_list ul li img'); //挿入された画像のラップ集合
list_images$.css('display', 'none'); //挿入された画像を非表示に
$('#cat_list ul li a').hover(
function() {
$(this).parent().find('img').css('display', 'block'); //画像を表示
},
function() {
$(this).parent().find('img').css('display', 'none'); //画像を非表示
});
//画像の垂直方向の位置を調整
imgHeight = $('#cat_list ul li img').outerHeight(false);
liHeight = $('#cat_list ul li').outerHeight(false);
$('#cat_list ul li img').css('top',(liHeight - imgHeight)/2+'px');