2017-04-08 35 views
12

BACKGROUND: Mam przeglądarkę komputerową, która korzysta z mapquestu z wtyczką js. Używam klasy divIcon dla znaczników, co pozwala mi używać niestandardowego kodu HTML i stylizacji dla znaczników. Każdy znacznik divIcon zawiera również ukryty element div, który jest wyświetlany po obróceniu znacznika (za pomocą: hover class). Nie używam domyślnego znacznika lub domyślnego popup'a wbudowanego w ulotkę, ponieważ niestandardowy html zapewnia znacznie lepszą kontrolę nad stylizacją.Spraw, aby inne znaczniki znalazły się poniżej niestandardowego wyskakującego okna divIcon zamiast na górze.

PROBLEM: Kiedy pojawi się wyskakujące okienko, wszystkie inne znaczniki na mapie pojawiają się na górze wyskakującego okienka, zamiast pod spodem. Próbowałem ustawić z-index popup div na naprawdę wyższy numer, ale to nie pomaga.

CO OCZEKIWA SIĘ: Po ustawieniu wskaźnika myszy nad ikoną znaczniki powinny znajdować się za wyskakującym okienkiem, a nie na wierzchu.

TO NIE JEST POWAŻNE PYTANIE: To pytanie nie jest tożsame z this one. Pytanie dotyczyło pozostawienia domyślnych wyskakujących okienek na górze niestandardowego elementu div, który znajduje się poza kontekstem mapy z-index. To pytanie dotyczy niestandardowego wyskakującego okienka myszy (nie domyślnego wyskakującego okienka) znajdującego się nad innymi znacznikami. Dodatkowo, moje rozwiązanie różni się całkowicie od tego, co napisano w języku JavaScript jako "obejście".

przykład roboczych problem: https://jsfiddle.net/mrrost/py2bqw7j/

Oto co Divicon kod z niestandardowy znacznik/popup wygląda następująco:

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> 
    `, 
}); 

tej najważniejszej definicje CSS:

#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

Możliwe duplikat [z indeks nie działa w zamierzony] (http://stackoverflow.com/questions/34270421/z-index-not-working-as-intended) – nothingisnecessary

+3

nie, to nie jest duplikat. To pytanie dotyczyło tego, że domyślne wyskakujące ulotki pozostają na wierzchu niestandardowego elementu div, poza tą mapą. Ten post jest o niestandardowym popupover mouseover (nie domyślnym popup) pobyt powyżej innych znaczników. Dodatkowo moje rozwiązanie jest całkowicie odmienne od hackowania javascript użytego w tym pytaniu. – Mike

+4

Możliwy duplikat [Jak mogę wyświetlić element potomny powyżej elementu nadrzędnego ORAZ rodzeństwo elementu nadrzędnego?] (Http://stackoverflow.com/questions/11175833/how-can-i-show-child-element-above-parent -element-and-siblings-of-the-parent-ele) – TylerH

Odpowiedz

7

Rozwiązaniem było aby lepiej zrozumieć, jak działa indeksowanie z-Z. Wyskakujące okienko jest ustawione wewnątrz znacznika (w celu wykonania jest to tylko z css: hover), więc jest dzieckiem elementu nadrzędnego znacznika. Indeks Z jest dziedziczony z elementów nadrzędnych, a elementy potomne nie mogą mieć wyższego indeksu Z niż jego element nadrzędny. Tak właśnie działa indeksowanie z-Z. Zatem ustawienie indeksu z elementu popup jest ignorowane przez przeglądarkę, ponieważ ulotka ustawiła indeks Z dla znacznika.

Rozwiązaniem było zastosowanie reguły CSS, który informuje przeglądarkę, aby obniżyć z-index wszystkich innych markerów, gdy znacznik jest unosił się nad:

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

Zobacz tutaj, aby uzyskać pełną przykład pracy:

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

+2

"Elementy potomne nie mogą mieć z-indeksu wyższego niż jego rodzic" To nie jest poprawne. Elementy potomne mogą mieć wyższe wartości indeksu Z niż ich elementy przodków. W rzeczywistości jest to oczekiwany logiczny postęp wartości z-index. Zazwyczaj nie chcesz, aby dziecko znajdowało się za/przed rodzicem na osi Z. – TylerH

+1

W szczególności jest wyższy * w kontekście układania ustalonym przez rodzica *.Myślę, że otrzymujesz swoją interpretację z http://stackoverflow.com/revisions/11330567/1, która nieprawidłowo zinterpretowała [tę odpowiedź] (http://stackoverflow.com/a/3199134/2756409). Uaktualniłem poprzednią odpowiedź (http://stackoverflow.com/revisions/11330567/2), aby dokładniej odzwierciedlać to, co się dzieje. – TylerH

+3

Mając to na uwadze, masz rację, że twoje pytanie nie jest podróbką sugerowanego 9 kwietnia. Jednak * jest * dupkiem http://stackoverflow.com/questions/11175833/show-child-element-above-parent-element-and-siblings-of-parent – TylerH