Rendi l'Iframe adatto al 100% dell'altezza rimanente del contenitore


260

Voglio progettare una pagina web con un banner e un iframe. Spero che l'iframe possa riempire tutta l'altezza rimanente della pagina e ridimensionarsi automaticamente mentre il browser si sta ridimensionando. È possibile farlo senza scrivere il codice Javascript, solo con CSS?

Ho provato a impostare height:100%iframe, il risultato è abbastanza vicino ma iframe ha provato a riempire l'intera altezza della pagina, inclusa l' 30pxaltezza dell'elemento div banner, quindi ho ottenuto una barra di scorrimento verticale non necessaria. Non è perfetto

Note di aggiornamento : mi scusi per non aver descritto bene la domanda, ho provato il margine CSS, riempiendo l'attributo su DIV per occupare con successo l'intera altezza di remining di una pagina Web, ma il trucco non ha funzionato su iframe.

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

Ogni idea è apprezzata.

Risposte:


236

Aggiornamento nel 2019

TL; DR: oggi l'opzione migliore è l'ultima in questa risposta: flexbox. Tutto lo supporta bene e lo fa da anni. Vai per quello e non guardare indietro. Il resto di questa risposta è lasciato per ragioni storiche.


Il trucco è capire di cosa è preso il 100%. La lettura delle specifiche CSS può aiutarti.

Per farla breve - esiste qualcosa come "contenere blocco" - che non è necessario l'elemento genitore. Detto semplicemente, è il primo elemento della gerarchia che ha posizione: relativa o posizione: assoluta. O l'elemento del corpo stesso se non c'è nient'altro. Quindi, quando dici "larghezza: 100%", controlla la larghezza del "blocco contenitore" e imposta la larghezza del tuo elemento sulla stessa dimensione. Se c'era qualcos'altro lì, allora potresti ottenere i contenuti di un "blocco contenente" che sono più grandi di se stesso (quindi "traboccanti").

L'altezza funziona allo stesso modo. Con un'eccezione. Non puoi ottenere l'altezza al 100% della finestra del browser. L'elemento di livello più alto, rispetto al quale è possibile calcolare il 100%, è l'elemento body (o html? Non sicuro) e che si estende abbastanza da contenere il suo contenuto. Specificare l'altezza: il 100% su di esso non avrà alcun effetto, perché non ha alcun "elemento genitore" rispetto al quale misurare il 100%. La finestra stessa non conta. ;)

Per allungare esattamente il 100% della finestra, hai due possibilità:

  1. Usa JavaScript
  2. Non usare DOCTYPE. Questa non è una buona pratica, ma mette i browser in "modalità strane", in cui puoi fare height = "100%" sugli elementi e li allungherà alla dimensione della finestra. Nota che probabilmente il resto della tua pagina dovrà essere cambiato anche per adattarsi alle modifiche di DOCTYPE.

Aggiornamento: non sono sicuro di non essermi sbagliato già quando l'ho pubblicato, ma ora questo è sicuramente obsoleto. Oggi puoi farlo nel tuo foglio di stile: html, body { height: 100% }e in realtà si estenderà a tutto il tuo viewport. Anche con un DOCTYPE. min-height: 100%potrebbe anche essere utile, a seconda della situazione.

E non consiglierei a nessuno di creare più un documento in modalità strane, perché causa molto più mal di testa che risolverli. Ogni browser ha una diversa modalità di stranezza, quindi rendere la tua pagina coerente in tutti i browser diventa più difficile di due ordini di grandezza. Usa un DOCTYPE. Sempre. Preferibilmente quello HTML5 - <!DOCTYPE html>. È facile da ricordare e funziona come un fascino in tutti i browser, anche in quelli di 10 anni.

L'unica eccezione è quando devi supportare qualcosa come IE5 o qualcosa del genere. Se ci sei, allora sei da solo comunque. Quei browser antichi non assomigliano per niente ai browser di oggi, e pochi consigli che vengono forniti qui ti aiuteranno con loro. Il lato positivo, se ci sei, probabilmente devi solo supportare UN tipo di browser, che elimina i problemi di compatibilità.

In bocca al lupo!

Aggiornamento 2: Ehi, è passato molto tempo! 6 anni dopo, nuove opzioni sono sulla scena. Ho appena avuto una discussione nei commenti qui sotto, qui ci sono altri trucchi per te che funzionano nei browser di oggi.

Opzione 1 - posizionamento assoluto. Bello e pulito per quando si conosce l'altezza precisa della prima parte.

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>

Alcune note: il second-rowcontenitore è necessario perché bottom: 0e right: 0non funziona su iframe per qualche motivo. Qualcosa a che fare con l'essere un elemento "sostituito". Ma width: 100%e height: 100%funziona bene. display: blockè necessario perché è un inlineelemento per impostazione predefinita e gli spazi bianchi iniziano a creare strani overflow.

Opzione 2 - tabelle. Funziona quando non conosci l'altezza della prima parte. Puoi usare i <table>tag effettivi o farlo in modo elegante con display: table. Vado per quest'ultimo perché sembra essere di moda in questi giorni.

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>

Alcune note: overflow: autoassicurarsi che la riga includa sempre tutto il suo contenuto. Altrimenti gli elementi fluttuanti possono talvolta traboccare. La height: 100%seconda riga si assicura che si espanda tanto quanto può spremere la prima riga il più piccolo possibile.

Opzione 3 - flexbox. Il più pulito di tutti, ma con un supporto del browser meno che stellare. IE10 avrà bisogno di -ms-prefissi per le proprietà del flexbox e niente di meno non lo supporterà affatto.

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>

Alcune note - overflow: hiddenè perché iframe genera ancora una sorta di overflow anche con display: blockin questo caso. Non è visibile nella vista a schermo intero o nell'editor dei frammenti, ma la piccola finestra di anteprima ottiene una barra di scorrimento aggiuntiva. Non ho idea di cosa sia, gli iframe sono strani.


@sproketboy Bene, è una raccomandazione del W3C. E non è nemmeno il peggio, non di gran lunga.
Giovanni,

Quindi inseriamo questo nel foglio di stile della pagina dell'IFrame o nel foglio di stile della pagina principale che contiene l'IFrame?
Mathias Lykkegaard Lorenzen

1
È fantastico, grazie! La flexbox è davvero la più pulita, ma anche i tavoli sono fantastici da imparare e sembrano funzionare senza gli overflow: jsfiddle.net/dmitri14/1uqh3zgx/2
Dmitri Zaitsev

1
Potrebbe valere la pena spostare gli ultimi aggiornamenti all'inizio di questa risposta. Ho dovuto esaminare tutto per arrivare alla migliore risposta, flexbox.
forgivenson,

2
@forgivenson - Abbastanza vero. Aggiunta una nota all'inizio di questa risposta.
Vilx-

68

Usiamo un JavaScript per risolvere questo problema; ecco la fonte.


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;

Nota: ifmè l'ID iframe

pageY() è stato creato da John Resig (l'autore di jQuery)


50

Un altro modo per farlo sarebbe usare il position: fixed;nodo genitore on.
Se non sbaglio, position: fixed;lega l'elemento al viewport, quindi, una volta dato questo nodo width: 100%;e height: 100%;proprietà, si estenderà su tutto lo schermo. Da questo punto in poi, puoi inserire il <iframe>tag al suo interno e estenderlo sullo spazio rimanente (sia in larghezza che in altezza) con semplici width: 100%; height: 100%;istruzioni CSS.

Codice di esempio


    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
Come sta prendendo l'altezza "rimanente" ..?
EricG,

3
Ho notato che è necessario aggiungere position: fixedanche all'iframe.
0xF,

grazie, risolto il mio rapporto SSRS, evitato il suicidio per un altro giorno.
Mike D,

1
non sono visibili barre di scorrimento
andrej

perfetto - potresti spiegare il css '>' es. div # root> iframe inoltre, non ho familiarità con esso e non riesco a trovare il riferimento
Datadimension,

40

Ecco alcuni approcci moderni:


  • Approccio 1 - Combinazione di unità relative alla finestra / calc().

    L'espressione calc(100vh - 30px)rappresenta l'altezza rimanente. Dov'è 100vhl'altezza del browser e l'uso di calc()sposta effettivamente l'altezza dell'altro elemento.

    Esempio qui

    body {
        margin: 0;
    }
    .banner {
        background: #f00;
        height: 30px;
    }
    iframe {
        display: block;
        background: #000;
        border: none;
        height: calc(100vh - 30px);
        width: 100%;
    }
    <div class="banner"></div>
    <iframe></iframe>

    Supporto per calc()qui ; supporto per le unità relative al viewport qui .


  • Approccio 2 - Approccio Flexbox

    Esempio qui

    Impostare l' displayelemento padre comune su flex, insieme a flex-direction: column(supponendo che gli elementi si sovrappongano uno sull'altro). Quindi imposta flex-grow: 1l' iframeelemento figlio in modo che riempia lo spazio rimanente.

    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>

    Poiché questo approccio ha meno supporto 1 , suggerirei di seguire l'approccio sopra citato.

1 Anche se sembra funzionare in Chrome / FF, non funziona in IE (il primo metodo funziona in tutti i browser attuali).


3
Sia il lavoro che l'IMO le due opzioni menzionate qui rappresentano l'approccio migliore. Preferisco l' flexboxopzione perché con calcte è necessario conoscere la quantità di spazio da dedurre dal vh. Con flexboxun semplice lo flex-grow:1fa.
Kilmazing

39

Puoi farlo con DOCTYPE, ma devi usare table. Controllalo:

<!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
almeno non ha bisogno di js !! ma è sicuro per il web?
Ali Shakiba,

1
il rovescio della medaglia con questa soluzione è che html, body {overflow: hidden;} rimuoverà gli scroll delle pagine.
Ali Shakiba,

Sto cercando di aggiungere il piè di pagina nel codice sopra ma il piè di pagina non viene visualizzato. puoi per favore aiutare.
Akshay Raut,

18

Forse è già stata data una risposta (alcune risposte sopra sono modi "corretti" per farlo), ma ho pensato di aggiungere anche la mia soluzione.

Il nostro iFrame è caricato in un div, quindi avevo bisogno di qualcos'altro oltre a window.height. E visto che il nostro progetto si basa già ampiamente su jQuery, trovo che questa sia la soluzione più elegante:

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

Dove ovviamente "#middle" è l'id del div. L'unica cosa extra che devi fare è ricordare questa modifica delle dimensioni ogni volta che l'utente ridimensiona la finestra.

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

7

Ecco cosa ho fatto. Ho avuto lo stesso problema e ho finito per cercare risorse sul web per ore.

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

Ho aggiunto questo alla sezione head.

Tieni presente che il mio iframe si trova all'interno della cella centrale di una tabella con 3 righe e 1 colonna.


Il codice funzionerà solo se il TD contenente IFRAME ha altezza: 100%. Funzionerà se la tabella è contenuta in un elemento DIV, perché hai uno stile per tutti i div con altezza: 100%.
Nikola Petkanski,

6

Il codice MichAdel funziona per me, ma ho apportato alcune modifiche minori per farlo funzionare correttamente.

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

È giusto, stai mostrando un iframe con un'altezza del 100% rispetto al suo contenitore: il corpo.

Prova questo:

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

Naturalmente, cambia l'altezza del secondo div all'altezza desiderata.


8
30px + 90%! = 100%
stepancheg

1
potrebbe usare calc (100% - 30px) invece del 90%
Justin E

4

prova quanto segue:

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

ha funzionato per me


4
Non riempie il genitore, mette solo una grande altezza sull'iframe.
Ben

3

Puoi farlo con html / css in questo modo:

<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

Novità di HTML5: usa calc (in altezza)

<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

Ho usato display: table per risolvere un problema simile. Funziona quasi per questo, lasciando una piccola barra di scorrimento verticale. Se stai cercando di popolare quella colonna flessibile con qualcosa di diverso da un iframe, funziona bene (no

Prendi il seguente 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>

Cambia il div esterno per usare display: table e assicurati che abbia una larghezza e altezza impostate.

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

Trasforma il banner in una riga di tabella e imposta la sua altezza su qualunque sia la tua preferenza:

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

Aggiungi un div extra attorno al tuo iframe (o qualsiasi altro contenuto di cui hai bisogno) e rendilo una riga di tabella con altezza impostata al 100% (impostarne l'altezza è fondamentale se vuoi incorporare un iframe per riempire l'altezza)

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

Di seguito è un jsfiddle che lo mostra al lavoro (senza iframe perché non sembra funzionare nel violino)

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


1

Penso che tu abbia un problema concettuale qui. Per dire "Ho provato a impostare l'altezza: 100% su iframe, il risultato è abbastanza vicino ma l'iframe ha provato a riempire l'intera pagina" , beh, quando "100%" non è stato uguale a "intero"?

Hai chiesto all'iframe di riempire l'intera altezza del suo contenitore (che è il corpo) ma sfortunatamente ha un fratello a livello di blocco nel <div> sopra il quale hai chiesto di essere grande 30px. Quindi al totale del contenitore padre viene ora chiesto di ridimensionare al 100% + 30px> 100%! Quindi barre di scorrimento.

Quello che penso tu voglia dire è che vorresti che l'iframe consumasse ciò che è rimasto come frame e celle di tabella possono, cioè height = "*". IIRC questo non esiste.

Sfortunatamente, per quanto ne so, non c'è modo di mescolare / calcolare / sottrarre efficacemente unità assolute e relative, quindi penso che tu sia ridotto a due opzioni:

  1. Posiziona assolutamente il tuo div, che lo porterà fuori dal contenitore in modo che l'iframe da solo consumi la sua altezza dei contenitori. Questo ti lascia con ogni sorta di altri problemi, ma forse per quello che stai facendo opacità o allineamento sarebbe ok.

  2. In alternativa, devi specificare un'altezza% per il div e ridurre di molto l'altezza dell'iframe. Se l'altezza assoluta è davvero così importante, dovrai invece applicarla a un elemento figlio del div.


1

Dopo aver provato il percorso CSS per un po ', ho finito per scrivere qualcosa di abbastanza semplice in jQuery che ha fatto il lavoro per me:

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

Testato su IE8, Chrome, Firefox 3.6


1

Funzionerà con il codice sotto indicato

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

1

Risposta simile di @MichAdel, ma sto usando JQuery e più elegante.

<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 è l'ID del tag iframe


0

È possibile farlo misurando le dimensioni del corpo in eventi di caricamento / ridimensionamento e impostando l'altezza su (altezza completa - altezza banner).

Si noti che attualmente in IE8 Beta2 non è possibile eseguire questa operazione di ridimensionamento poiché tale evento è attualmente interrotto in IE8 Beta2.


0

o puoi andare alla vecchia scuola e usare un set di frame forse:

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

2
@vdbuilder: No, è solo pre-html5 valido . Scommetto che funziona ancora. ;-)
TJ Crowder,

0

Anche se sono d'accordo che JS sembra un'opzione migliore, ho una soluzione funzionante in qualche modo solo CSS. Il rovescio della medaglia è che se devi aggiungere frequentemente contenuto al tuo documento HTML iframe, dovresti adattare una percentuale nel tempo.

Soluzione:

Prova a non specificare alcuna altezza per ENTRAMBI i tuoi documenti HTML,

html, body, section, main-div {}

quindi codifica solo questo:

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

nota: il div dovrebbe essere la tua sezione principale.

Questo dovrebbe funzionare relativamente. l'iframe calcola esattamente il 300% dell'altezza della finestra visibile. Se il contenuto html del secondo documento (nell'iframe) è più piccolo di 3 volte l'altezza del browser, funziona. Se non hai bisogno di aggiungere frequentemente contenuti a quel documento, questa è una soluzione permanente e potresti trovare la tua% necessaria in base alla tua altezza del contenuto.

Questo perché impedisce al secondo documento html (quello incorporato) di ereditare la sua altezza dal documento html principale. Lo impedisce perché non abbiamo specificato un'altezza per entrambi. Quando diamo una% al bambino cerca il suo genitore, in caso contrario, prende la sua altezza del contenuto. E solo se agli altri contenitori non vengono date altezze, da quello che ho provato.


0

L' attributo " seamless " è un nuovo standard che mira a risolvere questo problema:

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

Quando assegna questo attributo rimuoverà i bordi e le barre di scorrimento e ridimensiona l'iframe in base alla sua dimensione del contenuto. sebbene sia supportato solo in Chrome e nell'ultimo Safari

maggiori informazioni qui: HTML5 iFrame Seamless Attribute


L'attributo senza soluzione di continuità è stato rimosso dalla specifica HTML 5.
Eric Steinborn,

0

Una semplice soluzione jQuery

Usa questo in uno script all'interno della pagina 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

non puoi impostare l'altezza iframe in% perché l'altezza del tuo genitore non è del 100%, quindi imposta l'altezza del genitore come 100% e quindi applica l'altezza iframe al 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

Se hai accesso al contenuto dell'iframe che verrà caricato, puoi dire al suo genitore di ridimensionare ogni volta che si ridimensiona.

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

Se nella pagina sono presenti più di un iframe, potrebbe essere necessario utilizzare ID o altri metodi intelligenti per migliorare .find ("iframe") in modo da selezionare quello corretto.


0

Penso che il modo migliore per raggiungere questo scenario usando la posizione css. imposta la posizione relativa al div e alla posizione del tuo genitore: assoluta al tuo iframe.

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

per altri problemi di imbottitura e margine ora un giorno css3 calc () è molto avanzato e per lo più compatibile anche con tutti i browser.

controlla calc ()


0

Perché non farlo (con una leggera regolazione per imbottitura / margini del corpo)

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

È necessario sostituire -0con +'px'alla fine. Funziona su cellulare?
Dmitri Zaitsev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.