API Google Maps v3: InfoWindow không định kích thước chính xác


83

Nó xuất hiện InfoWindow của tôi, khi bạn nhấp vào biểu tượng trang chủ trên Google Maps v3 của tôi, không tự động định cỡ đúng với nội dung của InfoWindow.

Nó cung cấp thanh cuộn khi không nên. InfoWindow phải được tự động định kích thước đúng cách.

Bất kỳ ý tưởng về lý do tại sao?

Theo yêu cầu, JavaScript có liên quan sẽ chèn HTML cho InfoWindow:

listing = '<div>Content goes here</div>';

CẬP NHẬT

Lỗi này đã được Google xử lý trong sự cố

https://issuetracker.google.com/issues/35823659

Bản sửa lỗi được triển khai vào tháng 2 năm 2015 trong phiên bản 3.19 của API JavaScript của Maps.


tốt hơn để sao chép mã có liên quan vào câu hỏi của bạn. Nếu không thì câu hỏi này sẽ trở nên vô nghĩa khi mã trên trang web của bạn thay đổi.
Jonathan Fingland

Đó thực sự là toàn bộ vấn đề. Tôi hiểu rằng API Google Maps v3 được cho là tự động điều chỉnh kích thước bất kể CSS của tôi là gì ... và thực tế không phải vậy. Nhưng dù sao thì tôi cũng sẽ đăng mã
JacobT 12/10/09

7
Tôi biết điều này đã cũ, nhưng trong trường hợp ai đó đến đây và thử mọi thứ mà vẫn gặp sự cố (như tôi đã làm): Các infowindows có chiều cao tối đa tương ứng với kích thước bản đồ của bạn. Điều này nhỏ hơn v2. Vì vậy, nếu bạn đang nâng cấp từ v2 lên v3 và gặp sự cố này, có thể là do điều này. Làm cho nội dung của bạn ngắn hơn hoặc bản đồ của bạn dài hơn hoặc hạ cấp trở lại v2.
Cassie

Câu trả lời:


32

Thêm một div bên trong infowindow của bạn

<div id=\"mydiv\">YourContent</div>

Sau đó đặt kích thước bằng css. làm việc cho tôi. Điều này coi như tất cả các infowindows đều có cùng kích thước!

#mydiv{
width:500px;
height:100px;
}

Chính xác. Cùng kích thước hoặc bạn tạo đủ lớp trong css của mình với các kích thước khác nhau.
Elijah Saounkine

tùy thuộc vào cách bạn đang làm việc với infowindows của bạn, nó cũng có thể an toàn hơn để sử dụng một lớp chứ không phải một ID, để tránh trùng lặp ID nổi xung quanh trên cùng một trang, ví dụ <div class=\"mydiv\">YourContent</div>.mydiv{ width:500px; height:100px; }
StackExchange What The Heck

Nó hoạt động trên máy tính để bàn, nhưng không phải trên thiết bị di động (Android) /
user2060451

31

Câu trả lời ngắn gọn: đặt thuộc tính tùy chọn maxWidth trong hàm tạo . Có, ngay cả khi việc thiết lập chiều rộng tối đa không phải là điều bạn muốn.

Câu chuyện dài hơn: Di chuyển bản đồ v2 sang v3, tôi thấy chính xác vấn đề được mô tả. Windows khác nhau về chiều rộng và chiều cao, một số có thanh cuộn dọc và một số thì không. Một số đã <br /> được nhúng vào dữ liệu, nhưng ít nhất một có kích thước OK.

Tôi không nghĩ thuộc tính InfoWindowsOptions.maxWidth có liên quan, vì tôi không quan tâm đến việc hạn chế chiều rộng ... nhưng bằng cách đặt nó với hàm tạo InfoWindow, tôi đã có được những gì tôi muốn và các cửa sổ hiện tự động kích thước (theo chiều dọc) và hiển thị toàn bộ nội dung mà không có thanh cuộn dọc. Không có nhiều ý nghĩa với tôi, nhưng nó hoạt động!

Xem: http://fortboise.org/maps/sailing-spots.html


2
Trong trường hợp bất kỳ ai khác đang cố gắng đặt thành maxWidthphần trăm, google maps sẽ nhận ra float là phần trăm của phần tử gốc và chuyển đổi nó thành pixel-tương đương: {"maxWidth":0.25}statement, phần tử mẹ có chiều rộng 1000px, InfoWindow sẽ có a width: 250px. Tôi không nghĩ rằng có thể buộc chiều rộng của InfoWindow vẫn là một phần trăm (giá trị của maxWidthphải là một số, vì vậy {"maxWidth":"25%"}sẽ không hoạt động và {"maxWidth":25%}được coi là mô-đun 25 không xác định và gây ra lỗi cú pháp).
jacob

Hấp dẫn. Tài liệu hiện tại của Google cho biết thuộc tính google.maps.InfoWindowOptions.maxWidth là "một số" và chúng tôi đã suy ra các đơn vị pixel. Không có lý do gì tại sao trình phân tích cú pháp cũng không thể chấp nhận một số thập phân và giải thích nó dưới dạng phân số ... và nó được để dưới dạng một "tính năng" không có tài liệu. Ngoại trừ có lẽ cảm giác tốt.
fortboise

1
Được rồi, +1 vì hoạt động tuyệt vời, nhưng tại sao tôi luôn kết thúc trên trang cánh buồm đó khi nghiên cứu chức năng gMap.
Bill Blankenship

14
Điều này có thể làm việc trong năm 2010, nhưng không giúp như của năm 2014.
Simon Đông

1
@Simon năm mới, các vấn đề mới ... có giải pháp nào để khắc phục trong thời gian này không?
Phil Cooper

25

Bạn nên cung cấp nội dung cho InfoWindow từ đối tượng jQuery.

var $infoWindowContent = $("<div class='infowin-content'>Content goes here</div>");
var infoWindow = new google.maps.InfoWindow();
infowindow.setContent($infoWindowContent[0]);

4
Ok này đang làm việc tốt, cảm ơn nhiều ... Bây giờ tôi muốn biết tại sao :)
Jeremy F.

2
Đây là một trong những cách sửa lỗi kỳ lạ nhất mà tôi từng thấy. Không có thủ thuật nào khác cho câu hỏi này phù hợp với tôi ngoại trừ điều này. Không thể tin được.
monoceres

3
Vì một số lý do, API bản đồ dường như không đặt overflow: autotrên InfoWindow DIV khi bạn chuyển vào các nút DOM thay vì một chuỗi. Điều này giải quyết vấn đề nếu nội dung chỉ xuất hiện từ 1-2px. Thật không may, điều này có nghĩa là nội dung dài hơn thực sự bị treo khỏi InfoWindow thay vì được thêm thanh cuộn.
Simon East

Mặc dù điều này có hiệu quả, nhưng khá khó chịu khi yêu cầu mọi người đưa jQuery vào trang đơn giản để infoWindow'shiển thị chính xác. Câu trả lời đầy đủ về lý do tại sao điều này hoạt động được liệt kê trong câu trả lời của tôi - jQuerytạo một cây DOM tách rời buộc nội dung phải được hiển thị chính xác và kích thước của nó được xác định chính xác trước khi google cố gắng đặt nó infoWindowtrên bản đồ
Adam

22
.gm-style-iw{
    height: 100% !important;
    overflow: hidden !important;
}

nó làm việc cho tôi


Đây không phải là một giải pháp tuyệt vời như bất kỳ nội dung mà lớn hơn so với cửa sổ thông tin sẽ được cắt bỏ và ẩn.
Simon East

Không hoàn hảo cho các nội dung có độ dài khác nhau, nhưng nội dung của tôi khá giống nhau đối với mỗi con trỏ áp dụng chiều rộng! Quan trọng và chiều cao! Quan trọng là đủ giải pháp cho tôi!
Jimbo Jones

22

ĐÃ CHỈNH SỬA (nổi bật): Tin tôi đi, trong số hàng trăm câu trả lời khác cho câu hỏi này, đây là câu trả lời đúng duy nhất cũng giải thích TẠI SAO nó lại xảy ra

Ok, vì vậy tôi biết chủ đề này đã cũ và có hàng nghìn câu trả lời, nhưng không có câu trả lời nào là chính xác và tôi cảm thấy cần phải đăng câu trả lời chính xác.

Thứ nhất, bạn không cần phải chỉ địnhwidth's hoặc height'strên bất kỳ điều gì để làm cho infoWindow của bạn hiển thị mà không có thanh cuộn, mặc dù đôi khi bạn có thể vô tình làm cho nó hoạt động bằng cách làm này (nhưng cuối cùng nó sẽ thất bại).

Thứ hai, API Google Maps infoWindow's không có lỗi cuộn, chỉ là rất khó để tìm thông tin chính xác về cách chúng hoạt động. Chà, nó đây:

Khi bạn yêu cầu API Google Maps mở trong thông tinWindow như thế này:

var infoWindow = new google.maps.InfoWindow({...});
....
infoWindow.setContent('<h1>Hello!</h1><p>And welcome to my infoWindow!</p>');
infoWindow.open(map);

Đối với tất cả các ý định và mục đích, bản đồ google tạm thời đặt một divở cuối trang của bạn ( thực sự nó tạo ra một detached DOM tree- nhưng về mặt khái niệm sẽ dễ hiểu hơn nếu tôi nói rằng bạn tưởng tượng một divvị trí ở cuối trang của bạn ) với nội dung HTML mà bạn được chỉ định. Sau đó, nó đo lường div đó (có nghĩa là, trong ví dụ này, bất kỳ quy tắc CSS nào trong tài liệu của tôi áp dụng h1pcác thẻ sẽ được áp dụng cho nó) để lấy nó widthheight. Sau đó, Google sẽ thực hiện điều đó div, chỉ định các phép đo mà nó có được khi nó được thêm vào trang của bạn và đặt nó trên bản đồ tại vị trí bạn đã chỉ định.

Đây là nơi mà vấn đề xảy ra đối với nhiều người - họ có thể có HTML trông như thế này:

<body>
 <div id="map-canvas"><!-- google map goes here --></div>
</body>

và vì bất kỳ lý do gì, CSS trông như thế này:

h1 { font-size: 18px; }
#map-canvas h1 { font-size: 32px; }

Bạn có thể nhìn thấy vấn đề? Khi cố gắng API để lấy số đo này cho bạn infoWindow(ngay lập tức trước khi hiển thị nó), h1một phần của nội dung sẽ có một kích thước của 18px(vì tạm thời "div đo" được gắn vào cơ thể), nhưng khi API thực sự đặt infoWindowtrên bản đồ, #map-canvas h1bộ chọn sẽ được ưu tiên hơn khiến kích thước phông chữ khác nhiều so với kích thước ban đầu khi API đo kích thước của infoWindowvà trong trường hợp này, bạn sẽ luôn nhận được thanh cuộn.

Có thể có nhiều sắc thái hơi khác nhau cho lý do cụ thể tại sao bạn có thanh cuộn trong của bạn infoWindow, nhưng lý do đằng sau nó là vì điều này:

Các quy tắc CSS tương tự phải áp dụng cho nội dung bên trong của bạn infoWindow bất kể phần tử HTML thực sự xuất hiện ở đâu trong đánh dấu. Nếu không, thì bạn sẽ được đảm bảo nhận được thanh cuộn trong thông tin của mình

Vì vậy, những gì tôi luôn làm, là một cái gì đó như sau:

infoWindow.setContent('<div class="info-window-content">...your content here...</div>');

và trong CSS của tôi:

.info-window-content { ... }
.info-window-content h1 { .... }
.info-window-content p { ... }
etc...

Vì vậy, bất kể API thêm vào phép đo của nó ở đâu div- trước khi đóng bodyhoặc bên trong a #map-canvas, các quy tắc CSS áp dụng cho nó sẽ luôn giống nhau.

CHỈNH SỬA RE: Họ Phông chữ

Google dường như đang tích cực giải quyết vấn đề tải phông chữ (được mô tả bên dưới) và chức năng đã thay đổi rất gần đây, vì vậy bạn có thể thấy hoặc không thấy tải phông chữ Roboto khi bạn infoWindowmở lần đầu tiên, tùy thuộc vào phiên bản API bạn đang sử dụng. Có một báo cáo lỗi mở (mặc dù trong bảng thay đổi , báo cáo lỗi này đã được đánh dấu là đã sửa) minh họa rằng google vẫn đang gặp khó khăn với vấn đề này.

MỘT ĐIỀU THÊM: XEM FONT CỦA BẠN !!!

Trong phiên bản mới nhất của API, google đã cố gắng khéo léo và bọc nội dung infoWindow của nó trong một thứ gì đó có thể được nhắm mục tiêu bằng bộ chọn CSS - .gm-style-iw. Đối với những người không hiểu các quy tắc mà tôi đã giải thích ở trên, điều này không thực sự hữu ích, và trong một số trường hợp, nó thậm chí còn tồi tệ hơn. Các thanh cuộn hầu như luôn xuất hiện lần đầu tiên infoWindowđược mở, nhưng nếu bạn mở infoWindowlại bất kỳ lần nào , ngay cả với cùng một nội dung, các thanh cuộn sẽ biến mất. Nghiêm túc mà nói, nếu bạn không bối rối trước điều này sẽ khiến bạn mất trí. Đây là những gì đã xảy ra:

Nếu bạn nhìn vào các kiểu mà google tải trên trang khi API tải, bạn sẽ có thể thấy điều này:

.gm-style {
     font-family: Roboto,Arial,sans-serif
 ...
}

Được, vì vậy Google muốn làm cho bản đồ của nó nhất quán hơn một chút bằng cách luôn đặt chúng sử dụng Robotofont-family. Vấn đề là, đối với hầu hết mọi người, trước khi bạn mở một infoWindow, trình duyệt vẫn chưa tải xuống Robotophông chữ (vì không có gì khác trên trang của bạn sử dụng phông chữ đó nên trình duyệt đủ thông minh để biết rằng nó không cần tải xuống phông chữ này). Việc tải xuống phông chữ này không phải là ngay lập tức, mặc dù nó rất nhanh. Lần đầu tiên bạn mở một infoWindowvà API gắn nội dung divcủa bạn vào phần infoWindownội dung để thực hiện các phép đo, nó sẽ bắt đầu tải xuống Robotophông chữ, nhưng các infoWindow'sphép đo của bạn đã được thực hiện và cửa sổ được đặt trên bản đồ trước khi Robototải xuống xong. Kết quả, khá thường xuyên, làinfoWindowmà các phép đo được thực hiện khi nội dung được hiển thị bằng cách sử dụng Arialhoặc mộtsans-serifnhưng khi nó được hiển thị trên bản đồ (và Robotođã tải xong) nội dung của nó đang được hiển thị ở một phông chữ có kích thước khác - và thì đấy - các thanh cuộn sẽ xuất hiện lần đầu tiên bạn mở infoWindow. Mở chính xác infoWindowlần thứ hai - tại thời điểm này, tài khoản Robotođã được tải xuống và sẽ được sử dụng khi API thực hiện phép đo infoWindownội dung và bạn sẽ không thấy bất kỳ thanh cuộn nào.


Một số chi tiết tuyệt vời ở đó Adam, và vâng tôi đã phát hiện ra những điều tương tự với bạn. Tuy nhiên, các lỗi như thông báo cho Google không thực sự xuất hiện vẫn xảy ra ngay cả với phông chữ hệ thống và không selectors hậu duệ CSS. Xem ví dụ này (có thanh cuộn trong Chrome 40 Win).
Simon East

@Simon - bạn nói đúng, liên kết bạn gửi là một lỗi (trường hợp cực kỳ phức tạp, nhưng vẫn là một lỗi). Tôi sẽ tưởng tượng rằng> 98% trường hợp, khi mọi người báo cáo thông tin của họ có và họ không biết tại sao - đó là do các vấn đề được giải quyết trong câu trả lời này.
Adam

Adam. Cảm ơn rất nhiều vì đã cung cấp câu trả lời này. Bạn đã tiết kiệm cho tôi một loạt các hack không cần thiết!
Abram

13

Tôi đã thử từng câu trả lời được liệt kê. Không có gì làm việc cho tôi. Điều này cuối cùng đã sửa chữa nó VĨNH VIỄN. Mã tôi thừa kế có một DIVtrình bao bọc xung quanh tất cả các mục <h#><p>. Tôi chỉ đơn giản là buộc một số "kiểu" trong cùng một DIV, có tính đến chiều rộng tối đa mong muốn, thay đổi chiều cao dòng chỉ trong trường hợp (bản sửa lỗi của người khác) và của riêng tôi white-space: nowrap, sau đó làm cho phần tràn tự động thực hiện các điều chỉnh chính xác. Không có thanh cuộn, không bị cắt ngắn và không có vấn đề gì!

html = '<div class="map-overlay" style="max-width: 400px;
                                        line-height: normal;
                                        white-space: nowrap;
                                        overflow: auto;
                                       ">';

7
Cái này! Làm việc theo cách của tôi qua tất cả các câu trả lời mà không thành công cho đến khi tôi đến đây. Trong trường hợp của tôi, nó là thứ white-space: nowrapcó phép thuật - các kiểu khác là không cần thiết. Chúc mừng!
Xavier Holt

Điều này thực sự có vẻ hiệu quả, tuy nhiên, một số infowindows phải được nhấp vào nhiều lần ... giải pháp cuối cùng của tôi là kết hợp câu trả lời này với Concept211 bằng cách thêm font-family: sans-serif !important; font-weight: normal !important;vào CSS.
Sparky

Thật không may nếu bạn có bất kỳ đường dài nào, các đường sẽ bị cắt đi thay vì quấn lại. Không phải là một giải pháp lý tưởng trừ khi bạn biết tất cả các dòng của mình đều ngắn.
Simon East

10

Tôi biết đây là một chủ đề cũ, nhưng tôi vừa gặp phải vấn đề tương tự. Tôi đã có <h2><p>các phần tử trong InfoWindow, và cả hai đều có lợi nhuận thấp nhất. Tôi đã loại bỏ các lề và InfoWindow đã định kích thước chính xác. Không có bản sửa lỗi được đề xuất nào khác hoạt động. Tôi nghi ngờ rằng tính toán kích thước InfoWindow không tính đến lợi nhuận.


1
Tôi đang gặp sự cố này và không có bản sửa lỗi nào khác hoạt động, nhưng bản sửa lỗi này đã làm được. Cảm ơn :)
Ian Dunn

Điều này áp dụng cho tất cả các lề được sử dụng bên trong cửa sổ.
ZMorek

2
Tôi vẫn gặp sự cố, nhưng <div style='overflow:hidden;'></div>bây giờ chỉ cần gói mọi thứ trong Có vẻ tốt.
ZMorek

10

Sẽ thêm câu trả lời của tôi vào danh sách, vì KHÔNG CÓ trong số này đã khắc phục được sự cố của tôi. Tôi đã kết thúc việc gói nội dung của mình trong một div, tạo cho div đó một lớp và chỉ định min-widthtrên div, VÀ chỉ định maxWidthtrên infoWindow VÀ cả hai đều cần phải có cùng kích thước, nếu không chiều rộng hoặc chiều cao sẽ bị tràn trên các hộp có lượng nội dung sai.

Javascript:

// Set up the content for the info box
var content = "<div class='infowindow-content'>" + content + "</div>";

// create a map info box
var infoWindow = new google.maps.InfoWindow({
    maxWidth: 350,
    content: content
});

CSS:

div.infowindow-content {
    min-width: 350px;
}

2
Đặt một min-widthnội dung là điều duy nhất phù hợp với tôi. maxWidthMặc dù vậy, không cần phải đặt trên infoWindow.
Mark Parnell,

1
@MarkParnell = đảm bảo kiểm tra kỹ lưỡng. Tôi đã gặp sự cố khi tôi có nhiều hơn một lượng văn bản nhất định ở một chiều rộng nhất định! Nếu bạn biết nội dung sẽ như thế nào, thì không có vấn đề gì đâu :)
Jen

Cảm ơn bạn rất nhiều .. điều này đã giúp tôi quá. Trong chế độ xem trên thiết bị di động, tôi đã đưa ra maxWidth: 350. vẫn đang nhận một số giá trị ngẫu nhiên. với sự trợ giúp của chiều rộng tối thiểu, nó hoạt động tốt.
DShah

8

Tôi đã thử tất cả các giải pháp này và không có giải pháp nào hoạt động. Sau một số thử nghiệm và sai sót, tôi đã tìm ra.

<style type="text/css">
#map_canvas {
    line-height:normal;
}
</style>

Đặt chiều cao dòng: bình thường cho div canvas bản đồ.


Đúng! chiều cao dòng là những gì đã cố định nó cho tôi. không có gì khác hoạt động. cụ thể, tôi đã đặt chiều cao dòng trong biểu định kiểu của mình thành {line-height: 1.3; }. tôi đã thay đổi nó thành {line-height: 1.3em} và nó đã giải quyết được sự cố.
tbradley22

hoặc bạn có thể chỉ cần đặt chiều cao dòng của div vùng chứa bản đồ thành bình thường như đã chỉ ra ở trên.
tbradley

Không có #map_canvastrong Google Maps v3 mà tôi có thể thấy. Đây phải là từ v2 cũ.
Simon East

@Simon #map_canvaslà div bạn sử dụng cho bản đồ. Nó có thể là bất cứ tên nào bạn muốn.
Nick

Thật không may, nó không giúp ích gì. Fiddle
Simon East

8

Có vẻ như vấn đề là với Roboto webfont.

Infowindow được hiển thị với các thuộc tính chiều rộng và chiều cao nội tuyến dựa trên nội dung được cung cấp. Tuy nhiên, nó không được tính toán với webfont đã được kết xuất / tải. Khi phông chữ được hiển thị SAU KHI toàn bộ bản đồ được in ra màn hình, thì nó làm cho các thanh cuộn xuất hiện do thuộc tính "tràn: tự động" bên trong các DIV của cửa sổ.

Giải pháp mà tôi thấy có hiệu quả là bọc nội dung trong DIV và sau đó áp dụng CSS để ghi đè lên webfont:

.gmap_infowin {
    font-family: sans-serif !important;
    font-weight: normal !important;
}

<div class="gmap_infowin">Your info window content here.</div>

giải pháp này làm việc cho tôi. Cũng ẩn các tác phẩm cuộn: .gm-style-iw {tràn: hidden! Important;} nhưng điều này sẽ ẩn một phần nội dung trong infoWindow
Imaginary

+1 có! Nhưng tôi đã kết hợp câu trả lời này với câu trả lời của user2656824 .
Sparky

+1 bởi vì đó là câu trả lời duy nhất cuối cùng có vẻ thừa nhận thực tế rằng điều này là do vấn đề phông chữ Roboto. Tôi sẽ không ngạc nhiên nếu các phông chữ khác cũng hiển thị sai. vấn đề là .gm-style-iw tính toán chiều cao nhỏ hơn một chút so với mức cần thiết, có thể là do float làm tròn. lựa chọn thực sự hợp lý duy nhất là .gm-style-iw {tràn: hidden! important;}. tất nhiên, điều này sẽ trở nên vô ích khi bạn thực sự phải cuộn
user151496

Phông chữ Roboto đôi khi vẻ gây ra sự cố này , nhưng nó cũng xảy ra với phông chữ Arial và phông chữ mặc định. Nếu bạn nhìn vào lỗi này với bản sửa lỗi được đề xuất của bạn trong Chrome 38 trên Windows, nó vẫn có một thanh cuộn khó chịu: jsfiddle.net/simoneast/dckxp62o/2
Simon East

5

Thật buồn cười, trong khi đoạn mã sau sẽ sửa thanh cuộn WIDTH:

.gm-style-iw
{
    overflow: hidden !important;
    line-height: 1.35;

}

Điều này đã xảy ra để sửa thanh cuộn HEIGHT:

    .gm-style-iw div
    {
        overflow: hidden !important;
    }

CHỈNH SỬA: Thêm khoảng trắng: nowrap; sang một trong hai kiểu có thể khắc phục sự cố giãn cách dường như kéo dài khi thanh cuộn bị xóa. Điểm tuyệt vời Nathan.


Tôi nghĩ rằng vấn đề của tôi là do gói thẻ h4. Khi tôi thêm đề xuất của bạn, nó đã loại bỏ các thanh cuộn nhưng có một chút ở dưới cùng của cửa sổ. Khi tôi thêm khoảng trắng: nowrap; đến h4 thì tất cả đều tốt hơn. Cảm ơn!
Nate Bunney

4

Điều này làm việc cho tôi. Đặt một divtrongsetContent

sh_map.infoWindow.setContent([
  '<div id=\"mydiv\">',
  'Your content goes here',
].join(''));

Sau đó, thêm CSS này vào trang của bạn:

<style type="text/css">
#map-canvas {
 text-align: center;
 vertical-align: middle;
}
#mydiv {
 font-family: "Comic Sans MS", cursive;
 font-size: 10px;
 border-top-width: 0px;
 border-right-width: 0px;
 border-bottom-width: 0px;
 border-left-width: 0px;
 border-top-style: none;
 border-right-style: none;
 border-bottom-style: none;
 border-left-style: none;
 letter-spacing: normal;
 text-align: center;
 vertical-align: middle;
 word-spacing: normal;
}
</style>

Ví dụ, xem http://www.student-homes-northampton.co.uk ; nhấp vào các liên kết dưới các bức ảnh ngôi nhà để hiển thị bản đồ Google.


29
cảm ơn, phải đến khi tôi đặt phông chữ của mình thành comic-sans thì điều này mới bắt đầu hoạt động.
bret

4

Điều này đã giải quyết hoàn toàn vấn đề của tôi:

.gm-style-iw {
    overflow: visible !important;
    height: auto !important;
    width: auto !important;
}

Đây là câu trả lời gần nhất phù hợp với tôi. Thay vì chiều cao tự động, tôi đã thêm chiều cao tối thiểu.
Paul

3

Tôi đang gặp sự cố tương tự với IE và đã thử nhiều bản sửa lỗi được nêu chi tiết trong các phản hồi này, nhưng không thể xóa các thanh cuộn dọc trong IE một cách đáng tin cậy.

Điều tốt nhất đối với tôi là chuyển sang kích thước phông chữ cố định bên trong infowindow - 'px' ... Tôi đang sử dụng ems. Bằng cách sửa kích thước phông chữ, tôi không còn cần phải khai báo rõ ràng chiều rộng hoặc chiều cao của infowindow và các thanh cuộn đã biến mất.


Nó đôi khi hữu ích, nhưng không khắc phục được sự cố một cách đáng tin cậy. Nếu bạn xem trò chơi này trong Chrome 38 trên Windows, nó vẫn có một thanh cuộn xấu xí: jsfiddle.net/simoneast/dckxp62o/3
Simon East

2

Chiều cao của vùng chứa bản đồ cũng rất quan trọng. If to small infoWindow luôn ở trên chiều cao 80px. Nếu không maxWidth#innerDivsửa chữa hoạt động như một sự quyến rũ.


Chính xác, tôi không nghĩ đó là bất kỳ kích thước cố định nào, nhưng vấn đề là nếu bản đồ không đủ lớn (trong trường hợp này là chiều cao) thì infowindow sẽ không thay đổi kích thước để bao bọc nội dung của chúng ta. Cố gắng làm cho bản đồ lớn hơn và kiểm tra lại
spuas

Đây là câu trả lời chính xác nhất ở đây. Bản đồ quá nhỏ thường là nguyên nhân gây ra các vấn đề về kích thước trên infowindow. Nếu bạn muốn kiểm tra lý thuyết, chỉ cần kiểm tra vùng chứa bản đồ và tăng chiều rộng và chiều cao.
pim

Thật không may, vẫn có vấn đề ngay cả với một bản đồ lớn phù hợp.
Simon East

2

Nếu không có gì khác, hãy thử thêm nội dung sau khi cửa sổ đã được mở. Điều này sẽ buộc nó phải thay đổi kích thước.

infoWindow = new google.maps.InfoWindow()
infoWindow.open(map, marker)
infoWindow.setContent(content)

0

Sử dụng sự kiện đã sẵn sàng và mở lại cửa sổ thông tin và hiển thị nội dung ẩn sau khi sự kiện đã có sẵn kích hoạt hai lần để đảm bảo tất cả các phần tử dom đã được tải.

// map is created using google.maps.Map() 
// marker is created using google.maps.Marker()
// set the css for the content div .infowin-content { visibility: hidden; } 

infowindow = new google.maps.InfoWindow();    
infowindow.setContent("<div class='infowin-content'>Content goes here</div>");
infowindow.setPosition(marker.getPosition());
infowindow.set("isdomready", false);
infowindow.open(map);   

// On Dom Ready
google.maps.event.addListener(infowindow, 'domready', function () {
    if (infowindow.get("isdomready")) {
        // show the infowindow by setting css 
        jQuery('.infowin-content').css('visibility', 'visible');               
    }
    else {
        // trigger a domready event again.
        google.maps.event.trigger(infowindow, 'content_changed');
        infowindow.set("isdomready", true);
    }
}

Tôi đã thử chỉ thực hiện setTimeout (/ * hiển thị lệnh gọi lại thông tin dữ liệu * /, 100), nhưng đôi khi điều đó vẫn không hoạt động nếu nội dung (ví dụ: hình ảnh) mất quá nhiều thời gian để tải.

Hy vọng điều này làm việc cho bạn.


0

Tôi đang gặp phải vấn đề tương tự, đặc biệt đáng chú ý khi <h2>phần tử của tôi được chuyển thành dòng thứ hai.

Tôi đã áp dụng một lớp cho a <div>trong infoWindow và thay đổi phông chữ thành phông chữ hệ thống chung (trong trường hợp của tôi là Helvetica) so với phông chữ web @ font-face mà nó đang sử dụng. Sự cố đã được giải quyết.


Thật không may, đây không phải là một bản sửa lỗi đáng tin cậy. Vấn đề đã được biết là xảy ra với Arial và các phông chữ tiêu chuẩn khác.
Simon East

0
//infowindow.setContent(response);    
var infowindowopts = { 
    maxWidth: 274, 
    content: response
};
infowindow.setOptions(infowindowopts);

0

Thêm một min-height vào phần tử lớp infoWindow của bạn.

Điều đó sẽ giải quyết vấn đề nếu infoWindows của bạn có cùng kích thước.

Nếu không, hãy thêm dòng jQuery này vào chức năng nhấp chuột của bạn cho thông tinWindow:

//remove overflow scrollbars
$('#myDiv').parent().css('overflow','');

Bạn đang đi đúng hướng. Chiều cao tối thiểu của infoWindow sẽ không giúp được gì cho bạn, vì DIV đó nằm trong DIV bị tràn ra ngoài. Vì vậy, đặt chiều cao tối thiểu sẽ làm cho nó cuộn mọi lúc.
clockworked247

Nhìn vào cấu trúc của DOM, nó thực sự là GRANDPARENT của lớp infoWindow cần loại bỏ phần tràn. Mã của tôi trông giống như sau: infoCallBack = function infoCallback (infowindow, marker) {return function () {/ * mã để hiển thị cửa sổ ở đây, sau đó sửa lỗi tràn của tôi tiếp theo * / setTimeout (function () {$ ('. Infowindow') .parent (). parent (). css ('tràn', '');}, 25); }} Về cơ bản, điều này sẽ kích hoạt bản sửa lỗi của infoWindow sau 25 mili giây, đủ thời gian để nó hiển thị.
clockworked247

0

Tôi không thể làm cho nó hoạt động trong bất kỳ hình dạng hoặc hình thức nào, tôi đã đưa 3 div vào hộp. Tôi bọc chúng trong một div bên ngoài, với chiều rộng và chiều cao đều được đặt chính xác và không có gì hoạt động.

Cuối cùng, tôi đã sửa nó bằng cách đặt div là tuyệt đối trên cùng bên trái, và sau đó trước div, tôi đặt hai hình ảnh, một rộng 300px và cao 1px, một cao 120px và rộng 1px, của một gif trong suốt.

Nó đã thu nhỏ đúng cách sau đó!

Nó xấu xí nhưng nó hoạt động.

Bạn cũng có thể thực hiện một hình ảnh và đặt một zindex mà tôi mong đợi, hoặc thậm chí chỉ một hình ảnh nếu cửa sổ của bạn không có tương tác, nhưng điều này chứa một biểu mẫu, vì vậy, đó không phải là một tùy chọn ...


0

Tôi nghĩ rằng hành vi này là do một số kiểu css trong một vùng chứa bên ngoài, tôi đã gặp vấn đề tương tự nhưng tôi đã giải quyết nó bằng cách sử dụng div bên trong và thêm một số phần đệm vào nó, tôi biết điều đó thật kỳ lạ nhưng nó đã giải quyết được vấn đề

<div id="fix_height">
    <h2>Title</h2>
    <p>Something</p>
</div>

Và theo phong cách của tôi.css

div#fix_height{
    padding: 5px;
}

0

Tôi có một phần tử nội tuyến (một thẻ) trực tiếp bên trong divvới style="overflow:auto"[...được bọc trongp thẻ và sửa nó.

Có vẻ như bất kỳ phần tử nội tuyến nào không được lồng trong phần tử khối ngay bên trong infowindow sẽ gây ra điều này.


0

Câu trả lời của tôi là thêm một trình nghe (sử dụng addListenerOnce) để kiểm tra xem infoWindow đã được thêm vào DOM hay chưa, sau đó mở lại infoWindow (không cần đóng nó).

// map, marker and infoWindow code, we'll call them 
// myMap, myMarker and myInfoWindow

myInfoWindow.open(myMap, myMarker);
google.maps.event.addListenerOnce(myInfoWindow, 'domready', function(){
                myInfoWindow.open(myMap, myMarker);
            });

0

Thêm phần sau vào CSS của tôi đã giúp tôi giải quyết vấn đề:

white-space: nowrap;

Điều đó sẽ loại bỏ các gói trên các đường dài. Tôi không nghĩ đó là giải pháp phù hợp với nhiều người.
Simon East

0

Chỉ để tóm tắt tất cả các giải pháp phù hợp với tôi trong tất cả các trình duyệt:

  • Không sử dụng lề bên trong infowindow, chỉ sử dụng phần đệm.
  • Đặt chiều rộng tối đa cho infowindow:

    this.infowindow = new google.maps.InfoWindow({ maxWidth: 200 });

  • Gói nội dung của infowindow bằng

    <div style="overflow:hidden;line-height:1.35;min-width:200px;">*CONTENT*</div>

    (thay đổi chiều rộng tối thiểu cho giá trị bạn đặt trên maxWidth của infowindow)

Tôi đã thử nghiệm nó và nó hoạt động trên mọi trình duyệt và tôi có hơn 400 điểm đánh dấu ...


Điều này đặt chiều rộng cố định cho InfoWindow (không còn linh hoạt), đây là một giải pháp, nhưng không lý tưởng.
Simon East

0

Tôi biết rằng rất nhiều người khác đã tìm thấy giải pháp phù hợp với trường hợp cụ thể của họ, nhưng vì không ai trong số họ phù hợp với trường hợp cụ thể của tôi , nên tôi nghĩ điều này có thể hữu ích cho người khác.

Một số chi tiết:

Tôi đang sử dụng Google maps API v3 trong một dự án mà CSS nội tuyến là thứ mà chúng tôi thực sự rất muốn tránh. Các infowindows của tôi đang hoạt động cho mọi thứ ngoại trừ IE11, nơi chiều rộng không được tính toán chính xác. Điều này dẫn đến tràn div, kích hoạt thanh cuộn.

Tôi phải làm ba điều:

  1. Loại bỏ tất cả các quy tắc kiểu display: inline-block khỏi bất kỳ thứ gì bên trong nội dung infowindow (tôi đã thay thế bằng display: block) - Tôi có ý tưởng thử điều này từ một chuỗi (mà tôi không thể tìm thấy nữa) nơi ai đó cũng có vấn đề với IE6.

  2. Chuyển nội dung dưới dạng nút DOM thay vì dưới dạng chuỗi. Tôi đang sử dụng jQuery, vì vậy tôi có thể thực hiện việc này bằng cách thay thế: infowindow.setContent(infoWindowDiv.html());bằng infowindow.setContent($(infoWindowDiv.html())[0]); Điều này hóa ra là dễ nhất đối với tôi, nhưng có rất nhiều cách khác để có được kết quả tương tự.

  3. Sử dụng hack "setMaxWidth" - đặt tùy chọn MaxWidth trong hàm tạo - việc đặt tùy chọn sau đó không hoạt động. Nếu bạn không thực sự muốn chiều rộng tối đa, chỉ cần đặt nó thành một số rất lớn.

Tôi không biết tại sao chúng hoạt động và tôi không chắc liệu một tập hợp con trong số chúng có hoạt động hay không. Tôi biết rằng không ai trong số họ hoạt động cho tất cả các trường hợp sử dụng của tôi riêng lẻ và 2 + 3 không hoạt động. Tôi không có thời gian để kiểm tra 1 + 2 hoặc 1 + 3.


0

Tôi không chấp nhận được việc viết mã cố định chiều rộng và chiều cao của cửa sổ thông tin hoặc đặt white-space: nowrap,maxWidth giải pháp không giúp được tôi và mọi thứ khác đều không hoạt động hoặc không phù hợp với trường hợp sử dụng của tôi.

Giải pháp của tôi là đặt nội dung, mở cửa sổ và sau đó khi domreadysự kiện được kích hoạt, hãy đặtheight CSS trên nội dung thành bất kỳ chiều cao nào, sau đó buộc Google Maps phải thay đổi kích thước InfoWindow cho phù hợp.

infoWindowlà đối tượng InfoWindow, $infoWindowContentslà đối tượng Jquery của nội dung tôi muốn đưa vào đó, maplà đối tượng Bản đồ của tôi. markerlà một điểm đánh dấu đã được nhấp vào.

infoWindow.setContent($infoWindowContents.get(0));

var listener = google.maps.event.addListener(infoWindow, 'domready', function() {
  // Stop listening, otherwise the listeners stack up if the window is opened again
  google.maps.event.removeListener(listener);

  // Set the height on the container to however tall the browser is currently rendering it
  $infoWindowContents.height($infoWindowContents.height());

  // Force Google Maps to recalculate the InfoWindow height
  infoWindow.setContent($infoWindowContents.get(0));
});

infoWindow.open(map, marker);

(Tôi đã đăng cùng một giải pháp cho một câu hỏi tương tự Làm cách nào để Google-maps InfoWindow thay đổi kích thước để phù hợp với nội dung được đặt bên trong nó? )


0

Sau khi mất thời gian và đọc một lúc, tôi chỉ muốn một cái gì đó đơn giản, css này phù hợp với yêu cầu của tôi.

.gm-style-iw > div { overflow: hidden !important; }

Cũng không phải là giải pháp tức thì nhưng việc gắn dấu sao / nhận xét về vấn đề có thể khiến họ khắc phục sự cố, vì họ tin rằng sự cố đã được khắc phục: http://code.google.com/p/gmaps-api-issues/issues/detail?id= 5713


Điều này cắt nội dung trong một số trường hợp. :-( Trong trò chơi này trên Chrome 38 trên Windows, "dddd" bị cắt hoàn toàn: jsfiddle.net/simoneast/dckxp62o/4
Simon East

0

Vâng, đây là một trong những đã làm lừa cho tôi:

.gm-style-iw>div {
    overflow: visible !important;
}

Chỉ thiết lập overflow: visibletrên .gm-style-iwthực sự làm cho vấn đề tồi tệ hơn! Tôi nhận thấy trong trình kiểm tra công cụ dành cho nhà phát triển Chrome rằng có hai div bên trong .gm-style-iwphần tử, cả hai đều được overflow: autođặt theo mặc định.

Tôi đang hiển thị khá nhiều văn bản có định dạng HTML trong InfoWindows của mình, đó có thể là lý do tại sao các giải pháp khác không hoạt động với tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.