Это кажется возможным только в CSS. Ниже я переопределяю (с !important
) только три элемента CSS и добавляю один :before
псевдоэлемент. По сути, я сначала выстраиваю всплывающее окно с верхом, а не с низом , где все 55px
зависит от выбранного вами маркера и личного вкуса.
Затем я перемещаю «подсказку» всплывающего окна аналогичным образом снизу вверх top:0px
и обнаруживаю, что это сделано не с помощью «обычного» трюка (то есть: сначала поместите на краю пузыря псевдоэлемент размером 0x0 с толстой прозрачной рамкой, затем раскрасьте, чтобы противоположная граница элемента, на которую вы хотите указать; в нашем случае это нижняя граница). Вместо этого он, кажется, сделан из прямоугольника, повернутого откуда-то сверху слева (может быть: потому что он заставляет браузер использовать графический процессор и, следовательно, ускоряет все?), И я недостаточно хорошо понимаю точку (извините за каламбур) ( мой совет в нужном месте, но невидимый); так что я просто убираю тень с ящика, которая сейчас находится не в том месте, и оставляю все как есть - любому, кто понимает «старый совет», пожалуйста, настройте его.
Поэтому вместо этого я делаю свой собственный совет с «нормальным» процессом (если вы не уверены, измените четыре цвета рамки ниже, вместо 3x прозрачного и 1x белого - например border-bottom-color: blue; border-left-color: green; border-top-color: yellow' border-right-color: red
).
#map {
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
z-index: 0;
}
.leaflet-popup {top: 55px !important;}
/* Here I move the "tip" to the right location, but didn't succeed in making it visible. So I just remove the box-shadow and leave it: */
.leaflet-popup-tip-container {
top: 0px !important;
}
.leaflet-popup-tip {
box-shadow: none !important;
}
.leaflet-popup:before
{
content: "";
position: absolute;
border: 13px solid transparent;
border-bottom-color: white;
bottom: 0px;
margin-left: -13px;
}
Как показывает этот JSFiddle , нет проблем с разными размерами всплывающих окон (разной ширины, разной высоты текста), если вы попробуете оба маркера.
В целом это кажется устойчивым к обновлениям в Leaflet, поскольку элементы, которые я переопределяю, вряд ли изменятся.