কনটেইনারটির অবশিষ্ট উচ্চতার 100% ফিট করার জন্য iframe তৈরি করুন


260

আমি একটি ব্যানার এবং একটি আইফ্রেমে একটি ওয়েব পৃষ্ঠা ডিজাইন করতে চাই। আশা করি ব্রাউজারের আকার পরিবর্তন করার সাথে সাথে iframe বাকী সমস্ত পৃষ্ঠা উচ্চতা পূরণ করতে পারে এবং স্বয়ংক্রিয়ভাবে পুনরায় আকার দিতে পারে। জাভাস্ক্রিপ্ট কোড না লিখে এটি করা কি কেবল CSS এর মাধ্যমে সম্ভব?

আমি height:100%আইফ্রেমে সেট করার চেষ্টা করেছি , ফলাফলটি বেশ কাছাকাছি থাকলেও আইফ্রেমে 30pxব্যানার ডিভ উপাদানটির উচ্চতা সহ পুরো পৃষ্ঠার উচ্চতা পূরণ করার চেষ্টা করেছিল , তাই আমি অনিয়মিত উল্লম্ব স্ক্রোলবারটি পেয়েছি। এটি নিখুঁত নয়।

আপডেট নোট : প্রশ্নটি ভালভাবে বর্ণনা না করার জন্য আমাকে ক্ষমা করুন, আমি একটি ওয়েব পৃষ্ঠার পুরো স্মরণীয় উচ্চতা সাফল্যের সাথে দখল করতে সিআইএস মার্জিন, প্যাডিং এট্রিবিউটটি চেষ্টা করেছি, তবে ট্রিকটি আইফ্রেমে কাজ করে নি।

 <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>

কোন ধারণা প্রশংসা করা হয়।

উত্তর:


236

2019 এ আপডেট

টিএল; ডিআর: আজ সেরা বিকল্পটি এই উত্তরের শেষটি - ফ্লেক্সবক্স। সবকিছু এটিকে সুন্দরভাবে সমর্থন করে এবং বছরের পর বছর ধরে। তার জন্য যান এবং পিছনে তাকান না। এই উত্তরটির বাকি অংশটি historicalতিহাসিক কারণে বাকি রয়েছে।


কৌশলটি 100% কী গ্রহণ করা হয়েছে তা বোঝা। সিএসএস স্পেস পড়া আপনাকে সেখানে সহায়তা করতে পারে।

একটি দীর্ঘ গল্প সংক্ষিপ্ত করতে - "ধারণকৃত ব্লক" হিসাবে এমন একটি জিনিস রয়েছে - যা পিতামণ্ডলের উপাদানগুলির জন্য প্রয়োজনীয় নয়। সরলভাবে বলা, এটি হায়ারার্কির প্রথম উপাদান যা অবস্থান: আপেক্ষিক বা অবস্থান: পরম। বা শরীরের উপাদান নিজেই যদি অন্য কিছু না থাকে। সুতরাং, যখন আপনি "প্রস্থ: 100%" বলবেন, এটি "ধারণকারী ব্লক" এর প্রস্থটি পরীক্ষা করে এবং আপনার উপাদানটির প্রস্থকে একই আকারে সেট করে। যদি সেখানে অন্য কিছু থাকে, তবে আপনি নিজের চেয়ে বৃহত্তর একটি "সমন্বিত ব্লক" এর সামগ্রী পেতে পারেন (এইভাবে "উপচে পড়া")।

উচ্চতা একইভাবে কাজ করে। একটি ব্যতিক্রম ছাড়া। আপনি ব্রাউজার উইন্ডোর 100% পর্যন্ত উচ্চতা পেতে পারবেন না। একেবারে শীর্ষ স্তরের উপাদান, যার বিরুদ্ধে 100% গণনা করা যায়, তা হ'ল দেহ (বা এইচটিএমএল? নিশ্চিত নয়) উপাদান, এবং এটির উপাদানগুলি ধারণ করার জন্য এটি যথেষ্ট পরিমাণে প্রসারিত। উচ্চতা নির্দিষ্ট করে: এতে 100% এর কোনও প্রভাব থাকবে না, কারণ এর কোনও "প্যারেন্ট উপাদান" নেই যার বিরুদ্ধে 100% পরিমাপ করা যায়। উইন্ডো নিজেই গণনা করে না। ;)

উইন্ডোর ঠিক 100% প্রসারিত করার জন্য আপনার দুটি পছন্দ আছে:

  1. জাভাস্ক্রিপ্ট ব্যবহার করুন
  2. ডক্টইপিই ব্যবহার করবেন না। এটি একটি ভাল অনুশীলন নয়, তবে এটি ব্রাউজারগুলিকে "কুইর্কস মোড" এ রাখে, যাতে আপনি উপাদানগুলিতে উচ্চতা = "100%" করতে পারেন এবং এটি তাদের উইন্ডো আকারে প্রসারিত করবে। মনে রাখবেন যে, আপনার বাকী পৃষ্ঠার সম্ভবত ডক্টপিইপি পরিবর্তনের জন্য উপযুক্ত পরিবর্তন করতে হবে।

আপডেট: আমি নিশ্চিত নই যে এটি পোস্ট করার সময় আমি ইতিমধ্যে ভুল ছিলাম না, তবে এটি অবশ্যই এখন পুরানো। আজ আপনি এটি আপনার স্টাইলশীটে করতে পারেন: html, body { height: 100% }এবং এটি আসলে আপনার পুরো ভিউপোর্টে প্রসারিত হবে। এমনকি একটি ডক্টইপিইও রয়েছে। min-height: 100%আপনার পরিস্থিতির উপর নির্ভর করেও দরকারী হতে পারে।

আর আমি কাউকেই আর কুইর্কস-মোড ডকুমেন্ট তৈরি করার পরামর্শ দেব না , কারণ এটি সমাধানের চেয়ে মাথা ব্যথার কারণ হয়। প্রতিটি ব্রাউজারের আলাদা আলাদা কুইর্কস-মোড থাকে, সুতরাং আপনার পৃষ্ঠাটি ব্রাউজারগুলিতে ধারাবাহিকভাবে দেখতে পাওয়া আরও দু'গুণ আকারের ক্রম হয়ে ওঠে। একটি ডক্টইপিই ব্যবহার করুন। সর্বদা. সাধারণত HTML5 এক - <!DOCTYPE html>। এটি স্মরণে রাখা সহজ এবং সমস্ত ব্রাউজারগুলিতে, এমনকি 10 বছরের পুরানোগুলিতে মনোযোগের মতো কাজ করে।

একমাত্র ব্যতিক্রম হ'ল আপনাকে যখন আই 5 বা কোনও কিছু সমর্থন করতে হবে। আপনি যদি সেখানে থাকেন তবে আপনি নিজের উপায়ে যাই হোক না কেন। সেই প্রাচীন ব্রাউজারগুলি আজ ব্রাউজারগুলির মতো কিছুই নয় এবং এখানে যে সামান্য পরামর্শ দেওয়া হয়েছে সেগুলি আপনাকে সেগুলিতে সহায়তা করবে। উজ্জ্বল দিকে আপনি যদি সেখানে থাকেন তবে আপনাকে সম্ভবত এক ধরণের ব্রাউজার সমর্থন করতে হবে, যা সামঞ্জস্যতা সমস্যা থেকে মুক্তি পাবে।

শুভকামনা!

আপডেট 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কিছু কারণে অনুরোধকে উপর কাজ করে না। একটি "প্রতিস্থাপিত" উপাদান হওয়ার সাথে কিছু করার। কিন্তু width: 100%এবং height: 100%ঠিক কাজ করে। display: blockএটি প্রয়োজনীয় কারণ এটি inlineডিফল্টরূপে একটি উপাদান এবং সাদা স্থান অন্যথায় অদ্ভুত ওভারফ্লো তৈরি করা শুরু করে starts

বিকল্প 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কারণ iframe এখনও display: blockএই ক্ষেত্রে এমনকি কিছু প্রকার ওভারফ্লো উত্পাদন করে । এটি পূর্ণস্ক্রিন ভিউ বা স্নিপেট সম্পাদকটিতে দৃশ্যমান নয়, তবে ছোট প্রাকদর্শন উইন্ডো একটি অতিরিক্ত স্ক্রোলবার পেয়েছে। এটি কি ধারণা নেই, iframes অদ্ভুত।


@ স্প্রোকেটবয় ওয়েল, এটি একটি ডাব্লু 3 সি সুপারিশ। এবং এটি এমনকি সবচেয়ে খারাপ নয়, দীর্ঘ পথ দিয়েও নয়।
জন

সুতরাং আমরা কি এটি আইফ্রেমের পৃষ্ঠার স্টাইলশিটে বা আইফ্রেমে ধারণকারী পিতামাতার পৃষ্ঠার স্টাইলশিটে রেখেছি?
ম্যাথিয়াস লাইককেগার্ড লরেনজেন

1
এটা দুর্দান্ত, ধন্যবাদ! প্রকৃতপক্ষে ফ্লেক্সবক্সটি সবচেয়ে পরিষ্কার, তবে টেবিলগুলি শিখতেও দুর্দান্ত এবং এটি উপচে পড়া ছাড়াই কাজ করার মতো বলে মনে হচ্ছে: jsfiddle.net/dmitri14/1uqh3zgx/2
দিমিত্রি

1
এটি সর্বশেষতম আপডেটগুলি এই উত্তরের শীর্ষে সরিয়ে ফেলার উপযুক্ত হতে পারে। সেরা উত্তর, ফ্লেক্সবক্সে পৌঁছানোর জন্য আমাকে পুরো জিনিসটি পেরিয়ে যেতে হয়েছিল।
forgivenson

2
@ ফোরজিভেনসন - যথেষ্ট সত্য। এই উত্তরের শুরুতে একটি নোট যুক্ত করা হয়েছে।
ভিলাক্স-

68

এই সমস্যাটি সমাধান করার জন্য আমরা একটি জাভাস্ক্রিপ্ট ব্যবহার করি; এখানে উত্স।


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;

দ্রষ্টব্য: ifmiframe আইডি

pageY() জন রেসিগ তৈরি করেছিলেন (jQuery এর লেখক)


49

এটি করার আরেকটি উপায় 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: fixedযে আপনারও আইফ্রেমে যুক্ত করতে হবে।
0xF

আপনাকে ধন্যবাদ, আমার এসএসআরএস রিপোর্টের উচ্চতা স্থির করে, অন্য একদিনের জন্য আত্মহত্যা এড়ানো হয়েছে।
মাইক ডি

1
কোনও স্ক্রোলবার দৃশ্যমান নেই
andrej

নিখুঁত - আপনি কি সিএসএস '>' উদাহরণস্বরূপ Div # মূল> iframe
furtheras

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 যদিও এটি Chrome / FF এ কাজ করছে বলে মনে হচ্ছে, এটি আইই তে কাজ করে না (প্রথম পদ্ধতিটি সমস্ত বর্তমান ব্রাউজারে কাজ করে)।


3
কাজ এবং আইএমও উভয়ই এখানে উল্লিখিত দুটি বিকল্প সর্বোত্তম পন্থা। আমি flexboxবিকল্পটি পছন্দ করি কারণ আপনার সাথে এর calcকাছ থেকে কত পরিমাণ কমানো উচিত তা জানতে হবে vhflexboxএকটি সহজ সঙ্গে flex-grow:1এটি করে।
কিলমাজিং

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
কমপক্ষে এর জেএস লাগবে না !! তবে এটি কি ওয়েব-সেফ?
আলী শাকিবা

1
এই সমাধানটির সাথে নেতিবাচক দিকটি হ'ল এইচটিএমএল, বডি {ওভারফ্লো: লুকানো; page পৃষ্ঠা স্ক্রোলগুলি সরিয়ে ফেলবে।
আলী শাকিবা

আমি উপরের কোডে পাদলেখ যুক্ত করার চেষ্টা করছি তবে পাদলেখ প্রদর্শিত হচ্ছে না। আপনি দয়া করে সাহায্য করতে পারেন
অক্ষয় রাউত

18

সম্ভবত এটির ইতিমধ্যে উত্তর দেওয়া হয়েছে (উপরের কয়েকটি উত্তর এটি করার "সঠিক" উপায়) তবে আমি ভেবেছিলাম যে আমি আমার সমাধানটিও যুক্ত করব।

আমাদের আইফ্রেমটি একটি ডিভের মধ্যে লোড হয়, অতএব আমার উইন্ডো.হাইটের মতো আরও কিছু প্রয়োজন। এবং আমাদের প্রকল্পটি ইতিমধ্যে jQuery এর উপর নির্ভর করে দেখে আমি এটিকে সবচেয়ে মার্জিত সমাধান বলে মনে করি:

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

অবশ্যই "# মিডাল" ডিভের আইডি। আপনি কেবলমাত্র অতিরিক্ত কাজটি করতে হবে যখনই ব্যবহারকারী উইন্ডোটির আকার পরিবর্তন করে।

$(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 কলাম রয়েছে located


আপনার কোডটি কেবলমাত্র টিফির সাথে কাজ করবে যেখানে আইএফআরএএম রয়েছে উচ্চতা: 100%। টেবিলটি কোনও ডিআইভি উপাদানের মধ্যে থাকা থাকলে এটি কাজ করবে, কারণ সমস্ত ডিভের উচ্চতা: 100% থাকার জন্য আপনার স্টাইল রয়েছে।
নিকোলা পেটকানস্কি

6

মিচএডেল কোডটি আমার পক্ষে কাজ করে তবে এটি সঠিকভাবে কাজ করার জন্য আমি কিছুটা ছোটখাট পরিবর্তন করেছি।

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
পিতামাতাকে পূরণ করে না, কেবল আইফ্রেমে একটি বড় উচ্চতা রাখে।
বেন

3

আপনি এই জাতীয় এইচটিএমএল / সিএসএস দিয়ে এটি করতে পারেন:

<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

এইচটিএমএল 5 তে নতুন: ক্যালক ব্যবহার করুন (উচ্চতায়)

<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

অনুরূপ সমস্যা সমাধানের জন্য আমি প্রদর্শন: টেবিল ব্যবহার করেছি। এটি প্রায় একই জন্য কাজ করে, একটি ছোট উলম্ব স্ক্রোল বার রেখে। যদি আপনি সেই নমনীয় কলামটি একটি আইফ্রেমে ব্যতীত অন্য কোনও কিছুতে পপুলেট করার চেষ্টা করছেন তবে এটি দুর্দান্ত কাজ করে (না

নিম্নলিখিত এইচটিএমএল নিন

<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>

প্রদর্শনটি ব্যবহার করতে বাইরের ডিভি পরিবর্তন করুন: সারণী এবং এটির প্রস্থ এবং উচ্চতা সেট রয়েছে তা নিশ্চিত করুন।

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

ব্যানারটিকে একটি সারণি-সারি করুন এবং আপনার পছন্দটি যা যা হোক তার উচ্চতা সেট করুন:

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

আপনার আইফ্রেমে চারপাশে অতিরিক্ত ডিভি যুক্ত করুন (বা আপনার যে কোনও সামগ্রী প্রয়োজন) এবং এটি উচ্চতার সাথে একটি সারণি-সারি তৈরি করুন 100% এ সেট করুন (উচ্চতা পূরণের জন্য আপনি যদি কোনও আইফ্রেম এম্বেড করতে চান তবে এর উচ্চতা নির্ধারণ করা সমালোচনা)

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

নীচে একটি jsfiddle এটি কাজ করে দেখানো হয়েছে (একটি iframe ছাড়া কারণ যে এটি ফ্রিডলে কাজ করবে বলে মনে হচ্ছে না)

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


1

আমি মনে করি আপনার এখানে একটি ধারণামূলক সমস্যা আছে। বলে "আমি সেট উচ্চতা চেষ্টা: আইফ্রেম উপর 100%, ফলে বেশ পাসে কিন্তু আইফ্রেম পুরো পৃষ্ঠা ভরাট করার চেষ্টা" , ভাল, যখন "100%" "গোটা" সমান নয় হয়েছে?

আপনি যদি ইফ্রেমে এর ধারকটির পুরো উচ্চতা (যা দেহটি) পূর্ণ করতে বলেছিলেন তবে দুর্ভাগ্যক্রমে এটির একটি ব্লক স্তরের ভাইবোন রয়েছে যার উপরে আপনি 30px বড় হতে বলেছিলেন in সুতরাং প্যারেন্ট পাত্রে মোট এখন 100% + 30px> 100% আকারে বলা হচ্ছে! অতএব স্ক্রোলবারগুলি।

আমার মনে হয় আপনি যা বোঝাতে চাইছেন তা হল আপনি ফ্রেম এবং টেবিলের কোষের মতো যা থাকতে পারে তার উচ্চতা = "*" এর মতো আইফ্রেমে ব্যবহার করতে চান । আইআইআরসি এটি বিদ্যমান নেই।

দুর্ভাগ্যক্রমে আমার জ্ঞানের সর্বোপরি পরম ও আপেক্ষিক ইউনিটগুলিকে কার্যকরভাবে মিশ্রন / গণনা / বিয়োগের কোনও উপায় নেই, সুতরাং আমি মনে করি আপনি দুটি বিকল্পে কমে গেছেন:

  1. একেবারে আপনার ডিভটি অবস্থান করুন, যা এটি ধারক থেকে সরিয়ে নেবে তাই কেবল আইফ্রেমে এটির ধারকগুলির উচ্চতা গ্রাস করবে। এটি আপনাকে অন্যান্য ধরণের সমস্যার সাথে ছেড়ে দেয় তবে সম্ভবত আপনি যেটি अस्पष्ट করছেন বা প্রান্তিককরণ করছেন ঠিক আছে।

  2. বিকল্পভাবে আপনাকে ডিভের জন্য একটি% উচ্চতা নির্দিষ্ট করতে হবে এবং যদি ইফ্রেমের উচ্চতা অনেক বেশি হ্রাস করতে হবে। যদি পরম উচ্চতা যদি সত্যিই গুরুত্বপূর্ণ হয় তবে তার পরিবর্তে ডিভের একটি শিশু উপাদানকে এটি প্রয়োগ করতে হবে।


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;
}

আইই 8, ক্রোম, ফায়ারফক্স 3.6 এ পরীক্ষিত


1

এটি নীচে উল্লিখিত কোড সহ কাজ করবে

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

1

@ মিচএডেলের অনুরূপ উত্তর, তবে আমি 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 iframe ট্যাগের আইডি


0

আপনি লোড / পুনরায় আকারের ইভেন্টগুলিতে শরীরের আকার পরিমাপ করে এবং উচ্চতাটি (পুরো উচ্চতা - ব্যানার উচ্চতা) এ সেট করে এটি করতে পারেন।

মনে রাখবেন যে আইই 8 বিটা 2 তে বর্তমানে আপনি এটি অনারাইজ করতে পারবেন না কারণ সেই ইভেন্টটি বর্তমানে আই 88 বিটা 2 এ বিভক্ত।


0

অথবা আপনি পুরানো-বিদ্যালয়ে যেতে পারেন এবং সম্ভবত একটি ফ্রেমসেট ব্যবহার করতে পারেন :

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

2
@ ভিডি বিল্ডার: না, এটি কেবল বৈধ প্রাক-এইচটিএমএল 5। আমি বাজি ধরেছি এটি এখনও কাজ করে। ;-)
টিজে ক্রাউডার

0

আমি সম্মত হয়েছি যখন জেএস আরও ভাল বিকল্প বলে মনে হচ্ছে, আমার কাছে কিছুটা সিএসএস কেবল কার্যক্ষম সমাধান রয়েছে। এর খারাপ দিকটি হ'ল যদি আপনাকে আপনার আইফ্রেমে এইচটিএমএল ডকুমেন্টে ঘন ঘন সামগ্রী যুক্ত করতে হয় তবে আপনাকে এক শতাংশ ট্রাই সময় মানিয়ে নিতে হবে।

সমাধান:

আপনার এইচটিএমএল নথিগুলির জন্য কোনও উচ্চতার উল্লেখ না করার চেষ্টা করুন ,

html, body, section, main-div {}

তবে কেবল এটি কোড করুন:

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

দ্রষ্টব্য: ডিভটি আপনার প্রধান বিভাগ হতে হবে।

এটি তুলনামূলকভাবে কাজ করা উচিত। iframe দৃশ্যমান উইন্ডো উচ্চতার 300% ঠিক গণনা করে। যদি আপনি ২ য় নথি (আইফ্রেমে) থেকে লিখিত সামগ্রীটি আপনার ব্রাউজারের উচ্চতার চেয়ে তিনগুণ কম করেন তবে এটি কার্যকর হয়। আপনার যদি সেই দস্তাবেজে ঘন ঘন সামগ্রী যুক্ত করার প্রয়োজন না হয় এটি একটি স্থায়ী সমাধান এবং আপনি আপনার সামগ্রীর উচ্চতা অনুযায়ী আপনার নিজের প্রয়োজনীয়% খুঁজে পেতে পারেন।

এটি কাজ করে কারণ এটি দ্বিতীয় এইচটিএমএল ডকুমেন্টকে (এক এম্বেড করা) প্যারেন্ট এইচটিএমএল ডকুমেন্টের উচ্চতা উত্তোলন করতে প্রতিরোধ করে। এটি এটিকে বাধা দেয় কারণ আমরা তাদের উভয়ের জন্য কোনও উচ্চতা নির্দিষ্ট করেছিলাম না। আমরা যখন বাচ্চাকে একটি% দিই তখন এটি তার পিতামাতার সন্ধান করে, যদি তা না হয় তবে এটি এর সামগ্রীর উচ্চতা নেয় takes এবং কেবলমাত্র অন্য পাত্রে যদি আমি চেষ্টা করেছিলাম তখন থেকে তাকে উচ্চতা না দেওয়া হয়।


0

" বিরামবিহীন " বৈশিষ্ট্যটি এই সমস্যাটি সমাধান করার লক্ষ্যে একটি নতুন মান standard

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

এই বৈশিষ্ট্যটি নির্ধারণের সময় এটি সীমানা এবং স্ক্রোল বারগুলি সরিয়ে দেয় এবং আইফ্রেমে এর সামগ্রীর আকারকে আকার দেয়। যদিও এটি কেবলমাত্র ক্রোম এবং সর্বশেষ সাফারিতে সমর্থিত

আরও এখানে এখানে: এইচটিএমএল 5 আইফ্রেমে বিজোড় অ্যাট্রিবিউট


বিরামবিহীন বৈশিষ্ট্যটি এইচটিএমএল 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

আপনি% তে আইফ্রেমে উচ্চতা নির্ধারণ করতে পারবেন না কারণ আপনার পিতামাতার দেহের উচ্চতা 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

যদি লোড করা হবে এমন আইফ্রেমের সামগ্রীতে আপনার অ্যাক্সেস থাকে তবে আপনি যখনই এর আকার পরিবর্তন করেন তখন তার পিতামাতাকে পুনরায় আকার দিতে বলে দিতে পারেন ..

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

পৃষ্ঠাটিতে যদি আপনার একাধিক আইফ্রেমে থাকে তবে .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>

অন্যান্য প্যাডিং এবং মার্জিন ইস্যুর জন্য এখন একটি দিন সিএসএস 3 ক্যালক () খুব উন্নত এবং বেশিরভাগই সমস্ত ব্রাউজারের সাথেও উপযুক্ত।

চেক ক্যালক ()


0

কেন এটি করবেন না (বডি প্যাডিং / মার্জিনের জন্য সামান্য সমন্বয় সহ)

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

আপনার শেষের -0সাথে প্রতিস্থাপন করতে +'px'হবে। এটি কি মোবাইলে কাজ করে?
দিমিত্রি জায়তসেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.