W3C16 프레임(frame)Trio 홈페이지
목차
  1. 프레임의 소개
  2. 프레입의 배열(layout)
    1. FRAMESET 엘레멘트
    2. FRAME 엘레멘트
  3. 목표(target) 프레임 지정
    1. 연결의 디폴트 목표 설정
    2. 목표의 의미
  4. 대체(alternate) 내용
    1. NOFRAMES 엘레멘트
    2. 프레임의 긴설명
  5. 인라인 프레임: IFRAME 엘레멘트

16.1 프레임(frame)의 소개

HTML 프레임은 제작자가 복수로 보이게 문서를 표현 할 수 있게 하는데, 이는 독립 된 windows 또는 부분 창(subwindows)이 될 수 있다. 복수 창은 설계자에게 어떤 정보가 보이도록 유지하면서, 다른 창을 굴리거나(scroll) 대체 할 수 있게 한다.

예를 들어, 같은 window 안에서, 한 프레임은 고정 된(static) 광고 베너(banner)를 보이고, 두번 째는 항해(navigation) 메뉴를 보이고, 세번 째에서는 본 문서를 굴리거나 두번째 프레임의 항해에 따라 내용을 바꾸어 갈 수 있다. 간단한 프레임 문서의 예를 들어보면:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>간단한 프레임 문서</TITLE>
</HEAD>
<FRAMESET cols="20%, 80%">
 <FRAMESET rows="100, 200">
   <FRAME src="contents_of_frame1.html">
   <FRAME src="contents_of_frame2.gif">
 </FRAMESET>
 <FRAME src="contents_of_frame3.html">
 <NOFRAMES>
   <P>이 프레임세트(frameset)는 다음 문서들을 포함한다.
   <UL>
     <LI><A href="contents_of_frame1.html">멋있는 목차</A>
     <LI><IMG src="contents_of_frame2.gif" alt="멋있는 이미지">
     <LI><A href="contents_of_frame3.html">다른 내용의 멋있는 표현</A>
   </UL>
 </NOFRAMES>
</FRAMESET>
</HTML>

이는 다음과 같은 프레임을 형성 할 것이다.

---------------------------------------
|         |                             |
|         |                             |
| Frame 1 |                             |
|         |                             |
|         |                             |
|---------|                             |
|         |          Frame 3            |
|         |                             |
|         |                             |
|         |                             |
| Frame 2 |                             |
|         |                             |
|         |                             |
|         |                             |
|         |                             |
---------------------------------------

만일 사용도구가 프레임(frame)을 표시 할 수 없거나 표시하지 않도록 구성되어 있으면, NOFRAMES 엘레멘트의 내용을 표현 할 것이다.

16.2프레임의 배열(layout)

한 HTML 문서가 프레임세트(frameset) 문서라 불리우는 프레임 배열을 정의하면, 프레임이 없는 HTML 문서와는 작성(makeup) 방식이 다르다. 표준 문서는 하나의 HEAD 항목과 하나의 BODY를 갖는다. 프레임세트(frameset) 문서는 하나의 HEADBODY 자리에 그 대신 하나의 FRAMESET를 갖는다.

문서의 FRAMESET 항목은 사용도구의 주 된 window에 창들의 배치를 지정한다. 추가적으로, FRAMESET 항목은 프레임을 지원하지 못하는 사용도구 또는 프레임이 표시되지 않도록 구성 된 경우, 대체(alternate) 내용을 제공하기 위하여 NOFRAMES 엘레멘트를 포함 할 수 있다.

정상적으로 BODY 엘레멘트에 위치하는 엘레멘트들은 첫번째 FRAMESET 엘레멘트 이전에 나오지 말아야한다. 그렇지 않으면 FRAMESET는 무시 될 것이다.

16.2.1 FRAMESET 엘레멘트(element)

<![ %HTML.Frameset; [
<!ELEMENT FRAMESET - - ((FRAMESET | FRAME)+ & NOFRAMES?)
	-- window의 구분(subdivision) -->
<!ATTLIST FRAMESET
 %coreattrs;                          -- id, class, style, title --
 rows        %MultiLengths; #IMPLIED  -- 길이들의 목록, 디폴트는 100% (1 열) --
 cols        %MultiLengths; #IMPLIED  -- 길이들의 목록, 디폴트는 100% (1 컬럼)--
 onload      %Script;       #IMPLIED  -- 모든 프레임들이 로드(load)되면 --
 onunload    %Script;       #IMPLIED  -- 모든 프레임들이 제거(removed)되면 --
>
]]>

애트리뷰트의 정의

rows = multi-length-list [대소문자 중립: CN]
이 애트리뷰트는 컴마로 분리 된 픽셀(pixel) 수, 백분율과 상대 길이의 목록으로, 수평 프레임의 배열을 지정한다. 디폴트 값은 한 열(row)을 의미하는 100%이다.
cols = multi-length-list [대소문자 중립: CN]
이 애트리뷰트는 컴마로 분리 된 픽셀(pixel) 수, 백분율과 상대 길이의 목록으로 수직 프레임의 배열을 지정한다. 디폴트 값은 한 컬럼(column)을 의미하는 100%이다.
다른 곳에서 정의 된 애트리뷰트

FRAMESET 엘레멘트는 사각형 부분 공간으로 사용자의 주 된 window의 배열을 지정한다.

열(row)과 컬럼(column)

rows 애트리뷰트의 설정은 프레임세트(frameset) 안의 수평 부분 공간의 갯수를 지정한다. cols 애트리뷰트의 설정은 프레임세트 안의 수직 부분 공간의 갯수를 지정한다. 이 두 애트리뷰트를 동시에 설정하여 셀들을 만들 수 있다.

만일 rows 애트리뷰트가 설정되지 않았으면, 각 컬럼은 페이지의 전체 폭에 확대되고, cols 애트리뷰트가 설정되지 않았으면, 각 열은 페이지의 전체의 맨 위에서 맨 아래 까지 확대된다. 만일 애트리뷰트가 둘 다 설정되지 않았으면, 그 프레임은 전체 페이지의 크기와 같아진다.

프레임은 컬럼들을 왼쪽에서 오른쪽으로, 열을 위에서 아래로 형성한다. 애트리뷰트가 둘 다 설정되었으면, 맨 위 열에서 왼쪽에서 오른쪽으로, 다음 열에서 왼쪽에서 오른쪽으로 등으로 형성된다.

첫번째 예제는 스크린을 수직의 두 부분으로 나누어 위쪽 반과 아래쪽 반을 만든다.

<FRAMESET rows="50%, 50%">
 ... 나머지 정의들 ...
</FRAMESET>

다음 예제는 세개의 컬럼들을 만드는데, 두번째는 크기를 아는이미지를 위하여 유용한 방식으로 250 픽셀(pixel)의 고정 너비를 갖는다. 첫번째는 나머지 공간의 25% , 세번째는 75%를 할당 받는다.

<FRAMESET cols="1*,250,3*">
 ... 나머지 정의들 ...
</FRAMESET>

다음 예제는 2x3 칸들의 부분 공간들을 만든다.

<FRAMESET rows="30%,70%" cols="33%,34%,33%">
 ... 나머지 정의들 ...
</FRAMESET>

다음 예제에서, 브라우저 window가 현재 1000 픽셀(pixel)의 높이를 갖는다고 가정하자. 첫번째 창에는 30%인 300 픽셀의 높이가 할당된다. 두번째 창은 지정한 대로 400 픽셀의 높이가 할당된다. 그래서 남은 300 픽셀을 다른 두 프레임들 사이에서 나누게 된다. 네번째 프레임의 높이가 "2*"로 설정되어 있어 "*"(=1*)로 설정 된 세번째 프레임의 높이의 두배가된다. 그러므로 세번째 프레임의 높이는 100 픽셀이고 네번째는 200 픽셀이된다.

<FRAMESET rows="30%,400,*,2*">
 ... 나머지 정의들 ...
</FRAMESET>

절대 길이들의 합계가 실제 사용 가능 한 공간의 100%를 초과하는 경우에는, 사용도구에 의하여 조정되어야 한다. 부족하게 설정되었으면, 나머지 공간은 적정하게 각 창에 배분되어야 한다. 과도하게 설정되었으면, 각 창은 전체 공간에 비례하여 축소되어야 한다.

네스트 된(nested) 프레임 설정

프레임세트(frameset)는 어느 수준이건 네스트(nest) 될 수 있다.

다음 예제에서, 바깥쪽 FRAMESET은 가용 공간을 같은 세개의 컬럼(column)들로 나누었다. 그리고 안쪽 FRAMESET는 두번째 지역을 높이가 다른 두 열(row)로 나누었다.

<FRAMESET cols="33%, 33%, 34%">
 ... 첫번째 프레임의 내용 ...
 <FRAMESET rows="40%, 50%">
   ... 두번째 프레임의 첫번째 열의 내용 ...
   ... 두번째 프레임의 두번째 열의 내용 ...
 </FRAMESET>
 ...세번째 프레임의 내용 ...
</FRAMESET>

프레임들 간의 데이터 공유(sharing)

제작자는 OBJECT 엘레멘트를 통하여, 이 데이터를 포함 시킴으로서, 데이터를 여러 프레임들 사이에 공유 시킬 수 있다. 제작자는 프레임세트(frameset) 문서 안의 HEAD 엘레멘트에 OBJECT 엘레멘트를 포함시키고, id 애트리뷰트로 이름을 주어야한다. 프레임세트 안의 프레임(frame) 내용 인 어떤 문서도 이 지정자(identifier)로 참조 할 수 있다.

다음 예제는 스크립트(script)가 어떻게 전 프레임세트(frameset)를 위하여 지정 된 OBJECT 엘레멘트를 조회할 수 있는가를 설명한다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.011 Frameset//EN"
	"http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
 <TITLE>HEAD 안에서 OBJECT로 프레임세트(frameset)</TITLE>
   <!-- 이 OBJECT는 표현되지 않는다! -->
 <OBJECT id="myobject" data="data.bar"></OBJECT>
</HEAD>
<FRAMESET>
   <FRAME src="bianca.html" name="bianca">
</FRAMESET>
</HTML>

<!-- bianca.html 화일 안에서 -->
<HTML>
<HEAD>
 <TITLE>Bianca의 페이지</TITLE>
</HEAD>
<BODY>
 ... 문서의 시작 부분 ...
<P>
<SCRIPT type="text/Javascript">
 parent.myobject.myproperty
</SCRIPT>
 ... 문서의 나머지 부분 ...
</BODY>
</HTML>

16.2.2 FRAME 엘레멘드

<![ %HTML.Frameset; [
<!-- "_"로 시작하는 것은 예약 된 프레임 이름들, 아니면 글자로 시작 됨 -->
<!ELEMENT FRAME - O EMPTY            -- 부분 창(subwindow) -->
<!ATTLIST FRAME
 %coreattrs;                         -- id, class, style, title --
 longdesc    %URI;          #IMPLIED -- 긴설명에 연결 (제목 보완) --
 name        CDATA          #IMPLIED -- 목표로 사용하기 위 한 프레임 이름 --
 src         %URI;          #IMPLIED -- 프레임 내용의 자원 --
 frameborder (1|0)          1        -- 프레임 테두리의 요청 --
 marginwidth %Pixels;       #IMPLIED -- 픽셀로 표시 한 마진(margin)의 너비 --
 marginheight %Pixels;      #IMPLIED -- 픽셀(pixel)로 표시 마진의 한 높이 --
 noresize    (noresize)     #IMPLIED -- 사용자의 프레임 크기 변경 불허 --
 scrolling   (yes|no|auto)  auto     -- 굴리기 바(scrollbar)를 표시하나 안하나--
>
]]>

애트리뷰트의 정의

name = cdata [대소문자 구별 없이: CI]
이 애트리뷰트는 현재 프레임의 이름 지정하며, 이 이름은 후속 연결의 목표 지정에 사용된다.
longdesc = uri [대소문자 타입 참조: CT]
이 애트리뷰트는 프레임의 긴설명에 연결(link)을 설정한다. 이 설명은 title 애트리뷰트로 제공하는 짧은 설명을 보완하고, 보이지 않는(non-visual) 사용도구에 특히 유용하다.
src = uri [대소문자 타입 참조: CT]
이 애트리뷰트는 프레임에 결합 될 초기(initial) 내용의 위치를 지정한다.
noresize [대소문자 구별 없이: CI]
이것이 있으면, 이 불린(boolean) 애트리뷰트는 사용도구에게 프레임 window는 크기를 조정 할 수 없음을 알린다.
scrolling = auto | yes | no [대소문자 구별 없이: CI]
이 애트리뷰트는 이 프레임 window의 화면 굴리기(scroll) 정보를 지정하는데, 가능한 값은:
  • auto: 필요할 때 프레임 window의 화면 굴리기가 제공된다. 이는 디폴트 값이다.
  • yes: 프레임 window의 화면 굴리기가 제공된다.
  • no: 프레임 window의 화면 굴리기가 제공되지 않는다.
frameborder = 1 | 0 [대소문자 중립: CN]
이 애트리뷰트는 프레임 테두리(border)에 대 한 정보를 사용도구에게 제공한다. 가능한 값은:
  • 1: 이 프레임과 각 옆에 붙어있는(adjoining) 프레임들 사이에 분리자(separator)를 그린다. 이는 디폴트 값이다.
  • 0: 이 프레임과 각 옆에 붙어있는 프레임들 사이에 분리자를 그리지 않는다. 다른 프레임들에 의하여 지정되어있다 하더라도, 분리자는 이 프레임 다음으로 그린다는 점에 주의하라.
marginwidth = pixels [대소문자 중립: CN]
이 애트리뷰트는 왼쪽과 오른쪽 마진(margin)들 안에서 프레임의 내용 사이에 남어야 할 공간의 양를 지정한다. 그 값은 1 픽셀(pixe)보다 커야한다. 디폴트 값은 사용도구에 따라 다르다.
marginheight = pixels [대소문자 중립: CN]
이 애트리뷰트는 위쪽과 아래쪽 마진들 안에서 프레임의 내용 사이에 남어야 할 공간의 양를 지정한다. 그 값은 1 픽셀(pixe)보다 커야한다. 디폴트 값은 사용도구에 따라 다르다.
다른 곳에서 정의 된 애트리뷰트

FRAME 엘레멘트는 한 프레임의 내용과 모양을 정의한다.

프레임의 최초값 설정

src 애트리뷰트는 그 프레임이 표시 될 최초의 문서를 지정한다.

다음 예제 HTML 문서에서:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
 <TITLE>프레임세트(frameset) 문서</TITLE>
</HEAD>
<FRAMESET cols="33%,33%,33%">
 <FRAMESET rows="*,200">
   <FRAME src="contents_of_frame1.html">
   <FRAME src="contents_of_frame2.gif">
 </FRAMESET>
 <FRAME src="contents_of_frame3.html">
 <FRAME src="contents_of_frame4.html">
</FRAMESET>
</HTML>

다음과 같은 프레임을 생성 할 것이다.

------------------------------------------
|Frame 1     |Frame 3       |Frame 4       |
|            |              |              |
|            |              |              |
|            |              |              |
|            |              |              |
|            |              |              |
|            |              |              |
|            |              |              |
-------------|              |              |
|Frame 2     |              |              |
|            |              |              |
|            |              |              |
------------------------------------------

그리고 사용도구는 각 화일을 각 분리 된 창(view)에 로딩(load) 할 것이다.

프레임을 정의 한 문서와 같은 문서에 프레임의 내용이 있으면 안된다.

틀린 예제:
다음 프레임세트(frameset) 정의는 두번째 프레임의 내용이 프레임세트와 같은 문서 안에 있으므로 틀린 HTML이다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
 <TITLE>프레임세트(frameset) 문서</TITLE>
</HEAD>
<FRAMESET cols="50%,50%">
 <FRAME src="contents_of_frame1.html">
 <FRAME src="#anchor_in_same_document">
 <NOFRAMES>
   ... 다른 텍스트 ...
 <H2><A name="anchor_in_same_document">중요 항목</A></H2>
   ... 다른 텍스트 ...
 </NOFRAMES>
</FRAMESET>
</HTML>

프레임의 보는 표현

다음 예제는 장식적 용도의 FRAME 애트리뷰트를 설명한다. 프레임 1에서 굴림바(scroll bar)를 허용하지 않았다. 프레임 2는 그 내용(초기 이미지 화일) 주위에 공간을 남기고, 프레임 크기 변동(resizeable)은 허용하지 않는다. 프레임 3과 4 사이에는 테두리(border)를 넣지 않는다. 테두리는 디폴트로 프레임 1, 2와 3 사이에 그린다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
 <TITLE>프레임세트(frameset) 문서</TITLE>
</HEAD>
<FRAMESET cols="33%,33%,33%">
 <FRAMESET rows="*,200">
   <FRAME src="contents_of_frame1.html" scrolling="no">
   <FRAME src="contents_of_frame2.gif"
     marginwidth="10" marginheight="15" noresize>
 </FRAMESET>
 <FRAME src="contents_of_frame3.html" frameborder="0">
 <FRAME src="contents_of_frame4.html" frameborder="0">
</FRAMESET>
</HTML>

16.3 목표(target) 프레임 지정

주석: 프레임의 목표을 결정하는 현재의 관행에 대 해, 부록의 프레임에 대한 주석을 참조하라.

애트리뷰트의 정의

target = frame-target [대소문자 구별 없이: CI]
이 애트리뷰트는 문서를 여는 위치의 프레임 이름을 지정한다.
name 애트리뷰트를 통 해 프레임 이름을 설정함으로서, 제작자는 다른 엘레멘트에 정의 된 연결(link)의 목표(target)로 참조 할 수 있다. target 애트리뷰트(attribute)는 연결을 만드는 ALINK 엘레멘트, 이미지맵 (AREA)과 폼(FORM)에 설정 될 수 있다.

일려진 프레임 이름에 대 한 정보는 목표 프레임 이름을 참조하라.

이 예제는 목표들이 어떻게 프레임(frame) 내용의 역동적인(dynamic) 변경을 허용하는가를 설명한다. 먼저 문서 frameset.html 안에 프레임세트(frameset)를 다음과 같이 정의하였다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
 <TITLE>프레임세트(frameset) 문서</TITLE>
</HEAD>
<FRAMESET rows="50%,50%">
 <FRAME name="fixed" src="init_fixed.html">
 <FRAME name="dynamic" src="init_dynamic.html">
</FRAMESET>
</HTML>

그리고, init_dynamic.html 안에서, "dynamic"이라고 이름 지워 진 프레임을 연결시켰다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
 <TITLE>지정 된 목표(target)의 앤커(anchor)를 가진 문서</TITLE>
</HEAD>
<BODY>
 ... 문서의 시작 부분 ...
 <P>이제 진행 할 수 있다.
   <A href="slide2.html" target="dynamic">slide 2.</A>
 ... 문서의 다른 부분 ...
<P>다음으로도 진행 할 수 있다.
   <A href="slide3.html" target="dynamic">slide 3.</A>
</BODY>
</HTML>

어느 쪽이던 연결을 활성화 시키면, "dynamic"이라고 이름 지워 진 프레임에 새로운 문서를 연다. 다른 프레임 "fixed"에는 최초의 내용을 그대로 유지한다.

주석: 프레임세트(frameset) 정의는 변경되지 않으며, 프레임들 중 하나의 내용이 변경된다. 일단 한 프레임의 내용이 변경되면, 프레임세트 정의는 프레임들의 현재 상태를 더 이상 반영하지 못한다.

현재로서는 URI에서 프레임세트 전체의 상태를 엔코드(encode)하는 방법이 없다. 그래서 많은 사용도구는 사용자에게 프레임세트에 북마크(bookmark)를 지정하는 것을 허용하지 않는다.

프레임세트(frameset)는 사용도구의 역사(history)를 통 한 앞으로(forward)와 뒤로(backward) 항해를 사용자에게 더 어럽게 만들 수 있다.

16.3.1 연결의 디폴트 목표(target) 설정

같은 문서 안에서 많은 연결(link)들이 같은 목표(target)를 지정하면, 목표를 한 번 설정하고, 각 엘레멘트(element)의 target 애트리뷰트로 지정 해서 사용 할 수 있다. 이를 위하여 BASE 엘레멘트의 target 애트리뷰트를 지정한다.

위의 예제에서, 이번에는 목표 정보를 BASE 엘레멘트에서 지정하고, A 엘레멘트로 부터 이것을 제거한다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
 <TITLE>BASE의 특정 목표(target)를 갖는 문서</TITLE>
 <BASE href="http://www.mycom.com/Slides" target="dynamic">
</HEAD>
<BODY>
 ... 문서의 시작 부분 ...
 <P>이제 진행 할 수 있다.
 <A href="slide2.html">slide 2.</A>
 ... 문서의 다른 부분 ...
 <P>다음으로도 진행 할 수 있다.
 <A href="slide3.html">slide 3.</A>
</BODY>
</HTML>

16.3.2 목표(target)의 의미

사용도구는 어디에 연결(link) 된 자원을 로드(load) 할 것인가 하는 목표 프레임을 다음의 우선 순위(위 쪽 우선)에 의거하여 판정하여야 한다.

  1. 만일 엘레멘트가 아는 프레임을 지정 한 target 애트리뷰트를 가지고 있을 때, 연결이 진행되거나 폼(form)이 처리되어 엘레멘트가 활성화되면, 엘레멘트에 의해 지명 된 자원은 그 목표 프레임에 로드(load) 하여야 한다.
  2. 만일 엘레멘트가 설정 된 target 애트리뷰트를 가지고 있지 않고, BASE 엘레멘트가 가지고 있으면, BASE 엘레멘트의 target 애트리뷰트가 프레임을 결정한다.
  3. 만일 엘레멘트나 BASE 엘레멘트 둘 다 목표를 참조하지 않으면, 엘레멘트에 의하여 지정 된 자원이 엘레멘트를 갖는 프레임으로 로드(load)되어야 한다.
  4. 만일 어떤 target 애트리뷰트가 모르는 프레임 F를 참조하면, 사용도구는 새로운 window와 프레임을 생성하고, 프레임의 이름을 F로 설정하며, 새 프레임에서 엘레멘트에 의하여 지정 된 자원을 로드하여야 한다.

사용도구는 사용자에게 target 애트리뷰트를 덮어 씌우(override)는 기능을 제공 할 수 있다.

16.4 대체(alternate) 내용

제작자는 사용도구가 프레임을 지원하지 못하거나, 프레임 디스플레이가 안되도록 구성된 경우를 대비하여 대체 내용을 제공하여야 한다.

16.4.1 NOFRAMES 엘레멘트

<![ %HTML.Frameset; [
<!ENTITY % noframes.content "(BODY) -(NOFRAMES)">
]]>

<!ENTITY % noframes.content "(%flow;)*">

<!ELEMENT NOFRAMES - - %noframes.content;
-- 프레임 없는 표현(non frame-base)을 위 한 대체 내용 용기(container) -->
<!ATTLIST NOFRAMES
 %attrs;                              -- %coreattrs, %i18n, %events --
>
다른 곳에서 정의 된 애트리뷰트

NOFRAMES 엘레멘트는 프레임이 디스플레이되지 않을 때, 단지 디스플레이 만 되는 내용(content)을 정의한다. NOFRAMES 선언의 내용을, 프레임을 지원하는 사용도구는 프레임이 디스플레이가 안 되도록 구성되어 있을 때 만 디스플레이하여야 한다. 프레임을 지원하지 않는 사용도구는 어느 경우에나 NOFRAMES의 내용을 디스플레이하여야 한다.

NOFRAMES 엘레멘트는 변이(transitional)와 프레임세트(frameset) DTD의 한 부분이다. 프레임세트(frameset) DTD를 사용하는 문서에서, NOFRAMES 은 그 문서 FRAMESET 항목 끝에 사용 될 수 있다.

예를 들어:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/REC-html40">
<HTML>
<HEAD>
 <TITLE>NOFRAMES를 갖는 프레임세트(frameset) 문서</TITLE>
</HEAD>
<FRAMESET cols="50%, 50%">
 <FRAME src="main.html">
 <FRAME src="table_of_contents.html">
 <NOFRAMES>
 <P>여기에 <A href="main-noframes.html">
   프레임 없는(non-frame based) 문서가 있다.</A>
 </NOFRAMES>
</FRAMESET>
</HTML>

16.4.2 프레임의 긴설명

longdesc 애트리뷰트는 제작자가 보이지 않는(non-visual) 사용도구를 사용하는 사람들이 더 접근하기 쉬운 프레임 문서를 만들 수 있게 한다. 이 애트리뷰트는 프레임(frame)의 긴설명을 제공하는 자원을 지정한다. 제작자는 프레임과 연관 된 긴설명은 frame에 첨부하고, 프레임의 내용이 아니라는 것에 주의하여야 한다. 그 내용은 시간에 따라 다를 수가 있으므로, 최초의 긴설명은 프레임의 향 후 내용에는 적당하지 않게 되기 쉽다. 특히, 제작자는 이미지 만으로 프레임 내용을 구성하지 말아야한다.

다음 프레임세트(frameset) 문서는 두 프레임을 설정하였다. 왼쪽 프레임은 목차를 가지고, 오른쪽 프레임은 최초 타조의 이미지를 갖는다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/REC-html40">
<HTML>
<HEAD>
 <TITLE>잘못 설계 된 프레임세트(frameset) 문서</TITLE>
</HEAD>
<FRAMESET cols="20%, 80%">
 <FRAME src="table_of_contents.html">
 <FRAME src="ostrich.gif" longdesc="ostrich-desc.html">
</FRAMESET>
</HTML>

이미지가 어떤 HTML 엘레멘트에도 관계없이 프레임에 포함되었슴을 주시하라. 그래서 제작자는 longdesc 애트리뷰트를 사용하는 이외에는 대체(alternate) 텍스트를 지정할 수 있는 방법이 없다. 만일 예를 들어, 사용자가 목차로 부터 뱀을 선택하여 오른쪽 프레임의 내용이 변경되면, 사용자는 프레임의 새로운 내용에 텍스트로 접근 할 수 없을 것이다.

그래서 제작자는 프레임 안에 이미지를 직접 넣지 말아야한다. 그 대신 그 이미지를 별도의 HTML 문서 안에 지정하여야 하고, 그 안에 적당한 대체 텍스트로 토를 달아 두어야한다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
 "http://www.w3.org/TR/REC-html40">
<HTML>
<HEAD>
 <TITLE>잘 설계 된 프레임세트(frameset) 문서</TITLE>
</HEAD>
<FRAMESET cols="20%, 80%">
 <FRAME src="table_of_contents.html">
 <FRAME src="ostrich-container.html">
</FRAMESET>
</HTML>
<!-- ostrich-container.html 화일에서: -->
<HTML>
<HEAD>
 <TITLE>빠르고 강한 타조</TITLE>
</HEAD>
<P>
<OBJECT data="ostrich.gif" type="image/gif">
 이 타조들은 맞이 좋을 것이다!
</OBJECT>
</HTML>

16.5 인라인(Inline) 프레임: IFRAME 엘레멘트

<!ELEMENT IFRAME - - (%flow;)*        -- 인라인(inline) 부분 창(subwindow) -->
<!ATTLIST IFRAME
 %coreattrs;                         -- id, class, style, title --
 longdesc    %URI;          #IMPLIED -- 긴설명에 연결 (제목 보완) --
 name        CDATA          #IMPLIED -- 목표로 사용하기 위 한 프레임 이름 --
 src         %URI;          #IMPLIED -- 프레임 내용의 자원 --
 frameborder (1|0)          1         -- 프레임 테두리의 요청 --
 marginwidth %Pixels;       #IMPLIED -- 픽셀로 표시한 마진(margin)의 너비 --
 marginheight %Pixels;      #IMPLIED -- 픽셀(pixel)로 표시한 마진의 한 높이 --
 scrolling   (yes|no|auto)  auto     -- 굴리기 바(scrollbar)를 표시하나 안하나--
 align       %IAlign;       #IMPLIED -- 수직 또는 수평 정렬 --
 height      %Length;       #IMPLIED -- 프레임 높이 --
 width       %Length;       #IMPLIED -- 프레임 너비 --
>

애트리뷰트의 정의

longdesc = uri [대소문자 타입 참조: CT]
이 애트리뷰트는 프레임의 긴설명에 연결(link)을 설정한다. 이 설명은 title 애트리뷰트로 제공하는 짧은 설명을 보완하고, 보이지 않는(non-visual) 사용도구에 특히 유용하다.
name = cdata [대소문자 구별 없이: CI]
이 애트리뷰트는 현재 프레임의 이름 지정하며, 이 이름은 후속 연결(link)의 목표(target) 지정에 사용된다.
width = length [대소문자 중립: CN]
인라인(inline) 프레임의 너비.
height = length [대소문자 중립: CN]
인라인 프레임의 높이.
다른 곳에서 정의 된 애트리뷰트

IFRAME 엘레멘트(element)는 제작자가 텍스트 블럭(block) 안에 프레임(frame)을 넣을 수 있게 한다. 인라인(inline) 프레임을 텍스트의 부분에 삽입하는 것은 OBJECT 엘레멘트을 통하여 오브젝트을 삽입하는 것과 거의 같다. 예를 들어, 둘 다 HTML 문서를 다른 HTML 문서 한 가운데에 삽입 하도록 하며, 둘 다 주위의 텍스트와 함께 정렬 될 수 있다.

인라인으로 삽입하고저 하는 정보는 이 엘레멘트의 src 애트리뷰트로 지정한다. 이에 반해, IFRAME 엘레멘트의 내용은 사용도구가 프레임을 지원하지 안거나 프레임이 디스플레이 안되도록 구성한 경우에 만 표시되어야 한다.

프레임을 지원하는 사용도구에서, 다음 예제는 인라인 프레임을 텍스트 가운데 테두리로 둘려싸여 나타날 것이다.

<IFRAME src="foo.html" width="400" height="500" 
	scrolling="auto" frameborder="1">
 [귀하의 브라우저(사용도구)는 프레임을 지원하지 않거나,
  현재 프레임이 디스플레이되도록 구성(configure)되어 있지 않습니다.
  그러나, 방문을 계속 하실 수 있습니다
 <A href="foo.html">관계 문서.</A>]
</IFRAME>

인라인 프레임은 크기를 조정(resize)할 수 없음으로, noresize 애트리뷰트를 가질 수 없다.

주석: HTML 문서는 OBJECT 엘레멘트를 사용하여 다른 HTML 문서 안에 깔릴(embedded) 수도 있다. 세부사항은 깔린(embedded) 문서를 참조하라.

Trio 홈페이지 문서(http://trio.co.kr/webrefer/html/present/frames.html)는 자유로이 연결 사용이 가능함.