在不裁剪的情况下减小 Mapbox 地图大小
Reduce Mapbox map size without cropping
我想让我的 Mapbox 地图内容始终完全可见,无论容器的大小如何。
但是当地图很小的时候,地图会被裁剪。
这是我的例子https://codepen.io/eddydg/pen/BmReEm
当您减小页面宽度时,它也会减小地图容器的高度以保持其大小比例。但地图不会进一步缩小以保持所有图层可见。
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v8',
center: [0, 0],
zoom: 0
});
window.addEventListener('resize', () => {
map.zoomTo(0);
});
body {
margin: 0;
padding: 0;
}
.content {
display: flex;
}
.column {
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
border: thin black solid;
display: flex;
align-items: center;
justify-content: center;
height: 400px;
}
.map-wrapper {
position: relative;
width: 100%;
height: 30vw; /* 100% */
max-width: 100%;
max-height: 100%;
background-color: teal;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
<script src="https://www.mapbox.com/help/data/codepen-token.js"></script>
<link href="https://api.tiles.mapbox.com/mapbox-gl-js/v0.12.2/mapbox-gl.css" rel="stylesheet"/>
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v0.12.2/mapbox-gl.js"></script>
<div class="content">
<div class="column"></div>
<div class="column"></div>
<div class="column">
<div class="map-wrapper">
<div id='map'></div>
</div>
</div>
</div>
我认为您的问题是,为了调整地图的大小,以便将所有内容保持在所讨论的微小尺寸内,它必须缩小到超过缩放级别 0。这是不可能的.可能你可以使用 CSS 来破解一些东西,以使用像素比率或其他东西缩放实际渲染的地图。
更新: 这似乎已在 Mapbox GL js v1.6.0-beta.1
中修复
实际上 this seems to be a bug 当视口小于 512px 时会发生这种情况。
它很旧,但仍未修复。因此,作为一种解决方法,我最终在地图上使用了翻转效果:
- 鼠标移出地图:增加地图尺寸(>=512px 以查看整个地图)并
scale
将其恢复为原始尺寸 CSS。您将看到整个地图(无论其大小如何),但所有交互都会发生变化。
- 将鼠标悬停在地图上:返回原始大小并
scale(1)
这样地图将被裁剪,但您将能够正确地与其互动。
我想让我的 Mapbox 地图内容始终完全可见,无论容器的大小如何。 但是当地图很小的时候,地图会被裁剪。
这是我的例子https://codepen.io/eddydg/pen/BmReEm
当您减小页面宽度时,它也会减小地图容器的高度以保持其大小比例。但地图不会进一步缩小以保持所有图层可见。
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v8',
center: [0, 0],
zoom: 0
});
window.addEventListener('resize', () => {
map.zoomTo(0);
});
body {
margin: 0;
padding: 0;
}
.content {
display: flex;
}
.column {
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
border: thin black solid;
display: flex;
align-items: center;
justify-content: center;
height: 400px;
}
.map-wrapper {
position: relative;
width: 100%;
height: 30vw; /* 100% */
max-width: 100%;
max-height: 100%;
background-color: teal;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
<script src="https://www.mapbox.com/help/data/codepen-token.js"></script>
<link href="https://api.tiles.mapbox.com/mapbox-gl-js/v0.12.2/mapbox-gl.css" rel="stylesheet"/>
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v0.12.2/mapbox-gl.js"></script>
<div class="content">
<div class="column"></div>
<div class="column"></div>
<div class="column">
<div class="map-wrapper">
<div id='map'></div>
</div>
</div>
</div>
我认为您的问题是,为了调整地图的大小,以便将所有内容保持在所讨论的微小尺寸内,它必须缩小到超过缩放级别 0。这是不可能的.可能你可以使用 CSS 来破解一些东西,以使用像素比率或其他东西缩放实际渲染的地图。
更新: 这似乎已在 Mapbox GL js v1.6.0-beta.1
中修复实际上 this seems to be a bug 当视口小于 512px 时会发生这种情况。 它很旧,但仍未修复。因此,作为一种解决方法,我最终在地图上使用了翻转效果:
- 鼠标移出地图:增加地图尺寸(>=512px 以查看整个地图)并
scale
将其恢复为原始尺寸 CSS。您将看到整个地图(无论其大小如何),但所有交互都会发生变化。 - 将鼠标悬停在地图上:返回原始大小并
scale(1)
这样地图将被裁剪,但您将能够正确地与其互动。