2017-04-08 15 views
12

背景:私は、リーフレットjsプラグインでmapquestを使用するデスクトップブラウザアプリケーションを持っています。私はマーカーのためのカスタムHTMLとスタイリングを使用することができますマーカーのdivIconクラスを使用しています。各divIconマーカーには、マーカーがホバーオーバーされたときに表示される隠しdivも含まれます(ホバークラスを使用)。私は、カスタムHTMLはスタイリングをはるかに上手くコントロールできるので、リーフレットに組み込まれたデフォルトのマーカーもデフォルトのポップアップも使用していません。他のマーカーを上にではなくカスタムdivIconポップアップにする

問題:ポップアップが表示されているとき、マップ上の他のマーカーは、ポップアップの上に表示されず、下に表示されません。私は本当に高い数字にポップアップのdivのZ - インデックスを設定しようとしましたが、それは助けにはなりません。

予想されること:アイコンの上にマウスを置くと、マーカーはポップアップの後ろに表示され、前面には表示されません。

これは重複した質問ではありません。この質問はthis oneと同じではありません。その質問は、デフォルトのチラシポップアップを地図のz-indexコンテキストの外にあるカスタムdivの上にとどめることでした。この質問は、カスタムマウスオーバーポップアップ(デフォルトのポップアップではない)が他のマーカーの上にとどまっていることです。さらに、私のソリューションは、回避策として注目されているjavascriptの「ハック」とはまったく異なります。

問題の実例:

var pin = L.divIcon({ 
    html: ` 
    <div class='marker'> 
     Pin 
     <div class='popup'> 
     Marker info. Other markers WILL BE on top of this div. 
     This is BAD and a PROBLEM. 
     </div> 
    </div> 
    `, 
}); 

この最も重要なCSS定義を:ここでhttps://jsfiddle.net/mrrost/py2bqw7j/

がどのように見えるか、カスタムマーカー/ポップアップでコードをdivIconある

#map { 
    position: fixed; 
} 

/* hide default leaflet pin; div.popup is put inside here */ 
.leaflet-marker-icon { 
    border: 0; margin: 0; padding: 0; 
}  

div.popup { 
    display: none; 
    position: absolute; 
} 

div.marker:hover div.popup { 
    display: block; 
} 
+0

[Z-indexが意図したとおりに動作しない]の可能な重複を(http://stackoverflow.com/questions/34270421/z-index-not-working-as-intended) – nothingisnecessary

+3

いいえ、これはありません重複その質問は、デフォルトのリーフレットポップアップをこの地図の外にあるカスタムdivの上にとどめることでした。このポストは、カスタムマウスオーバーポップアップ(デフォルトのポップアップではありません)について、他のマーカーの上に留まります。さらに、私のソリューションは、その質問に使用されていたjavascriptのハックとはまったく異なっています。 – Mike

+4

[親要素の上に子要素を表示し、親要素の兄弟を表示するにはどうすればいいですか?](http://stackoverflow.com/questions/11175833/how-can-i-show-child-element-above-parent -element-and-samlings of the-parent-ele) – TylerH

答えて

7

解決しては、 z-indexingがどのように機能するかを理解することができます。ポップアップはマーカーの内側に設定されています(作成するにはちょうどcss:hoverで作業するため)、それは親マーカー要素の子です。 Z-インデックスは親要素から継承され、子要素はその親よりも高いZ-インデックスを持つことはできません。これはzインデックス作成の仕組みです。したがって、ポップアップ要素のz-indexの設定は、リーフレットがマーカーのZ-インデックスを設定しているので、ブラウザによって無視されます。

.leaflet-marker-icon:not(:hover) { 
    z-index: 0 !important; 
} 

を完全な作業例についてはこちらをご覧ください:

マーカーがホバーされたときに修正は、すべての他のマーカーのzインデックスを下げるためにブラウザに指示CSSルールを、使用していた

https://jsfiddle.net/mrrost/tdr45764/

+2

"子要素はその親より高いz-インデックスを持つことはできません"これは正しくありません。下位要素は、その祖先要素よりも高いz-インデックス値を持つことができます。実際、それはz-index値の論理的な予想された進展です。あなたは、典型的には、子供がz軸の親の前に/その親の前にあることを望んでいないでしょう。 – TylerH

+1

特に、親によって確立されたスタッキングコンテキスト*内ではより高い*です。私は間違って[この回答](http://stackoverflow.com/a/3199134/2756409)を解釈してhttp://stackoverflow.com/revisions/11330567/1からあなたの解釈を得ていると思います。私は[前の答えを更新しました](http://stackoverflow.com/revisions/11330567/2)より正確に何が起こっているかを反映しています。 – TylerH

+3

あなたの質問は、4月9日に提案されたものではありません。しかし、それはhttp://stackoverflow.com/questions/11175833/show-child-element-above-parent-element-and-siblings-of-parentの欺瞞です。 – TylerH

関連する問題