ब्राउज़र विंडो को भरने के लिए SVG इमेज को कैसे स्केल करें?


94

ऐसा लगता है कि यह आसान होना चाहिए, लेकिन मुझे अभी कुछ नहीं मिल रहा है।

मैं एक HTML पेज बनाना चाहता हूं जिसमें एक सिंगल एसवीजी इमेज हो, जो ब्राउजर विंडो को फिट करने के लिए, बिना किसी स्क्रॉलिंग के और अपने पहलू अनुपात को संरक्षित करते हुए स्वचालित रूप से स्केल करता हो।

उदाहरण के लिए, इस समय मेरे पास 1024x768 SVG इमेज है; अगर ब्राउज़र व्यूपोर्ट 1980x1000 है, तो मैं चाहता हूं कि छवि 1333x1000 पर प्रदर्शित हो (लंबवत भरें, क्षैतिज रूप से केंद्रित)। यदि ब्राउज़र 800x1000 था, तो मैं इसे 800x600 पर प्रदर्शित करना चाहता हूं (क्षैतिज रूप से, लंबवत केंद्रित)।

वर्तमान में मैंने इसे इस तरह परिभाषित किया है:

<body style="height: 100%">
  <div id="content" style="width: 100%; height: 100%">
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1"
         width="100%" height="100%"
         viewBox="0 0 1024 768"
         preserveAspectRatio="xMidYMid meet">
      ...
    </svg>
  </div>
</body>

हालाँकि यह ब्राउज़र की पूरी चौड़ाई (एक विस्तृत लेकिन छोटी खिड़की के लिए) तक फैला हुआ है और ऊर्ध्वाधर स्क्रॉलिंग का उत्पादन कर रहा है, जो मुझे नहीं चाहिए।

मैं क्या खो रहा हूँ?


बेवजह, मैंने सिर में एक सीएसएस शैली ब्लॉक के लिए इनलाइन शैली विशेषताओं को स्थानांतरित करने की कोशिश की, और उसके बाद यह काम किया। मुझे नहीं पता कि इससे क्या फर्क पड़ा। (हालांकि मुझे अतिप्रवाह जोड़ने की आवश्यकता थी: छिपी - अन्यथा एक 4-पिक्सेल वर्टिकल स्क्रॉल था।)
मिरल

जवाबों:


175

कैसा रहेगा:

html, body { margin:0; padding:0; overflow:hidden }
svg { position:fixed; top:0; bottom:0; left:0; right:0 }

या:

html, body { margin:0; padding:0; overflow:hidden }
svg { position:fixed; top:0; left:0; height:100%; width:100% }

मेरे पास इस तकनीक का उपयोग करने पर मेरी साइट पर एक उदाहरण है (मोटे तौर पर), इस तकनीक के चारों ओर 5% पैडिंग के साथ, और position:absoluteइसके बजाय का उपयोग करके position:fixed:
http://phrogz.net/svg/svg_in_xhtml5.xhtml

(उपयोग position:fixedकरने से पृष्ठ पर एक उप-पृष्ठ एंकर से लिंक करने के बहुत किनारे-मामले के परिदृश्य को रोकता है, और overflow:hiddenयह सुनिश्चित कर सकता है कि कोई भी स्क्रॉल बार कभी प्रकट न हो (यदि आपके पास अतिरिक्त सामग्री है)।


38
और उस लिंक को 2 साल तक छोड़ने के लिए एक लेट +1।
एमएसनफोर्ड

7
ध्यान दें कि यह समाधान viewBoxविशेषता पर निर्भर करता है ।
ubershmekel

4
लिंक अभी भी है, लगभग 4 साल बाद। अच्छा काम, @ फ्रॉग!
रिचर्ड

10
हां, धन्यवाद @Phrogz ... और बस अगर यह कभी नीचे चला जाता है, तो मैंने एक कोडपेन संस्करण बनाया: codepen.io/cyanos/full/XbXxOQ
Jay

5
और 8 से अधिक वर्षों के लिए +1
सुधीर कौशिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.