Iframe em tela cheia com uma altura de 100%


238

Iframe height = 100% suportado em todos os navegadores?

Estou usando doctype como:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

No meu código iframe, se eu disser:

<iframe src="xyz.pdf" width="100%" height="100%" />

Quero dizer, ele realmente terá a altura da página restante (já que há outro quadro no topo com altura fixa de 50px) Isso é suportado nos principais navegadores (IE / Firefox / Safari)?

Também em relação às barras de rolagem, mesmo que eu diga scrolling="no", posso ver barras de rolagem desativadas no Firefox ... Como ocultar completamente as barras de rolagem e definir a altura do iframe automaticamente?


14
Veja na verdade eu não tenho todos os navegadores installed..Also diferente versions..also só queria garantir que ele é uma espécie de padrão ..
— testndtv

1
Você também pode experimentá-lo em um validador de css.
— Ruben

6
Sim, isso não gera nenhum erro / aviso ... Mas minha pergunta é: todos os navegadores realmente aplicam 100% de altura?
— Testndtv 3/05

Para mim, esta resposta funcionou bem: stackoverflow.com/questions/5272519/…
— Zied Hamdi

Respostas:


276

Você pode usar o conjunto de quadros como indica a resposta anterior, mas se insistir em usar os iFrames, os 2 exemplos a seguir deverão funcionar:

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.youraddress.com" frameborder="0" style="overflow:hidden;height:100%;width:100%" height="100%" width="100%"></iframe>
</body>

Uma alternativa:

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.youraddress.com" frameborder="0" style="overflow:hidden;overflow-x:hidden;overflow-y:hidden;height:100%;width:100%;position:absolute;top:0px;left:0px;right:0px;bottom:0px" height="100%" width="100%"></iframe>
</body>

Para ocultar a rolagem com 2 alternativas, como mostrado acima:

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.youraddress.com" frameborder="0" style="overflow:hidden;height:150%;width:150%" height="150%" width="150%"></iframe>
</body>

Corte com o segundo exemplo:

<body style="margin:0px;padding:0px;overflow:hidden">
    <iframe src="http://www.youraddress.com" frameborder="0" style="overflow:hidden;overflow-x:hidden;overflow-y:hidden;height:150%;width:150%;position:absolute;top:0px;left:0px;right:0px;bottom:0px" height="150%" width="150%"></iframe>
</body>

Para ocultar as barras de rolagem do iFrame, o pai é feito overflow: hiddenpara ocultar as barras de rolagem e o iFrame é feito com até 150% de largura e altura, o que força as barras de rolagem fora da página e como o corpo não possui barras de rolagem não se pode esperar que o iframe exceda os limites da página. Isso oculta as barras de rolagem do iFrame com largura total!


3
Parece bom ... Apenas uma pergunta ... Por que precisamos usar style = "height: 100%; width: 100%;" quando estamos de qualquer maneira dizendo iframe height = "100%" width = "100%"
— testndtv

1
Também a apenas IE não está tomando 100% altura (leva cerca de 200px ht) ... FF e Safri levar toda a altura restante ..
— testndtv

@Boris Zbarsky Sim, obrigado por me informar isso! Eu atualizei a postagem agora !! Sua primeira pergunta sobre as tags duplas é que os navegadores anteriores usam as tags "height" e "width", mas não funcionam bem com as tags de estilo! Sobre o bug do IE, eu preferiria que você seguisse o primeiro código desse caso.
— Ax

15
Para que o iframe use corretamente 100%, o pai precisa ser 100%. Nos doctypes mais recentes, o html e a tag body não são automaticamente 100%. Quando adicionei height: 100% para html e body, funcionou perfeitamente. Portanto, acho que a resposta correta para a pergunta é a resposta de Rudie, exceto que eu tive que manter meu doctype xhtml. Além disso, observe que as regras de estouro não são necessárias. As barras de rolagem funcionam como pretendido - automaticamente.
— Spiralis

3
Esta resposta SO também é muito curta e agradável.
— Uwe Keim

164

3 abordagens para criar uma tela cheia iframe:



  • Abordagem 2 - Posicionamento fixo

    Essa abordagem é bastante direta. Basta definir o posicionamento do fixedelemento e adicionar um height/ widthde 100%.

    Exemplo Aqui

    iframe {
        position: fixed;
        background: #000;
        border: none;
        top: 0; right: 0;
        bottom: 0; left: 0;
        width: 100%;
        height: 100%;
    }
    <iframe></iframe>


  • Abordagem 3

    Para este último método, basta definir o heightdos body/ html/ iframeelementos para 100%.

    Exemplo Aqui

    html, body {
        height: 100%;
        margin: 0;         /* Reset default margin on the body element */
    }
    iframe {
        display: block;       /* iframes are inline by default */
        background: #000;
        border: none;         /* Reset default border */
        width: 100%;
        height: 100%;
    }
    <iframe></iframe>


4
Acabei usando uma variação da opção 1 ... Usei width: 100% e height: 100vh porque a fonte que eu estava puxando era bastante larga e o iframe está contido em uma div. Excelente solução. Obrigado.
— NotJay

2
adicionar display: blockfez o truque para evitar ter uma barra de rolagem dupla
— KavenG

45

1. Altere seu DOCTYPE para algo menos rigoroso. Não use XHTML; é bobagem. Basta usar o doctype HTML 5 e você é bom:

<!doctype html>

2. Você pode precisar se certificar (depende do navegador) de que o pai do iframe tem altura. E seu pai. E seu pai. Etc:

html, body { height: 100%; }

9
A parte importante aqui para mim foi que o html e a tag body precisavam de altura: 100%. Obrigado.
— Spiralis

1
Definir apenas o corpo funciona no Chrome, mas não em outros navegadores.
— Dingle


36

Encontrei o mesmo problema, estava colocando um iframe em uma div. Tente o seguinte:

<iframe src="http://stackoverflow.com/" frameborder="0" scrolling="yes" seamless="seamless" style="display:block; width:100%; height:100vh;"></iframe>

A altura é definida como 100vh, que significa altura da janela de exibição. Além disso, a largura pode ser definida como 100vw, embora você provavelmente tenha problemas se o arquivo de origem for responsivo (seu quadro ficará muito amplo).


3
perfeita não é suportado em qualquer navegador, tanto quanto eu sei
— VisualBean

1
Depois de passar mais tempo do que eu gostaria de admitir, mexendo com esse problema, é exatamente isso que eu precisava. Exceto em vez de um site, eu usei outro arquivo HTML, que exigia um pequeno ajuste na altura da janela de exibição e agora é bom começar. Obrigado!
— Thomas Jacobs

29

Isso funcionou muito bem para mim (apenas se o conteúdo do iframe vier do mesmo domínio ):

<script type="text/javascript">
function calcHeight(iframeElement){
    var the_height=  iframeElement.contentWindow.document.body.scrollHeight;
    iframeElement.height=  the_height;
}
</script>
<iframe src="./page.html" onLoad="calcHeight(this);" frameborder="0" scrolling="no" id="the_iframe" width="100%" ></iframe>

21
Isso funcionará apenas se iframe srcestiver no mesmo domínio da página pai, caso contrário, você receberá um erro de permissão negada contentWindow.document.
— wolfyuk

Demorei um pouco para fazer isso funcionar dentro do Wordpress, acabei de adicionar um código curto no meu plugin. FUNCIONA COMO UM ENCANTO.
— 214 Andy Andy

Funciona. mas o problema é que não será recalculado a altura em cada postagem interna do iframe. Existe alguma solução alternativa?
— Behrouz.M

7

body {
    margin: 0;            /* Reset default margin */
}
iframe {
    display: block;       /* iframes are inline by default */
    background: #000;
    border: none;         /* Reset default border */
    height: 100vh;        /* Viewport-relative units */
    width: 100vw;
}
<iframe></iframe>


6

<iframe src="" style="top:0;left: 0;width:100%;height: 100%; position: absolute; border: none"></iframe>


4

O seguinte trabalho testado

<iframe style="width:100%; height:100%;position:absolute;top:0px;left:0px;right:0px;bottom:0px" src="index.html" frameborder="0" height="100%" width="100%"></iframe>

1
Já existem 14 outras respostas aqui. Você pode explicar como sua resposta é melhor ou pelo menos diferente das outras 14?
— Stephen Rauch

2

Adicional à resposta de Akshit Soota: é importante e definir explicitamente a altura de cada elemento pai, também da tabela e coluna, se houver:

<body style="margin: 0px; padding:0px; height: 100%; overflow:hidden; ">
<form id="form1" runat="server" style=" height: 100%">
<div style=" height: 100%">


    <table style="width: 100%; height: 100%" cellspacing="0"  cellpadding="0">
        <tr>
            <td valign="top" align="left" height="100%">
                <iframe style="overflow:hidden;height:100%;width:100%;margin: 0px; padding:0px;" 
                        width="100%" height="100%" frameborder="0" scrolling="no"
                        src="http://www.youraddress.com" ></iframe> 
            </td>

2

Você primeiro adiciona css

html,body{
height:100%;
}

Este será o html:

 <div style="position:relative;height:100%;max-width:500px;margin:auto">
    <iframe src="xyz.pdf" frameborder="0" width="100%" height="100%">
    <p>Your browser does not support iframes.</p>
    </iframe>
    </div>

1

Aqui está um código conciso. Ele se baseia em um método jquery para encontrar a altura atual da janela. Ao carregar o iFrame, define a altura do iframe como a mesma da janela atual. Em seguida, para lidar com o redimensionamento da página, a tag body possui um manipulador de eventos de redimensionamento que define a altura do iframe sempre que o documento é redimensionado.

<html>
<head>
    <title>my I frame is as tall as your page</title>
     <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
</head>
<body onresize="$('#iframe1').attr('height', $(window).height());" style="margin:0;" >
    <iframe id="iframe1" src="yourpage.html" style="width:100%;"  onload="this.height=$(window).height();"></iframe>
</body>
</html>

aqui está uma amostra de trabalho: http://jsbin.com/soqeq/1/


0

Outra maneira de criar uma tela cheia fluida iframe:


O vídeo incorporado preenche todo viewport área quando a página é carregada

Boa abordagem para páginas de destino com vídeo ou qualquer conteúdo incorporado. Você pode ter qualquer conteúdo adicional abaixo do vídeo incorporado, que é revelado ao rolar a página para baixo.

Exemplo:

Código CSS e HTML.

body {
    margin: 0;
    background-color: #E1E1E1;
}
header {
    width: 100%;
    height: 56vw;
    max-height: 100vh;
}
.embwrap {
    width: 100%;
    height: 100%;
    display: table;
}
.embwrap .embcell {
    width: auto;
    background-color: black;
    display: table-cell;
    vertical-align: top;
}
.embwrap .embcell .ifrwrap {
    height: 100%;
    width: 100%;
    display: inline-table;
    background-color: black;
}

.embwrap .embcell .ifrwrap iframe {
    height: 100%;
    width: 100%;
}
<header>
  <div class="embwrap">
    <div class="embcell">
      <div class="ifrwrap">
        <iframe webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen="true" allowtransparency="true" scrolling="no" frameborder="0" width="1920" height="1440" src="http://www.youtube.com/embed/5SIgYp3XTMk?autoplay=0&amp;modestbranding=1&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1&amp;controls=1&amp;showinfo=1&amp;fs=1"></iframe>
      </div>
    </div>
  </div>
</header>
<article>
  <div style="margin:30px; text-align: justify;">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis lorem orci, rhoncus ut tellus non, pharetra consequat risus. </p>
    <p>Mauris aliquet egestas odio, sit amet sagittis tellus scelerisque in. Fusce in mauris vel turpis ornare placerat non vel purus. Sed in lobortis </p>
  </div>
</article>


Observe que você pode precisar de algum javascript para Firefox. Há um problema comum com a altura do iframe no Firefox.
— DAH

0

http://embedresponsively.com/

Este é um ótimo recurso e funcionou muito bem, nas poucas vezes em que o usei. Cria o seguinte código ....

<style>
.embed-container { position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; max-width: 100%; } 
.embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
</style>
<div class='embed-container'>
<iframe src='http://player.vimeo.com/video/66140585' frameborder='0' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
</div>

0

Só isso funcionou para mim (mas para "mesmo domínio"):

function MakeIframeFullHeight(iframeElement){
    iframeElement.style.width   = "100%";
    var ifrD = iframeElement.contentDocument || iframeElement.contentWindow.document;
    var mHeight = parseInt( window.getComputedStyle( ifrD.documentElement).height );  // Math.max( ifrD.body.scrollHeight, .. offsetHeight, ....clientHeight,
    var margins = ifrD.body.style.margin + ifrD.body.style.padding + ifrD.documentElement.style.margin + ifrD.documentElement.style.padding;
    if(margins=="") { margins=0;  ifrD.body.style.margin="0px"; }
    (function(){
       var interval = setInterval(function(){
        if(ifrD.readyState  == 'complete' ){
            iframeElement.style.height  = (parseInt(window.getComputedStyle( ifrD.documentElement).height) + margins+1) +"px";
            setTimeout( function(){ clearInterval(interval); }, 1000 );
        } 
       },1000)
    })();
}

você pode usar:

MakeIframeFullHeight(document.getElementById("iframe_id"));

ou

<iframe .... onload="MakeIframeFullHeight(this);" ....

0

Conforme https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe , os valores percentuais não são mais permitidos. Mas o seguinte funcionou para mim

<iframe width="100%" height="this.height=window.innerHeight;" style="border:none" src=""></iframe>

Embora width:100%funcione, height:100%não funciona. Então window.innerHeighttem sido usado. Você também pode usar pixels css para altura.

Código de trabalho: Link Site de trabalho: Link


0
<iframe src="http://youraddress.com" style="width: 100%; height: 100vh;">

</iframe>

0

Você pode chamar uma função que irá calcular o peso do corpo do iframe quando o iframe for carregado:

<script type="text/javascript">
    function iframeloaded(){
       var lastHeight = 0, curHeight = 0, $frame = $('iframe:eq(0)');
       curHeight = $frame.contents().find('body').height();
       if ( curHeight != lastHeight ) {
           $frame.css('height', (lastHeight = curHeight) + 'px' );
       }
    }
</script>

<iframe onload="iframeloaded()" src=...>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.