将窗口分成多个框架

你应当将框架视为窗口中的不同区域，框架是浏览器窗口中特定的部分。一个浏览器窗口可以根据你的需要分成任意多的框架，一个单个的框架也可以分成其它多个框架，即所谓的嵌套框架。

要在浏览器窗口中建立框架，你必须创建一个特殊的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属性指向一个本地或Internet上任何地方的一个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 复杂的框架