未来永劫

メリーバッドエンドが好きです.

Bootstrap3(Honoka) + Google Map APIでMapが正常に表示されない問題について

今巷で話題のBootstrap(Honoka)を使ってGoogle Map APIのMapを生成しようとしたらMapが表示されない問題にブチ当たった.

環境

Bootstrap3(Honoka)
Google maps javascript API v3

起こったこと

以下のファイルで実験

たとえば,Google Map APIをBootstrap上で呼び出すために以下のHTMLのファイルとJavascriptを用意する.
HTMLファイルは,純粋にBootstrapとfontawesome,jQueryを呼び出す.
加えて,GoogleMapAPIを使用するためのjavascriptも内に呼び出し,宣言している.
gist.github.com


jQuery(javascript)もGistに公開.
gist.github.com

ゴリゴリ書いたので汚いので簡単に説明すると,Geolocation APIを用いて,現在位置を取得し,現在位置を基にMapを生成するプログラムです.
initializeGoogleMapAPI()内で実際にMapを生成しています.
生成位置は,htmlファイル内の

内で生成しています.

実験結果

Mapが生成されない!
正確には,Mapを生成する関数に正常に入っている事が確認できたので,入っているにも関わらず画面内に正しく表示されていないということがわかりました.
Bootstrapを適用しない場合はこんな感じ.
f:id:shopetan:20150703234458p:plain

ここで,Bootstrapを適用すると…
f:id:shopetan:20150703235001p:plain

正しく表示されません.

解決方法

map_canvasの表示ピクセル数が,横697px x 縦0px になっていますね.
Honoka(に限らず,おそらくBootstrapのテーマ)では親要素にheightの大きさに関する記述が明示されていないのが問題なのだと思います.
従って,htmlファイル内のstyleを

<div id="map_canvas" style="width:50%; height:500px">

のようにして,実際にピクセル数を指定すると,正常に出力がされました.

もしくは,htmlタグ,bodyタグに,直接

html,body {
height: 100%;
}

などして指定すると上手くいくと思います.
bootstrapではデフォルトで縦の長さに関するcssがあたってないため,n%のような可変表示を行おうとすると0pxになってしまうようです.

参考

stackoverflow.com