質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.13%

position:absoluteを使うと次のブロックが重なってしまう

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 44K+

tacchan

score 60

以下のhtml、cssのコードで問題があります。
わかっている人にしたら基本的な問題なのだと思いますが、いつになっても解決しないので質問させてください。

問題点は二つです。
1、見たままなのですが、tabboxの部分が上に重なってしまい上手く表示されません。
2、わかりにくい箇所ですが、ボタンの部分がhoverするとき、外側の部分(marginの部分)にカーソルを持っていくだけで、hoverが発生してしまう。

1に関して、distinctiveのposition:absoluteに問題があると思うのですが、これを消すとdistinctive-leftとrightの部分が消えてしまい緑の帯のような表現が出来なくなってしまうので出来ることなら消したくありません。
distinctive-left、center、rightを一つのdivにまとめてしまうことも考えたのですが、レスポンシブの関係でまとめたくはありません。

制限があり、コードも長くわかりづらいとは思いますがよろしくお願いします。

(追記)ウインドウの幅を狭くしていくと、ボタンがずれる瞬間があるのでこれも直したいです。(追記終了)

<!DOCTYPE html>
<html lang="ia">
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="style.css">
    <script type="text/javascript">
        function ChangeTab(tabname) {
            // 全部消す
            document.getElementById('tab1').style.display = 'none';
            document.getElementById('tab2').style.display = 'none';
            document.getElementById('tab3').style.display = 'none';
            // 指定箇所のみ表示
            document.getElementById(tabname).style.display = 'block';
        }
    </script>
</head>
<body>    
    <div id="mainContents">
        <div id="distinctive">
            <div id="distinctive-left"></div>
            <div id="distinctive-main">
                <h2>タイトル</h2>
                <ul id="distinctive-first">
                    <li>
                        <h3>見出し1</h3>
                        <p>あああああああああああああああああああああああああああああああああああああああああああ</p>
                    </li>
                    <li>
                        <h3>見出し2</h3>
                        <p>あああああああああああああああああああああああああああああああああああああああああああ</p>
                    </li>
                    <li>
                        <h3>見出し3</h3>
                        <p>あああああああああああああああああああああああああああああああああああああああああああ</p>
                    </li>
                </ul>
                <ul id="distinctive-second">
                    <li><a href="#">ボタン1</a></li>
                    <li><a href="#">ボタン2</a></li>
                    <li><a href="#">ボタン3</a></li>
                </ul>
            </div>
            <div id="distinctive-right"></div>
            <div id="distinctive-bottomleft"></div>
            <div id="distinctive-bottomcenter"></div>
            <div id="distinctive-bottomright"></div>
        </div>
        <div class="tabbox">
            <p class="tabs">
                <a href="#tab1" class="tab1" onclick="ChangeTab('tab1'); return false;">タブ1</a>
                <a href="#tab2" class="tab2" onclick="ChangeTab('tab2'); return false;">タブ2</a>
                <a href="#tab3" class="tab3" onclick="ChangeTab('tab3'); return false;">タブ3</a>
            </p>
            <div id="tab1" class="tab">
                <p>(タブ1の中身。何でも記述できます。)</p>
            </div>
            <div id="tab2" class="tab">
                <p>(タブ2の中身。HTMLタグも記述可能です。)</p>
            </div>
            <div id="tab3" class="tab">
                <p>(タブ3の中身。いくつでも増やせます。)</p>
            </div>
        </div>
    </div>
<script type="text/javascript">
  // デフォルトのタブを選択
  ChangeTab('tab1');
// </script>
</body>
</html>
*{
    margin: 0px;
    padding: 0px;
}
body{
    background: gray;
}
#mainContents {
    overflow:hidden;
    width: 100%;
    max-width: 960px;
    height: auto;
    margin: 0 auto;
    background-color: rgb(255,255,255);


}
#distinctive {
    position: absolute;
}
#distinctive-left {
    background: #aacf53;
    margin-top: 10px;
    margin-left:-20px;
    width: 20px;
    height: 237px;
    float: left;
}
#distinctive-main {
    background: #aacf53;
    margin-top: 10px;
    color: #fff;
    text-align: center;
    width: 100%;
    max-width: 960px;
    float: left;
}
#distinctive-main h2 {
    margin: 10px 0px 10px 0px;
    padding-top: 10px;
    text-shadow: 1px 1px 3px #000000;
}
#distinctive-first li {
    position: relative;
    float: left;
    width: 33%;
    text-align: center;
    list-style: none;
}
#distinctive-first li:nth-child(2) {
    border-left: 1px dotted #ffffff;
    border-right: 1px dotted #ffffff;
}
#distinctive-main h3 {
    margin: 10px 0px 10px 0px;
    text-shadow: 1px 1px 3px #000000;
}
#distinctive p {
    display: block;
    margin: 10px 20px 10px 20px;
}
#distinctive-second li {
    position: relative;
    float: left;
    width: 33.33%;
    text-align: center;
    list-style: none;
}
#distinctive-second li a{
    margin-top: 20px;
    margin-bottom: 20px;
    margin-left: 25%;
    display: block;
    padding: 16px 0;
    width: 50%;
    background-image: linear-gradient(180deg,#2d5434 0%,#29905e 100%);
    color: #ffffff;
    font-size: 14px;
    font-weight: normal;
    line-height: 1;
    text-decoration: none;
    text-shadow: 1px 1px 3px #000000;
}
#distinctive-second > li:hover > a{
    background-image: linear-gradient(180deg,#29905e 0%,#2d5434 100%);
}
#distinctive-right {
    background: #aacf53;
    margin-top: 10px;
    margin-right:-20px;
    width: 20px;
    height: 237px;
    float: left;
}
#distinctive-bottomleft {
    clear: both;
    background-image: linear-gradient(26.565051145046deg,transparent 49%,#86aa30 50%,#86aa30 100%);
    margin-left:-20px;
    left: 0px;
    float: left;
    width: 20px;
    height: 10px;
}
#distinctive-bottomcenter {
    background-image: linear-gradient(180deg,#969696 0%,#ffffff 100%); 
    float: left;
    width: 100%;
    height: 10px;
}
#distinctive-bottomright {
    background-image: linear-gradient(153.434948694794deg,#86aa30 49%,transparent 50%,transparent 100%);
    margin-right:-20px;
    right: 0px;
    float: left;
    width: 20px;
    height: 10px;
}
/* 表示領域全体 */
div.tabbox {
    margin: 0px; padding: 0px; width: 400px;
}
/* タブ部分 */
p.tabs {
    margin: 0px; padding: 0px;
}
p.tabs a {
    display: block; width: 5em; float: left;
    margin: 0px 1px 0px 0px; padding: 3px;
    text-align: center;
    border-radius: 12px 12px 0px 0px; /* 角を丸くする */
}
p.tabs a.tab1 {
    background-color: blue; color: white;
}
p.tabs a.tab2 {
    background-color: #aaaa00; color:white;
}
p.tabs a.tab3 {
    background-color: red; color: white; 
}
p.tabs a:hover {
    color: yellow;
}
/* タブ中身のボックス */
div.tab {
    height: 150px; overflow: auto; clear: left; 
}
div#tab1 {
    border: 2px solid blue; background-color: #ccffff;
}
div#tab2 {
    border: 2px solid #aaaa00; background-color: #ffffcc;
}
div#tab3 {
    border: 2px solid red; background-color: #ffcccc;
}
div.tab p {
    margin: 0.5em; 
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

position:absoluteを設定すると、その要素(#distinctive)の幅や高さの影響を、他の要素は受けなくなります。

(#distinctive)自体が独立した存在になってしまいますので、重ねたくないのであれば、他の要素のmarginやpaddingで#distinctive分のスペースを設定してあげる必要があります。
また、他の要素との重なりを調整したい場合はz-indexプロパティで設定してあげれば良いかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/24 14:20

    やっぱりabsoluteが絡むとmargin使うしか方法はないのでしょうか?
    他の方法がないうちは、marginで調整したいと思います。ありがとうございました。

    キャンセル

checkベストアンサー

0

position absoluteの挙動をまず確認した方が良いかと思います。
http://ja.learnlayout.com/position.html
サンプルコードなどで試して、どういう挙動か・どういう仕様か、をテストしてもらえば理解が深まるかと思います。


1、見たままなのですが、tabboxの部分が上に重なってしまい上手く表示されません。

「上手く表示されません」とありますが、どういう状態が上手く表示されている状態か、が分からないので予測になりますが、下記ご確認下さい。

イメージ説明
確認しましたが、position absoluteを使っているので、「tabboxの部分が上に重なってしまい」という表示になるのは当然の結果かと思います。

ですので、
イメージ説明
重ねたくなければ、position absoluteを設定した上で、かつtopで位置を指定すればtabboxからずらせます。

もしくは、
イメージ説明
tabboxの方を調整しても、tabboxの位置をずらすことができます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/24 14:15

    ありがとうございます。やはり、tabboxを下側に表示するにはmarginで調整するしかないようですね。それで調整したいと思います。
    丁寧に解説してくださり、ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る