- 作者:
- 發表時間:2010-04-07 09:29
- 來源:
FRAME(框架)是Web上(shàng)經常會(huì)看(kàn)到(dào)的頁面結構。使用可視Web開(kāi)發工(gōng)具(比如Dreamweaver或者Frontpage),雖然可以在 WYSIWYG環境中通(tōng)過簡單的鼠标托拽完成FRAME的構建,但是要實現真正細緻甚至強大的功能(néng),仔細理解FRAME的代碼結構至關重要!你将發現, FRAME原來是這樣的親切易用。
創建基本的FRAMESET
FRAMESET頁面與普遍的Web頁面有些不同。雖然仍舊(jiù)以和包含标題的
标記以及其他腳本開(kāi)始,但是其内容僅僅是表示的各個(gè)頁面的版式設計。因此,不再需要有元素,隻需要通(tōng)過
cols="80,20%,*" 分為(wèi)3列,寬度分别為(wèi)80像素,窗(chuāng)口寬度的20%,以及剩餘寬度
rows="25%,75%" 分為(wèi)2列,寬度分别為(wèi)窗(chuāng)口寬度的25%和75%
rows="*,3*" 與上(shàng)述第2個(gè)表示的一(yī)樣,分為(wèi)2列,但表示方法不同:第一(yī)列寬度為(wèi)第二列的1/3
在
之間,用多(duō)個(gè)标記表示每個(gè)分割區。col 表示從(cóng)左到(dào)右的列,row表示從(cóng)上(shàng)到(dào)下(xià)的行。每個(gè)有一(yī)個(gè)src屬性,給出了這個(gè)FRAME的内容。它可以是浏覽器(qì)能(néng)顯示的任何一(yī)個(gè)合法URL,或者是另外一(yī)個(gè)FRAMESET。為(wèi)預防遞歸現象,一(yī)個(gè)FRAME不能(néng)包含它本身所在的FRAMESET頁面。要用name屬性定義 FRAME的名字,這樣就(jiù)可以在代碼或者腳本程序中引用它。 請看(kàn)一(yī)段基本的FRAMESET代碼:
FRAME間的鏈接
一(yī)個(gè)FRAMESET結構的頁面,新文檔隻轉載進窗(chuāng)口的一(yī)部分中,而其他頁面則保持靜(jìng)态不變。當用戶點擊FRAME中的鏈接時,新内容就(jiù)在同一(yī) FRAME内打開(kāi)。要讓新内容在其他FRAME中打開(kāi),可以設置标記的target屬性值為(wèi)那個(gè)FRAME的name值。
而且,我們還(hái)可以設置打開(kāi)目标為(wèi)當前可見(jiàn)的任意一(yī)個(gè)FRAME,而不局限于本身的FRAMESET。目标可能(néng)是一(yī)個(gè)嵌套的FRAMESET中的 FRAME,也可能(néng)是其他窗(chuāng)口中的FRAME。但是如果目标FRAME不存在,就(jiù)會(huì)産生(shēng)一(yī)個(gè)帶有目标FRAME名字的新窗(chuāng)口。
下(xià)面舉個(gè)例子說明一(yī)下(xià),假設有一(yī)個(gè)簡單含2-FRAME的FRAMESET,文件(jiàn)名叫做home.html,代碼如下(xià):
文件(jiàn)menu.htm在左邊的FRAME中,其中有一(yī)系列鏈接,點擊它們後新内容将在右邊的叫做content的FRAME中打開(kāi)。下(xià)面是menu.html的代碼:
請注意最後一(yī)個(gè)鏈接中target的定義為(wèi)_parent,這屬于4個(gè)特殊的保留值。它們是:
_parent:在當前FRAMESET位置顯示新href。
_top:在當前整個(gè)窗(chuāng)口位置顯示新href,比如本身FRAMESET位于另一(yī)個(gè)FRAMESET中。
_self:強制在當前FRAME中顯示新href。
_blank:在新窗(chuāng)口中顯示href。
表示客戶端圖形地圖的标記同樣可以應用target屬性,比如:
還(hái)有一(yī)種經常的情況是:Web頁面中的大部分或者全部鏈接都要求在一(yī)個(gè)特别的FRAME中打開(kāi)。這時,可以在頁面的
代碼區使用修飾FRAME
FRAMESET不僅在寬度、高(gāo)度等方面具有可控制的數值,在美觀方面也同樣可以精确設置。
默認情況下(xià),FRAMESET的FRAME間有一(yī)個(gè)凸起的邊沿,表示分割效果。如果不喜歡這個(gè),想營造“無縫連接”的效果,可以在< FRAME>标記中設置FRAMEborder=0來消除它。在3.0及高(gāo)版本的Navigator和Internet Explorer中,如果在
雖然設置了FRAMEborder=0,有些浏覽器(qì)仍舊(jiù)會(huì)在FRAME間保留一(yī)些邊沿的顔色痕迹。這時,可以在< FRAMESET>标記中添加FRAMEspacing=0(對Internet Explorer)或者border=0(對Navigator和Opera)實現真正的無縫連接。
請看(kàn)下(xià)面的代碼是如何使用這些屬性的:
上(shàng)面的代碼中有2個(gè)新的屬性:noresize表示鎖住FRAME而不允許使用鼠标改變大小(xiǎo),scrolling=no表示屏蔽FRAME的滾動條,scrolling=yes表示允許,scrolling=auto表示根據顯示内容需要自(zì)動顯示滾動條。
浮動FRAME
浮動FRAME是HTML4.0規範中的一(yī)個(gè)定義,目前的浏覽器(qì)都支持它。
不象FRAMESET表示的分割區樣子,一(yī)個(gè)浮動FRAME作為(wèi)一(yī)個(gè)内置對象存在于Web頁面上(shàng),其樣式就(jiù)象一(yī)個(gè)頁面上(shàng)的一(yī)個(gè)圖形或者一(yī)個(gè) applet。浮動FRAME使用
而且,浮動FRAME遵循與普通(tōng)FRAME一(yī)樣的target原則:我們可以通(tōng)過它的name來指向它。本原則适用于在任一(yī)類型FRAME中的浮動FRAME,反之易然。浮動FRAME中的沒有traget的鏈接指向它本身,而_parent鏈接則指向包含
注意,對應支持
何時使用FRAME
我們知道,FRAMESET的基本用途就(jiù)是分割浏覽器(qì)窗(chuāng)口,使得窗(chuāng)口的一(yī)部分内容改變,而其他部分保持不變。利用這個(gè)特性,就(jiù)可以實現工(gōng)具欄導航功能(néng),一(yī)個(gè)FRAME内放(fàng)置靜(jìng)态菜單頁面,用戶點擊其中的項目後,在另外的FRAME内顯示相(xiàng)關的内容。這樣就(jiù)可以從(cóng)整體上(shàng)減少文件(jiàn)大小(xiǎo),因為(wèi)不必在每個(gè)内容頁面中再包含菜單項目。
FRAME有2個(gè)明顯的不足:
FRAME從(cóng)另外的級别上(shàng)增加了站點的管理,原因在于超級鏈接不僅僅要指向适當的頁面,而且也會(huì)裝載到(dào)相(xiàng)關的FRAME内。
另外,大多(duō)數浏覽器(qì)在執行“添加書簽”的操作時,隻能(néng)記錄下(xià)FRAMESET的初始位置。不管添加書簽時是位于多(duō)麽深的FRAMESET中,當再次選擇這個(gè)書簽時,就(jiù)會(huì)返回到(dào)FRAMESET的初始頁面。這就(jiù)加大了訪問者浏覽指定内容的難度。
但是,如果好好地組織站點信息,使導航操作隻有不深的幾層,那麽,使用FRAME就(jiù)能(néng)很好地為(wèi)訪問者服務。記住:訪問者都希望簡潔的導航信息。
當然,導航并非是使用FRAME的唯一(yī)原因,也可以使用FRAME創建交換工(gōng)具和交換頁面。而且,FRAME的多(duō)文檔框架結構非常适于被JavaScript應用程序所操作。
用FRAME設計站點
最常用的FRAME結構就(jiù)是“菜單-内容”FRAMESET。一(yī)個(gè)FRAME内放(fàng)置導航菜單,另一(yī)個(gè)FRAME内轉載子菜單,每個(gè)子菜單的鏈接就(jiù)指向本身。唯一(yī)的有target的鏈接都在菜單FRAME内。 請看(kàn)下(xià)面的例程代碼:
Welcome to my site.