将窗口分成多个框架
你应当将框架视为窗口中的不同区域,框架是浏览器窗口中特定的部分。一个浏览器窗口可以根据你的需要分成任意多的框架,一个单个的框架也可以分成其它多个框架,即所谓的嵌套框架。
要在浏览器窗口中建立框架,你必须创建一个特殊的HTML文件称作frameset文件。frameset文件本身并不在网络浏览器中出现,它只是指明其它的网页是怎样显示在浏览器中的。下面是一个简单的frameset文件的例子:
<HTML>
<HEAD>
<TITLE> Simple Frames </TITLE>
</HEAD>
<FRAMESET ROWS=“100%” COLS=“50%,50%”>
<FRAME SRC=“mypage1.cfm”>
<FRAME SRC=“mypage2.cfm”>
</FRAMESET>
</HTML>
当这个frameset文件读入浏览器中时,浏览器会显示两个HTML文件mypage1.cfm和mypage2.cfm,它们都是普通的HTML文件,frameset文件通知浏览器这两个文件应当分别显示在两个框架中,如图7.9所示。
图7.9 显示在两个框架中的HTML文件
你应当注意这个frameset文件中的一些特点,与一般的HTML文件不同,它没有<BODY>标识符。在frameset文件中,<FRAMESET>代替了<BODY>,实际上,你不需要在frameset文件的主体部分中使用<BODY>,如果你使用的话,浏览器就会将frameset文件解释成一个普通的HTML文件。
<FRAMESET>标识符指定了框架在浏览器窗口中显示的方式,这个标识符将浏览器窗口分成多行和多列。在此例中,浏览器窗口被分成一行和两列,属性ROWS=“100%”,使框架具有整个浏览器窗口的高度;属性COLS=“50%,50%”使框架分成两列,每列都具有窗口宽度的一半。
你可以根据需要将窗口分成多个行和列,每次分割的结果都产生一个新的框架,但是你应当记住太多的框架会让浏览器窗口变得很混乱――特别是在低分辨率的屏幕上显示时(见图7.10)。
图7.10 太多的框架
在此例中,<FRAMESET>使用屏幕的百分数来分割窗口,当然你也可以指定绝对的象素宽度。下面的frameset文件建立了一个有200个象素的框架:
<HTML>
<HEAD>
<TITLE> Simple Frames </TITLE>
</HEAD>
<FRAMESET ROWS=“100%” COLS=“200,*”>
<FRAME SRC=“mypage1.cfm”>
<FRAME SRC=“mypage2.cfm”>
</FRAMESET>
</HTML>
当这个frameset文件被网络浏览器解释时,它看起来就如图7.11所示,左边的框架具有200个象素宽。然而要注意,当使用绝对值时你应当小心,因为你的网页可能会在各种分辨率的屏幕上显示。
图7.11 使用绝对象素宽度的框架
注意此例中是如何使用星号(*)的,属性COLS=“200*”指定了浏览器窗口应当被分成两列。这个属性的第一个值指明了第一个框架应该是200个象素宽,第二个值星号指明了第二个框架占据屏幕的剩余空间。
你可在ROW或COL属性中使用不止一个星号,每一个多出的星号都会将屏幕等分。来看在下面的例子中是怎样使用星号的:
<HTML>
<HEAD>
<TITLE> Simple Frames </TITLE>
</HEAD>
<FRAMESET ROWS=“*” COLS=“*,*,*”>
<FRAME SRC=“mypage1.cfm”>
<FRAME SRC=“mypage2.cfm”>
<FRAME SRC=“mypage3.cfm”>
</FRAMESET>
</HTML>
当这个frameset文件被网络浏览器解释时,屏幕上会显示出如图7.12所示。属性ROWS=“*”告诉浏览器框架将占据整个窗口的高度,属性COLS=“*,*,*”告诉浏览器将窗口宽度等分成三部分,每一个部分是一个框架。
图7.12 具有相同宽度的框架
<FRAME>标识符指明哪个HTML文件被读入框架,SRC属性指向一个本地或Inte.net上任何地方的一个HTML文件。特定的HTML文件依据它们出现的次序与某个框架相关联,因此在此例中,文件mypage1.cfm出现在第一列中,而文件mypage2.cfm出现在第二列中,而mypage3.cfm则出现在第三列中。
<FRAME>标识符有很多有用的属性,例如,缺省情况下当框架的内容太大时,框架会显示一个竖直或水平滚动条,你可以使用SCROLLING=“NO”属性来覆盖这种行为。当你想通过不显示框架滚动条来保护屏幕空间时,这个属性是很有用的,但是使用它要小心,因为使用它可能会造成一部分网页内容永远也无法看到。
<FRAME>的另一个有用的属性是NORESIZE,缺省情况下浏览器的用户可以改变屏幕上框架的尺寸,然而有时你不想让用户破坏你精心设计的布局,使用NORESIZE你就可以实现这一点。但是再一次提醒你,使用这个属性要小心,如果你禁止人们在他们的浏览器上改变框架的大小,可能会造成许多不便,一个具有NORESIZE属性的小框架可能会使框架的内容无法被人浏览。
使用<FRAME>的FRAMEBORDER属性你可以控制一个框架是否具有边框,如果你使用属性FRAMEBORDER=0,则框架的边界将会消失。你也可以用<FRAME>的这个属性来指定是否在frameset文件中定义的所有框架都具有一个边界。
最后, 你可以用MARGINWIDTH和MARGINHEIGHT属性来控制框架的边距,这两个属性对于在框架和其内容之间保留一些空间是很有用的,它们在框架内容周围设置了一些空白。
下面的frameset文件使用了刚刚讨论的这些属性(见图7.13):
<HTML>
<HEAD>
<TITLE> Frames </TITLE>
</HEAD>
<FRAMESET ROWS=“*” COLS=“*,*,*”>
<FRAME SRC=“mypage1.cfm” NORESIZE>
<FRAME SRC=“mypage2.cfm” FRAMEBORDER=0 SCROLLING=“YES”
NORESIZE MARGINWIDTH=50 MARGINHEIGHT=50>
<FRAME SRC=“mypage3.cfm” FRAMEBORDER=0 SCROLLING=“NO”>
</FRAMESET>
</HTML>
图7.13 复杂的框架