アプリ版:「スタンプのみでお礼する」機能のリリースについて

Amazonの商品一覧にあるような、画像とテキストに同時にリンクを貼るためのCSSを教えて頂きたいです。(javascript等を使わずに)
画像にマウスオーバーするとテキストに下線が入り、テキストにマウスオーバーするとテキストに下線が入るようにしたいのですが、うまくいきません。

<a>
<div>
<img src="#" width="#" height="#" alt="#">
<p>商品説明</p>
</div>
</a>

このようにhtml5では、<div>を<a>タグで囲めるみたいで、
<div>全体にリンクが貼れるのは良いのですが、
マウスオーバーした時にテキストに下線が入らなくて困ってます。

この方法で無理ならば、他にCSSでやり方があるのか教えて頂けたらと思います。

「CSSのみで画像とテキストに同時にリンク」の質問画像

質問者からの補足コメント

  • 現在<div>をfloat: left;しているのですが、float: left;を削除すると、
    マウスオーバー時に、テキストにアンダーラインが表示されました。
    floatが原因なのでしょうか…?

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/12/11 17:31
  • たびたびすいません。
    <div>
    <a>
    <img src="#" width="#" height="#" alt="#">
    <p>商品説明</p>
    </a>
    </div>

    <div>の中に<a>タグを入れれば出来ました。
    これで良いのか分かりませんが…。

      補足日時:2015/12/11 18:04

A 回答 (3件)

>このようにhtml5では、<div>を<a>タグで囲めるみたいで、


 ここ誤解されています。
The a element may be wrapped around entire paragraphs, lists, tables, and so forth, even entire sections, so long as there is no interactive content within (e.g. buttons or other links).( http://www.w3.org/TR/2014/REC-html5-20141028/tex … )
 入れられるのではなく、「段落(p)、リスト(ol,ul,dl)、表(table)だけでなく、セクション(section)も、a要素で囲める」
 だからと言って、divを使うべきではない。divはHTML5では原則使わない。
Authors are strongly encouraged to view the div element as an element of last resort, for when no other element is suitable.( http://www.w3.org/TR/2014/REC-html5-20141028/gro … )
 著者は、他に適切な要素がないときの最後の手段として、div要素を使用することが強く奨励されます。

「HTML4.01以降、「構造とプレゼンテーションの分離( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )」と言われ、プレゼンテーションのためにHTMLを書かない。」これは、スタイルシートの概説( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )にもこんこんと書かれいている。

単純にナビゲーションリストですから、
<ul class="ItemList">
 <li><a href=""><img src="" width="" height="" alt="">
   <ol>
    <li>【Amazon.co.jp限定】Transcend SDHCカード 16GB</li>
    <li>トランセンド・ジャパン</li>
    <li>¥ 827</li>
   </ol>
 </a></li>
であっても構わない。li:リストアイテムをa要素に含めています。
これが【HTMLではブロック要素も含めることができる】という意味です。もちろん、HTML4.01なら
<ul>
 <li><a href=""><img src="" width="" height="" alt=""></a>
   <p>
    <a href=""><span>【Amazon.co.jp限定】Transcend SDHCカード 16GB</span>
    <span>トランセンド・ジャパン</span>
    <span>¥ 827</span></a>
   </p>
 </li>
とかになっちゃう。いずれも画像にマウスオーバーしても次のa要素にアンダーラインするとか、同様に同じプレゼンテーションにできますが・・隣接セレクタを使う。

>マウスオーバーした時にテキストに下線が入らなくて困ってます。
 これはブラウザがHTML5に対応していない場合に、次のように補完してしまうからです。
<ul class="ItemList">
 <li><a href=""><img src="" width="" height="" alt="">
   <ol>
    <li>【Amazon.co.jp限定】Transcend SDHCカード 16GB</li>
    <li>トランセンド・ジャパン</li>
    <li>¥ 827</li>
   </ol>
 </a></li>
↓これをブラウザが修正する。
<ul>
 <li><a href=""><img src="" width="" height="" alt=""></a>
   <ol>
    <li><a href="">【Amazon.co.jp限定】Transcend SDHCカード 16GB</a></li>
    <li><a href="">トランセンド・ジャパン</a></li>
    <li><a href="">¥ 827</a></li>
   </ol>
 <a href=""></a></li>
そのために、画像にマウスオーバーしても認識されない。

例)
<ul class="ItemList">
 <li><a href=""><img src="" width="" height="" alt="">
   <ol>
    <li>【Amazon.co.jp限定】Transcend SDHCカード 16GB</li>
    <li>トランセンド・ジャパン</li>
    <li>¥ 827</li>
   </ol>
 </a></li>

ul.ItemList{padding:0;list-stype-type:none;}
ul.ItemList li{display:inline-block;height:200px;width:150px;position:relative;}
ul.ItemList li img{width:100%;height:auto;}
ul.ItemList li ol li{display:list-item;list-style-type:decimal;}
/* これが要るかも */
ul.ItemList a a{text-decoration:underline;}
    • good
    • 0
この回答へのお礼

色々と例文を出していただき、ありがとうございました。
<div>タグがこんなに冷遇されてるなんて…。
勉強になりました!
とりあえず、<head>にIE8でもHTML5が使用できる記述を入れて、
<a>タグで要素を囲むと、全てのブラウザで希望通りに表示されました〜

お礼日時:2015/12/13 01:05

>他のブラウザでは、表示されなくて困っています。


Chrome、Firefox、IE11で確認しましたが、問題なく表示されていますが?
この回答への補足あり
    • good
    • 0

これでどうですか?



<style type="text/css">
a {
text-decoration: none;
}
a:hover {
text-decoration: underline;
cursor: pointer;
}
</style>
    • good
    • 0
この回答へのお礼

記述してませんでした。申し訳ありませんでした。
もちろん、text-decoration: underline;は設定しているのですが、
ブラウザの「Safari」だけ、マウスオーバーすると、テキストにアンダーラインが表示されるのですが、他のブラウザでは、表示されなくて困っています。

お礼日時:2015/12/11 16:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!