iframe의 컨텐츠를 어떻게 크기 조절할 수 있습니까?


237

내 웹 사이트의 페이지에서 iframe의 컨텐츠 (예 : HTML 페이지이고 팝업이 아님)의 컨텐츠를 어떻게 스케일링 할 수 있습니까?

예를 들어, iframe에 나타나는 내용을 원래 크기의 80 %로 표시하고 싶습니다.


14
질문 스크래핑 – 모범 사례? 나는 그렇게 생각하지 않습니다.
— Konrad Rudolph

9
일반적인 사용 사례 : 온라인 wysiwyg 편집기에서 페이지 / 사이트 미리보기
— frenchone

답변:


224

CSS를 다음과 같이 변경하면 Kip의 솔루션 이 Opera 및 Safari에서 작동합니다.

<style>
    #wrap { width: 600px; height: 390px; padding: 0; overflow: hidden; }
    #frame { width: 800px; height: 520px; border: 1px solid black; }
    #frame {
        -ms-zoom: 0.75;
        -moz-transform: scale(0.75);
        -moz-transform-origin: 0 0;
        -o-transform: scale(0.75);
        -o-transform-origin: 0 0;
        -webkit-transform: scale(0.75);
        -webkit-transform-origin: 0 0;
    }
</style>

스크롤바를 방지하기 위해 overflow : #frame에 hidden을 지정할 수도 있습니다.


@JonathanM-cf meta.stackexchange.com/questions/75043/… , 내가 여기서 뭔가 잘못 했습니까?
— lxs

@lxs, 전혀. 나는 그것을 좋아하고 +1을 주었다. 잘 했어.
— Jonathan M

7
크롬에서는 확대 / 축소와 웹킷 변환이 모두 적용되어 배율이 두 번 적용됩니다.
— dennisjtaylor

1
@dennisjtaylor 말한대로, 크롬은 두 배의 배율을 적용 할 것 - 여기에서 볼 수 있듯이 jsfiddle.net/zjTBq/embedded/result
— 말

3
모든 최신 브라우저는 꽤 오랫동안 변환을 지원해 왔으므로 접두사를 사용하지 않는 버전을 사용하는 것이 좋습니다 (적어도 대안으로).
— wortwart

55

IE와 Firefox (적어도 현재 버전에서는)에서 작동하는 솔루션을 찾았습니다. Safari / Chrome에서 iframe은 원래 크기의 75 %로 크기가 조정되지만 iframe 내의 내용은 전혀 크기가 조절되지 않습니다. Opera에서는 작동하지 않는 것 같습니다. 약간 난해한 느낌이 들기 때문에 더 좋은 방법이 있다면 제안을 환영합니다.

<style>
#wrap { width: 600px; height: 390px; padding: 0; overflow: hidden; }
#frame { width: 800px; height: 520px; border: 1px solid black; }
#frame { zoom: 0.75; -moz-transform: scale(0.75); -moz-transform-origin: 0 0; }
</style>

...

<p>Some text before the frame</p>
<div id="wrap">
<iframe id="frame" src="test2.html"></iframe>
</div>
<p>Some text after the frame</p>
</body>

참고 : wrapFirefox 요소 를 사용해야했습니다 . 어떤 이유로 Firefox에서 객체를 75 % 축소하면 레이아웃 때문에 이미지의 원래 크기를 사용합니다. (위의 샘플 코드에서 div를 제거하면 무슨 의미인지 알 수 있습니다.)

나는 이 질문 에서 이것의 일부를 발견 했다 .


31

IE8, 9 및 10에서 작동하도록 몇 시간 동안 어려움을 겪은 후 여기에 도움이 된 것이 있습니다.

이 제거 된 CSS는 FF 26, Chrome 32, Opera 18 및 IE9 -11에서 2014 년 1 월 7 일부터 작동합니다.

.wrap
{
    width: 320px;
    height: 192px;
    padding: 0;
    overflow: hidden;
}

.frame
{
    width: 1280px;
    height: 786px;
    border: 0;

    -ms-transform: scale(0.25);
    -moz-transform: scale(0.25);
    -o-transform: scale(0.25);
    -webkit-transform: scale(0.25);
    transform: scale(0.25);

    -ms-transform-origin: 0 0;
    -moz-transform-origin: 0 0;
    -o-transform-origin: 0 0;
    -webkit-transform-origin: 0 0;
    transform-origin: 0 0;
}

IE8의 경우 너비 / 높이를 iframe과 일치하도록 설정하고 .wrap 컨테이너 div에 -ms-zoom을 추가하십시오.

.wrap
{
    width: 1280px; /* same size as frame */
    height: 768px;
    -ms-zoom: 0.25; /* for IE 8 ONLY */
}

브라우저 스니핑에 선호하는 방법을 사용하여 적절한 CSS를 조건부로 포함하십시오 . * .css 파일에서 브라우저 특정 조건부 CSS를 수행하는 방법이 있습니까? 몇 가지 아이디어.

IE7까지 -ms-zoom이 없었기 때문에 IE7은 손실 된 원인이었습니다.

테스트 한 실제 HTML은 다음과 같습니다.

<div class="wrap">
   <iframe class="frame" src="http://time.is"></iframe>
</div>
<div class="wrap">
    <iframe class="frame" src="http://apple.com"></iframe>
</div>

http://jsfiddle.net/esassaman/PnWFY/


17

방금 테스트했으며 다른 솔루션은 작동하지 않았습니다. 나는 이것을 간단하게 시도했고 예상대로 Firefox와 Chrome에서 완벽하게 작동했습니다.

<div class='wrap'>
    <iframe ...></iframe>
</div>

그리고 CSS :

.wrap {
    width: 640px;
    height: 480px;
    overflow: hidden;
}

iframe {
    width: 76.92% !important;
    height: 76.92% !important;
    -webkit-transform: scale(1.3);
    transform: scale(1.3);
    -webkit-transform-origin: 0 0;
    transform-origin: 0 0;
}

모든 내용을 30 % 확장합니다. 물론 너비 / 높이 백분율을 적절히 조정해야합니다 (1 / scale_factor).


2
또한 요소 에 추가 overflow: hidden;하려고합니다 .wrap. iframe { width: 200%; height: 200%; transform: scale(0.5); }iframe 을 사용하면 오버플로가 시작됩니다.
— ozgrozer

이것이 최첨단 접근법입니다. 감사!
— fuggi

10

lxs의 답변에 대한 후속 조치 : zoom및 --webkit-transform태그 를 동시에 갖는 것이 이중 확대 효과를 수행하여 Chrome (버전 15.0.874.15)을 혼란스럽게 하는 문제를 발견했습니다 . 내가 대체하여 문제를 해결할 수 있었다 zoom으로는 -ms-zoom단지 사용하기 위해 크롬을 떠나 (단지 IE 대상)을 --webkit-transform태그를 사물을 정리하는.


9

추가 태그로 iframe을 감싸지 않아도됩니다. iframe을 축소 할 때와 같은 양만큼 iframe의 너비와 높이를 늘리십시오.

예를 들어 iframe 컨텐츠를 80 %로 스케일링 :

#frame { /* Example size! */
    height: 400px; /* original height */
    width: 100%; /* original width */
}
#frame {
    height: 500px; /* new height (400 * (1/0.8) ) */
    width: 125%; /* new width (100 * (1/0.8) )*/

    transform: scale(0.8); 
    transform-origin: 0 0;
}

기본적으로 동일한 크기의 iframe을 얻으려면 크기를 조정해야합니다.


7

html {zoom : 0.4;}?-)


3
80 %는 0.8이지만 독점 Microsoftism이므로 적합하지 않을 수 있습니다. 프레임에로드 된 문서를 편집 할 수있는 경우에만 작동합니다.
— Quentin

7

위에 주어진 것을 사용하여 내가 생각 해낸 것을 공유하겠다고 생각했습니다. Chrome을 확인하지 않았지만 IE, Firefox 및 Safari에서 작동하는 한 작동합니다.

이 예제의 특정 오프셋 및 확대 / 축소 비율은 Facebook 탭 (810px 너비)에 대해 iframe에서 두 개의 웹 사이트를 축소하고 가운데 맞추는 데 효과적입니다.

사용 된 두 사이트는 워드 프레스 사이트와 네트워크입니다. 나는 html을 잘하지 못하기 때문에 아마도 더 나았을 수도 있지만 결과는 좋아 보입니다.

<style>
    #wrap { width: 1620px; height: 3500px; padding: 0; position:relative; left:-100px; top:0px; overflow: hidden; }
    #frame { width: 1620px; height: 3500px; position:relative; left:-65px; top:0px; }
    #frame { -ms-zoom: 0.7; -moz-transform: scale(0.7); -moz-transform-origin: 0px 0; -o-transform: scale(0.7); -o-transform-origin: 0 0; -webkit-transform: scale(0.7); -webkit-transform-origin: 0 0; }
</style>
<div id="wrap">
    <iframe id="frame" src="http://www.example.com"></iframe>
</div>

5

창의 크기를 조정할 때 iframe과 그 내용의 크기를 조정하려면 다음을 창의 크기 조정 이벤트와 iframe onload 이벤트로 설정할 수 있습니다.

function()
{
    var _wrapWidth=$('#wrap').width();
    var _frameWidth=$($('#frame')[0].contentDocument).width();

    if(!this.contentLoaded)
      this.initialWidth=_frameWidth;
    this.contentLoaded=true;
    var frame=$('#frame')[0];

    var percent=_wrapWidth/this.initialWidth;

    frame.style.width=100.0/percent+"%";
    frame.style.height=100.0/percent+"%";

    frame.style.zoom=percent;
    frame.style.webkitTransform='scale('+percent+')';
    frame.style.webkitTransformOrigin='top left';
    frame.style.MozTransform='scale('+percent+')';
    frame.style.MozTransformOrigin='top left';
    frame.style.oTransform='scale('+percent+')';
    frame.style.oTransformOrigin='top left';
  };

이렇게하면 iframe과 내용이 랩 div의 100 % 너비 (또는 원하는 백분율)로 조정됩니다. 또한 보너스로 프레임의 CSS를 하드 코딩 된 값으로 설정할 필요가 없습니다. 모두 동적으로 설정되므로 랩 div를 표시하는 방법에 대해 걱정하면됩니다.

나는 이것을 테스트했으며 크롬, IE11 및 파이어 폭스에서 작동합니다.


4

javascript로 원하는 높이와 너비를 계산하고 (document.body.clientWidth 등을 통해) 다음과 같이 HTML에 iframe을 삽입 하여이 작업을 수행 할 수 있다고 생각합니다.

var element = document.getElementById ( "myid");
element.innerHTML + = "<iframe src = 'http : //www.google.com'height = '200'width = '"+ document.body.clientWidth * 0.8 + "'/>";

IE6에서 이것을 테스트하지는 않았지만 좋은 것들과 함께 작동하는 것 같습니다 :)


내 무지를 실례하지만 소스 페이지 자체를 축소하는 대신 iframe을 소스 페이지의 80 %로 만들지 않습니까?
— 힐 힐리

3

IE 에서이 작업을 수행하는 데 문제가있는 사람들은 -ms-zoom아래 제안대로 사용 #wrap하고 iframeid가 아닌 div 에서 확대 / 축소 기능을 사용하는 것이 좋습니다 . 내 경험상, zoom의 iframe div 크기를 조정 하는 함수를 사용 #frame하면 iframe 크기가 조정되고 그 안에 내용이 없습니다 (이것이 원하는 것입니다).

이것처럼 보입니다. IE8, Chrome 및 FF에서 작동합니다.

#wrap {
  overflow: hidden;
  position: relative;
  width:800px;
  height:850px;
  -ms-zoom: 0.75;
}

사용 zoomIE8에서 표준 모드, 사용 -ms-zoom쿼크 모드이다.
— Jonathon Hill

3

이것은 890px 너비의 페이지에서 내 솔루션이었습니다.

#frame { 
overflow: hidden;
position: relative;
width:1044px;
height:1600px;
-ms-zoom: 0.85;
-moz-transform: scale(0.85);
-moz-transform-origin: 0px 0;
-o-transform: scale(0.85);
-o-transform-origin: 0 0;
-webkit-transform: scale(0.85);
-webkit-transform-origin: 0 0; 

}


2

아마도 최선의 해결책은 아니지만 제대로 작동하는 것 같습니다.

<IFRAME ID=myframe SRC=.... ></IFRAME>

<SCRIPT>
    window.onload = function(){document.getElementById('myframe').contentWindow.document.body.style = 'zoom:50%;';};
</SCRIPT>

분명히 부모를 고치려고하지 않고, 약간의 자바 스크립트를 사용하여 자식의 본문에 "zoom : 50 %"스타일을 추가하면됩니다.

"HTML"요소의 스타일을 설정할 수는 있지만 시도하지는 않았습니다.


1
이러지 마 에서 developer.mozilla.org/en-US/docs/Web/CSS/zoom :. "이 기능은 비표준이며, 기준 궤도에없는 웹 직면 생산 현장에서 사용하지 마십시오 :이 작업하지 않습니다 구현 간에는 큰 비 호환성이있을 수 있으며 앞으로 동작이 변경 될 수 있습니다. "
— hackel

+1 이것은 (iframe 자체가 아닌 iframe의 내용을 수정하는) 더 좋은 아이디어처럼 보입니다. 페이지를 축소하고 해당 페이지의 미리보기로 표시하는 방법이 필요했으며이 방법으로 문제를 해결했습니다.
— akinuri

@akinuri 예, 정확히 내가 사용한 것입니다. 나는 여러 가지 해결책을 겪었지만 이것이 가장 쉬운 것처럼 보였다. 방금 iframe을 반복하고 축소판 페이지를 얻기 위해 모두 축소했습니다. 하위 페이지를 변경할 필요가 없습니다.
— Graham

1

HTML의 스타일이 CSS 인 경우 크기에 따라 다른 스타일 시트를 연결할 수 있습니다.


0

HTML에는 그런 기능이 없다고 생각합니다. 내가 트릭을 할 것이라고 상상할 수있는 유일한 것은 서버 측 처리를하는 것입니다. 게재하려는 웹 페이지의 이미지 스냅 샷을 가져 와서 서버에서 확장하여 클라이언트에 게재 할 수 있습니다. 그러나 이것은 비대화 형 페이지입니다. (이미지 맵에 링크가있을 수 있지만 여전히있을 수 있습니다.)

또 다른 아이디어는 HTML을 변경하는 서버 측 구성 요소를 갖는 것입니다. 파이어 폭스 2.0 줌 기능과 같은 소리. 물론 이것은 완벽한 확대 / 축소는 아니지만 아무것도 아닌 것보다 낫습니다.

그 외에는 아이디어가 없습니다.


0

말했듯이, 당신이 할 수있는 의심합니다.
style을 설정하여 최소한 텍스트 자체의 크기를 조절할 수 있습니다 font-size: 80%;.
테스트를 거치지 않았지만 제대로 작동하지 않으며 상자 나 이미지의 크기를 조정하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.