CSS Flexbox模型的Google Maps高度问题

Vla*_*ban 5 css google-maps css3 google-maps-api-3 flexbox

我有一个简单的布局,身体占据了整个高度减去页脚的高度+标题的高度.这是通过flexbox模型实现的(http://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/)

<!DOCTYPE html>
<html>
<head>
    <title>Simple Map</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
        html, body {
            height: 100%;
            margin: 0;
            padding: 0; /* to avoid scrollbars */
        }
        #wrapper {
            display: flex; /* use the flex model */
            min-height: 100%;
            flex-direction: column; /* learn more: http://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ */
        }
        #header {
            background: yellow;
            height: 100px; /* can be variable as well */
        }
        #body {
            flex: 1;
            border: 1px solid orange;
            height: 100%;
        }
        #footer {
            background: lime;
        }
        #map-canvas {
            height: 100%;
        }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
    <script>
        var map;
        function initialize() {
            var mapOptions = {
                zoom: 8,
                center: new google.maps.LatLng(-34.397, 150.644)
            };
            map = new google.maps.Map(document.getElementById('map-canvas'),
          mapOptions);
        }
        google.maps.event.addDomListener(window, 'load', initialize);
    </script>
</head>
<body>
    <div id="wrapper">
        <div id="header">Title</div>
        <div id="body">
            <div id="map-canvas"></div>
        </div>
        <div id="footer">
            Footer<br />
            of<br />
            variable<br />
            height<br />
        </div>
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我正面临谷歌地图的问题.我不能将它初始化为canvas div,因为(我认为这是原因)它没有定义的高度.

有没有办法让谷歌地图出现?

谢谢

Sal*_*n A 10

height: 100%没有按预期工作.您可以使用绝对定位来调整Google地图的大小:

var map;
function initialize() {
  var mapOptions = {
    zoom: 8,
    center: new google.maps.LatLng(-34.397, 150.644)
  };
  map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}
google.maps.event.addDomListener(window, 'load', initialize);
Run Code Online (Sandbox Code Playgroud)
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}
#wrapper {
  display: flex;
  min-height: 100%;
  flex-direction: column;
}
#header {
  background: yellow;
  height: 100px;
}
#body {
  flex: 1;
  background: orange;
  position: relative;
}
#footer {
  background: lime;
}
#map-canvas {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<div id="wrapper">
  <div id="header">Title</div>
  <div id="body">
    <div id="map-canvas"></div>
  </div>
  <div id="footer">
    Footer<br/>of<br/>variable<br/>height
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


MrU*_*own 4

在创建地图之前,将高度设置#map-canvas为 JavaScript 中元素的高度。#body

var mapCanvas = document.getElementById('map-canvas');
mapCanvas.style.height = document.getElementById('body').clientHeight + 'px';
Run Code Online (Sandbox Code Playgroud)

jQuery 版本:

$('#map-canvas').height($('#body').height());
Run Code Online (Sandbox Code Playgroud)

JSFiddle demo