もう1つの解決策(およびおそらくよりクリーンな)は、4つのコーナーのほかに、追加のコントロールプレースホルダを作成することです。
素晴らしい利点は、複数のコントロールをそれらのプレースホルダの1つに配置できることです。標準的なコーナーのように重なり合うことなく積み重ねられます。
は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);
そのDOMの親がマップコンテナ自体であるので、次に、それは、CSSでそれらのプレースホルダのスタイリングが容易となります。したがって、top
,bottom
,left
およびright
は、パーセンテージ(親の次元を使用する)で指定できます。
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;
}
としてvertical centeringプレースホルダ自体のために、あなたのお気に入りの技法を使用することができます。ここでは、CSS3 Transformを使用してプレースホルダをその高さの半分だけオフセットしています。
必要に応じて(たとえば、古いブラウザとの互換性のために)、iH8と同様に、このオフセットを実行するために「負荷時に計算」メソッドを使用できます。しかし、新しいコントロールをプレースホルダに追加するときに限り、map resizeで実行する必要はありません。
デモ:これは、CSSの1行で、少し簡単に行うことができますhttp://jsfiddle.net/ve2huzxw/8/
リーフレット1.0.3では、リーフレット垂直中心のCSSに 'z-index:1000;'という行を含める必要がありました。それ以外の場合は、コントロールをクリックしても表示されませんでした。デモ:http://jsfiddle.net/ve2huzxw/437/ – user2441511