html & css
画像をリストで配置した他にaタグにdata属性でaltと同じテキストを記述してます。
html
<nav> <ul> <li><a href="#" data-label="ホーム"><img src="img/nav01.png" alt="ホーム" width="108" height="58" /></a></li> <li><a href="#" data-label="サービス案内"><img src="img/nav02.png" alt="サービス案内" width="159" height="58" /></a></li> <li><a href="#" data-label="事例紹介"><img src="img/nav03.png" alt="事例紹介" width="126" height="58" /></a></li> <li><a href="#" data-label="会社概要"><img src="img/nav04.png" alt="会社概要" width="130" height="58" /></a></li> <li><a href="#" data-label="お知らせ"><img src="img/nav05.png" alt="お知らせ" width="126" height="58" /></a></li> <li><a href="#" data-label="お問い合わせ"><img src="img/nav06.png" alt="お問い合わせ" width="151" height="58" /></a></li> </ul> </nav>
cssは600pxをブレークポイントにしています適当に調節してください。
スマホサイズではナビゲーションの画像(nav ul li img)を非表示(display: none)して、
「a:before」に「content: attr(data-label);」で設定したテキストを表示します。
css
nav { background: url(img/nav-bg.png) repeat-x; } nav ul { list-style: none; width: 800px; margin: 0 auto; } nav ul li { float: left; } @media only screen and (max-width: 600px) { nav { background: none; } nav ul { width: 100%; border-top: solid 1px #bbb; } nav li { float: none; width: 50%; } nav ul li img { display: none; } nav li a { display: block; background: #eee; border-bottom: solid 1px #bbb; padding: 6px; text-decoration: none; color: #666; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } nav li:nth-child(odd) a { border-right: solid 1px #bbb; } nav li a:before { content: attr(data-label); } }
これでとりあえず完成です。
「attr(alt)」とかできればdata属性いらないのでスマートになりそうですが、imgにはテキストを配置できないですよね。
ということでこんな感じになりました。
jQueryでdata-labelを自動で設定する
さきほどはリストに「data-label」と属性を書きましたがaltと同じのを書くのはめんどくさいという場合jQueryを使用すれば自動で設定できます。
JavaScript
$(function(){ $('nav li').each(function(){ $('a', this).attr({ 'data-label': $('img', this).attr('alt') }); }); });