|
前页 后页
目录 元素
特性
框架
HTML框允许作者在多个视图展示文档.视图可以是独立窗
口或子窗口.多视图提供给设计者一个在其它视图滚动或
替换时可以保持一定信息可见的途径.例如,使用三个框:
一个是静态的旗帜,一个是导航菜单,剩下的一个则是主
视图其中可以滚动或通过在导航框按动条目被代替.
框的划分
一个有框的HTML文档在标注上与没有框的HTML有轻微的不
同.一个标准的文档有一个HEAD
段和一个BODY.一
个有框的文档有一个HEAD,
一个FRAMESET和一个
可选BODY.
文档的FRAMESET部
分指定视图在用户代理器主视窗中的划分.
跟随FRAMESET声明
的BODY部份提供
不提供框或设置为不显示框的用户代理器一个交互内容.
我们在下面仔细讨论交互内容的细节.
元素通常被放在BODY
元素中并且不能出现于FRAMESET
元素之前否则FRAMESET
将被忽略.
FRAMESET元素
<!ELEMENTFRAMESET - - ((FRAMESET|FRAME)+ & NOFRAMES?)>
<!ATTLIST FRAMESET
?--absolute pixel values,percentages or relative scales.--
?rows ?CDATA ?#IMPLIED?--if not given,default is 1row --
?cols ?CDATA ?#IMPLIED?--if not given,default is 1column --
?onload ?%Script ?#IMPLIED?--all the frames have been loaded?--?
?onunload ?%Script ?#IMPLIED?-- all the frames have been removed --? ?>
开始标记:需要,结束标记:需要
特性定义
?
-
rows=length-list
-
这个特性指定水平框的划分.它是一个用逗号分列的长度,
缺省值为100%.
-
cols=length-list
-
这个特性指定垂直框的划分.它是一个用逗号分列的长度.
如果没有指定,缺省值是100%.
FRAMESET元素指定主
视窗的矩形划分.
横行和竖列
设定 rows特性
定义水平空间的数量.设定 cols
特性定义垂直空间的数值.两个特性同时使用可以用来建
立栅格.
如果rows特
性没有设定,每个竖列扩展到?页面的整个长度.如果cols
特性没有设定,则框使用与页面完全相同的尺寸.
这两个特性的值均是用逗号分列的长度.长度可以是绝
对的(给出像素数或屏幕的百分比)或相对长度,意味着用
"i*"格式,这里的"i"是一个整数.当给横行竖列分配空间
的时候,用户代理器首先分配绝对的长度,然后根据剩下
的横行竖列相对长度来划分.值"*"等价于"1*".
视图在竖列中从左到右建立而对于横行则是从上至下.
当两个特性均被指定时,视图在第一横行中从左到右建立,
然后在第二横?行中从左到右建立等.
第一个例程在垂直方向把屏幕分开两半
(就是说上面一半下面一半).
<FRAMESET rows="50%, 50%">
...the rest of the definition...
</FRAMESET>
下一个例程建立三个竖列:第二列有一个组合宽度250像
素(例如,对于放置一个已知尺寸的图像是有用的).然后第
一列分到剩下的25%而第3列分到75%.
<FRAMESET cols="1*,250,3*">
...the rest of the definition...
</FRAMESET>
下一个例程建立一个2x3的栅格.
<FRAMESET rows="30%,70%" cols="33%,34%,33%">
...the rest of the definition...
</FRAMESET>
对于下一个例程,假定浏览器视窗为1000像素高,?第一视?图
分到了总高的30%(300像素).第二个视图被定义为400像素
高.这样就剩下300像素被用来分给后面的两个框.第四个
框指定为"2*",所以它较第三个框占用两倍的高度,第三个
框定义为"*"(1*).这样第三框将有100高而第4框为200高.
<FRAMESET rows="30%,400,*,2*">
...the rest of the definition...
</FRAMESET>
总和不为100%真实可用空间的绝对长度可以被?用户代理
器调整.当少于的时候,剩下的空间会按比例分配给每个
视图.当超过的时候,每个视图将根据它们定义在总空间
的指定比例适当减少.
嵌套框设置
框可以嵌套任意级.
在下面的例程中,外部的 FRAMESET
把可用空间分成三个相等的竖列.内部的 FRAMESET
则把第二个区域分成两个不同高度的横行.
<FRAMESET cols="33%, 33%, 34%">
...contents of first frame...
<FRAMESET rows="40%, 50%">
?...contents of second frame,first row...
?...contents of second frame,second row...
</FRAMESET>
...contents of third frame...
</FRAMESET>
FRAME元素
<!-- reserved frame names start with "_" otherwise starts with letter -->
<!ELEMENTFRAME - O EMPTY>
<!ATTLIST FRAME
?name ?CDATA ?#IMPLIED?--name of frame for targetting --
?src %URL #IMPLIED?--source of frame content --
?frameborder(1|0) ?1 --request frame borders?--
?marginwidth%Pixels ?#IMPLIED?--margin widths in pixels --
?marginheight%Pixels #IMPLIED?--margin height in pixels --
?noresize ?(noresize)#IMPLIED?--allow users to resize frames?--
?scrolling (yes|no|auto) auto -- scrollbar or none -- ?>
开始标记:需要,结束标记:禁止
特性定义
?
-
name=cdata
-
这个特性指当前框指派一个名称.这个名称可能是后来的
链接的目标.
-
src=url
-
这个特性指定了包含于框内的初始的文档的位置.
-
noresize
-
在显示时,这个布尔值告诉用户代理器框是不能被重设大
小的.
-
scrolling=auto|yes|no
-
这个特性指定的框视窗的滚动信息.可能的值为:
-
auto:这个值告诉用户代理器在必要的时候提供滚
动机制.这是缺省值.
-
yes:这个值告诉用户代理器始终为框视窗提供滚
动设置.
-
no:这个值告诉用户代理器不为框视窗提供滚动设
置.
-
frameborder=1|0
-
这个特性向用户代理器提供关于框线的信息.可能的值?为:
-
1:这个值告诉用户代理器在这个框架及其每个相
邻框架之间画一条分隔线.这是缺省值.
-
0:这个值告诉用户代理器不要在这个框架及其每
个相邻框架之间画一条分隔线.注意如果其它框架指定画
线,这个分隔线还是会被画上去.
-
marginwidth=length
-
这个值指定了在框架左缘和右缘与内容之间留出的空间
的总量.这个值必须大于1.缺省值取决于用户代理器.
-
marginheight=length
-
这个值指定了在框架上缘和下缘与内容之间留出的空间
的总量.这个值必须大于1.缺省值取决于用户代理器.
在它处定义的特性
FRAME 元 素 定 义 了 单 个 视 窗 的 内 容 和 外 观.?!-- Scope of frame names here -->
设定在框中的初始文档
src特性指定了
框架将包含的初始文档.框的内容不可能存在于框定义的
同一篇文档中.
下面的例程例示了HTML文档:
<HTML>
<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 | ?| ?|
| ?| ?| ?|
| ?| ?| ?|
--------------------------------------------
并使用户代理器分别为每个分开的视图调入文件.
非法例程:
下面的框架设置定义不是合法的HTML因为第二个框架
的内容与框架设置文档是相同的.
<HTML>
<FRAMESET cols="50%,50%">
<FRAME src="contents_of_frame1.html">
<FRAME src="#anchor_in_same_document">
</FRAMESET>
<BODY>
...some text...
<H2><A name="anchor_in_same_document">Important section</A></H2>
...some text...
</BODY> </HTML>
装饰一个框架
下面的例程举例说明装饰特性 FRAME
的用法.我们指定框1不允许滚动条.框2在它的内容(初始
的,一个图像文件)外围绕空白并且此框不能重置尺寸.框
3和框4之间没有框线.框1,框2和框3之间画框线(通过缺
省).
<HTML>
<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" border="0">
<FRAME src="contents_of_frame4.html" border="0">
</FRAMESET>
</HTML>
指定目标框架信息
特性定义
?
-
target=cdata
-
这个特性定义了在哪个框架中打开文档
通过 name特性给
框架指定一个名称,作者可以通过别的元素定义来作为"目
标"来指向它. target
特性可以被?用来建立链接的( A,
LINK)元素,图像映
像( AREA)和表单
( FORM)来设置.
这个例程举例说明了目标如何动态地调
整框架的内容.首先我们在文档 frameset.html中定义
一个框架设置.如下:
<HTML>
<FRAMESET rows="50%,50%">
<FRAME name="fixed" src="init_fixed.html">
<FRAME name="dynamic" src="init_dynamic.html">
</FRAMESET>
</HTML>
然后,在 init_dynamic.html,我们链接到名为"dynamic"的
框架.
<HTML> <BODY>
...beginning of the document...
Now you may advance to? <A href="slide2.html" target="dynamic">slide 2.</A>
...more document...
You're doing great. Now on to ?<A href="slide3.html" target="dynamic">slide 3.</A> </BODY> </HTML>
激活链接在命名为"dynamic"的框中打开一个新的文档同时
其它框"组合"地保持它们的初始内容.
注意:一但框架的内容被动态改变,先前
的框架定义不再反映每个框架的真实;而框架定义不改变.
目前还没在在URL中对整个框架状态编码的方式.还
有,许多用户代理器不允许用户对框架来分配书签.
框架将通过你的用户代理器的历史纪录来建立前行
与后行导航对于用户则更难了.
设定链接的缺省目标
当许多链接在同一个文档中定义同一个目标时,可以只定
定一次目标并通过每个元素的 target
特性来分发.这可以通过 BASE
元素的 target特性来
设定.
我们回到先前的例程,这回我们通过在 BASE
元素中定义目标框信息并且从 A
元素中移去.
<HTML>
<HEAD>
<BASE target="dynamic">
</HEAD>
<BODY>
...beginning of the document...
Now you may advance to <A href="slide2.html">slide 2.</A>
...more document...
You're doing great. Now on to? <A href="slide3.html">slide 3.</A> </BODY> </HTML>
目标语意
有数个方法可以标记链接的目标框.这里我们定义他们的
相互作用.
-
如果一个元素有其设为已知框架的目标特性,当这个元素
被激活时,这个元素指定的文档将被调入目标框架.
-
如果一个元素没有target
特性而BASE元素
设定了,BASE元素
来决定目标框,并且在调?入时服从1的语意.
-
如果元素和BASE
元素都没有指明目标,元素定义的文档将被调入包含元素
的框架.
-
如果目标指向一个未知的框架F,用户代理器将建
立一个新的视窗和框架,并且为框架分配名称F,
同时把元素设定的文档调入新框架.
用户代理器可能提供用户一种超越 target
特性的机制.
目标名称
除了下面列示的保留名称,目标名称必须以字母开始(a-zA-Z).
用户代理器会忽略其它任何目标名称.
下面的目标名称是保留的并且有其特殊含义meanings.
-
_blank
-
用户代理器应当在一个新的,无名视窗调入指定的文档
-
_self
-
用户代理器应当在指向这个目标的无素的相同的框架中
调入文档.
-
_parent
-
用户代理器就当把文档调入当前框的直接的父FRAMESET
框中.这个值在当前框没有父框时等价于_self.
-
_top
-
用户代理器将把文档调入原来的全部的视窗中(因此取消
所有其它框架).这个值等价于当前框没有你框时的_self.
轮换内容
我们强烈建议为那些不提供框架或设置为不显示框架的
用户代理器提供内容的轮换版本.
不提供框架的用户代理器必须显示文档最外层FRAMESET
的BODY部分.提供
框架的用户代理器必需忽略这个BODY
除非当前设置为不显示框架.
NOFRAMES元素
<!-- 燭he following is quite complicated because of the mixed 燾ontent model. However it's actually only meant to contain 爀ither BODY or %block. ?->
<!ELEMENTNOFRAMES - - ?#PCDATA,((BODY,#PCDATA)| (((%blocklevel)|%font|%phrase|%special|%formctrl),%block)))>
开始标记:需要,结束标记:需在
NOFRAMES元指定的
内容只有在框架不显示的时候才显示.提供框架的用户代
理器必须只有在设置不显示框架的时候才显示NOFRAMES
声明的内容.不提供框架的用户代理器必须在作何情况下
NOFRAMES的内容.
设想我们有一个例?程框架定义于"top.html"
并且指定一个文档("main.html")和一个与主文档内容相关
的特殊的表格("table_of_index.html").这里是"top.html":
<HTML>
<FRAMESET cols="50%, 50%">
<FRAME src="main.html">
<FRAME src="table_of_index.html">
</FRAMESET>
</HTML>
在用户代理器不显示框架的时候用户读取"top.html"会发
生什么?用户代理器元法看到任何东西因为我们没有在"top.html"
的 BODY中定义轮
换内容.如果我们在 BODY
中直接插入"table_of_index.html"和"main.html",我们就通过
联系这两个文档解决了这个问题,但我们也会引起提供框
架的用户代理器取得两次相同的文档,?一个复件来自于框
架定义而另一个插入于 BODY.
更经济的办法是在"main.html"顶端的 NOFRAMES
元素中包含内容表格:
<!-- This is main.html --> <HTML> <BODY> <NOFRAMES>
...the table of contents here...
</NOFRAMES>
...the rest of the document...
</BODY> </HTML>
并且在框架不显示的时候从"top.html"链接到"main.html":
<!-- This is top.html -->
<HTML> <FRAMESET cols="50%, 50%">
<FRAME src="main.html">
<FRAME src="table_of_index.html"> </FRAMESET>
<BODY> Click <A href="main.html">here</A> for a non-frames version. </BODY> </HTML>
内层框架:?A NAME="edef-IFRAME">IFRAME元素
<!ELEMENTIFRAME - - %block>
<!ATTLIST IFRAME
?name ?CDATA ?#IMPLIED?--name of frame for targetting --
?src %URL #IMPLIED?--source of frame content --
?frameborder(1|0) ?1 --request frame borders?--
?marginwidth%Pixels ?#IMPLIED?--margin widths in pixels --
?marginheight%Pixels #IMPLIED?--margin height in pixels --
?scrolling(yes|no|auto)auto --scrollbar or none --
?align %IAlign ?#IMPLIED?--vertical or horizontal alignment --
?height ?%Length ?#IMPLIED?--suggested height --
?width %Length ?#IMPLIED?-- suggested width -- ?>
开始标记:需要,结束标记:需要
特性定义
?
-
width=length
-
内层框架的宽度.
-
height=length
-
内层框架的高度.
IFRAME元素允许作者
在一个封闭文本中插入一个框架.在文本章节中插入内层
框架更象通过OBJECT
元素插入物件:它们都允许你在一份HTML的中间插入另一
份,分们都可以与围绕的文字对齐,等等.
被插入内层的信息由这个元素的src
特性设定.另一方面,IFRAME
元素的内容只能被不提供框架或设定为不显示框架
的用户代理器来渲染.
对于提供框架的用户代理器,下面的例程
将在言语本中央放置一个外面绕线的内层框架.
<IFRAME src="foo.html" width="400px" height="500px" scrolling="auto" frameborder="1">
[Your user agent does not support frames or is currently configured not to display frames.
Click to retrieve <A href="foo.html">the related document.</A>] </IFRAME>
内层框架不能重置大小,(因此,无需noresize
特性).
注意:HTML文档也可能被其它的HTML文档
通过OBJECT元
素绑定.查看在HTML文档中包含
文件的细节.
前页 后页
目录 元素
特性
|