Iframe'i, kabın kalan yüksekliğinin% 100'üne uyacak şekilde yapın


260

Bir banner ve iframe içeren bir web sayfası tasarlamak istiyorum. Umarım iframe kalan tüm sayfa yüksekliğini doldurabilir ve tarayıcı yeniden boyutlandırılırken otomatik olarak yeniden boyutlandırılabilir. Javascript kodu yazmadan, sadece CSS ile yapılabilir mi?

height:100%Iframe üzerinde ayarlamayı denedim , sonuç oldukça yakın, ancak iframe 30pxbanner div öğesinin yüksekliği de dahil olmak üzere tüm sayfa yüksekliğini doldurmaya çalıştı , bu yüzden gereksiz dikey kaydırma çubuğu aldım. Mükemmel değil.

Güncelleme Notları : Soruyu iyi tanımlamam için özür dilerim, bir web sayfasının tüm hatırlama yüksekliğini başarıyla işgal etmek için DIV'de dolgu özelliğini CSS marjını denedim, ancak hile iframe üzerinde çalışmadı.

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

Herhangi bir fikir takdir edilmektedir.

Yanıtlar:


236

2019'da güncelleme

TL; DR: Bugün en iyi seçenek bu cevaptaki son seçenek - flexbox. Her şey güzelce destekliyor ve yıllarca var. Bunun için git ve arkana bakma. Bu cevabın geri kalanı tarihsel nedenlerle kaldı.


İşin püf noktası% 100 neyin alındığını anlamaktır. CSS teknik özelliklerini okumak size yardımcı olabilir.

Uzun bir öykü kısaltmak için - "blok içeren" gibi bir şey vardır - bu da ana öğeye ihtiyaç duymaz. Basitçe söylemek gerekirse, hiyerarşideki konum: göreceli veya konum: mutlak olan ilk öğedir. Ya da başka bir şey yoksa vücut elementinin kendisi. Yani, "width: 100%" dediğinizde, "içeren bloğun" genişliğini kontrol eder ve elemanınızın genişliğini aynı boyuta ayarlar. Orada başka bir şey varsa, o zaman kendisinden daha büyük bir "içeren blok" içeriği alabilirsiniz (böylece "taşan").

Yükseklik aynı şekilde çalışır. Bir istisna dışında. Tarayıcı penceresinin% 100'üne kadar yükseklik elde edemezsiniz. % 100'ünün hesaplanabileceği en üst düzey öğe, gövde (veya html? Emin değilim) öğesidir ve içeriğini içerecek kadar genişler. Yükseklik belirtmek: Üzerinde% 100'ün bir etkisi olmayacaktır, çünkü% 100'ü ölçecek bir "ana öğe" yoktur. Pencerenin kendisi sayılmaz. ;)

Bir şeyin pencerenin tam olarak% 100'ünü uzatmasını sağlamak için iki seçeneğiniz vardır:

  1. JavaScript kullan
  2. DOCTYPE kullanmayın. Bu iyi bir uygulama değildir, ancak tarayıcıları "tuhaflık moduna" sokar, burada elemanlar üzerinde height = "% 100" yapabilirsiniz ve bunları pencere boyutuna genişletir. DOCTYPE değişikliklerine uyum sağlamak için sayfanızın geri kalanının da muhtemelen değiştirilmesi gerektiğini unutmayın.

Güncelleme: Bunu gönderdiğimde zaten yanlış olmadığımdan emin değilim, ama bu kesinlikle eski. Bugün bunu stil sayfanızda yapabilirsiniz: html, body { height: 100% }ve aslında görünümünüzün tamamına uzanır. Bir DOCTYPE ile bile.min-height: 100%durumunuza bağlı olarak da yararlı olabilir.

Ve kimseye artık tuhaf modlu bir belge yapmasını tavsiye etmem , çünkü bu onları çözmekten çok daha fazla baş ağrısına neden olur. Her tarayıcının farklı bir gariplik modu vardır, bu nedenle sayfanızın tarayıcılar arasında tutarlı bir şekilde görünmesini sağlamak iki büyüklük sırası daha zor hale gelir. Bir DOCTYPE kullanın. Her zaman. Tercihen HTML5 olanı -<!DOCTYPE html> . Hatırlanması kolaydır ve 10 yaşındakiler de dahil olmak üzere tüm tarayıcılarda bir cazibe gibi çalışır.

Bunun tek istisnası IE5 gibi bir şeyi desteklemeniz gerektiğidir. Oradaysanız, yine de kendi başınızasınız. Bu eski tarayıcılar bugün tarayıcılar gibi bir şey değildir ve burada verilen küçük tavsiyeler size yardımcı olacaktır. Parlak tarafta, oradaysanız, muhtemelen uyumluluk sorunlarından kurtulmak için bir tür tarayıcıyı desteklemeniz gerekir.

İyi şanslar!

Güncelleme 2: Hey, uzun zaman oldu! 6 yıl sonra, yeni seçenekler sahnede. Aşağıdaki yorumlarda bir tartışma yaptım, işte bugünün tarayıcılarında çalışan daha fazla numara.

Seçenek 1 - mutlak konumlandırma. İlk parçanın kesin yüksekliğini bildiğinizde güzel ve temiz.

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>

Bazı notları - second-rowçünkü konteyner gereklidir bottom: 0ve right: 0nedense iframe'lerde üzerinde çalışmaya yapmaz. "Değiştirilmiş" bir öğe olmakla ilgili bir şey. Ama width: 100%ve height: 100%gayet iyi çalışıyor. display: blockgerekli çünkü bu birinlinevarsayılan olarak öğedir ve boşluk aksi halde garip taşmalar oluşturmaya başlar.

Seçenek 2 - tablolar. İlk parçanın yüksekliğini bilmediğinizde çalışır. Gerçek <table>etiketleri kullanabilir veya ile süslü bir şekilde yapabilirsiniz display: table. İkincisi için gideceğim çünkü bu günlerde moda gibi görünüyor.

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>

Bazı notlar - overflow: autosatırın her zaman tüm içeriğini içerdiğinden emin olur. Aksi takdirde kayan elemanlar bazen taşabilir. height: 100%İkinci satırda o alır gibi küçük olarak ilk satırı sıkma olabilir olduğu kadar emin genişler yapar.

Seçenek 3 - esnek kutu. En temiz olanı, ancak daha az tarayıcı desteği ile. IE10 -ms-, flexbox özellikleri için öneklere ihtiyaç duyacaktır ve daha az bir şey bunu desteklemeyecektir.

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>

Bazı notlar - overflow: hiddeniframe display: blockbu durumda bile hala bir çeşit taşma ürettiği için . Tam ekran görünümünde veya snippet düzenleyicide görünmez, ancak küçük önizleme penceresi fazladan bir kaydırma çubuğu alır. Bunun ne olduğu hakkında hiçbir fikrim yok, iframe'ler tuhaf.


@sproketboy Pekala, bu bir W3C önerisi. Ve en kötüsü bile değil, uzun bir yoldan değil.
John

Peki bunu IFrame sayfasının stil sayfasına mı yoksa IFrame içeren üst sayfanın stil sayfasına mı koyarız?
Mathias Lykkegaard Lorenzen

1
Harika, teşekkürler! Flexbox gerçekten de en temiz, ancak tablolar da öğrenmek harika ve taşmalar olmadan çalışıyor gibi görünüyor: jsfiddle.net/dmitri14/1uqh3zgx/2
Dmitri Zaitsev

1
En son güncellemeleri bu cevabın en üstüne taşımak faydalı olabilir. En iyi cevabı almak için her şeyi gözden geçirmek zorunda kaldım, flexbox.
forgivenson

2
@forgivenson - Yeterince doğru. Bu cevabın başına bir not eklendi.
Vilx-

68

Bu sorunu çözmek için bir JavaScript kullanıyoruz; kaynak burada.


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;

Not: ifmiframe kimliği

pageY() John Resig (jQuery'nin yazarı) tarafından oluşturuldu


50

Bunu yapmanın başka bir yolu da position: fixed;ana düğümü kullanmaktır.
Yanılmıyorsam, position: fixed;öğeyi görünüm penceresine bağlar, böylece bu düğümü width: 100%;ve height: 100%;özellikleri verdiğinizde, tüm ekrana yayılır. Bu noktadan sonra, <iframe>etiketi içine koyabilir ve basit width: 100%; height: 100%;CSS talimatı ile kalan boşluğa (hem genişlik hem de yükseklik olarak) dağıtabilirsiniz.

Örnek kod


    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
Bu "kalan" yüksekliği nasıl alıyor ..?
EricG

3
Ayrıca position: fixediframe'e eklemeniz gerektiğini fark ettim .
0xF

teşekkür ederim, SSRS raporumun yüksekliği düzeltildi, başka bir gün için intihar önlendi.
Mike D

1
görünür kaydırma çubuğu yok
andrej

mükemmel - css '>' örneğin açıklayabilir misin div # root> iframe furtheras Ben bilmiyorum ve referans bulamıyorum
Datadimension

40

İşte birkaç modern yaklaşım:



  • Yaklaşım 2 - Flexbox yaklaşımı

    Buraya Örnek

    Ayarlama displayiçin ortak üst elemanın flexbirlikte, flex-direction: column(varsayarsak elemanlarının her biri üst üste istiflenmesi istiyorum). Daha sonra , kalan alanı doldurması için flex-grow: 1alt iframeöğeyi ayarlayın .

    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>

    Bu yaklaşım daha az destek 1 olduğundan , yukarıda belirtilen yaklaşıma devam etmenizi öneririm.

1 Chrome / FF'de çalışıyor gibi görünse de, IE'de çalışmaz (ilk yöntem mevcut tüm tarayıcılarda çalışır).


3
Hem iş hem de IMO burada bahsedilen iki seçenek en iyi yaklaşımdır. flexboxSeçeneği tercih ederim, çünkü calcsizinle birlikte düşecek alan miktarını bilmeniz gerekir vh. İle flexboxbir basit flex-grow:1yapar.
17'de Kilmazing

39

Bunu ile yapabilirsiniz DOCTYPE, ancak kullanmak zorundasınız table. Şuna bir bak:

<!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
en azından js gerekmez !! ama web için güvenli mi?
Ali Shakiba

1
Bu çözümün dezavantajı, html, body {overflow: hidden;} sayfa kaydırmalarını kaldıracağıdır.
Ali Shakiba

Yukarıdaki kodda altbilgi eklemek çalışıyorum ama altbilgi göstermiyor. lütfen yardım edebilir misin.
Akshay Raut

18

Belki bu zaten cevaplanmıştır (yukarıdaki birkaç cevap bunu yapmanın "doğru" yollarıdır), ama sadece çözümümü de ekleyeceğimi düşündüm.

Bizim iFrame bir div içinde yüklü, bu yüzden window.height sonra başka bir şeye ihtiyacım vardı. Projemizin zaten jQuery'ye dayandığını görmek, bunu en zarif çözüm olarak görüyorum:

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

Tabii ki "# orta" div kimliğidir. Yapmanız gereken tek şey, kullanıcı pencereyi yeniden boyutlandırdığında bu boyut değişikliğini hatırlamaktır.

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

7

İşte yaptığım şey. Aynı sorunu yaşadım ve web'de saatlerce kaynak aramaya başladım.

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

Bunu baş bölümüne ekledim.

İframe'imin 3 satır ve 1 sütun içeren bir tablonun orta hücresinde bulunduğunu lütfen unutmayın.


Kodunuz yalnızca IFRAME içeren TD'nin yüksekliğine sahiptir:% 100. Tablo bir DIV öğesi içinde bulunuyorsa çalışır, çünkü tüm div'lerin yüksekliğe sahip olması için bir stiliniz vardır:% 100.
Nikola Petkanski

6

MichAdel kodu benim için çalışıyor ama düzgün çalışması için bazı küçük değişiklikler yaptım.

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

Doğru, kabına göre% 100 yüksekliğe sahip bir iframe gösteriyorsunuz: gövde.

Bunu dene:

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

Tabii ki, ikinci div'in yüksekliğini istediğiniz yüksekliğe değiştirin.


8
30px + 90%! = 100%
stepancheg

1
% 90 yerine kalk (% 100 - 30 piksel) kullanabilir
Justin E

4

takip etmeyi dene:

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

benim için çalıştı


4
Ebeveyni doldurmaz, sadece iframe'e büyük bir yükseklik koyar.
Ben

3

Bunu html / css ile şu şekilde yapabilirsiniz:

<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'teki yenilikler: Kireç kullan (boyunda)

<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

Benzer bir sorunu düzeltmek için display: tablosunu kullandım. Bu neredeyse küçük bir dikey kaydırma çubuğunu bırakarak bunun için çalışır. Bu esnek sütunu bir iframe dışında bir şeyle doldurmaya çalışıyorsanız, iyi çalışır (değil

Aşağıdaki HTML'yi alın

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

Display: table kullanmak için dış div değerini değiştirin ve genişlik ve yükseklik ayarlı olduğundan emin olun.

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

Büyük başlığı bir tablo satırı yapın ve yüksekliğini tercihinize göre ayarlayın:

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

İframe'inize (veya ihtiyacınız olan herhangi bir içeriğe) fazladan bir div ekleyin ve yüksekliği% 100 olarak ayarlanmış bir tablo satırı yapın (yüksekliği doldurmak için bir iframe gömmek istiyorsanız yüksekliğini ayarlamak kritiktir)

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

Aşağıda iş yerinde gösteren bir jsfiddle (iframe olmadan çünkü bu kemanda çalışmıyor gibi görünüyor)

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


1

Burada kavramsal bir sorununuz olduğunu düşünüyorum. Söylemek için "Ben set yüksekliği çalıştı: iframe% 100, sonuç oldukça yakındır ama iframe tüm sayfayı doldurmak için çalıştı" iyi, ne zaman "% 100" "bütün" eşit olmamıştır?

İç çerçeveden kabının (gövdesi olan) tüm yüksekliğini doldurmasını istediniz, ancak maalesef yukarıdaki <div> 'de 30 piksel büyüklüğünde olmasını istediğiniz bir blok düzeyinde kardeş var. Böylece ana kapsayıcı toplamının% 100 + 30 piksel>% 100 boyutlandırılması isteniyor! Dolayısıyla kaydırma çubukları.

Demek istediğim , iframe'in çerçeveler ve tablo hücreleri gibi bırakılan şeyleri tüketmesini istediğiniz , yani height = "*". IIRC bu mevcut değil.

Ne yazık ki, bildiklerimin en iyisi olarak, mutlak ve göreceli birimleri etkili bir şekilde karıştırmanın / hesaplamanın / çıkarmanın bir yolu yoktur, bu yüzden iki seçeneğe indirgenmiş olduğunuzu düşünüyorum:

  1. Div'inizi kesinlikle iframe'i konumlandırın, böylece iframe tek başına iframe'in kap yüksekliğini tüketmesini sağlar. Bu sizi her türlü başka sorunla karşı karşıya bırakır, ancak belki de opaklık veya hizalama yaptığınız şey için sorun olmaz.

  2. Alternatif olarak div için% yükseklik belirtmeniz ve iframe'in yüksekliğini bu kadar azaltmanız gerekir. Mutlak yükseklik gerçekten bu kadar önemliyse, bunun yerine div'in bir alt öğesine uygulanması gerekir.


1

Bir süre css rotasını denedikten sonra, jQuery'de benim için işi yapan oldukça temel bir şey yazdım:

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, Chrome, Firefox 3.6'da test edildi


1

Aşağıdaki kod ile çalışacaktır

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

1

@MichAdel benzer cevap, ama ben JQuery ve daha zarif kullanıyorum.

<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 etiketinin kimliği


0

Bunu, yükleme / yeniden boyutlandırma olaylarındaki gövde boyutunu ölçerek ve yüksekliği (tam yükseklik - afiş yüksekliği) olarak ayarlayarak yapabilirsiniz.

Şu anda IE8 Beta2'de, bu olay şu anda IE8 Beta2'de bozulduğu için bunu onresize edemeyeceğinizi unutmayın.


0

ya da eski okula gidip bir çerçeve kümesi kullanabilirsiniz :

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

2
@vdbuilder: Hayır, yalnızca geçerli html5 öncesi. Eminim hala işe yarıyor. ;-)
TJ Crowder

0

JS'nin daha iyi bir seçenek gibi görünse de, biraz CSS sadece çalışma çözümüm var. Bunun dezavantajı, iframe html belgenize sık sık içerik eklemeniz gerekiyorsa, bir yüzde oluk süresine uyum sağlamanız gerekir.

Çözüm:

Html belgelerinizin HER YER için yükseklik belirtmemeye çalışın ,

html, body, section, main-div {}

yalnızca bunu kodlayın:

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

not: div ana bölümünüz olmalıdır.

Bu nispeten işe yarar. iframe, görülebilir pencere yüksekliğinin% 300'ünü tam olarak hesaplar. 2. belgedeki (iframe'deki) html içeriği, tarayıcınızın yüksekliğinin 3 katından daha küçükse, çalışır. Bu belgeye sık sık içerik eklemeniz gerekmiyorsa, bu kalıcı bir çözümdür ve içerik yüksekliğinize göre ihtiyacınız olan% 'yi bulabilirsiniz.

Bu, 2. html belgesinin (gömülü olan) üst html belgesinden yüksekliğini miras almasını engellediği için çalışır. Bunu önler çünkü her ikisi için bir yükseklik belirtmedik. Çocuğa% verdiğimizde ebeveynini arar, değilse içerik yüksekliğini alır. Ve sadece diğer kaplara yükseklikler verilmezse, denediğimden.



0

Basit bir jQuery çözümü

Bunu, iframed sayfasının içindeki bir komut dosyasında kullanın

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

üst gövde yüksekliğiniz% 100 olmadığından iframe yüksekliğini% olarak ayarlayamazsınız, bu nedenle üst yüksekliği% 100 yapın ve daha sonra iframe yüksekliğini% 100 uygulayın

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

Yüklenecek iframe'in içeriğine erişiminiz varsa, ebeveyne yeniden boyutlandırıldığında yeniden boyutlandırmasını isteyebilirsiniz.

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

Sayfada birden fazla iframe'iniz varsa, doğru olanı seçmeniz için .find ("iframe") öğesini geliştirmek için id veya diğer akıllı yöntemleri kullanmanız gerekebilir.


0

Ben css pozisyon kullanarak bu senaryo elde etmenin en iyi yolu düşünüyorum. ana div öğenize göre konumu ayarlayın ve konum: iframe'iniz için mutlak.

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

diğer dolgu ve kenar boşluğu sorunu için bir gün css3 calc () çok gelişmiş ve çoğunlukla tüm tarayıcı için de uyumludur.

calc () öğesini kontrol et


0

Bunu neden yapmıyorsunuz (vücut dolgusu / kenar boşlukları için küçük ayarlarla)

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

Sonunda -0ile değiştirmeniz gerekir +'px'. Mobil cihazlarda çalışıyor mu?
Dmitri Zaitsev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.