CSSの「position:absolute;」属性とは?

このQ&Aのポイント
  • CSSの「position:absolute;」属性について理解できない
  • 「position:absolute;」属性を使うことで背景色の変化を実現
  • 「position:absolute;」属性の使い方について調べた結果
回答を見る
  • ベストアンサー

CSSの「position:absolute;」属性について

どうしても理解できませんので、どうかお力添えをお願いいたします。 以下のかんたんな“カテゴリー”を、HTMLとCSSで作成しました。 ------------------------------------------------------------------- (HTML) <div id="navi"> <div id="kategory"> <a href="http://~">テスト1</a> <a href="http://―">テスト2</a> </div> </div> ------------------------------------------------------------------- (CSS) #navi{ width:180px; } (幅180pxのBOXを作成) #kategory a:link, #kategory a:visited{ display: block; background-color:red; border:solid 1px; } (マウスカーソルがのっていないとき、背景色は赤色) #kategory a:hover{ background-color:green; } (マウスカーソルがのっているとき、背景色は緑色) -------------------------------------------------------------------- 「firefox」では問題なかったのですが、「Internet Explorer」ではリンク文字のところにカーソルをもっていかないと、背景色が赤色から緑色に変化しませんでした。 いろいろと調べてみた結果、 「position:absolute;  top: 0px;」 をCSSの「#navi」のなかに書きたすことで、リンク文字以外の箇所にマウスをもってきても背景色が赤色から緑色に変化するようになりました。 どうして「position:absolute;」という属性を使うことにより、リンク文字以外のところへカーソルをもってきても、赤色から緑色へ変化するようになるのでしょうか? どうか、よろしくお願いいたします。

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

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

  • ベストアンサー
  • leap_day
  • ベストアンサー率60% (338/561)
回答No.1

こんにちは Internet Explorerのバグです http://www6.plala.or.jp/go_west/nextcss/tip/tech/sidemenu.htm 親要素に幅が設定されていないとそれでもできるのですが幅が指定してある場合にはテキスト部分しか判定されないようです <a>に幅をつけることで解消します #kategory a:link, #kategory a:visited{ display: block; width:178px; background-color:red; border:solid 1px; } ※border分2pxがありますのでそれを引いた178pxとなります position:absoluteすることでおそらくwidth:180pxが100%となるので親要素の幅が指定されていない状態になりできるのではないかと思います(推測ですが(--;) 試しに↓のようにするとposition:absolute;していても同じ状態になります <style type="text/css"> #navi{ width:180px; position:absolute; } #kategory a:link, #kategory a:visited{ display: block; background-color:red; border:solid 1px; } #kategory a:hover{ background-color:green; } --></style> <div id="navi"> <div id="kategory"> <div style="width:100px"> <a href="http://~">テスト1</a> <a href="http://―">テスト2</a> </div> </div> </div>

masarin16
質問者

お礼

leap_dayさんへ なるほど! インターネットエクスプローラーのバグだったのですね。 たいへんわかりやすい説明をありがとうございました。スッキリしました。 リンク先のURLも理解しやすかったです。

関連するQ&A

  • CSS block 表組 position:absolute;

    まったくの初心者です。 本当の初心者なので、凄いことをしていたり 説明が分かりにくいかもしれませんが、 ご教授、よろしくお願い致します* ・blocka の長方形が上 ・上記blockaの下を  blockb blockc blockdに縦に分ける これで四角のまとまりができます。 ・この四角のまとまり、の右側をbody指定しました。 blocka blockb blockc blockdを#FFFFFFに。 bodyを#CCCC99にしたいです。 下を書いたのですが、 .contents{ width:700px; background-color:#FFFFFF; 背景色#FFFFFFが、div.blocka、だけに反映されるんです。 div.blockb、div.blockc、div.blockdには、 body{ margin:0px; padding:0px; background-color:#CCCC99; } bodyの#CCCC99が反映されています。 改善できる方法をご存じないでしょうか。 私のおかしな説明で簡単に理解できるかどうか判りませんが よろしくお願い致します* ***************************************************** /*ページのレイアウト用css*/ body{ margin:0px; padding:0px; background-color:#CCCC99; } body a img{ border: none; } .contents{ width:700px; background-color:#FFFFFF; } div.blocka { width:500px; height:150px; margin-left:100px; } div.blockb { width:100px; float: left; } div.blockc { width:200px; position:absolute; left:100px; } div.blockd { width:200px; position:absolute; left:300px; }

  • IE6にてliタグに対してposition:absolute;を使ったときのバグについて

    すみません、質問させて下さい。 下記のソースとスタイルシートでIE6の場合だけliが原因と思われる余白ができます。他のモダンブラウザ、IE7以降ではhrの部分を除いて問題ありませんでした。余白をなくす方法はないでしょうか。 ソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link href="test.css" type="text/css" rel="stylesheet"> <title>test</title> </head> <body> <div id="wrapper"> <div id="header"> <h1>test</h1> </div> <div id="contents"> <div id="lefty"> <p>test test test (略)</p> </div> <div id="righty"> <p>test test test (略)</p> </div> </div> <hr> <div id="navi"> <ul> <li id="list01"><a href="#">赤</a></li> <li id="list02"><a href="#">青</a></li> </ul> </div> <div id="footer"> <address>copyright.</address> </div> </div> </body> </html> スタイルシート @charset "shift_JIS"; * { margin: 0; padding: 0; } body { text-align: center; } #wrapper { margin: 0 auto; width: 760px; position: relative; text-align: left; } #header { width: 760px; height: 100px; background-color: #CC9900; } #contents { width: 760px; } #lefty { width: 380px; float: left; background-color: #CCC; } #righty { width: 380px; float: right; color: #FFF; background: #000 } #list01 a { display: block; width: 180px; padding: 30px 0 0 0; overflow: hidden; background: url(images/nav01.gif) no-repeat; height: 0px !important; height/**/: 30px; position: absolute; top: 30px; right: 0; } #list02 a { display: block; width: 180px; padding: 30px 0 0 0; overflow: hidden; background: url(images/nav02.gif) no-repeat; height: 0px !important; height/**/: 30px; position: absolute; top: 60px; right: 0; } #list01 a:hover { display: block; width: 180px; padding: 30px 0 0 0; overflow: hidden; background: url(images/nav01_on.gif) no-repeat; height: 0px !important; height/**/: 30px; position: absolute; top: 30px; right: 0; } #list02 a:hover { display: block; width: 180px; padding: 30px 0 0 0; overflow: hidden; background: url(images/nav02_on.gif) no-repeat; height: 0px !important; height/**/: 30px; position: absolute; top: 60px; right: 0; } #footer { clear: both; padding-top: 30px; width: 760px; background-color: #990033; } li { list-style-type: none; } a { text-decoration: none; } hr { clear: both; width: 0; } どなたかご教授ください、よろしくお願いします。

    • ベストアンサー
    • HTML
  • CSSのdivのposition:relative;で位置がずれない

    IE6を使用しています。 次のような 「sample.css」 .sample {height:90px; background-color:#00ff00; font-weight:bold; position:relative; top 40px; } .sample2 {color:#ff0000; position:absolute; top:10px; left:10px } .sample3 {color:#ff0000; position:absolute; top:30px; left:30px } 「a.html」 <html> <head> <link rel="stylesheet" href="sample.css" type="text/css"> </head> <body> <div class="sample"> position:relative <div class="sample2"> sample2 </div> <div class="sample3"> sample3 </div> </div> </body> </html> を実行した場合に、ブラウザのトップから40pxだけ下にclass="sample"にある内容を 表示させたいのですが、どうも下にずれてないようなのです・・・ 何が原因なのでしょうか?

    • ベストアンサー
    • HTML
  • CSS 配置 Absolute、Margin

    お世話になります。 CSSを使用してWebサイトを作成しているのですが、ある画像の上にもう一つの画像を重ねたいと思っています。そんな時まず後ろの画像を配置し、その次に上に重ねる画像をPosition:absolute; margin:xxpx; として表示させています。IE以外で表示されるのと、IEで表示される位置が違うので困っています。 とりあえず画像の表示方法は以下のよう HTML <div id="a"> <img src="aaa.jpg"> <div id="b"></div></div> CSS #a {float:left; overflow:hidden;} #b {position:absolute; margin:-40px; height:10px; width:20px; background:url(aa.jpg);} IEすべて同じように表示されるのかと思いましたが、今日学校のPCで見たところ、IE以外のブラウザで表示されるのと同じように表示されていました。 今のところはIEのみのCSSとその他のCSSとの設定でやりくりしていますが、すべてのブラウザでどんな場合も同じように(まったく同じは無理だとは思いますが)表示させる方法を教えてください。 CSSを使い分けたりするのではなく。一つのCSSだけで;

  • cssについて困っています

    <html> <head> <title>Webサイト</title> <style type="text/css"> body { background-color : #FFEAEF } <!-- #example { /* 親ボックス */ width: 750px; height: 900px; background-color: #FF95E4; position: absolute; top: 50px; left: 100px; ; } #example1 { /* position: absolute; */ width: 750px; height: 300px; top: 50 px; left: 150 px; background-color: #FFAAEA } #boxL { /* ボックス左 */ width: 150px; height: 600px; background-color: #ffffff; position: absolute; top: 150px; left: 1px; } #boxR { /* ボックス右 */ width: 599px; height: 600px; background-color: #ffffff; position: absolute; top: 150px; left: 150px; } #footer { width: 748px; height: 100px; background-color: #ffffff; position: absolute; top: 750px; left: 1px; } --> </style> </head> <body> <div id="example"> <div id="example1"> <h1>テスト中</h1> </div> <div id="boxL"> ボックス左 </div> <div id="boxR"> ボックス右 </div> <div id="footer"> <strong><center>ここに必要ならタグと共に記入<BR> <a href="test2.html">top</a></strong> </div> </div> </body> </html> これを表示した時、下のピンクの部分に文字やリンクを書きたいのですがどうしたらいいですか?

  • css 画像の一部分をリンクにしたいです

    画像の一部分だけをリンクにしたいです。 margin と width と height で指定したエリアをマウスオーバーすると、指定した部分だけ画像が変わってリンクになるという動作をさせたいのですが、うまくいきません。 最悪、画像が変わらなくても指定した部分のリンクができれば良いのですが画像全体がリンクになっているため、全体画像の上でマウスを動かしていると、リンク時のマウスカーソルになったり通常時のマウスカーソルになったりを繰り返しています。 html と css は以下のような記述をしています。 <html> <head> <style type="text/css"> div#menu a:hover { display:block; background-image:url(img/headerimg02.jpg); background-repeat:no-repeat; margin: 50px 468px 250px 50px; width:200px; height:100px; text-align:center; text-indent: -2000px; overflow: hidden; } </style> </head> <body> <div id="menu"> <a href="hoge.html"><img src="img/headerimg01.jpg" width="718" height="400"></a> </div> </body> </html>

    • ベストアンサー
    • CSS
  • footerを{position:absolute;bottom:0p

    footerを{position:absolute;bottom:0px;}で固定しようとしたら、今度はブラウザのウィンドウの上下を縮めるとfooterが上部の要素を上に通り越してしまいます。            これを正しく、footerが上部要素に届いたらfooterの移動がと止めるにはどうしたらよいでしょうか? 以下HTMLとCSSです。 <html> ・・・・中略 <body> <div id="wrapper"> <div id="head"> ・・・・中略(ナビゲーションなどあって) </div> <div id="mainContainer"> ・・・・中略(3カラム等あって) </div>mainContainerEND <div id="footer"> </div> </div>(wrapperの閉じ) </body> </html> ######css########## html { height:100%; } body { height:100%; } div#wrapper { width:800px; height:100%; margin:10px auto 0 auto; border:#000000 solid 1px; background:#FFFFFF; } div#header { width:780px; margin:10px auto 10px auto; } div#mainContainer { width:780px; height:auto; margin:0 auto; } div#footer { clear:both; height:20px; text-align:center; width:800px; background-image:url(footer_image.jpg) no-repeat left bottom; position:absolute; bottom:0; ######ココマデ よろしくお願いします。

  • position:absoluteなのにセンター合わせができるのは何故?

    CSSです。 うまく表示されているのですが、何でうまくいっているのかわからないことがあります。 というのも、コンテンツをセンター合わせのレイアウトにしているというのにposition:absoluteのパーツがちゃんとセンター合わせがなぜかできてしまっているんです。 ユーザがブラウザの横幅を拡げようとも狭めようとも、常に左右をセンター合わせするつくりになっています。 以下が成功ソースです。 ※下記のlinkboxは、headerというIDセレクタに包含されている。 div#linkbox { position: absolute; top:50px; padding-left: 300px; width: 500px; _width: 800px; } div#header { background: #333333; text-align: left; width:800px; height:100px; margin-left: auto; margin-right: auto; } なぜこのソースでうまくいってしまうんでしょうか。 absoluteでも、左右を設定しない場合、自動で包含ブロック内に収まるとでもいうのでしょうか。

    • ベストアンサー
    • HTML
  • CSS IE6でのabsoluteズレ

    フッターがブラウザに合わせて下部に固定するようにしていて フッターは横幅100%にしています。 他のブラウザでは全く問題ありませんが、IE6で見ると右にかなりずれて表示されてしまいます。 以下HTMLソース-------------------------- <div id="footer"> <div class="foot"><a title="トップにもどる" href="#top"><img src="common/images/pagetop.gif" alt="ページTOP" /></a></div> </div> 以下CSSソース-------------------------- #footer{ position:absolute; bottom:0px; height:20px; width:100%; background-image: url(../images/footbg.gif); background-repeat: repeat-x; } #footer .foot{ margin-left: auto; margin-right: auto; width:950px; } #footer .foot img{ float: right; padding-top:1px; } position:absolute;をとると下固定ではなくなりますが、ちゃんと真ん中に表示されます。 改善策をご教授願います。 よろしくお願いいたします。

    • ベストアンサー
    • CSS
  • CSS適用時に背景画像をテキストの上に上書きする

    XHTMLでテキストで入力したものを、CSS適用時に背景画像をテキストの上に上書きして画像に置き換えたのですが、そこがリンクしてる場合オンマウスしてもマウスカーソルが、リンク用のアイコンに切り替わらず困ってます。 ---XHTMLのソース--- <div id="logo"> <h1> <a href="index.html"> <span></span>テキスト部分</a> </h1> </div> ---CSSのソース--- #logo{width:106px;float:left;margin:0;padding:0;} #logo h1{font-size:10px;position:relative;width:106px;height:43px;} #logo span{background:url("../img/logo.gif") no-repeat;width:100%;height:100%;position:absolute;} (購入した本に載っていたテクニックなんで、 h1とspanに対して何でpositionでrelativeとabsoluteを入れる必要があるのかも正直分からない状態です。) ご指導宜しくお願いします。

    • ベストアンサー
    • CSS