HTML5에서 iframe – frameborder 속성 사용하지 않기

안녕하세요.

하이브랩 웹표준개발1팀 방지은입니다.

HTML5 DTD에서 iframe을 사용할 때 문제점과 해결방법에 대해 공유합니다.

iframe을 사용할때 기본으로 선언했던 속성들이 있습니다.

<iframe src=” width=” height=”” frameborder=”0″ marginwidth=”0″ marginheight=”0″ scrolling=””>

HTML4.01 DTD에서 사용가능한 속성들중 HTML5 DTD에서는 사용할 수 없는 속성들이 있습니다.

frameborder, longdesc, marginwidth, marginheight, scrolling 입니다.

대부분 CSS로 해결이 가능합니다.

marginhegiht, marginwidth은 iframe에 불러오는 html body에 margin:0으로 해결

scrolling은 iframe에 불러오는 html body가 iframe의 크기를 넘지 않거나 body에 overflow:hidden으로 해결

하지만 frameborder=”0″의 경우 css border:0 으로 대체하면 IE에서는 border가 나타납니다.

그래서 Markup Validation에 검출이 되어도 frameborder=”0″을 선언할 수 밖에 없습니다.

참고: [개발일지] HTML5와 CSS 적용기 – 널리

참고: www.w3schools.com

1. frameborder, css border 사용안함 iframe의 크기는 160×160이다.

<iframe src=”pang_12_iframe.html” width=”160″ height=”160″></iframe>

 

  pang_12_1.jpg
| frameborder, css border 사용안했을때 브라우저별 렌더링 비교
  • 브라우저 별로 렌더링되는 border의 색상은 다르지만,border가 iframe의 크기 160×160에 포함되지 않고 border 사이즈(2px) 만큼 커진다.

    전체크기 164×164, iframe 불러오는 영역 160×160

  • IE8, IE7에서는 border 사이즈(좌상2px,우하1px)까지 160×160에 포함 시켜 렌더링하는데160×160도 아닌 159×159로 렌더링하고 있다.

    전체크기 159×159, iframe 불러오는 영역 156×156

2. frameborder 사용안함, css border:none

<iframe src=”pang_12_iframe.html” width=”160″ height=”160″ style=”border:none”></iframe>

 

  pang_12_2.jpg
| frameborder 사용안함, css border:none 했을때 브라우저별
렌더링 비교
  • IE8, IE7을 제외한 나머지 브라우저에서는 border없이 렌더링된다.
  • IE8, IE7에서는 border:none이 적용이 안되고 border가 렌더링된다.

3. frameborder 사용안함, css border:1px solid #333

<iframe src=”pang_12_iframe.html” width=”160″ height=”160″ style=”border:1px solid #333″></iframe>

 

  pang_12_3.jpg
| frameborder 사용안함, css border:1px solid #333 했을때
브라우저별 렌더링 비교
  • IE8, IE7을 제외한 나머지 브라우저에서는 border:1px solid #333가 적용되어 렌더링된다.
  • IE8, IE7에서는 border:1px solid #333이 적용이 되고 frameborder도 렌더링된다.첫번째 ‘1. frameborder, css border 사용안함’ 테스트에서 전체 크기가 159×159였는데

    이 테스트에서 border를 주고 렌더링을 해보니 우,하에 흰색 1px border가 있었다.

    그렇다면 기본 border가 상하좌우 2px씩이고 전체 크기가 159×159가 아니라 160×160이다.

4. frameborder 사용, css border 사용안함

<iframe src=”pang_12_iframe.html” width=”160″ height=”160″ frameborder=”0″></iframe>

 

frame_bg.jpg

frameborder=”0″을 사용했을 때는 모든 브라우저에서 border가 보이지 않는다.

5. 테스트

<div style=”position:relative”>

<iframe src=”pang_12_iframe.html” width=”160″ height=”160″ style=”position:absolute;top:0;left:0″>

</iframe>

<div style=”position:absolute;top:0;left:0;width:160px;height:160px;border:2px solid #fff”></div>

</div>

 

테스트 방법

iframe위에 흰색 라인이 있는 div를 position:absolute로 띄워서 iframe의 border를 가림

문제점

수정할 때 iframe의 크기가 변경되면 div의 크기도 변경해줘야 함

필요없는 div가 2번이나 사용됨

배경이 무늬가 있을경우 흰색 border가 노출됨

IE8, IE7에서 사이즈의 차이로 회색 border가 보임

  pang_12_4.jpg

| IE7,IE8 렌더링 이미지

IE8, IE7의 렌더링 사이즈에 맞게 핵을 사용

핵 사용으로 웹표준을 지키지 못함

6. 테스트2

<iframe src=”pang_12_iframe.html” width=”160″ height=”160″ style=”border:0 solid transparent”>
</iframe>

 

테스트 방법

iframe의 border-color값을 transparent를 줬음.

문제점

IE8 이하 버전에서는 border가 노출됨

pang_12_5.jpg
| IE7,IE8 렌더링 이미지

7. 테스트3

<div style=”overflow:hidden;width:156px;height:156px”>

<iframe src=”pang_12_iframe.html” width=”160″ height=”160″ style=”margin:-2px 0 0 -2px”>

</iframe>

<div>

 

테스트 방법

iframe를 div로 감싸고 div에 width, height값을 주고 overflow:hidden을 선언.

iframe에 margin:-2px 0 0 -2px 선언하여 border를 가려준다.

문제점

IE7,IE8에서 렌더링 되면 iframe의 내용이 156×156이기 때문에 감싸는 div를 156×156 px로 선언함.

다른 브라우저에서는 160×160으로 렌더링 되기때문에 내용이 4px정도 잘려서 노출.

pang_12_6.jpg

정리

저는 여러방법으로 테스트를 해봤고 ‘7. 테스트3’이 가장 좋은 방법이라고 생각하는데요.

iframe에 frameborder를 사용하지 않고 border가 노출되지 않는 방법에 대해 다른 의견있으시면 알려주세요.

의견

– IE7,IE8에서만 frameboder를 넣도록 개발에 요청하는 방법.

Comments are closed.

Post Navigation