编辑(突出):请相信我,在这个问题的其他一百个答案中,这是唯一可以解释为什么会发生的正确答案
好的,所以我知道这个线程很旧,并且有1000个答案,但是没有一个是正确的,我觉得需要发布正确的答案。
首先,你不会永远需要指定width's
或height's
在为了让您的信息窗口,以显示没有滚动任何东西,虽然有时候你可能会意外地得到它做这个工作(但它最终会失败)。
其次,Google Maps APIinfoWindow's
没有滚动错误,很难找到有关其工作方式的正确信息。好吧,这里是:
当您像这样告诉Google Maps API在infoWindow中打开时:
var infoWindow = new google.maps.InfoWindow({...});
....
infoWindow.setContent('<h1>Hello!</h1><p>And welcome to my infoWindow!</p>');
infoWindow.open(map);
出于所有意图和目的,google maps会在您的HTML内容中暂时将adiv
放置在页面的末尾(实际上,它会创建一个detached DOM tree
-,但如果从概念上讲,如果您想象某个div
存在于页面的末尾,那么从概念上更容易理解)指定。然后,它的措施该分区(这意味着,在这个例子中,无论我的文档中的CSS规则适用于h1
和p
标签将被应用到它)来获得它的width
和height
。然后,Google接受div
,将其添加到页面后得到的尺寸分配给它,然后将其放置在地图上您指定的位置。
这是很多人发生问题的地方-他们可能有如下所示的HTML:
<body>
<div id="map-canvas"></div>
</body>
以及出于任何原因的CSS如下所示:
h1 { font-size: 18px; }
#map-canvas h1 { font-size: 32px; }
你看到问题了吗?当API试图进行测量您infoWindow
(立即显示它之前),该h1
部分内容将有一个大小18px
(因为临时“测量格”被附加到体),但是当API实际上是放置infoWindow
在在地图上,#map-canvas h1
选择器将优先处理,导致字体大小与API测量大小时的字体大小有很大不同infoWindow
,在这种情况下,您将始终获得滚动条。
由于您的中有滚动条的特定原因,细微差别可能会稍有不同infoWindow
,但是其背后的原因是:
infoWindow
无论实际HTML元素在标记中的位置如何,都必须对您内部的内容应用相同的CSS规则。如果没有,那么您将保证在infoWindow中获得滚动条。
所以我经常做的是这样的:
infoWindow.setContent('<div class="info-window-content">...your content here...</div>');
在我的CSS中:
.info-window-content { ... }
.info-window-content h1 { .... }
.info-window-content p { ... }
etc...
因此,无论API在何处附加测量值div
-在关闭之前body
或内部#map-canvas
,应用于它的CSS规则都将始终相同。
编辑RE:字体家族
Google似乎正在积极处理字体加载问题(如下所述),并且功能最近已经改变,因此infoWindow
,根据您使用的API版本,您第一次打开时可能看不到Roboto字体加载。有一个开放的错误报告(即使在更改日志中此错误报告已被标记为已修复),它表明google仍然难以解决此问题。
一件事:观看您的字体家庭!!!
在API的最新版本中,Google试图变得聪明,并将其infoWindow内容包装在可以使用CSS选择器-定位的内容中.gm-style-iw
。对于不了解我上面解释的规则的人,这并没有真正的帮助,在某些情况下甚至更糟。滚动条几乎总是在第一次infoWindow
打开时出现,但是如果infoWindow
再次打开,即使内容完全相同,滚动条也会消失。严重的是,如果您不感到困惑,这会让您迷失方向。这是正在发生的事情:
如果您查看Google在加载API时在网页上加载的样式,您将能够看到以下内容:
.gm-style {
font-family: Roboto,Arial,sans-serif
...
}
好的,因此Google希望通过始终使它们使用Roboto
字体家族来使其地图更加一致。问题是,对于大多数人来说,在打开之前infoWindow
,浏览器尚未下载Roboto
字体(因为页面上没有其他字体使用过该字体,因此浏览器足够聪明,知道不需要下载该字体)。此字体)。尽管下载速度非常快,但并不是立即下载的。第一次打开时infoWindow
,API将内容div
随infoWindow
内容附加到正文以进行测量,它开始下载Roboto
字体,但是infoWindow's
在Roboto
完成下载之前,将进行测量并在地图上放置窗口。结果经常是infoWindow
在使用内容Arial
或sans-serif
字体呈现内容时进行了测量,但是在地图上显示(并Roboto
完成下载)时,内容以不同大小的字体显示-瞧-滚动条第一次出现你打开infoWindow
。infoWindow
再次完全相同地打开-此时Roboto
已下载该文件,并且将在API对其infoWindow
内容进行度量时使用,并且您不会看到任何滚动条。