2009-08-21 9 views
38

ब्राउज़र दृश्य पोर्ट के अंदर फिट करने के लिए मैं div को स्केल कैसे कर सकता हूं लेकिन div के पहलू अनुपात को संरक्षित करता हूं। मैं सीएसएस और/या JQuery का उपयोग करके यह कैसे कर सकता हूं?खिड़की में फिट करने के लिए एक div स्केल करें लेकिन पहलू अनुपात

धन्यवाद!

+0

मैं प्रदान की

एचटीएमएल (मैं गूगल प्रदर्शन के उद्देश्य से एक 16x9 पारदर्शी छवि उत्पन्न दूँगा, लेकिन व्यवहार में आप अपने खुद के स्थिर छवि का प्रयोग करेंगे।) इसके लिए समाधान: http: // stackoverflow।कॉम/प्रश्न/643500/एचटीएमएल-यानी-खिंचाव-छवि-से-फिट-संरक्षित-पहलू अनुपात/1 9 3 9 4848 9 # 1 9 3 9 48 9 – tommybananas

+1

क्या आप नीचे एक उत्तर स्वीकार कर सकते हैं? एक शर्म की बात है कुछ बहुत अच्छे जवाब अस्वीकृत – gillytech

+0

इस प्रश्न के उत्तर में से कोई भी वांछित परिणाम प्राप्त नहीं करता है। पहलू अनुपात को संरक्षित करना मामूली है लेकिन इसे सही पहलू अनुपात के रूप में प्राप्त करना और हमेशा दोनों दिशाओं में देखने योग्य क्षेत्र से फिट या छोटा होना अधिक कठिन है। – atomless

उत्तर

1

यह JQuery और कुछ गणित के साथ संभव है।

दृश्य पोर्ट्स चौड़ाई और ऊंचाई के साथ-साथ divs वर्तमान आयाम प्राप्त करने के लिए JQuery का उपयोग करें।

$(document).width(); 

divs वर्तमान पहलू अनुपात की गणना करें। उदाहरण के लिए चौड़ाई/ऊंचाई

आपको चौड़ाई या ऊंचाई को पहले सेट करने के लिए निर्धारित करने के लिए थोड़ा तर्क की आवश्यकता है, फिर दूसरी तरफ की गणना करने के लिए प्रारंभिक अनुपात का उपयोग करें।

+0

+1। – eyelidlessness

1

jQuery में एक प्लगइन है जो एक ऑब्जेक्ट बढ़ाता है जब तक कि इसके पक्ष में से कोई एक निश्चित पीएक्स-वैल्यू तक नहीं पहुंच जाता। यह जोड़ना व्यूपोर्ट की ऊंचाई होगी, आप किसी भी तत्व को उस आकार में विस्तारित कर सकते हैं: jQuery MaxSide

4

गणित और तर्क की संरचना के तरीके पर टिप के लिए जियोफ़ के लिए धन्यवाद।

var height = originalHeight; 
var width = originalWidth; 
aspect = width/height; 

if($(window).height() < $(window).width()) { 
    var resizedHeight = $(window).height(); 
    var resizedWidth = resizedHeight * aspect; 
} 

else { // screen width is smaller than height (mobile, etc) 
    var resizedWidth = $(window).width(); 
    var resizedHeight = resizedWidth/aspect;  
} 

यह लैपटॉप और मोबाइल स्क्रीन आकारों पर मेरे लिए अच्छी तरह से काम कर रहा है अभी: यहाँ मेरी jQuery कार्यान्वयन, जो मैं आकार करने के लिए एक लाइटबॉक्स उपयोग कर रहा हूँ तो यह खिड़की भरता है।

+1

'ऊंचाई <चौड़ाई' की आपकी जांच केवल 1: 1 के पहलू अनुपात के लिए सही है। – talljosh

+0

छोटी रिफाइनरी के साथ यह काम करता है, लेकिन आपका IF सही चीज़ var vw = $ ("# absoluteSized") की जांच नहीं करता है। चौड़ाई(); var vh = $ ("# पूर्ण आकार")। ऊंचाई(); var divAspect = vw/vh; यदि (divAspect> पहलू) { आकार बदल गया हैइट = vh; आकार बदल गया Width = resizedHeight * पहलू; } अन्य {// स्क्रीन चौड़ाई ऊंचाई (मोबाइल, आदि) से छोटी है आकार बदल गया Width = vw; आकार बदल गया हैइट = आकार बदल गया चौड़ाई/पहलू; } –

41

आपको इसके लिए जावास्क्रिप्ट की आवश्यकता नहीं है। आप शुद्ध सीएसएस का उपयोग कर सकते हैं।

एक पैडिंग-टॉप प्रतिशत समेत ब्लॉक चौड़ाई के सापेक्ष व्याख्या किया गया है। इसे स्थिति के साथ संयोजित करें: एक बच्चे तत्व पर पूर्ण, और आप एक बॉक्स में बहुत कुछ डाल सकते हैं जो इसके पहलू अनुपात को बरकरार रखता है।

HTML:

<div class="aspectwrapper"> 
    <div class="content"> 
    </div> 
</div> 

सीएसएस:

.aspectwrapper { 
    display: inline-block; /* shrink to fit */ 
    width: 100%;   /* whatever width you like */ 
    position: relative; /* so .content can use position: absolute */ 
} 
.aspectwrapper::after { 
    padding-top: 56.25%; /* percentage of containing block _width_ */ 
    display: block; 
    content: ''; 
} 
.content { 
    position: absolute; 
    top: 0; bottom: 0; right: 0; left: 0; /* follow the parent's edges */ 
    outline: thin dashed green;   /* just so you can see the box */ 
} 

display: inline-block.aspectwrapper बॉक्स के नीचे बढ़त के नीचे एक छोटे अतिरिक्त स्थान छोड़ देता है, तो यह नीचे एक और तत्व इसके खिलाफ फ्लश नहीं चलेंगे । display: block का उपयोग करना इससे छुटकारा पा जाएगा।

टिप के लिए this post पर धन्यवाद!


एक और दृष्टिकोण इस तथ्य पर निर्भर करता है कि ब्राउज़र छवि की पहलू अनुपात का सम्मान करते हैं जब आप केवल इसकी चौड़ाई या ऊंचाई का आकार बदलते हैं।

<div class="aspectwrapper"> 
    <img class="aspectspacer" src="http://chart.googleapis.com/chart?cht=p3&chs=160x90" /> 
    <div class="content"> 
    </div> 
</div> 

सीएसएस:

.aspectwrapper { 
    width: 100%; 
    position: relative; 
} 
.aspectspacer { 
    width: 100%; /* let the enlarged image height push .aspectwrapper's bottom edge */ 
} 
.content { 
    position: absolute; 
    top: 0; bottom: 0; right: 0; left: 0; 
    outline: thin dashed green; 
} 
+1

क्या आप पहली विधि का उपयोग कर एक सही बॉक्स (सभी पक्ष euqal) आकार के साथ एक jsFiddle उदाहरण डाल सकते हैं? मुझे यह नहीं पता था कि यह आपकी पहली विधि का उपयोग करके कैसे किया जा सकता है। – vsync

+4

यहां आप हैं: http://jsfiddle.net/ks2jH/1/ ध्यान दें कि इसे एक आदर्श बॉक्स बनाने की कुंजी 'पैडिंग-टॉप: 100%' है जिसका अर्थ है कि ऊंचाई के आकार का 100% होना चाहिए '। स्पेक्ट्रवापर 'चौड़ाई। चूंकि उस चौड़ाई को 50% पर सेट किया गया है, यह इसके माता-पिता के साथ आकार बदल जाएगा। मैंने 'ओवरफ्लो: छुपा' भी जोड़ा, इसलिए पाठ छोटे आकारों पर बॉक्स को विकृत नहीं करेगा। –

+0

यदि आप एक आयताकार आधा लंबा चौड़ा चाहते थे, तो आप 'पैडिंग-टॉप: 50% 'का उपयोग करेंगे। ऊपर दिए गए मेरे उदाहरण में, मैंने 16: 9 आयताकार बनाया, जो 'पैडिंग-टॉप: 56.25% '(9/16 = 56.25%) का उपयोग करके विस्तृत स्क्रीन वीडियो के लिए उपयुक्त है। –

संबंधित मुद्दे