সম্পাদনা (স্ট্যান্ডআউট): আমার উপর বিশ্বাস রাখুন, এই প্রশ্নের আরও শতাধিক উত্তরের মধ্যে, এটিই হ'ল কেন এটি হচ্ছে তা ব্যাখ্যা করে এমন একমাত্র সঠিক উত্তর
ঠিক আছে, তাই আমি জানি যে এই থ্রেডটি পুরানো, এবং এর হাজার উত্তর রয়েছে, তবে এর কোনওটিই সঠিক নয় এবং আমি সঠিক উত্তর পোস্ট করার প্রয়োজনীয়তা অনুভব করছি।
প্রথমত, আপনার স্ক্রোলবারগুলি ব্যতীত আপনার ইনফোউন্ডোটি প্রদর্শনের জন্য আপনাকে কখনই নির্দিষ্ট বা কোনও কিছু দেওয়ার প্রয়োজন হবে না , যদিও কখনও কখনও আপনি দুর্ঘটনাক্রমে এটি করে এটি কাজ করতে পারেন (তবে এটি শেষ পর্যন্ত ব্যর্থ হবে)।width's
height's
দ্বিতীয়ত, Google মানচিত্র API infoWindow's
না এটা কিভাবে তারা কাজ সঠিক তথ্য খুঁজে পেতে শুধু খুব কঠিন একটি স্ক্রলিং বাগ আছে। ঠিক আছে, এটি এখানে:
আপনি যখন গুগল ম্যাপস এপিআইকে ইনফো উইন্ডোতে এটি খুলতে বলবেন:
var infoWindow = new google.maps.InfoWindow({...});
....
infoWindow.setContent('<h1>Hello!</h1><p>And welcome to my infoWindow!</p>');
infoWindow.open(map);
সমস্ত উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য, গুগল মানচিত্রগুলি অস্থায়ীভাবে div
আপনার পৃষ্ঠার শেষে একটি স্থান রাখে ( আসলে এটি একটি তৈরি করে detached DOM tree
- তবে আমি বুঝতে চাইছি যে আপনি যদি div
আপনার পৃষ্ঠার শেষের দিকে কোনও স্থানের কথা কল্পনা করেন ) এইচটিএমএল বিষয়বস্তু সহ নির্দিষ্ট এরপরে এটি পরিমাপ করে যে ডিভ (যার অর্থ এই উদাহরণস্বরূপ, আমার নথিতে সিএসএসের যে কোনও বিধি প্রযোজ্য h1
এবং p
ট্যাগগুলি এতে প্রয়োগ করা হবে) এটি পেতে width
এবং height
। গুগল তার পরে এটি গ্রহণ করে div
, এটি আপনার পৃষ্ঠায় যুক্ত হওয়ার পরে এটি যে পরিমাপ করেছিল তা নির্ধারণ করে এবং এটি আপনার নির্দিষ্ট করা অবস্থানে মানচিত্রে রাখে।
এখানে অনেক লোকের জন্য সমস্যাটি ঘটে - তাদের এইচটিএমএল থাকতে পারে যা দেখতে এটি দেখতে পারে:
<body>
<div id="map-canvas"></div>
</body>
এবং, যে কারণেই হোক না কেন, সিএসএস যা দেখতে এই রকম দেখাচ্ছে:
h1 { font-size: 18px; }
#map-canvas h1 { font-size: 32px; }
সমস্যা দেখতে পাচ্ছ? যখন এপিআই আপনার infoWindow
(এটি প্রদর্শন করার আগে অবিলম্বে) জন্য পরিমাপগুলি গ্রহণ করার চেষ্টা করে h1
, তখন সামগ্রীর অংশটির একটি আকার থাকবে 18px
(কারণ অস্থায়ী "পরিমাপ ডিভ" শরীরে সংযুক্ত করা হয়েছে), কিন্তু যখন এপিআই প্রকৃতপক্ষে এটি স্থাপন infoWindow
করে মানচিত্র, #map-canvas h1
নির্বাচক অগ্রাধিকার গ্রহণ করবে যার ফলে ফন্টের আকারটি তার চেয়ে অনেক বেশি আলাদা হবে যখন এপিআই এর আকার মাপত infoWindow
এবং এই পরিস্থিতিতে আপনি সর্বদা স্ক্রোলবার পাবেন।
আপনার নিজের মধ্যে স্ক্রোলবার রয়েছে তার নির্দিষ্ট কারণের জন্য আরও কিছুটা পৃথক সূক্ষ্মতা থাকতে পারে infoWindow
, তবে এর পিছনে কারণটি কারণ:
infoWindow
প্রকৃত এইচটিএমএল উপাদানটি যেখানে মার্কআপে উপস্থিত হয় তা নির্বিশেষে আপনার অভ্যন্তরের সামগ্রীতে একই সিএসএস বিধি প্রয়োগ করতে হবে । যদি তারা তা না করে তবে আপনার ইনফো উইন্ডোতে আপনাকে স্ক্রোলবারগুলি পাওয়ার নিশ্চয়তা দেওয়া হবে
তাই আমি সবসময় যা করি তা হ'ল এইরকম:
infoWindow.setContent('<div class="info-window-content">...your content here...</div>');
এবং আমার সিএসএসে:
.info-window-content { ... }
.info-window-content h1 { .... }
.info-window-content p { ... }
etc...
সুতরাং এপিআই যেখানে এটি পরিমাপ যুক্ত করে তা বিবেচনা করে না div
- বন্ধ হওয়ার আগে body
বা এর অভ্যন্তরে #map-canvas
, এটি প্রয়োগ করা সিএসএসের নিয়ম সর্বদা একই থাকবে।
সম্পাদনা করুন: হরফ পরিবার
গুগল হ'ল ফন্ট লোডিং ইস্যুতে সক্রিয়ভাবে কাজ করছে বলে মনে হচ্ছে (নীচে বর্ণিত) এবং কার্যকারিতা খুব সম্প্রতি পরিবর্তিত হয়েছে যাতে আপনি infoWindow
প্রথমবার যখন খুলবেন তখন আপনি রবোটো ফন্ট লোড দেখতে বা দেখতে পাবেন না , আপনি যে এপিআইটি ব্যবহার করছেন তার সংস্করণের উপর নির্ভর করে। একটি ওপেন বাগ রিপোর্ট রয়েছে (যদিও চেঞ্জলগে এই ত্রুটি প্রতিবেদনটি ইতিমধ্যে স্থির হিসাবে চিহ্নিত করা হয়েছিল) যা চিত্রিত করে যে গুগল এখনও এই সমস্যাটির সাথে অসুবিধায় রয়েছে।
আরও একটি বিষয়: আপনার ফন্টের পরিবারগুলি দেখুন!
এপিআইয়ের সর্বশেষতম অবতারে, গুগল চতুর হতে চেষ্টা করেছিল এবং কোনও তথ্য সিএসএস নির্বাচকের সাথে লক্ষ্যবস্তু হতে পারে এমন তথ্যতে উইন্ডো সামগ্রীটি মোড়ানোর চেষ্টা করেছিল - .gm-style-iw
। যে সমস্ত লোকেরা আমি উপরে বর্ণিত বিধিগুলি বুঝতে পারি নি তাদের পক্ষে এটি সত্যিই সহায়তা করে না এবং কিছু ক্ষেত্রে এটিকে আরও খারাপ করে তুলেছিল। স্ক্রোলবারগুলি সর্বদা প্রথমবার infoWindow
খোলার সময় উপস্থিত হয় , তবে আপনি যদি infoWindow
আবার কোনওটি খুলেন , এমনকি ঠিক একই সামগ্রীতে স্ক্রোলবারগুলি চলে যাবে। গম্ভীরভাবে, যদি আপনি এর আগে বিভ্রান্ত না হন তবে আপনাকে আপনার মন হারাতে বাধ্য করবে। যা ঘটছিল তা এখানে:
গুগল যখন এপিআই লোড হয় তখন পৃষ্ঠাগুলিতে যে স্টাইলগুলি লোড হয় আপনি যদি তা দেখে থাকেন তবে আপনি এটি দেখতে সক্ষম হবেন:
.gm-style {
font-family: Roboto,Arial,sans-serif
...
}
ঠিক আছে, তাই গুগল সর্বদা Roboto
ফন্ট-পরিবার ব্যবহার করে এটির মানচিত্রকে আরও কিছুটা সামঞ্জস্য করতে চেয়েছিল । সমস্যাটি হ'ল, বেশিরভাগ লোকের জন্য, আপনি একটি খোলার আগে infoWindow
ব্রাউজারটি এখনও Roboto
ফন্টটি ডাউনলোড করেনি (কারণ আপনার পৃষ্ঠায় অন্য কোনও কিছুই এটি ব্যবহার করেনি তাই ব্রাউজারটি এটি জানতে যথেষ্ট পর্যাপ্ত স্মার্ট যে এটি ডাউনলোড করার দরকার নেই) এই ফন্ট)। এই ফন্টটি ডাউনলোড করা তাত্ক্ষণিক নয়, যদিও এটি খুব দ্রুত। আপনি যখন প্রথম কোনও খুলেন infoWindow
এবং এপিআই div
আপনার infoWindow
সামগ্রীগুলি শরীরে পরিমাপ করার জন্য এটি শরীরে সংযুক্ত করে, এটি Roboto
ফন্টটি ডাউনলোড শুরু করে তবে আপনার infoWindow's
পরিমাপ নেওয়া হয় এবং Roboto
ডাউনলোড শেষ হওয়ার আগে উইন্ডোটি মানচিত্রে স্থাপন করা হয় । বেশিরভাগ ক্ষেত্রে ফলাফলটি ছিল একটিinfoWindow
এটির বিষয়বস্তু যখন Arial
কোনও sans-serif
ফন্ট ব্যবহার করে রেন্ডার করা হয়েছিল তখন তা পরিমাপ করা হয়েছিল , তবে যখন এটি মানচিত্রে প্রদর্শিত হয়েছিল (এবং Roboto
ডাউনলোড শেষ হয়েছে) তখন এটির সামগ্রীটি একটি ফন্টে প্রদর্শিত হচ্ছিল যা ভিন্ন আকারের ছিল - এবং ভয়েলা - স্ক্রোলবারগুলি প্রথমবার উপস্থিত হয়েছিল আপনি খুলুন infoWindow
। infoWindow
দ্বিতীয়বারের মতো ঠিক একইটি খুলুন - Roboto
এআইপি এটির infoWindow
সামগ্রীর পরিমাপ করার সময় ব্যবহার করা হবে এবং আপনি কোনও স্ক্রোলবার দেখতে পাবেন না।