कंटेनर की शेष ऊंचाई का 100% फिट करने के लिए इफ्रेम बनाएं


272

मैं एक बैनर और एक iframe के साथ एक वेब पेज डिजाइन करना चाहता हूं। मुझे उम्मीद है कि iframe शेष सभी पेज की ऊंचाई को भर सकता है और ब्राउज़र के आकार बदलने के साथ स्वचालित रूप से आकार बदला जा सकता है। केवल सीएसएस के साथ जावास्क्रिप्ट कोड लिखे बिना इसे पूरा करना संभव है?

मैंने height:100%iframe पर सेट करने की कोशिश की , परिणाम काफी करीब है, लेकिन iframe ने 30pxबैनर डिव तत्व की ऊंचाई सहित पूरे पृष्ठ की ऊंचाई को भरने की कोशिश की , इसलिए मुझे अनावश्यक ऊर्ध्वाधर स्क्रॉलबार मिला। यह सही नहीं है।

मैंने सीएसएस मार्जिन की कोशिश की, एक वेब पेज की पूरी शेष ऊंचाई पर सफलतापूर्वक कब्जा करने के लिए डीआईवी पर विशेषता को पैडिंग किया, लेकिन ट्रिक ने ifame पर काम नहीं किया।

 <body>
    <div style="width:100%; height:30px; background-color:#cccccc;">Banner</div>
    <iframe src="http: //www.google.com.tw" style="width:100%; height:100%;"></iframe>
</body>

जवाबों:


249

2019 में अपडेट करें

टीएल; डीआर: आज सबसे अच्छा विकल्प इस जवाब में आखिरी है - फ्लेक्सबॉक्स। सब कुछ यह अच्छी तरह से समर्थन करता है और वर्षों के लिए है। उसके लिए जाओ और पीछे मत देखो। इस उत्तर का बाकी हिस्सा ऐतिहासिक कारणों से बचा हुआ है।


ट्रिक यह समझना है कि 100% क्या है। सीएसएस चश्मा पढ़ना आपको वहां मदद कर सकता है।

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

ऊंचाई उसी तरह काम करती है। एक अपवाद के साथ। आपको ब्राउज़र विंडो की 100% ऊंचाई नहीं मिल सकती है। बहुत ही शीर्ष स्तर का तत्व, जिसके खिलाफ 100% गणना की जा सकती है, वह है शरीर (या html? निश्चित नहीं) तत्व, और जो अपनी सामग्री समाहित करने के लिए पर्याप्त है। निर्दिष्ट ऊंचाई: इस पर 100% कोई प्रभाव नहीं पड़ेगा, क्योंकि इसके पास कोई "मूल तत्व" नहीं है, जिसके विरुद्ध 100% मापें। विंडो ही गिनती नहीं है। ;)

खिड़की के 100% हिस्से में कुछ खिंचाव करने के लिए, आपके पास दो विकल्प हैं:

  1. जावास्क्रिप्ट का उपयोग करें
  2. DOCTYPE का उपयोग न करें। यह एक अच्छा अभ्यास नहीं है, लेकिन यह ब्राउज़र को "quirks मोड" में रखता है, जिसमें आप तत्वों पर ऊँचाई = "100%" कर सकते हैं और यह उन्हें खिड़की के आकार तक बढ़ाएगा। ध्यान दें, आपके पृष्ठ के बाकी हिस्सों को संभवतः DOCTYPE परिवर्तनों के लिए समायोजित करने के लिए भी बदलना होगा।

अपडेट: मुझे यकीन नहीं है कि जब मैं इसे पोस्ट किया था तो मैं पहले से ही गलत नहीं था, लेकिन यह निश्चित रूप से अब पुराना है। आज आप इसे अपनी स्टाइलशीट में कर सकते हैं: html, body { height: 100% }और यह वास्तव में आपके व्यूपोर्ट के पूरे हिस्से तक फैलेगा। DOCTYPE के साथ भी। min-height: 100%आपकी स्थिति के आधार पर भी उपयोगी हो सकता है।

और मैं किसी को भी कभी भी क्वर्की-मोड दस्तावेज़ बनाने की सलाह नहीं दूंगा, क्योंकि इससे उन्हें सिरदर्द की तुलना में अधिक सिरदर्द होता है। हर ब्राउज़र में अलग-अलग क्वर्की-मोड होता है, इसलिए आपके पेज को लगातार ब्राउज़र में देखने के लिए प्राप्त करना मुश्किल परिमाण के दो आदेश बन जाते हैं। DOCTYPE का उपयोग करें। हमेशा। अधिमानतः HTML5 एक - <!DOCTYPE html>। यह याद रखना आसान है और सभी ब्राउज़रों में एक आकर्षण की तरह काम करता है, यहां तक ​​कि 10 साल पुराने भी।

एकमात्र अपवाद तब होता है जब आपको IE5 या कुछ जैसे कुछ का समर्थन करना होता है। यदि आप वहाँ हैं, तो आप वैसे भी अपने दम पर हैं। वे प्राचीन ब्राउज़र आज के ब्राउज़रों की तरह कुछ भी नहीं हैं, और यहां दी गई थोड़ी सलाह आपको उनकी मदद करेगी। चमकदार पक्ष पर, यदि आप वहां हैं, तो आपको संभवतः केवल एक प्रकार के ब्राउज़र का समर्थन करना होगा, जो संगतता समस्याओं से छुटकारा दिलाता है।

सौभाग्य!

अद्यतन 2: अरे, यह एक लंबा समय हो गया है! 6 साल बाद, नए विकल्प दृश्य पर हैं। मेरे पास नीचे टिप्पणी में सिर्फ एक चर्चा थी, यहां आपके लिए और अधिक चालें हैं जो आज के ब्राउज़रों में काम करती हैं।

विकल्प 1 - पूर्ण स्थिति। जब आप पहले भाग की सटीक ऊँचाई जानते हैं, तो अच्छा और साफ।

body, html {width: 100%; height: 100%; margin: 0; padding: 0}
.first-row {position: absolute;top: 0; left: 0; right: 0; height: 100px; background-color: lime;}
.second-row {position: absolute; top: 100px; left: 0; right: 0; bottom: 0; background-color: red }
.second-row iframe {display: block; width: 100%; height: 100%; border: none;}
<div class="first-row">
  <p>Some text</p>
  <p>And some more text</p>
</div>
<div class="second-row">
  <iframe src="https://jsfiddle.net/about"></iframe>
</div>

कुछ नोट - second-rowकंटेनर की आवश्यकता है क्योंकि bottom: 0और right: 0किसी कारण से iframes पर काम नहीं करता है। "प्रतिस्थापित" तत्व होने के साथ कुछ करना है। लेकिन width: 100%और height: 100%ठीक काम करता है। display: blockयह आवश्यक है क्योंकि यह inlineडिफ़ॉल्ट रूप से एक तत्व है और व्हाट्सएप अन्यथा अजीब ओवरफ्लो बनाना शुरू कर देता है।

विकल्प 2 - टेबल। काम करता है जब आप पहले भाग की ऊंचाई नहीं जानते हैं। आप वास्तविक <table>टैग का उपयोग कर सकते हैं या इसे फैंसी तरीके से कर सकते हैं display: table। मैं बाद के लिए जाऊंगा क्योंकि यह इन दिनों फैशन में है।

body, html {width: 100%; height: 100%; margin: 0; padding: 0}
.row-container {display: table; empty-cells: show; border-collapse: collapse; width: 100%; height: 100%;}
.first-row {display: table-row; overflow: auto; background-color: lime;}
.second-row {display: table-row; height: 100%; background-color: red; overflow: hidden }
.second-row iframe {width: 100%; height: 100%; border: none; margin: 0; padding: 0; display: block;}
<div class="row-container">
  <div class="first-row">
    <p>Some text</p>
    <p>And some more text</p>
  </div>
  <div class="second-row">
    <iframe src="https://jsfiddle.net/about"></iframe>
  </div>
</div>

कुछ नोट्स - यह overflow: autoसुनिश्चित करता है कि पंक्ति में हमेशा इसकी सभी सामग्री शामिल हो। अन्यथा अस्थायी तत्व कभी-कभी अतिप्रवाह कर सकते हैं। height: 100%दूसरी पंक्ति पर यकीन है कि यह फैलता है के रूप में ज्यादा के रूप में यह छोटा सा के रूप में पहली पंक्ति फैलाएंगे कर सकते हैं के रूप में यह हो जाता है बनाता है।

विकल्प 3 - फ्लेक्सबॉक्स। उन सभी में सबसे साफ है, लेकिन तारकीय ब्राउज़र समर्थन से कम है। -ms-आईई 10 को फ्लेक्सबॉक्स गुणों के लिए उपसर्गों की आवश्यकता होगी , और इससे कम कुछ भी इसका समर्थन नहीं करेगा।

body, html {width: 100%; height: 100%; margin: 0; padding: 0}
.row-container {display: flex; width: 100%; height: 100%; flex-direction: column; background-color: blue; overflow: hidden;}
.first-row {background-color: lime; }
.second-row { flex-grow: 1; border: none; margin: 0; padding: 0; }
<div class="row-container">
  <div class="first-row">
    <p>Some text</p>
    <p>And some more text</p>
  </div>
  <iframe src="https://jsfiddle.net/about" class="second-row"></iframe>
</div>

कुछ नोट - overflow: hiddenऐसा इसलिए है क्योंकि display: blockइस मामले में आईफ्रेम अभी भी कुछ प्रकार के अतिप्रवाह पैदा करता है । यह फ़ुलस्क्रीन दृश्य या स्निपेट संपादक में दिखाई नहीं देता है, लेकिन छोटी पूर्वावलोकन विंडो में एक अतिरिक्त स्क्रॉलबार मिलता है। पता नहीं क्या है, iframes अजीब हैं।


@sproketboy खैर, यह W3C की सिफारिश है। और यह सबसे बुरा भी नहीं है, लंबे रास्ते से नहीं।
जॉन

तो क्या हम इसे IFrame के पेज की स्टाइलशीट में, या IFrame वाले पैरेंट पेज के स्टाइलशीट में डालते हैं?
मथियास लिकेगार्ड लोरेंजेन

1
यह बहुत बढ़िया है, धन्यवाद! Flexbox वास्तव में सबसे साफ है, लेकिन टेबल्स सीखने और ओवरफ्लो के बिना काम करने के लिए भी बहुत अच्छे हैं: jsfiddle.net/dmitri14/1uhh3zgx/2
दिमित्री ज़ैतसेव

1
यह इस उत्तर के शीर्ष पर नवीनतम अपडेट को स्थानांतरित करने के लायक हो सकता है। मुझे सर्वश्रेष्ठ उत्तर, फ्लेक्सबॉक्स प्राप्त करने के लिए पूरी बात से गुजरना पड़ा।
क्षमा करें

2
@forgivenson - काफी सच है। इस उत्तर की शुरुआत में एक नोट जोड़ा।
विल्क्स-

69

हम इस समस्या को हल करने के लिए एक जावास्क्रिप्ट का उपयोग करते हैं; यहाँ स्रोत है।


var buffer = 20; //scroll bar buffer
var iframe = document.getElementById('ifm');

function pageY(elem) {
    return elem.offsetParent ? (elem.offsetTop + pageY(elem.offsetParent)) : elem.offsetTop;
}

function resizeIframe() {
    var height = document.documentElement.clientHeight;
    height -= pageY(document.getElementById('ifm'))+ buffer ;
    height = (height < 0) ? 0 : height;
    document.getElementById('ifm').style.height = height + 'px';
}

// .onload doesn't work with IE8 and older.
if (iframe.attachEvent) {
    iframe.attachEvent("onload", resizeIframe);
} else {
    iframe.onload=resizeIframe;
}

window.onresize = resizeIframe;

नोट: ifmआईफ्रेम आईडी है

pageY() जॉन रेजिग (jQuery के लेखक) द्वारा बनाया गया था


51

एक और तरीका है कि position: fixed;मूल नोड पर उपयोग किया जाएगा ।
अगर मैं गलत नहीं हूं, तो position: fixed;व्यूपोर्ट में तत्व को शामिल करता है, इस प्रकार, एक बार जब आप इस नोड width: 100%;और height: 100%;गुण देते हैं, तो यह पूरी स्क्रीन पर दिखाई देगा। इस बिंदु से, आप <iframe>इसके अंदर टैग लगा सकते हैं और इसे सरल width: 100%; height: 100%;सीएसएस निर्देश के साथ शेष स्थान (चौड़ाई और ऊंचाई दोनों में) पर फैला सकते हैं ।

उदाहरण कोड


    body {
        margin: 0px;
        padding: 0px;
    }

    /* iframe's parent node */
    div#root {
        position: fixed;
        width: 100%;
        height: 100%;
    }

    /* iframe itself */
    div#root > iframe {
        display: block;
        width: 100%;
        height: 100%;
        border: none;
    }
   <html>
        <head>
            <title>iframe Test</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        </head>
        <body>
            <div id="root">
                <iframe src="http://stackoverflow.com/">
                    Your browser does not support inline frames.
                </iframe>
            </div>
        </body>
    </html>


1
यह "शेष" ऊंचाई कैसे ले रहा है ..?
एरिका

3
मैंने देखा है कि आपको भी position: fixediframe को जोड़ना होगा।
0xF

1
कोई स्क्रॉलबार दिखाई नहीं देता
andrej

सही - क्या आप सीएसएस की व्याख्या कर सकते हैं '>' जैसे div # रूट> iframe आगे मैं इसके साथ अपरिचित हूं और संदर्भ नहीं मिल सकता है
डेटाडैमिशन

@andrej स्क्रॉल सलाखों को भी सक्षम करने का कोई तरीका
जिबिन मैथ्यू

40

यहाँ कुछ आधुनिक दृष्टिकोण दिए गए हैं:



  • दृष्टिकोण 2 - फ्लेक्सबॉक्स दृष्टिकोण

    यहाँ उदाहरण है

    displayसामान्य मूल तत्व flexके साथ सेट करें , साथ flex-direction: column(यह मानते हुए कि आप तत्वों को एक दूसरे के ऊपर ढेर करना चाहते हैं)। फिर शेष स्थान को भरने के लिए flex-grow: 1बाल iframeतत्व पर सेट करें ।

    body {
        margin: 0;
    }
    .parent {
        display: flex;
        flex-direction: column;
        min-height: 100vh;
    }
    .parent .banner {
        background: #f00;
        width: 100%;
        height: 30px;
    }
    .parent iframe {
        background: #000;
        border: none;
        flex-grow: 1;
    }
    <div class="parent">
        <div class="banner"></div>
        <iframe></iframe>
    </div>

    चूँकि इस दृष्टिकोण का समर्थन 1 कम है , मेरा सुझाव है कि उपरोक्त दृष्टिकोण के साथ जा रहा हूँ।

1 हालांकि यह क्रोम / एफएफ में काम करने लगता है, यह IE में काम नहीं करता है (सभी मौजूदा ब्राउज़रों में पहला तरीका काम करता है)।


3
काम और IMO दोनों यहां बताए गए दो विकल्पों में से सबसे अच्छा तरीका है। मैं flexboxविकल्प पसंद करता हूं क्योंकि calcआपके पास से कटौती करने के लिए स्थान की मात्रा जानना आवश्यक है vhflexboxएक साधारण के साथ flex-grow:1यह करता है।
Kilmazing

39

आप इसके साथ कर सकते हैं DOCTYPE, लेकिन आपको इसका उपयोग करना होगा table। इसकी जांच करें:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<style>
*{margin:0;padding:0}
html, body {height:100%;width:100%;overflow:hidden}
table {height:100%;width:100%;table-layout:static;border-collapse:collapse}
iframe {height:100%;width:100%}

.header {border-bottom:1px solid #000}
.content {height:100%}
</style>
</head>
<body>
<table>
    <tr><td class="header"><div><h1>Header</h1></div></td></tr>
    <tr><td class="content">
        <iframe src="http://google.com/" frameborder="0"></iframe></td></tr>
</table>
</body>
</html>

1
कम से कम इसे js की आवश्यकता नहीं है !! लेकिन क्या यह वेब-सुरक्षित है?
अली शकीबा

1
इस समाधान के साथ HTML, बॉडी {ओवरफ्लो: हिडन;} पेज स्क्रॉल को हटा देगा।
अली शाकिबा

मैं उपरोक्त कोड में पाद लेख जोड़ने की कोशिश कर रहा हूं, लेकिन पाद लेख नहीं दिखा रहा है। क्या आप मदद कर सकते हैं
अक्षय राऊत

18

हो सकता है कि यह पहले से ही उत्तर दे दिया गया हो (ऊपर दिए गए कुछ उत्तर ऐसा करने के "सही" तरीके हैं), लेकिन मुझे लगा कि मैं सिर्फ अपना समाधान जोड़ूंगा।

हमारा iFrame एक div के भीतर भरा हुआ है, इसलिए मुझे कुछ और चाहिए था फिर window.height। और हमारी परियोजना को देखकर पहले से ही jQuery पर बहुत अधिक निर्भर करता है, मुझे यह सबसे सुरुचिपूर्ण समाधान लगता है:

$("iframe").height($("#middle").height());

जहां निश्चित रूप से "# पहेली" div की आईडी है। जब भी उपयोगकर्ता विंडो का आकार बदलता है, केवल एक अतिरिक्त चीज जो आपको करने की आवश्यकता होती है, वह है इस आकार परिवर्तन को याद करना।

$(window).resize(function() {
    $("iframe").height($("#middle").height());
});

7

यहाँ मैंने क्या किया है। मेरे पास एक ही समस्या थी और घंटों तक संसाधनों के लिए वेब खोजना समाप्त कर दिया।

<style type="text/css">
   html, body, div, iframe { margin:0; padding:0; height:100%; }
   iframe { position:fixed; display:block; width:100%; border:none; }
</style>

मैंने इसे हेड सेक्शन में जोड़ा।

कृपया ध्यान दें कि मेरा आइफ्रेम एक तालिका के मध्य सेल के अंदर स्थित है जिसमें 3 पंक्तियाँ और 1 कॉलम है।


आपका कोड केवल या तो TD काम करेगा जिसमें IFRAME की ऊंचाई है: 100%। यह कार्य करेगा यदि तालिका एक DIV तत्व के भीतर समाहित है, क्योंकि आपके पास सभी divs की ऊँचाई: 100% के लिए एक शैली है।
निकोला पेटकंस्की

6

MichAdel कोड मेरे लिए काम करता है लेकिन मैंने इसे ठीक से काम करने के लिए कुछ मामूली संशोधन किए।

function pageY(elem) {
    return elem.offsetParent ? (elem.offsetTop + pageY(elem.offsetParent)) : elem.offsetTop;
}
var buffer = 10; //scroll bar buffer
function resizeIframe() {
    var height = window.innerHeight || document.body.clientHeight || document.documentElement.clientHeight;
    height -= pageY(document.getElementById('ifm'))+ buffer ;
    height = (height < 0) ? 0 : height;
    document.getElementById('ifm').style.height = height + 'px';
}
window.onresize = resizeIframe;
window.onload = resizeIframe;

4

यह सही है, आप इसके कंटेनर को 100% ऊंचाई सम्मान के साथ एक आइफ्रेम दिखा रहे हैं: शरीर।

इसे इस्तेमाल करे:

<body>
  <div style="width:100%; height:30px; background-color:#cccccc;">Banner</div>
  <div style="width:100%; height:90%; background-color:transparent;">
    <iframe src="http: //www.google.com.tw" style="width:100%; height:100%;">
    </iframe> 
  </div>
</body>

बेशक, दूसरी तलाक की ऊंचाई को अपनी इच्छित ऊंचाई में बदल दें।


8
30px + 90%! = 100%
स्टेपंचेज

1
90% के बजाय कैल्क (100% - 30px) का उपयोग कर सकता है
जस्टिन ई

4

निम्नलिखित प्रयास करें:

<iframe name="" src="" width="100%" style="height: 100em"/>

यह मेरे लिए काम किया


4
माता-पिता को नहीं भरता है, बस iframe पर एक बड़ी ऊंचाई डालता है।
बेन

3

आप इसे html / css के साथ इस तरह कर सकते हैं:

<body>
    <div style="width:100%; height:30px; background-color:#cccccc;">Banner</div>
    <iframe src="http: //www.google.com.tw" style="position:fixed;top:30px;bottom:0px;width:100%;"></iframe>
</body>

2

HTML5 में नया: calc (ऊंचाई पर) का उपयोग करें

<html style="width:100%; height:100%; margin: 0px; padding: 0px;">
<body style="width:100%; height:100%; margin: 0px; padding: 0px;">
<div style="width:100%; height:30px; background-color:#cccccc;">Banner</div>
<iframe src="http://www.google.com.tw" style="width:100%; height: calc(100% - 30px);"></iframe>
</body>
</html>

2

मैंने एक समान मुद्दे को ठीक करने के लिए प्रदर्शन: तालिका का उपयोग किया। यह इसके लिए लगभग काम करता है, एक छोटे से ऊर्ध्वाधर स्क्रॉल बार को छोड़कर। यदि आप उस लचीले कॉलम को एक आइफ्रेम के अलावा किसी अन्य चीज़ से आबाद करने की कोशिश कर रहे हैं तो यह ठीक काम करता है (नहीं

निम्नलिखित HTML ले लो

<body>
  <div class="outer">
    <div class="banner">Banner</div>
    <div class="iframe-container">
      <iframe src="http: //www.google.com.tw" style="width:100%; height:100%;border:0;"></iframe>
    </div>
  </div>
</body>

प्रदर्शन का उपयोग करने के लिए बाहरी div को बदलें: तालिका और सुनिश्चित करें कि इसकी चौड़ाई और ऊंचाई सेट है।

.outer {
  display: table;
  height: 100%;
  width: 100%;
}

बैनर को एक तालिका-पंक्ति बनाएँ और जो भी आपकी प्राथमिकता हो उसकी ऊंचाई निर्धारित करें:

.banner {
  display: table-row;
  height: 30px;
  background: #eee;
}

अपने iframe (या जिस भी सामग्री की आपको आवश्यकता है) के चारों ओर एक अतिरिक्त div जोड़ें और इसे 100% ऊँचाई पर सेट करने के साथ एक तालिका-पंक्ति बनाएं (यदि आप ऊँचाई भरने के लिए iframe एम्बेड करना चाहते हैं तो इसकी ऊँचाई महत्वपूर्ण है)

.iframe-container {
  display: table-row;
  height: 100%;
}

नीचे एक jsfiddle काम पर दिखा रहा है (एक iframe के बिना क्योंकि यह बेला काम नहीं करता है)

https://jsfiddle.net/yufceynk/1/


1

मुझे लगता है कि आपको यहां एक वैचारिक समस्या है। कहने के लिए "मैंने सेट की ऊँचाई की कोशिश की: iframe पर 100%, परिणाम काफी करीब है लेकिन iframe ने पूरे पृष्ठ को भरने की कोशिश की" , ठीक है, जब "100%" "पूरे" के बराबर नहीं है?

आपने iframe को उसके कंटेनर (जो कि बॉडी है) की पूरी ऊंचाई भरने के लिए कहा है, लेकिन दुर्भाग्य से इसमें <div> में एक ब्लॉक लेवल सिबलिंग है जिसके ऊपर आपने 30px बड़ा होने के लिए कहा है। तो कुल मूल कंटेनर अब 100% + 30px> 100% आकार के लिए कहा जा रहा है! इसलिए स्क्रॉलबार।

मुझे क्या लगता है कि आपका मतलब यह है कि आप आइफ्रेम का उपभोग करना चाहते हैं जो फ्रेम और टेबल कोशिकाओं की तरह छोड़ दिया जाता है , अर्थात ऊँचाई = "*"। IIRC यह मौजूद नहीं है।

दुर्भाग्य से मेरे ज्ञान का सबसे अच्छा करने के लिए प्रभावी और पूर्ण / रिश्तेदार इकाइयों को प्रभावी ढंग से मिश्रण / गणना / घटाना करने का कोई तरीका नहीं है, इसलिए मुझे लगता है कि आप दो विकल्पों में कम हो गए हैं:

  1. बिल्कुल अपनी div स्थिति, जो इसे कंटेनर से बाहर ले जाएगा तो iframe अकेले कंटेनर की ऊंचाई का उपभोग करेगा। यह आपको अन्य समस्याओं के सभी तरीकों के साथ छोड़ देता है, लेकिन शायद आप जो अस्पष्टता या संरेखण कर रहे हैं वह ठीक होगा।

  2. वैकल्पिक रूप से आपको div के लिए एक% ऊँचाई निर्दिष्ट करने की आवश्यकता है और उस से iframe की ऊँचाई कम करनी होगी। यदि पूर्ण ऊंचाई वास्तव में महत्वपूर्ण है, तो आपको इसके बजाय div के एक बाल तत्व को लागू करने की आवश्यकता होगी।


1

थोड़ी देर के लिए सीएसएस मार्ग की कोशिश करने के बाद, मैंने jQuery में कुछ बुनियादी लिखना बंद कर दिया, जिसने मेरे लिए काम किया:

function iframeHeight() {
    var newHeight = $j(window).height();
    var buffer = 180;     // space required for any other elements on the page 
    var newIframeHeight = newHeight - buffer;
    $j('iframe').css('height',newIframeHeight);    //this will aply to all iframes on the page, so you may want to make your jquery selector more specific.
}

// When DOM ready
$(function() {
    window.onresize = iframeHeight;
}

IE8, क्रोम, फ़ायरफ़ॉक्स 3.6 में परीक्षण किया गया


1

यह नीचे दिए गए कोड के साथ काम करेगा

<iframe src="http: //www.google.com.tw"style="position: absolute; height: 100%; border: none"></iframe>

1

@MichAdel के समान उत्तर, लेकिन मैं JQuery और अधिक सुरुचिपूर्ण का उपयोग कर रहा हूं।

<script type="text/javascript">
    $(document).ready(function() {
        var $iframe = $('#iframe_id')[0];

        // Calculate the total offset top of given jquery element
        function totalOffsetTop($elem) {
            return $elem.offsetTop + ($elem.offsetParent ? totalOffsetTop($elem.offsetParent) : 0);
        }

        function resizeIframe() {
            var height = window.innerHeight || document.body.clientHeight || document.documentElement.clientHeight;
            height -= totalOffsetTop($iframe);
            $iframe.height = Math.max(0, height) + 'px';
        }

        $iframe.onload = resizeIframe();
        window.onresize = resizeIframe;
    });
</script>

iframe_id आइफ्रेम टैग की आईडी है


0

आप भार / आकार और घटनाओं पर बॉडी के आकार को मापकर और ऊँचाई (पूर्ण ऊँचाई - बैनर ऊँचाई) निर्धारित करके ऐसा कर सकते हैं।

ध्यान दें कि वर्तमान में IE8 Beta2 में आप ऐसा नहीं कर सकते क्योंकि यह घटना वर्तमान में IE8 Beta2 में टूट गई है।


0

या आप पुराने स्कूल जा सकते हैं और शायद एक फ्रेमसेट का उपयोग कर सकते हैं :

<frameset rows="30,*">
  <frame src="banner.swf"/>
  <frame src="inner.html" />
</frameset>

2
@vdbuilder: नहीं, यह केवल मान्य पूर्व- html5 है। मुझे यकीन है कि यह अभी भी काम करता है। ;-)
टीजे क्राउडर

0

जबकि मैं मानता हूं कि जेएस एक बेहतर विकल्प है, मेरे पास कुछ हद तक सीएसएस केवल काम करने वाला समाधान है। इसका नकारात्मक पक्ष यह है कि यदि आपको बार-बार अपने iframe html डॉक्यूमेंट में कंटेंट जोड़ना पड़ता है, तो आपको एक प्रतिशत ट्रफ टाइम को अनुकूल बनाना होगा।

समाधान:

अपने HTML दस्तावेजों के लिए किसी भी ऊंचाई को निर्दिष्ट नहीं करने का प्रयास करें ,

html, body, section, main-div {}

तब केवल यह कोड:

#main-div {height:100%;}
#iframe {height:300%;}

नोट: div आपका मुख्य भाग होना चाहिए।

यह अपेक्षाकृत काम करना चाहिए। iframe दृश्यमान विंडो की ऊँचाई का ठीक 300% परिकलन करता है। यदि आप 2nd डॉक्यूमेंट (iframe में) से html कंटेंट आपके ब्राउजर की ऊंचाई से 3 गुना ज्यादा छोटा है, तो यह काम करता है। यदि आपको उस दस्तावेज़ में बार-बार सामग्री जोड़ने की आवश्यकता नहीं है, तो यह एक स्थायी समाधान है और आप अपनी सामग्री ऊंचाई के अनुसार बस अपना% आवश्यक पा सकते हैं।

यह काम करता है क्योंकि यह द्वितीय HTML दस्तावेज़ (एक एम्बेड) को रोकता है ताकि मूल एचटीएमएल दस्तावेज़ से इसकी ऊंचाई विरासत में मिले। यह इसे रोकता है क्योंकि हमने उन दोनों के लिए एक ऊंचाई निर्दिष्ट नहीं की है। जब हम बच्चे को उसके माता-पिता के लिए एक% देते हैं, यदि नहीं, तो यह उसकी सामग्री को ऊंचाई पर ले जाता है। और केवल तभी यदि अन्य कंटेनरों को ऊंचाइयां नहीं दी गई हैं, जो मैंने कोशिश की थीं।


0

" निर्बाध " विशेषता इस मुद्दे को हल करने के लिए एक नया मानक है:

http://www.w3schools.com/tags/att_iframe_seamless.asp

इस विशेषता को निर्दिष्ट करते समय यह सीमाओं को हटा देगा और सलाखों को स्क्रॉल करेगा और iframe को उसके सामग्री आकार में आकार देगा। हालाँकि यह केवल क्रोम और नवीनतम सफ़ारी में समर्थित है

इस पर यहाँ अधिक: HTML5 iFrame निर्बाध विशेषता


HTML 5 कल्पना से निर्बाध विशेषता को हटा दिया गया था।
एरिक स्टीनबॉर्न जूल

0

एक सरल jQuery समाधान

इसका उपयोग iframed पेज के अंदर एक स्क्रिप्ट में करें

$(function(){

    if(window != top){
        var autoIframeHeight = function(){
            var url = location.href;
            $(top.jQuery.find('iframe[src="'+ url +'"]')).css('height', $('body').height()+4);
        }
        $(window).on('resize',autoIframeHeight);
        autoIframeHeight();
    }

}

0

आप iframe की ऊँचाई को% में निर्धारित नहीं कर सकते क्योंकि आपके माता-पिता के शरीर की ऊँचाई 100% नहीं है, इसलिए माता-पिता की ऊँचाई को 100% करें और फिर iframe की ऊँचाई को 100% लागू करें

For eg.
<html>
<head>
<style>
html,body{height:100%}
</style> 
</head>
<body>
<iframe src="http://www.quasarinfosystem.com" height="100%" width="100%" ></iframe>
</body>
</html>

0

यदि आपके पास iframe की सामग्री है जिसे लोड किया जाएगा, तो आप अपने माता-पिता को बता सकते हैं कि जब भी वह आकार परिवर्तन करे ..

    $(window).resize(function() {
        $(parent.document)
            .find("iframe")
            .css("height", $("body").css("height"));        
    }).trigger("resize");

यदि आपके पास पृष्ठ पर एक से अधिक iframe हैं, तो आपको .find ("iframe") को बढ़ाने के लिए आईडी या अन्य चतुर विधियों का उपयोग करने की आवश्यकता हो सकती है ताकि आप सही का चयन कर सकें।


0

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

.container{
  width:100%;
  position:relative;
  height:500px;
}

iframe{
  position:absolute;
  width:100%;
  height:100%;
}
<div class="container">
  <iframe src="http://www.w3schools.com">
  <p>Your browser does not support iframes.</p>
 </iframe>
</div>

अन्य पैडिंग और मार्जिन मुद्दे के लिए अब एक दिन css3 कैल्क () बहुत उन्नत है और ज्यादातर सभी ब्राउज़र के लिए भी संगत है।

जाँच कैल्क ()


0

ऐसा क्यों न करें (बॉडी पैडिंग / मार्जिन के लिए मामूली समायोजन के साथ)

<script>
  var oF = document.getElementById("iframe1");
  oF.style.height = document.body.clientHeight - oF.offsetTop - 0;
</script>

आप प्रतिस्थापित करने की आवश्यकता -0के साथ +'px'अंत में। क्या यह मोबाइल पर काम करता है?
दिमित्री ज़ैतसेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.