a:hoverで背景色を指定すると文字が消える!

このQ&Aのポイント
  • a:hoverで背景色が赤になった時、文字が消えてしまう現象が発生しています。どうすれば文字が見えるようになるでしょうか?
  • CSSとHTMLを用いてa要素に:hoverの時に背景色が赤に変化し、文字色が白に変化するように設定しましたが、文字が消えてしまいます。どのように修正すれば良いでしょうか?
  • 背景色が赤に変わったとき、文字が見えなくなる問題が発生しています。どのようにすればこの問題を解決できるでしょうか?
回答を見る
  • ベストアンサー

a:hoverで背景色を指定すると文字が消える!

cssとHTMLを下記のように書きました。 a:hoverで背景色が白から赤へ、文字色が黒から白に変わるようにしたつもりでしたが、 実際にマウスカーソルを乗せると、背景色は赤になりましたが、 なんと文字は消えてしまったのです!! 文字が見えるようにするには、どうしたら良いか教えて下さいませ。 あと、変な所があればご教示いただけると嬉しいです。 css --------------------------------- .box { display: table; } .box-cell { float: left; display: table-cell; position: relative; color: #000; background-color: #fff; } .box-cell:after { clear: both; } .box-cell a { display: block; width: 100%; height: 100%; position: absolute; top: 0; left: 0; } .box-cell a:hover { color: #fff; background-color: #ff0000; } --------------------------------- HTML --------------------------------- <div class="box"> <div class="box-cell"> あいうえお<br /> かきくけこ<a href="http://www.yahoo.co.jp/"></a> </div> <div class="box-cell"> あいうえお<br /> かきくけこ<a href="http://www.yahoo.co.jp/"></a> </div> </div> ---------------------------------

  • CSS
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

突っ込みどころはあるのですが、 結論から言うと、これでいけます。 ------------------------------------------------------------ .box-cell { float: left; position: relative; color: #000; background-color: #fff; } .box-cell:hover { background: #f00; color: #fff; } .box-cell:after { clear: both; } .box-cell a { display: block; width: 100%; height: 100%; position: absolute; top: 0; left: 0; } ------------------------------------------------------------ aタグにposition: absolute;しているため、レイヤーが上位にきてしまい、 aタグが文字の上に覆いかぶさってしまっているのが原因です。 ですので親要素のbox-cellにhoverすれば いけるというわけです。 指摘点としては、 そもそもhtmlの記述として、 ------------------------------------------------------------ <div class="box-cell"> あいうえお<br /> かきくけこ<a href="http://www.yahoo.co.jp/"></a> </div> ------------------------------------------------------------ とするのではなく、 ------------------------------------------------------------ <div class="box-cell"> <a href="http://www.yahoo.co.jp/">あいうえお<br /> かきくけこ</a> </div> ------------------------------------------------------------ とするのがスマートです。 またはhtml5であれば ------------------------------------------------------------ <a href="http://www.yahoo.co.jp/"> <div class="box-cell"> あいうえお<br /> かきくけこ </div> </a> ------------------------------------------------------------ でも可能ですが、いずれにしてもaタグが独立しているのに 違和感を感じます。 通常、リンクエリアはリンクさせたい箇所を囲うのが普通です。 なので先に結論としてあげたCSSもhtmlとの兼ね合いを見たら スマートではないですね。 ただどうしてもhtmlは変更できない事情がおありなら、 先に書いたCSSのようにする必要があります。 その他指摘点として、 cssのプロパティでdisplay: table;とdisplay: table-cell;を使っているのに なぜfloat: left;を使用しているのかが違和感です。 display: table-cell;の時点で横並びは成立しているので、 float: left;を使う必要がないです。 display: table;とdisplay: table-cell;を使うのをやめるか、 float: left;を使うのをやめるとかしたほうがいいと思います。 先に書いたCSSはdisplay: table;をやめてfloat: left;を採用した例です。

nerumako
質問者

お礼

出来ました! floatは本当に難しいです・・・。 display: table-cell;は外せましたが、display: table;を外そうとするとなんか上手くいかなかったのでお勉強しながら外していきたいと思います。 ご丁寧な回答をありがとうございました。

関連するQ&A

  • 【Html CSS】<a>の上に文字を配置したい

    添付の画像の様にしたいです。 一番左には「SoldOut」って文字が一番上に配置されてます。 (この状態でhoverも<a>のリンクも効かせたい) 以下は、ソースです。これを添付の画像の様にしたいです。 <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/> <meta http-equiv='Content-Style-Type' content='text/css'> <style> img{ border: 0px; vertical-align: middle; } .box li{ float: left; list-style:none; } .box .out{ border-right: 10px solid #fff; border-top: 10px solid #fff; } .box a { text-align: center; display: block; text-decoration: none; font-weight: bold; color: #69380f; background-color: #f2f2f2; width: 100px; height: 120px; } .box a:hover{ background-color: #ccc; } </style> </head> <body> <ul class='box'> <li><div class='out'><a href='javascript:void(0);'>hoge<br><img src='shop.cgi?img=1'><br>300円</a></div></li> <li><div class='out'><a href='javascript:void(0);'>hoge<br><img src='shop.cgi?img=1'><br>300円</a></div></li> <li><div class='out'><a href='javascript:void(0);'>hoge<br><img src='shop.cgi?img=1'><br>300円</a></div></li> </ul> <br> </body> </html> 以上、ご指導の程、宜しくお願いいたします。

    • ベストアンサー
    • CSS
  • テーブル内a:hoverでちらつく[html]

    テーブルにテキストを書き、そのテーブルにマウスが当たったらテキストの文字位置をずらすという方法でホームページを作っているのですが、テーブル内をマウス移動させると、文字がちらついてしまいうまくいきません。 ソースは以下です。 <HEAD> <style type="text/css"> <!-- .box a{display:block;} .box a:hover {position: relative; top: 5px; left: 5px;} --> </style> </HEAD> <BODY> <table> <tr> <td class="box"><A href="#">テスト1</A></td> </tr> </table> </BODY> 何が間違えているのかわからず困っています。 ご回答お待ちしております。お願いします。

  • HTML,CSSの記述について

    添付画像のようなレイアウトにする場合,どのように記述すればよいでしょうか? (画像マウスオーバー時に画像のみが切り替わるという事です) 初心者なのでサンプルを書いてくださると助かります ↓これは自分で考えてみたものです。自分のブログからのコピペなのでおかしいかもしれません。 【html】 <div class="rolloverPositionMenu"> <div align=left> <img src="a.jpg"> </div></div> <div align=right> <div class="left">text-areaA</div><div class="right">text-areaB</div> <div class="left">text-areaC</div> </div> 【CSS】 .left { float:left; } .right { float:right; } a.rolloverPositionMenu { background: #fff url(b.jpg) left top no-repeat; color: #fff; display: block; overflow: hidden; text-align: center; position: relative; } a.rolloverPositionMenu:hover{ background-color: #f73; color: #f00; } a.rolloverPositionMenu img { background-color: #fff; } a.rolloverPositionMenu:hover img { position: relative; }

    • ベストアンサー
    • HTML
  • ホームページのhover部分の印刷について

    ホームページの画像の部分をhoverを使って、画像切り替えしているところがあります。 当然、その部分は印刷されないのですが、hoverなしの画像の状態で印刷したいと思っ ております。 このような場合、どのような処理にすれば、screen上ではhoverがきき、印刷もされるよ うに出来るのでしょうか。 以下は現在のソースです 【HTML】 <div class="header"> <a href="./" id="hogehoge">Top</a> </div> 【CSS】 a#hogehoge { display: block; width: 900px; height: 210px; text-indent: -1000px; background-image: url("../images/main/img_header.jpg"); } a#hogehoge:hover { background-position: bottom left; }

    • ベストアンサー
    • HTML
  • IE9でa:hoverが効かない

    IE9でa:hoverが効かなくて困っています。 droppy.jsというJavaScriptを使ってドロップメニューにしているのが原因でしょうか? 以下ソースです。 html <div id="navi"> <div class="inner"> <ul> <li><a href="サイトトップのURL">トップ</a></li><!-- ←ここのa:hoverは正常に動作する --> <li> <a href="メニュー1のURL">メニュー1</a><!-- ←ここのa:hoverは正常に動作する --> <ul> <li><a href="メニュー1-1のURL">メニュー1-1</a></li><!-- ←ここのa:hoverが効かない --> <li><a href="メニュー1-2のURL">メニュー1-2</a></li><!-- ←ここのa:hoverが効かない --> </ul> </li> </ul> </div> </div> css #navi { background: url(naviの背景画像のURL) repeat-x left top #000000; border-bottom: 1px solid #000000; -moz-box-shadow: 0 0 3px #484848;/* Firefox用 */ -webkit-box-shadow: 0 0 3px #484848;/* Safari,Google Chrome用 */ box-shadow: 0px 0px 3px rgba(0,0,0,0.5); } #navi .inner { margin: 0 auto; width: 940px; } #navi .inner ul li { float: left; margin: 15px 0; padding: 0 10px; position: relative; } #navi .inner ul li a { padding: 5px 11px; color: #ffffff; text-decoration: none; } #navi .inner ul li a:hover { border: 1px solid #ffffff; padding: 5px 10px; color: #333333; background: #ffffff; background:linear-gradient(#eaeeee, #e2e3e3); background: -moz-linear-gradient(top, #eaeeee, #e2e3e3);/* Firefox用 */ background: -webkit-gradient(linear, left top, left bottom, from(#eaeeee), to(#e2e3e3));/* Safari,Google Chrome用 */ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startcolorstr=#eaeeee, endcolorstr=#e2e3e3);/* IE6,7 */ -ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startcolorstr=#eaeeee, endcolorstr=#e2e3e3)";/* IE8 */ -moz-border-radius: 5px; -webkit-border-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; behavior: url(/PIE.htc); } #navi .inner ul li ul { position: absolute; top: 39px; left: 0; zoom: 1; display: none; background: #dae4d7; border: 1px solid #8db0a0; border-top: none; border-bottom: none; font-size: 85%; width: 150px; } #navi .inner ul li ul li { float: none; padding: 0; margin: 0; background: none; } #navi .inner ul li ul li:hover { background: none; } #navi .inner ul li ul li a { color: #2d595f; text-align: left; display: block; background: url(icon画像のURL) no-repeat 5px center; border-top: 1px solid #ffffff; border-bottom: 1px solid #8db0a0; padding: 5px 5px 5px 20px; } #navi .inner ul li ul li a:hover { background: url(hoer用icon画像のURL) no-repeat 5px center #2d595f; color: #ffffff; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border-top: 1px solid #2d595f; border-bottom: 1px solid #2d595f; border-left: none; border-right: none; padding: 5px 5px 5px 20px; margin: 0; } どこがおかしいのかわからないのでnaviv部分全体を載せます。 宜しくお願いします。

    • ベストアンサー
    • CSS
  • 画像をずらしてhoverしたいのですがIE7では×

    一枚の画像をずらしてロールオーバーさせてナビをつくったのですが、IE7以外の全ブラウザではうまくいきますが、唯一IE7だけはうまくいきません。 5つのナビボタンのうち、左3つがポイントしても矢印と画像が変わりません。 ですが、それはトップページのナビだけの話で、他のページは普通にロールオーバーします。 ナビの部分はDreamweaverのテンプレートで編集不可能領域に含まれてますので、全ページのコードは同一です。 以下、コードです。 <!--HTML--> <body> <div id="container"> <div id="hedder"> <div id="toprogo"><a href="index.html"><img src="○○"/></a></div> <div id="main_image"><img src="○○"/></div> <div id="navi"> <div id="top"><a href="index.html"/></a></div> <div id="kodawari"><a href="particular.html" /></a></div> <div id="catalog"><a href="goods-catalog.html" /></a></div> <div id="from_producer"><a href="index.html" /></a></div> <div id="contact"><a href="mailto:" /></a></div> </div> </div> </div> </body> <!--ここからcss--> body { font-family:"MS ゴシック", "MS Gothic", "Osaka-等幅", Osaka-mono, monospace; color: #473906; background-color: #fafde1 ; } img { border: none; } a { color: #473906; text-decoration: none; } a:hover { color: #ff0000; } #container { width: 950px; margin: auto; } #hedder { widht: 950px; height: 380px; } #top_logo {margin-top: 10px; } #main_image { width: 950px; height: 300px; margin-top: 10px; } #navi { margin-top: 20px; /margin-top: 0 ; } #top a { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: 0px 0px; display: block; float: left; } #top a:hover { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: 0px -50px; display: block; float: left; } #kodawari a { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: -190px 0px; display: block; float: left; } #kodawari a:hover { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: -190px -50px; display: block; float: left; } #catalog a { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: -380px 0px; display: block; float: left; } #catalog a:hover { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: -380px -50px; display: block; float: left; } #from_producer a { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: -570px 0px; display: block; float: left; } #from_producer a:hover { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: -570px -50px; display: block; float: left; } #contact a { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: -760px 0px; display: block; float: left; } #contact a:hover { width: 190px; height: 50px; margin-top: 30px; background-image: url(images/navi/navi.gif); background-repeat: no-repeat; background-position: -760px -50px; display: block; float: left; } つめて見にくくなっていますが、お願いいたします。

    • ベストアンサー
    • CSS
  • Dreamweaverでリストを作成するとボックスからずれてしまいます

    DreamweaverCS3を使用してサイトを作成している初心者です。 AP divで作ったボックスの中にリストを作成したのですが、 何故か文字の部分がボックスから大幅にずれてしまいます。 CSS記述↓ #apDiv1 { position:absolute; left:57px; top:82px; width:150px; height:143px; z-index:12; background-color: #FFFFFF; } #apDiv1 li { list-style-type: none; background-color: #CCCCCC; color: #333333; display: block; width: 135px; padding-bottom: 4px; padding-top: 4px; margin-bottom: 1px; margin-left: 0px; margin-top: 0px; padding-left: 15px; } #apDiv1 li a:hover { background-color:#999999 } <body>内です↓ <div id="apDiv1"> <ul> <li class="style4"><a href="http://oshiete.goo.ne.jp/">あああ</a></li> <li class="style4"><a href="http://oshiete.goo.ne.jp/">いいい</a></li> <li class="style4"><a href="http://oshiete.goo.ne.jp/">ううう</a></li> <li class="style4"><a href="http://oshiete.goo.ne.jp/">えええ</a></li> </ul> </div> どうしたらボックスにピッタリ合わせる事ができるのでしょうか。 どうぞ宜しくお願い致します。

  • xhtmlでページを作ったらcssのhoverの部分がFirefoxで

    xhtmlでページを作ったらcssのhoverの部分がFirefoxでは動くのにIEでは上手く動きません。 どうしたらいいのでしょうか? --xhtml-- <div class="menu"> <ul> <li><a href="#"target="content">link1</a><br/></li> <li><a href="#"target="content">link2</a><br/></li> <li><a href="#"target="content">link3</a><br/></li> </ul> </div> --css-- .menu{ width:100%; position:absolute; bottom:25%; font-weight:bolder; filter: alpha(opacity=70); -moz-opacity:0.70; opacity:0.70; } .menu ul{ margin:0; padding:0; } .menu li{ margin-bottom:1px; list-style-type:none; float:none; font-size:1.3em; line-height:0; } .menu li a{ display:block; width:100%; line-height:25px; background-color:#ba2029; color:#ffffff; text-align:center; text-decoration:none; border-left:solid 10px #880000; } .menu li a:hover{ background-color:#95195a; }

    • ベストアンサー
    • HTML
  • CSSでテーブル状にレイアウトしたが,背景色の範囲が意図と異なる.

    cssを使って3列のテーブル状のレイアウトを作成しています. 外部cssファイルにてbackground-colorを記述して 背景色を3列それぞれにつけているのですが,行数の 違いによって背景色の付く範囲がそれぞれの列で 変わってしまっています. (下のソースでいうと,111...は3行分の背景色が付きますが, 他の222...と333...は1行分の背景色しかつきませんが, 222...と333...の部分も背景色は3行分つけたいのです.) 原因は文字数の違いにより行数が異なるためと思いますが, これを解決する方法はありますか? 【html記述】 <div id="table"> <div id="table_left"> 111111<br> 111111<br> 111111<br> </div> <div id="table_center"> 222222 </div> <div id="table_right"> 333333 </div> <BR class="clears"> </div> 【css記述】 #table { width:700px; margin:0px auto 0px; border-style:solid; border-color:#999; border-width:1px; } #table_left { width:64px; background-color:#e5ded7; color:#80655e; padding:8px; float:left; } #table_center { width:294px; padding:8px; float:left; } #table_right { width:294px; background-color:#edf8b1; background-repeat:repeat; padding:8px; color:#3d6e14; float:right; }

    • 締切済み
    • CSS
  • 背景画像上に複数枚の画像配置について

    お世話になります。 まだまだcss勉強中なので教えて頂きたいことがございます。 1枚の背景画像に対し、別箇所にマウスオーバー時のみ表示されるように複数枚画像を配置し、そのマウスオーバー用の複数枚の画像にリンクタグをつけて、別ページへのリンクを貼りたいのです。 しかし、ネットで調べた方法ですと、うまくマウスオーバーが反映されず 余計な画像も出てきてしまいます。 おそらく間違ったcssを記述していると思うので ご指摘いただけると助かります。 -------------------------------------------------------------- 【html】 <div class="demo"> <div class="demo1"><a href="#"></a></div> <div class="demo2"><a href="#"></a></div> <div class="demo3"><a href="#"></a></div> <div class="demo4"><a href="#"></a></div> <div class="demo5"><a href="#"></a></div> </div> 【css】 .demo { background: url("../img/imgbg.jpg") no-repeat; display: block; width: 800px; height: 1108px; } .demo1 a { width: 800px; height: 1108px; background: url("../img/imgbg.jpg") no-repeat; display: block; position:absolute; } .demo1 a:hover { background-image: url("../img/img1.png"); position:relative; top:475px; left:635px; display:block; } .demo2 a { width: 800px; height: 1108px; background: url("../img/imgbg.jpg") no-repeat; display: block; position:absolute; /*text-indent: -9999px;*/ } .demo2 a:hover { background-image: url("../img/img2.png"); position:relative; top:469px; left:480px; display:block; } .demo3 a { width: 800px; height: 1108px; background: url("../img/imgbg.jpg") no-repeat; display: block; position:absolute; } .demo3 a:hover { background-image: url("../img/img3.png"); position:relative; top:477px; left:322px; display:block; } .demo4 a { width: 800px; height: 1108px; background: url("../img/imgbg.jpg") no-repeat; display: block; position:absolute; /*text-indent: -9999px;*/ } .demo4 a:hover { background-image: url("../img/im4.png"); position:relative; top:477px; left:167px; display:block; } .demo5 a { width: 800px; height: 1108px; background: url("../img/imgbg.jpg") no-repeat; display: block; position:absolute; /*text-indent: -9999px;*/ } .demo5 a:hover { background-image: url("../img/img5.png"); position:relative; top:477px; left:10px; display:block; } -------------------------------------------------------------- a のクラスの時に背景画像を指定しなくても良いんじゃないかと思い 消してみたら画像が表示されなくなってしまったので そのまま記載しています。 上記の記述のままですと、マウスオーバーが正しく反応しないですし マウスオーバー時に別箇所に背景画像が表示されてしまいます。 やりたいことは画像にしましたのでご確認ください 黒○は背景画像内にある形で、その上に同じ形の赤○を マウスオーバー時の画像として表示したいです。 (図が下手ですみません) わかる方、ご教示をお願いします。

    • 締切済み
    • CSS

専門家に質問してみよう