Ответ 1
По умолчанию мы можем создать дополнительные местозаполнители элемента управления, помимо 4-х предусмотренных углов.
Приятным преимуществом является то, что он позволяет поместить несколько элементов управления в один из этих заполнителей. Они будут складываться без наложения, как в стандартных углах.
JavaScript:
// Create additional Control placeholders
function addControlPlaceholders(map) {
var corners = map._controlCorners,
l = 'leaflet-',
container = map._controlContainer;
function createCorner(vSide, hSide) {
var className = l + vSide + ' ' + l + hSide;
corners[vSide + hSide] = L.DomUtil.create('div', className, container);
}
createCorner('verticalcenter', 'left');
createCorner('verticalcenter', 'right');
}
addControlPlaceholders(map);
// Change the position of the Zoom Control to a newly created placeholder.
map.zoomControl.setPosition('verticalcenterright');
// You can also put other controls in the same placeholder.
L.control.scale({position: 'verticalcenterright'}).addTo(map);
Тогда становится легко стилизовать эти заполнители с помощью CSS, потому что их родитель DOM - это сам контейнер карты. Следовательно, top
, bottom
, left
и right
могут быть указаны с процентами (которые используют родительские измерения).
CSS:
.leaflet-verticalcenter {
position: absolute;
z-index: 1000;
pointer-events: none;
top: 50%; /* possible because the placeholder parent is the map */
transform: translateY(-50%); /* using the CSS3 Transform technique */
padding-top: 10px;
}
.leaflet-verticalcenter .leaflet-control {
margin-bottom: 10px;
}
Что касается вертикального центрирования самого заполнителя, вы можете использовать свою любимую технику. Здесь я использовал CSS3 Transform, чтобы сместить заполнитель на половину его высоты.
При необходимости (например, для совместимости со старыми браузерами) вы можете использовать метод "вычислить под нагрузкой" для выполнения этого смещения, аналогично ответу iH8. Но вам больше не нужно запускать его при изменении размера карты, только при добавлении новых элементов управления в заполнитель.
Демонстрационная версия: https://plnkr.co/edit/bHJwfm598d1Ps7MpLG0k?p=preview
Примечание: в настоящее время для этого существует открытый PR (Leaflet/Leaflet # 5554), но, поскольку он несовместим со старыми версиями Internet Explorer, он вряд ли будет объединен с ядром Leaflet.