Z-индекса между детьми и родителями
У меня возникли проблемы с разработкой порядка Z-индекса для приложения, над которым мы работаем, у меня есть два корневых родителя, панель навигации и карта и один ребенок, подсказка карты. Navbar должен быть виден над картой, поэтому он имеет более высокий Z-индекс, но проблемы в том, чтобы сделать всплывающую подсказку в контейнере карты, который будет отображаться на боковой панели, немного трудно объяснить, поэтому вы можете визуализировать случай наhttp://jsbin.com/afakak/2/edit#javascript, html, live :
<div id="nav-bar">
The nav bar
</div>
<div id="map-container">
This is the map container
<div id="tooltip">
This is the Tooltip
</div>
</div>
Спасибо за любую помощь.
7 ответов
если #map-container
позиционируется (т. е. не статично), это невозможно, из-за того, как сравнивается z-индекс:
body
(или любой другой расположенный родительский элемент) является ссылкой для обоих #map-container
и #nav-bar
. Любой z-index
вы даете им вычисляется в отношении родительского элемента. Таким образом, один из 2 элементов с более высоким Z-индексом будет отображаться выше другого и всех его дочерних элементов. Z-индекса #tooltip
будет сравниваться только с другими детьми #map-container
.
вы могли бы сделать, как сказал Начо и статически позиция #map-container
. Вы можете имитировать фиксированное позиционирование с помощью Javascript, если хотите.
если вы не можете этого сделать, вам нужно изменить разметку, так что #nav-bar
и #tooltip
общий обновленный родительский элемент. Либо двигаться #nav-bar
внутри #map-container
или #tooltip
из него.
ниже Решение должно работать, но я не знаю, есть ли у вас требование, как держать nav-bar
за пределами map-container
. Если это так, я не думаю, что для этого есть обходной путь.
CSS:
#tooltip-helper{
position:relative;
/*below properties are to demonstrate the helper*/
width:10px;
height:10px;
background-color:green;
top:200px;
left:200px;
}
#tooltip
{
position:absolute;
top:10px;/*this is just to make sure helper is visible*/
left:-100px;/*this is to center the tooltip*/
width: 200px;
height: 200px;
background-color: yellow;
color: black;
padding: 10px;
z-index: 15;
}
HTML-код:
<div id="map-container">
<div id="nav-bar">
The nav bar
</div>
This is the map container
<div id="tooltip-helper">
<div id="tooltip">This is the Tooltip</div>
</div>
</div>
вы должны абсолютно позиция nav-bar
и tooltip
(в противном случае z-индекс не будет учитываться) и поддерживать map-container
статический, расположенный
#map-container{
...
position: static;
...
}
#nav-bar{
...
position: absolute;
}
#tooltip{
...
position: absolute
}
Я думаю, что единственный способ сделать это с position: fixed
на #map-container
- это реструктуризация ваших подсказок для отображения за пределами #map-container.
Итак, при щелчке значка "внутри" контейнера карты, сама подсказка отображается над обоими (с правильным z-index
set).
<div id="nav-bar">
The nav bar
</div>
<div id="map-container">
This is the map container
</div>
<div id="tooltip">
This is the Tooltip
</div>
пройдя через ваши коды, я заметил это.
#tooltip{
background-color: yellow;
width: 200px;
height: 200px;
color: black;
padding: 10px;
z-index: 15;
}
подсказка #имеет z-индекс,но она не расположена. Свойство z-index будет работать, только если оно имеет одно из значений свойства position. И учитывая, что вы хотите, чтобы подсказка выделялась, вы должны использовать абсолютное значение позиции, как это.
#tooltip{
position: absolute;
background-color: yellow;
width: 200px;
height: 200px;
color: black;
padding: 10px;
z-index: 15;
}
HTML-код
<div id="map-container">
<div id="nav-bar">
The nav bar
</div>
This is the map container
<div id="tooltip">
This is the Tooltip
</div>
</div>
это держит # tooltip на вершине....
для будущих читателей с похожими проблемами -
Если ваши конфликтующие дочерние элементы position: fixed
, рассмотрите возможность установки высоты родительских контейнеров в 0px, а затем перенесите любые параметры отображения родительского фона на общего дедушку конфликтующих детей.
Это решает мою аналогичные delimma.
если на реальной странице tooltip
должен отображаться только при наведении на контейнер карты, вы можете просто динамически изменять его z-индекс следующим образом:
#map-container:hover
{
z-index: 16
}
в противном случае нужно изменить положение tooltip
Так что nav-bar
не перекрывает его.