5

私は次の設定をしています:

<div style="z-index: 10">
      <div>Whatever</div>
</div>

<div style="z-index: 9">
      <div><div>Haaaleluia</div></div>
</div>

もちろん...セットアップを単純化しすぎましたが、それが主なアイデアです。"whatever" div は "Haaaaleluia" div と重なっています。もちろん、最初の親の z-index の方が大きいため、"whatever" は表示されますが、"haaaleluia" は表示されません。

セットアップを変更せずに (親の z-index を保持することを明確にするために)、「Haaaaaleluia」を一番上にするにはどうすればよいですか?

ここで印刷を依頼された方は... また、助けてくれてありがとう: ここに画像の説明を入力

大きな悪いマップは 2 番目の div です。

チュートリアルは最初の div です。

注文のあるパネルはマップの子です。私はそれが上にある必要があります。マップ全体を一番上に設定すると、チュートリアルが表示されなくなります。マップを背後に置いておくと、注文パネルが表示されなくなります。

4

5 に答える 5

8

要するに、できません。継承された z-index は親に対して相対的であるため、兄弟よりも下位の親要素の子を持ち、z-indexその子に親の兄弟よりも高い z-index 値を与えることはできません (誰かのためにこの質問を参照してください)同じものにぶつかる)。

ただし、設定によっては、z インデックスを完全に削除して、ブラウザに上を下divの上に配置させることができます。次に、子供たちだけに値を与えて遊ぶことができz-indexます。

Josh Comeau は、この問題とさまざまな解決策/回避策について詳しく説明した素晴らしい記事を書いています。

于 2012-07-04T13:59:25.787 に答える
2

素敵なデザイン。

わかりましたので、他の人がすでに示唆しているように、レイヤーの問題の解決策は、そのボックスをその親(マップ)の外に移動することだと最初に言います。

しかし、あなたはいくつかの制約を設定しているので、できるだけ破らないようにします。あなたの制約を壊さずにこれを行う方法がわかりません。Z-index は継承されているため (これも他のユーザーが指摘しています)、そのツールだけで親のレイヤーから抜け出すことはできません。

そこで、JavaScript を使用して同じ効果を得る 1 つの方法を次に示します。これは醜く、後でさらに頭痛の種になるかもしれませんが、少なくとも機能するはずです。

  1. 上に置きたいdivの絶対位置を見つけます。
  2. それのコピーを作成します。
  3. オリジナルを非表示にします (不透明な場合はオプション)。
  4. すべての上にコピーを挿入します。

jQuery を使用している場合は、関数を使用してドキュメントに対する要素の位置を取得できます.offset()。その後はかなり簡単です:

$(document).ready( function() {

    $("a[href='#overlay']").click( function() {
        // 1: get the position
        pos = $('.wrap').offset();
        // 2: make a copy
        halecopy = $('.bottom .wrap').clone();
        // 3: hide the original
        $('.bottom .wrap').css({opacity: 0});
        // 4: Insert new label on top of everything
        $('body').prepend(halecopy);
        // position the new label correctly
        halecopy.css({position:'absolute',
                      top: pos.top,
                      left: pos.left,
                      'z-index': 2});
        // show the "top" layer
        $('.top').fadeIn();
    });

    $("a[href='#hide']").click( function() {
        $('.top').fadeOut( function() {
            // remove the label copy
            halecopy.remove();
            // show the original again
            $('.bottom .wrap').css({opacity: 1});
        });
    });

});​

このスクリプトは、このマークアップで機能します。

<div class="top">
    <div class="label">
        <p>Whatever</p>
    </div>
</div>

<div class="bottom">
    <div class="wrap">
        <div class="label">
            <p>Haaaleluuuuia!</p>
        </div>
    </div>
</div>

<a href="#overlay">show</a>
<a href="#hide">hide</a>​

これらのスタイルで:

.top,
.bottom {
    position: absolute;
    top: 10%;
    left: 3%;
}

.top {
    z-index: 1;
    padding: 2%;
    background: rgba(0, 127, 127, 0.8);
    display:none;
}

.bottom {
    z-index: -1;
    padding: 3%;
    background: rgba(127, 127, 0, 0.8);
}

.label {
    color: #fff;
}

.wrap {
    outline: 1px dashed rgba(127, 0, 0, 0.8);
    background: rgba(127, 127, 127, 0.8);
}

.bottom .label {
    z-index: 10;
}
​

そして、ここに便利な jsfiddle demo があります。

于 2012-07-04T15:05:12.447 に答える
2

場所を変更しz-indexたり、要素を再配置したりせずに、div下を表示できるようにする唯一の方法は、を変更するか、見visibilityたいものを重ねることです。displayopacitydiv

つまり、div"Whatever" の親で次の CSS スタイルのいずれかを使用します。

visibility: hidden;
display: none;
opacity: 0;

基本的に、より高い を持つ別の要素の上に要素を表示するように求めています。z-indexこれは、 を持つ目的を無効にしz-indexます。要素がどのように重なり合うかを制御しようとしている場合は、実際には で行う必要がありますz-index。要素の編成方法を再考することをお勧めします (「Haaaleluia」divを親の外に移動し、独自の を割り当てることもできますz-index)。それ以外の場合は、"Haaaleluia" の複製を作成して "Whatever" の上に表示することを検討することをお勧めします。これは、状況に合う場合と合わない場合があります。

編集:提供した画像を見て、注文ボックスの親をチュートリアル div の親に変更するとうまくいく場合があります。これは、要点を説明するのに役立つ jQuery を使用したデモです。ホバー イベントを、チュートリアルを開始するものに変更するだけです。別のオプションとして、注文ボックスを複製して下のボックスの上に配置することもできますが、より高くなりz-indexます (ユーザーには 1 つだけが表示されますが、複製は他のすべてに重なるようになります)。これは、マップ div が絶対的または相対的に配置されていることを前提としています。それが役立つことを願っています。

于 2012-07-04T14:10:09.827 に答える
0

レイヤリングを示すために、div に色を追加しました。

<div style="position:absolute;background:blue;z-index: 10">
      <div>Whatever</div>
</div>

<div style="position:absolute;background:red;z-index: 11">
      <div><div>Haaaleluia</div></div>
</div>
于 2012-07-04T13:40:07.730 に答える
0

これはうまくいくかもしれない単なるアイデアです。

  1. jquery を使用して z-index = 9 の div を取得します。
  2. 次に、z-index が 9 の div の最初の子の最初の子を選択します。
  3. 次に、次のようにスタイルを適用します。

$(element which you got).attr("style", "position: absolute; z-index: 12;")

スタイルが小さい要素に適用され、赤いボックスに表示されます。

于 2012-07-04T14:43:30.203 に答える