Я рендерил карту, используя Mapboxgl, Bootstrap 4 и React.
Мне нужно, чтобы карта занимала 100% высоты страницы и отображалась в первом столбце сетки из двух столбцов.
Однако при использовании React ширина карты увеличивается до 100% ширины строки, перекрывая нижнюю часть 2-го столбца.
Лучше всего было бы проверить мои примеры на jsfidle, чтобы понять, что я имею в виду.
Карта правильно отображается (при использовании чистого HTML и без React)
https://jsfiddle.net/apphancer/jhxy5c63/
Карта, показывающая ширину выпуск (при использовании React)
https://jsfiddle.net/apphancer/9g71ovn6/
Для того, чтобы высота 100% работала, я использую этот CSS:
.map-wrapper {
position: fixed;
width: 100%;
height: 100%;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
height: 100%;
}
Я подозреваю, что это может быть как-то связано с тем, как карта отображается в React, поскольку проблема не возникает при использовании чисто HTML-решения.
Кто-нибудь может указать в правильном направлении?
HTML
<div id="app"></div>
CSS
body, html {
height: 100%;
}
#app, .row, .col-9 {
height: 100%;
}
.col-3 {
background-color: rgba(0, 0, 0, 0.5);
border: 1px solid red;
}
.map-wrapper {
position: fixed;
width: 100%;
height: 100%;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
height: 100%;
}
JS
mapboxgl.accessToken = 'pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4M29iazA2Z2gycXA4N2pmbDZmangifQ.-g_vE53SD2WrJ6tFX7QHmA';
class Application extends React.Component {
componentDidMount() {
const map = new mapboxgl.Map({
container: 'map', // container id
style: 'mapbox://styles/mapbox/light-v9', // stylesheet location
center: [13.392, 52.523], // starting position [lng, lat]
zoom: 9 // starting zoom
});
map.addControl(new mapboxgl.NavigationControl());
map.resize(); // tried with this to see if it would help
}
render() {
return (
<div className="row no-gutters">
<div className="col-9">
<div className="map-wrapper">
<div ref={el => this.mapContainer = el} id="map"/>
</div>
</div>
<div className="col-3">
2 of 2
</div>
</div>
)
}
}
ReactDOM.render(<Application/>, document.getElementById('app'));