Un'altra soluzione (e probabilmente più pulita) sarebbe creare ulteriori segnaposto di controllo, oltre ai 4 angoli forniti.
Un buon vantaggio è che consente di inserire diversi controlli in uno di quei segnaposti. Si impilano senza sovrapposizioni, come negli angoli standard.
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);
allora diventa facile styling questi segnaposto con i CSS, perché il loro genitore DOM è la mappa contenitore stesso. Quindi, top
, bottom
, left
e right
possono essere specificati con percentuali (che utilizzano le dimensioni del genitore).
CSS:
.leaflet-verticalcenter {
position: absolute;
top: 50%; /* possible because the placeholder's parent is the map */
transform: translateY(-50%); /* using the CSS3 Transform technique */
padding-top: 10px;
}
.leaflet-verticalcenter .leaflet-control {
margin-bottom: 10px;
}
Per quanto riguarda vertical centering il segnaposto per sé, è possibile utilizzare il tecnica preferita. Qui ho usato la trasformazione CSS3 per bilanciare il segnaposto di metà della sua stessa altezza.
Se necessario (ad esempio per la compatibilità con i vecchi browser), è possibile utilizzare un metodo "calcola-su-carico" per eseguire questo offset, simile a iH8. Ma non è più necessario eseguirlo sul ridimensionamento della mappa, solo quando si aggiungono nuovi Controlli al segnaposto.
Demo: http://jsfiddle.net/ve2huzxw/8/
Per il volantino 1.0.3, avevo bisogno di includere la riga 'z-index: 1000;' nel CSS per il centro verticale dell'opuscolo. Altrimenti, potrei fare clic sul controllo ma non era visibile. Demo: http://jsfiddle.net/ve2huzxw/437/ – user2441511