Iframe을 컨테이너의 나머지 높이의 100 %에 맞추십시오.


260

배너와 iframe으로 웹 페이지를 디자인하고 싶습니다. iframe이 나머지 모든 페이지 높이를 채울 수 있고 브라우저 크기가 조정되면 자동으로 크기가 조정되기를 바랍니다. CSS로만 자바 스크립트 코드를 작성하지 않고 수행 할 수 있습니까?

나는 height:100%iframe에서 설정 을 시도했지만 결과는 매우 가깝지만 iframe 30px은 배너 div 요소 의 높이를 포함하여 전체 페이지 높이를 채우려 고했지만 불필요한 수직 스크롤 막대를 얻었습니다. 완벽하지 않습니다.

업데이트 노트 : 질문을 잘 설명하지 못해서 실례합니다. 웹 페이지의 전체 높이를 성공적으로 차지하기 위해 DIV의 CSS 여백, 패딩 속성을 시도했지만 트릭은 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>

모든 아이디어를 부탁드립니다.

답변:


236

2019 년 업데이트

TL; DR : 오늘날 가장 좋은 옵션은이 답변의 마지막 옵션 인 flexbox입니다. 모든 것이 그것을 잘 지원하고 수년간 가지고 있습니다. 그것을 위해 가서 뒤돌아 보지 마십시오. 이 답변의 나머지 부분은 역사적 이유로 남아 있습니다.


비결은 100 %가 무엇을 취했는지 이해하는 것입니다. CSS 사양을 읽으면 도움이 될 수 있습니다.

간단히 말해서 "블록 포함"과 같은 것이 부모 요소에는 필요하지 않습니다. 간단히 말해서, position : relative 또는 position : absolute가있는 계층 구조의 첫 번째 요소입니다. 또는 다른 것이 없다면 body 요소 자체. 따라서 "너비 : 100 %"라고 말하면 "포함 블록"의 너비를 확인하고 요소의 너비를 같은 크기로 설정합니다. 거기에 다른 것이 있으면 그 자체보다 더 큰 "포함 블록"의 내용을 얻을 수 있습니다 (따라서 "오버플로").

높이도 같은 방식으로 작동합니다. 한 가지 예외가 있습니다. 브라우저 창의 높이를 100 %까지 높일 수 없습니다. 100 %를 계산할 수있는 최상위 요소는 body (또는 html? 확실하지 않은) 요소이며 내용을 포함 할만큼 확장됩니다. 높이 : 100 %를 지정하면 100 %를 측정 할 "부모 요소"가 없으므로 효과가 없습니다. 창 자체는 계산되지 않습니다. ;)

창을 정확히 100 % 늘리려면 두 가지 중에서 선택할 수 있습니다.

  1. 자바 스크립트 사용
  2. DOCTYPE을 사용하지 마십시오. 이 방법은 좋지 않지만 브라우저를 "쿼크 모드"로 설정하면 요소에 대해 height = "100 %"를 수행 할 수 있으며이를 창 크기로 확장합니다. DOCTYPE 변경에 맞게 페이지의 나머지 부분도 변경해야합니다.

업데이트 : 이 게시물을 올릴 때 이미 틀리지 않았는지 확실하지 않지만 지금은 구식입니다. 오늘 스타일 시트에서이 작업을 수행 할 수 있습니다. html, body { height: 100% }실제로는 전체 뷰포트로 확장됩니다. DOCTYPE에서도 마찬가지입니다. min-height: 100%상황에 따라 유용 할 수도 있습니다.

그리고 나는 더 이상 멍청이 모드 문서를 만들 것을 권하지 않습니다 . 왜냐하면 문제를 해결하는 것보다 두통이 더 많기 때문입니다. 모든 브라우저마다 서로 다른 쿼크 모드가 있으므로 브라우저에서 페이지를 일관되게 표시하는 것이 2 배 더 어려워집니다. DOCTYPE을 사용하십시오. 항상. 바람직하게는 HTML5 one- <!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어떤 이유로 iframe을 작업을하지 않습니다. "대체 된"요소가되는 것과 관련이 있습니다. 그러나 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 -flexbox. 가장 깨끗하지만 브라우저 지원이 적습니다. IE10은 -ms-flexbox 속성에 대한 접두사 가 필요 하며 그보다 적은 것은 전혀 지원하지 않습니다.

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입니다. 전체 화면보기 또는 스 니펫 편집기에는 표시되지 않지만 작은 미리보기 창에는 추가 스크롤 막대가 표시됩니다. 그게 뭔지 모르겠지만, iframe은 이상합니다.


@sproketboy 글쎄, 그것은 W3C 권장 사항입니다. 그리고 그것은 최악이 아닙니다.
John

우리는 이것을 IFrame 페이지의 스타일 시트 나 IFrame을 포함하는 부모 페이지의 스타일 시트에 넣습니까?
Mathias Lykkegaard Lorenzen

1
대단해, 고마워! Flexbox는 실제로 가장 깨끗하지만 테이블도 배우고 넘치지 않고 작동하는 것처럼 보입니다. jsfiddle.net/dmitri14/1uqh3zgx/2
Dmitri Zaitsev

1
최신 업데이트를이 답변의 맨 위로 이동하는 것이 좋습니다. 최상의 답변을 얻으려면 모든 것을 거쳐야했습니다. flexbox.
forgivenson

2
@ forgivenson-충분합니다. 이 답변의 시작 부분에 메모를 추가했습니다.
Vilx-

68

이 문제를 해결하기 위해 JavaScript를 사용합니다. 여기 소스가 있습니다.


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 ID입니다

pageY() John Resig (jQuery의 저자)에 의해 작성되었습니다.


49

이를 수행하는 다른 방법은 position: fixed;on 상위 노드 를 사용하는 것 입니다.
내가 실수하지 않으면 position: fixed;요소를 뷰포트에 연결 하므로이 노드 width: 100%;height: 100%;속성 을 제공하면 전체 화면에 걸쳐 표시됩니다. 이 시점부터 <iframe>간단한 width: 100%; height: 100%;CSS 명령으로 태그를 태그 안에 넣고 남은 공간 (폭과 높이 모두)에 걸쳐 배치 할 수 있습니다 .

예제 코드


    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
이것이 어떻게 "남은"높이를 취합니까?
EricG

3
position: fixediframe 에 추가해야한다는 것을 알았습니다 .
0xF

감사합니다. SSRS 보고서 높이를 고정하고 다른 날 자살을 피했습니다.
Mike D

1
스크롤바가 보이지 않습니다
andrej

완벽
-css

40

다음은 몇 가지 현대적인 접근 방식입니다.


  • 접근법 1- 뷰포트 상대 단위의 조합 / calc().

    표현식 calc(100vh - 30px)은 나머지 높이를 나타냅니다. 100vh브라우저의 높이는 어디에 calc()있고 다른 요소의 높이를 효과적으로 사용하면됩니다 .

    여기 예

    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>

    calc()여기에 대한 지원 ; 여기 에서 뷰포트 상대 단위를 지원합니다 .


  • 접근법 2-Flexbox 접근 방식

    여기 예

    설정 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 , I는 상기 접근 방식으로가는 게 좋을 것.

1 Chrome / FF에서는 작동하는 것 같지만 IE에서는 작동하지 않습니다 (첫 번째 방법은 모든 현재 브라우저에서 작동 함).


3
여기서 언급 한 두 가지 옵션은 업무와 IMO 모두에 가장 적합한 방법입니다. flexbox옵션을 선호하는 이유는 calc에서 빼기위한 공간을 알아야 하기 때문입니다 vh. 함께 flexbox간단한 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는 필요하지 않습니다! 그러나 웹 안전합니까?
알리 Shakiba

1
이 솔루션의 단점은 html, body {overflow : hidden;}이 페이지 스크롤을 제거한다는 것입니다.
Ali Shakiba

위 코드에서 바닥 글을 추가하려고하는데 바닥 글이 표시되지 않습니다. 도와주세요.
Akshay Raut

18

어쩌면 이것은 이미 답변되었을 것입니다 (위의 몇 가지 답변은 "올바른"방법입니다).하지만 솔루션을 추가 할 것이라고 생각했습니다.

우리의 iFrame은 div 내에로드되므로 window.height와 다른 것이 필요했습니다. 그리고 우리 프로젝트가 이미 jQuery에 크게 의존한다는 것을 알면 이것이 가장 우아한 솔루션이라는 것을 알았습니다.

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

물론 "#middle"은 div의 ID입니다. 당신이해야 할 유일한 일은 사용자가 창 크기를 조정할 때 마다이 크기 변경을 기억하는 것입니다.

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

이것을 헤드 섹션에 추가했습니다.

내 iframe은 3 행 1 열의 테이블 가운데 셀 안에 있습니다.


귀하의 코드는 IFRAME을 포함하는 TD 중 하나의 높이가 100 %입니다. 모든 div의 높이가 100 %가되도록 스타일이 있기 때문에 테이블이 DIV 요소에 포함되어 있으면 작동합니다.
Nikola Petkanski

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 % 인 iframe을 보여줍니다. 바디.

이 시도:

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

물론 두 번째 div의 높이를 원하는 높이로 변경하십시오.


8
30px + 90 %! = 100 %
stepancheg

1
90 % 대신 calc (100 %-30px)를 사용할 수 있음
Justin E

4

다음을 시도하십시오 :

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

그것은 나를 위해 일했다


4
부모를 채우지 않고 iframe에 큰 높이를 놓습니다.
Ben

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

비슷한 문제를 해결하기 위해 display : table을 사용했습니다. 그것은 거의 작은 세로 스크롤 막대를 떠나,이 작동합니다. 유연한 열을 iframe 이외의 다른 것으로 채우려 고하면 제대로 작동하지 않습니다 (

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

display : table을 사용하도록 외부 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 %로 조정해야합니다! 따라서 스크롤바.

내가 생각하는 것은 iframe이 프레임 및 테이블 셀처럼 남은 것을 소비하기를 원한다는 것입니다 ( 즉, height = "*"). IIRC는 존재하지 않습니다.

불행히도 내가 아는 한, 절대 ​​및 상대 단위를 효과적으로 혼합 / 계산 / 빼는 방법이 없으므로 두 가지 옵션으로 줄었다 고 생각합니다.

  1. div를 절대적으로 배치하면 컨테이너에서 꺼내어 iframe만으로 컨테이너 높이를 소비합니다. 그래도 다른 모든 문제가 발생하지만 불투명하거나 정렬하는 것이 좋습니다.

  2. 또는 div의 높이를 지정하고 iframe의 높이를 그만큼 줄이십시오. 절대 높이가 정말로 중요하다면 대신 div의 자식 요소에 적용해야합니다.


1

CSS 경로를 잠시 시도한 결과, 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, Chrome, Firefox 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 iframe 태그의 ID입니다


0

로드 / 크기 조정 이벤트에서 바디 크기를 측정하고 높이를 (전체 높이-배너 높이)로 설정하면됩니다.

현재 IE8 Beta2에서는 해당 이벤트가 현재 IE8 Beta2에서 중단되므로이 크기 조정을 수행 할 수 없습니다.


0

또는 구식으로 가서 프레임 셋을 사용할 수 있습니다 .

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

2
@vdbuilder : 아니요 . 유효한 HTML5 이전 버전입니다. 여전히 작동합니다. ;-)
TJ Crowder

0

JS가 더 나은 옵션이라고 생각하지만 다소 CSS 전용 작업 솔루션이 있습니다. 단점은 iframe html 문서에 컨텐츠를 자주 추가해야하는 경우 1 % 통과 시간을 조정해야한다는 것입니다.

해결책:

시도 지정하지 BOTH 당신의 HTML 문서에 임의의 높이를,

html, body, section, main-div {}

그런 다음 코드 만 작성하십시오.

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

참고 : div는 기본 섹션이어야합니다.

이것은 상대적으로 효과가 있습니다. iframe은 보이는 창 높이의 300 %를 정확하게 계산합니다. iframe에있는 두 번째 문서의 html 컨텐츠가 브라우저 높이의 3 배보다 작은 경우 작동합니다. 해당 문서에 컨텐츠를 자주 추가 할 필요가없는 경우 이는 영구적 인 해결책이며 컨텐츠 높이에 따라 필요한 %를 찾을 수 있습니다.

이것은 두 번째 html 문서 (하나의 포함)가 부모 html 문서에서 높이를 상속하지 못하기 때문에 작동합니다. 둘 다 높이를 지정하지 않았으므로 방지합니다. 자식에게 %를 주면 부모를 찾고 그렇지 않은 경우 내용 높이를 취합니다. 그리고 내가 시도한 것에서 다른 용기에 높이가 주어지지 않은 경우에만.



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 %가 아니기 때문에 iframe 높이를 %로 설정할 수 없으므로 부모 높이를 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이있는 경우, 올바른 i를 선택하도록 id 또는 다른 영리한 방법을 사용하여 .find ( "iframe")를 향상시켜야합니다.


0

CSS 위치를 사용 하여이 시나리오를 달성하는 가장 좋은 방법이라고 생각합니다. 부모 div를 기준으로 위치를 설정하고 iframe을 기준으로 position : absolute를 설정하십시오.

.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 calc ()는 매우 고급이며 대부분 모든 브라우저와 호환됩니다.

calc () 확인


0

이렇게하지 않는 이유 (바디 패딩 / 여백을 약간 조정)

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

당신은 교체해야 -0+'px'말. 모바일에서도 작동합니까?
Dmitri Zaitsev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.