0

ポップアップdivで問題が発生しています。ポップアップが中央に配置されないように、ポップアップを本体に対して相対的に配置できるようにしたいと思います。私が抱えている問題は、それらがナビゲーションdiv内にネストされており、これを画面の中央に表示したいので絶対に配置する必要があるため、これに対してのみ配置できることです。

したがって、私が抱えている2つの問題は次のとおりです。

  • ボディに対してDivを配置できません。
  • divが表示されると、ナビゲーションアイテムが所定の位置から押し出されます。

解決:

  • divに現在の親divを無視させ、本体divに関連する位置に配置する方法を見つけます。

以下に、jsFiddleで私のコードを見つけることができます。よろしくお願いします。

http://jsfiddle.net/Uj3R7/5/

HTML

<div id="menu">

    <div id="name"><a href="" title="">name</a></div>

    <ul id="nav">

        <li><a class="pop-up-link" href="#" title="about">about</a>&nbsp; | &nbsp;
            <div class='about'><a href='#' title="close" class='close'><img src='img/close.png' alt='close' height="20" width="20" /></a>
                <p>content</p>
            </div>
        </li>

        <li><a class="pop-up-link" href="#" title="press">press</a>&nbsp; | &nbsp;
            <div class='press'><a href='#' title="close" class='close'><img src='img/close.png' alt='close' height="20" width="20" /></a>
                <p>content</p>
            </div>
        </li>

        <li><a class="pop-up-link" href="#" title="diary">contact</a>&nbsp; | &nbsp;
            <div class='contact'><a href='#' title="close" class='close'><img src='img/close.png' alt='close' height="20" width="20" /></a>
                <p>content</p>
            </div>
        </li>

        <li><a class="pop-up-link" href="#" title="contact">diary</a>
            <div class='diary'><a href='#' title="close" class='close'><img src='img/close.png' alt='close' height="20" width="20" /></a>
                <p>content</p>

            </div>
        </li>

    </ul>
</div>​

CSS

body {
    position: relative;
    width: 100%;
    height: 100%;
}

#menu {
    position:fixed;
    overflow: visible;
    width: 400px;
    height: 200px;
    left: 50%;
    top: 50%;
    margin-left: -200px;
    margin-top: -100px;
    text-align: center;
}

#name {
    font-size: 26px;
    line-height: 50px;
    vertical-align: middle;
    border-bottom: 1px solid #000;
}

#nav li{
    font-size: 14px;
    width: 300px;
    line-height: 25px;
    vertical-align: middle;
    display: inline;
}

.close { 
    float: right; 
    position: relative; 
    z-index: 99999; 
    margin: 3px 6px 0; 
}

.about { 
    position: relative; 
    padding: 5px; 
    background: #F7E39A; 
    display:none; 
    width:500px; 
    margin: 0 auto; 
    min-height: 200px; }

.press { 
    position: relative; 
    float: right; 
    top: -200px; 
    right: 500px; 
    padding: 5px; 
    background: #DEA1B7; 
    display:none; 
    width:250px; 
    min-height: 200px; 
}

.contact { 
    position: relative; 
    padding: 5px; 
    background: #6666FA; 
    display:none; 
    width:500px; 
    margin: 0 auto; 
    min-height: 200px; 
}

.diary { 
    position: relative; 
    float: left; 
    top: 0px; 
    padding: 5px; 
    background: none; 
    border: #291DFA 1px solid; 
    display:none; 
    width:100px; 
    min-height: 200px; 
}​

jQuery

$(function() {

    var height = $(document).height();
    var width = $(document).width();
    var spanHeight = $('.popup').height();
    var spanWidth = 500;

    $('.pop-up-link').click(function() { 

        $(this).next() 
        .css({ "top" :  height/2 - spanHeight/2 }) // Centre Pop Up
        .css({ "left" : width/2 - spanWidth/2 })    
        .fadeIn(500);
    });

    $(".close").click(function () {
        $('.pop-up-link').next().fadeOut(500);
    });
});​

解決

ポップアップがbodyタグの子になるようにコードを作り直して、本体に対してポップアップを配置できるようにしました。SimpleModelsを使用しており、パーセンテージを使用してdivを配置しています。

jQuery(function ($) {
    $('#menu .about').click(function (e) {
        $('#about-content').modal({position: ["20%","65%"]});
        return false;
    });
});
4

3 に答える 3

1

このタスクに対処するために、CSS属性「position」に焦点を当てます。ただし、例に存在するCSSをすべて確認することはできないため、継承の問題が発生している可能性があります。

親の右上隅から複数の子要素を配置するには、いくつかのことが当てはまる必要があります。

  • 親要素の「position」の値が「static」と等しくありません。
  • 子要素のそれぞれは、「絶対」の「位置」値を持っている必要があります。
  • 各子要素には、「上」と「左」の値(正または負)が必要です。これは、親要素内の標準の位置からのオフセットを表します。

配置しようとしている<div>は<body>内で適度に深いため、要素間のCSSを変更すると位置が大幅に移動する可能性があるため、位置付けにチャンスをつかむ必要があるかどうかはわかりません。

私の個人的な提案は、<body>内に配置しようとしている<div>をDOMの上の位置に移動して、<body>の直接の子になるようにすることです。次に、<body>の「position」をおそらく「relative」に設定して(ルート表示要素であるため不要な場合があります)、style = "position:absolute; top:を使用して<div>を配置できます。 NN; left:NN; "、ここでNNは整数値です。これにより、<body>に対するポジショニングの目標が達成されます。

PSページ上の他の場所(たとえば、中央)を基準にして配置したい場合は、style = "position:relative;"を使用して中央に配置された1x1 <div>を作成し、代わりにその中に配置した要素を配置します。

特にz-indexなどのスタイルと組み合わせると、cssポジショニングがWebデザインの取り組みにおいて大きな資産になると思います。これがお役に立てば幸いです

于 2012-10-19T20:45:54.520 に答える
1

ここでの問題は、ポジショニングの使い方だと思います。

絶対配置された要素は、レイアウトのフローの一部ではなくなりました。それらは、z-indexを使用して積み重ねられた、独自のユニバースの「レイヤー」として存在します。

相対位置の要素はレイアウトの一部であるため、要素を移動するとフローが変わる可能性があります。

position:absolute-これにより、設定された最初の親を基準にして要素が配置position:relativeされます。親が設定されていない場合、位置はから継承されますBODY。原点を設定することと考えてください。最初の相対位置の親が原点になります。

汎用ダイアログを配置する場合は、通常、BODYタグの子にするか(ブラウザーウィンドウを基準にして配置する場合)、外部ラッパーの子として配置する必要があります。レイアウト(画面の中央にデザインがある場合など、レイアウトに配置するため)。

position:relative通常、この質問の目的での使用は避けたいと思います。

于 2012-10-19T20:33:32.170 に答える
0

これがあなたの望むものだと思います。

http://jsfiddle.net/LtsJ4/5/

これらは私が行った変更です

  • 4つのdivすべてでpositionスタイル要素を作成しましたabsolute
  • javascriptコードでに変更さdocumentれました'body'
  • "px"css呼び出しに追加されます。
于 2012-10-19T20:28:54.510 に答える