Transcript 設定分割視窗的捲軸
第 15 講次 (book2:chap8+chap9) 網際網路導論 嘉義大學資訊工程學系李龍盛老師 [email protected] 本著作除另有註明外,採取創用 CC「姓名標示-非商業性-相同 方式分享」台灣3.0版授權釋出 1 Frame 互動式表單 Content 2 frame 3 瀏覽分割視窗的網站, 會發現視窗中所分割出來 的子視窗相當於各自獨立的瀏覽器, 每個子視窗 都有自己的 URL。有時候還會看到在某個分割視 窗內按下的超連結, 內容卻在另一個分割視窗中 出現。 對網頁的設計者而言, 分割視窗可以對網頁做更 多的掌控與變化, 也能使整個網站顯得更具層次 感, 讓瀏覽該站的使用者不至於兜幾個圈子就迷 路, 只要設計一個導覽子視窗, 隨時可以輕鬆地回 到首頁。 分割視窗的操作特色 Frame主要的部分是 <frameset> 、 <frame> 、<noframes> 幾個簡單的標籤。 Frame 實作初探 <frameset> 與 <body> 標籤具有同等地位, 也就是說一個 HTML 檔案中只能存在兩者其中之 一。所以在檢視有分割視窗的網頁原始碼時, 只 會看到 <frameset> 標籤, 而視窗中的內容則 放在其它檔案內。但是有一個例外的情況, <body> 可以放在 <noframes> 標籤內。如此 當使用者的瀏覽器不支援 <frameset> 標籤的 時候,仍然可以看到放在<noframes> 標籤的 內容。 製作分割視窗-<frameset> 我們先從簡單的例子介紹 <frameset cols=“*,*”> <frame src=“1.htm”> <frame src=“2.htm”> </frameset> <frameset cols="*,*">...</frameset>這對 標籤將整個視窗從中劃分成左右兩個相同大小的 分割視窗。而 <frame> 便決定了每個子視窗中 的網頁內容。 <frameset>例子 <frameset> 標籤是用來分割子視窗的, 且必須與cols 或 rows 屬 性的其中一種互相配合使用, 以決定是由上而下或是由左至右來分割 視窗。 cols、rows 除了表示橫向或垂直分割外, 也能定義要切割成幾個子 視窗, 及每個子視窗所佔的大小或比例。這兩種屬性值的設定方法都 一樣, 只是上下分割或左右分割的差別而已。 <frameset cols="*,*"> 標籤, 會將視窗劃分出左、右兩個相等視 窗。同理推之, <frameset cols="*,*,*"> 標籤會將視窗劃分成左、 中、右三個相等的子視窗。 其中每個 『,』 就代表分割 1 次, "*" 則表示子視窗會隨著瀏覽器的 主視窗自動調整尺寸, 例如 "*,*" 表示兩個一樣大小的子視窗。如果 您使用 "2*,*", 則表示第一個子視窗是第二個子視窗的 2 倍, 即使 您調整瀏覽器的視窗大小也會得到相同的比例。 設定分割窗大小- <frameset cols>、<frameset rows> 其實調整分割視窗大小的設定值, 除了 “*” 外, 也可以 直接指定百分比數值。筆者將上面的範例改寫如下: <frameset cols=“66%,33%”> <frame src=“1.htm”> <frame src=“2.htm”> </frameset> 這個結果與 "2*,*" 的結果一模一樣。而 100% 當然是 指整個瀏覽器視窗的大小。 調整分割視窗大小還有一個辦法, 就是直接填上視窗所佔 的圖點數目。將前面範例中的 <frameset cols=“2*,*”> 改寫成 <frameset cols=“120,*”>, 則 左邊子視窗會固定在120 個圖點的大小, 其餘的部分則組 成右視窗, 且右邊的視窗大小會隨著整個瀏覽器視窗大小 做動態調整。 以百分比設定分割子視窗大小 剛剛看了幾個用 <frameset> 標籤分割視窗的 範例, 很明顯的會看到一條用來分割窗格的分割 線。以下是幾個 <frameset> 標籤中, 用來設定 邊界的屬性: ◦ frameborder:設定是否顯示窗格的邊界。1 或 yes 是預設值, 表示要顯示邊界;0 或 no 則是不顯示邊界。 ◦ border:用來設定窗格邊界的厚度。 ◦ framespacing:效果與border相同。 設定 frameset 的邊界 scrolling 屬性決定分割視窗中的捲軸是否顯示出來。 <frame scrolling=“no|yes|auto”> scrolling 的預設值為 auto, 也就是說分割視窗內所 顯示的內容沒有超出這個視窗的大小時, 就不會加上 捲軸; 一旦所顯示的內容超出分割視窗的大小時,則自 動加上捲軸以供使用。 所以當指定 scrolling="yes" 時, 不管內容多寡, 瀏 覽器都會在該分割視窗加上垂直與水平的捲軸。反之, 當 scrolling="no" 時, 瀏覽器不會為該分割視窗加 上任何捲軸。 設定分割視窗的捲軸-<frame scrolling> 若不希望使用者在連上網站後, 任意更動某些分 割視窗的大小, 可以在該分割視窗的<frame> 標籤內加上 noresize 屬性。如此便能限制使用 者調整這個分割視窗的大小。 <frame noresize> 鎖住分割視窗的大小-<frame noresize> 瀏覽網頁時, 視窗的上下左右邊界都會留下一些 空白, 以增加美觀。而分割視窗時, 每個子視窗都 被當作獨立的瀏覽器視窗, 所以每個分割視窗的 四邊也都可以設定內容與邊界的距離。 <frame marginwidth=“距離”> 若要設定上下間距的大小, 則可以使用 marginheight 屬性。 設定視窗內容與上下左右邊界的距離- <frame marginwidth> 除了早期的瀏覽器, 現在幾乎沒有不支援 Frame 的瀏覽器了。但是萬一, 使用者的瀏覽器無法顯 示分割視窗時,這時 <noframes> 標籤就有用 了, 您可以在 <frameset>...</frameset> 之 間加上 <noframes>...</noframes> 標籤。 然後在 <noframes> 標籤中加入一段說明文字, 則不支援 Frame 的瀏覽器, 仍可以顯示這段說明 文字。 瀏覽器不支援 Frame 時所顯示的訊息 -<noframes> 巢狀架構應用到 Frame 的編輯上, 則是視窗分割之 後, 在某子視窗下又可以再次分割出更多的子視窗。 <frameset cols=“*,*”> <frame src=“1.htm”> <frameset rows=“*.*”> <frame src=“2-1.htm”> <frmae src=“2-2.htm”> </frameset> </frameset> 第一組 <frameset> 標籤將主視窗分成左右兩個後, 第二組 <frameset> 標籤又再將右邊視窗分割出上、 下兩個更小的子視窗。 <frameset> 的巢狀結構 如何讓使用者在按下子視窗中的超連結, 卻由另 外一個子視窗中顯示這個超連結的內容。 首先我們必須為目的視窗 (要顯示連結內容的分 割視窗) 用 name 屬性取個名字。然後在超連結 <a href> 語法中, 加上 target 屬性指向目的視 窗。 在子視窗顯示超連結內容-<frame name>與 <a href target> target 屬性除了用來指向既有的分割視窗外, 還有幾個特殊的設定 值, 可供我們操控分割視窗, 這些設定值皆以 “_” 底線符號為起頭。 ◦ target="_blank“ 這個屬性值會讓瀏覽器開啟另一個視窗, 並將連結的網頁顯示在新的瀏覽器視 窗上。 ◦ target="_self" 這是 target 的預設值, 會將連結的網頁顯示在目前這個視窗內。您也許會問, 那要這個設定值有什麼用? 連結的網頁本來就預設顯示在目前視窗內! 如果目前的網頁上設定 <base target="某分割視窗">時, 會讓連結的畫面 呈現在某個分割視窗中。如果您希望某些連結網頁要留在目前視窗的時候, 這 個屬性值就派上用場了。 ◦ target=“_top” 這個屬性值會將瀏覽器內所有的分割視窗全都拆掉, 使連結的網頁顯示在瀏覽 器的主視窗內。當要從自己的網頁連結到別人的網頁時,最好使用這個屬性, 免得把別人的網頁內容〝鑲〞在自己的窗格中。 ◦ target="_parent“ 這個屬性值會將上一層 <frameset> 所設定的分割視窗拆掉, 使連結的網頁 顯示在上一層分割視窗內。 target 的進階應用 由於將別人的網站放在自己的 frame 中, 會有侵 權的爭議, 所以最好不要將別人的網頁放入自己 的窗格中。建議您在該超連結的 <a href>... </a> 標籤內, 加上 target="_top" 敘述(或設 成 ="_new") 即可。當然如果該頁上所有的超 連結都會通往其他網站, 那麼我們也可以直接在 檔案開頭就先設定好 <base target="_top"> 標籤。 Frame 與 Frame 相疊時, 如何回到 原來的網頁 當顯示在分割視窗中的網頁又自行分割出更下層 的視窗時, 若希望使用者瀏覽完後又想回到上一 層的分割視窗,這時就得用到 target=“_parent” 屬性值了。 Frame 與 Frame 相疊時, 如何回到 原來的網頁 本章的主題全都集中在 <frame> 等分割視窗的 標籤上, 但偏偏 <frame> 標籤又無法與 <body> 標籤共用。為了改善這種情形, 微軟首 先提出 Inline Frames 的觀念。 IE 可以在 <body> 標籤中置入 frame, 這時的 frame 性質就和 <img> 標籤所置入的圖片 (Inline image) 非常近似,所以把它稱為 Inline Frames。 嵌在網頁中的子視窗 首先要注意 <iframe> 標籤不是用在 <frameset> 之中, 而是用在 <body>...</body>之中。它的功能是在一般 的網頁中建立窗格 (inline frame), 感覺有點像 電視上的子母畫面。 定義窗格-<iframe> 剛剛我們說用 iframe 所做出來的窗格可當實際 的瀏覽器使用, 至於窗格中的超連結, 若未指定 target 屬性, 則按下超連結時, 目的網頁也都會 直接顯示在窗格中。 定義窗格-<iframe> 了解 <iframe> 之後, 接著介紹各項屬性的作用: ◦ align:窗格與文字對齊的方式, 有 left、right、top、 middle、與 bottom五種。 ◦ frameborder:設定窗格邊線的厚度。 ◦ height、width:設定窗格的高度和寬度。 ◦ marginheight、marginwidth:設定顯示內容與 上下邊界或左右邊界的距離。 ◦ name:設定窗格的名稱, 可以和target 配合使用。 ◦ scrolling:設定捲軸顯示的方式, 有yes、no、與 auto 三種。 <iframe> 的屬性 互動式表單 24 要設計可輸入資料的網頁並不困難, 麻煩的是如何 處理使用者所輸入的資料。以目前而言, 大多數的 表單資料都是透過 ASP (Active Server Page)、 PHP (PHP: Hypertext Preprocessor)、CGI (Common Gateway Interface) 程式來處理。 不過也有比較單純的處理方式, 就是將資料以電子 郵件的方式寄到自己的電子信箱中, 事後再用人工 或程式來處理這些郵件 (資料)。 前言 所有的表單內容都是放在 <form> .. </form> 標籤之中, 包括表單中的說明文字、供使用者輸 入的欄位等等。 在文件中可設定多個表單, 但是不能做巢狀的表 單, 也就是不能在 <form> 標籤中加入第二個 <form> 標籤。 建立表單-<form> 在一般表單中所看到的輸入欄位, 幾乎都是用 <input> 標籤來設定的, 只要修改其中的屬性, 就會出現不同的輸入欄位。 <input type=輸入欄位種類 name=“欄位名稱 ” value=“初始值”> 其中 type 屬性就是用來設定要使用的輸入欄位 種類, 例如一般的文字輸入欄 (text)、單選鈕 (radio)、多選鈕 (checkbox)、或是按下後就會 送出表單資料的按鈕 (button) 等等。 表單中的輸入欄位-<input> 這是最常見的輸入欄位之一, 其設定為 type=“text”, 這樣就會出現一個可供輸入的方 框。 如果想要調整方框的長度, 則可再加上 size 屬性 。若要限制使用者輸入的資料長度, 則可用 maxlength 加以設限。 請輸入你的電子郵件:<input type=“text” name=“email” size=“40” maxlength=“30”> 建立可輸入文字的欄位-<input type="text"> 將 type 設為 passward, 則可得到一個與 text 相似的輸入欄位, 不過在這個密碼欄中輸入的文 字在螢幕上都會以 『*』 或 『●』 符號取代。 密碼:<input type=“password” name=“psword” maxlength=“12”> 建立可輸入密碼的欄位-<input type="password"> 所有的表單中都會有一個送出資料的按鈕, 當使 用者按下此鈕時, 瀏覽器就會將使用者在表單中 所輸入的資料送出。 使用 type=“submit” 即可做出用來送出資料的 按鈕, 由於不須從這個按鈕本身得到資料, 所以不 用設定其 name 屬性。 此時在 value 屬性所設的文字, 會變成出現在按 鈕上的文字。 <input type=“submit” value=“送出資料”> 建立送出資料的按鈕-<input type="submit"> 有一個送出資料的按鈕, 相對的還有一個清除表 單中已輸入資料的重設鈕 (Reset), 其目的是讓 使用者在發現有輸入錯誤時, 只要按下此鈕,就能 將目前表單中所有的資料都清除掉, 以便重新輸 入。 <input type=“reset” value=“資料重填”> 建立清除輸入資料的按鈕-<input type="reset"> 表單資料在傳送時, 其資料的排列方式, 就是依各 欄位在表單中出現的先後次序, 依序以 '&' 分格 排列。至於每一欄資料則套上了我們在 <input>標籤中用 name 屬性所設的內容而成 為:『欄位的名稱=使用者輸入的值』的格式。 9-1-6 應用實例 要做出一組供使用者只能選擇其一的選擇項目時,可以 使用 type = radio,此時就會出現一個圓圈, 只要用 滑鼠在這個圓圈上按一下就會出現一個黑點, 表示已 選擇了此項。 至於要讓多個單選鈕成為同一組的選項, 只要將這幾 個單選鈕的 name 屬性設定成相同的名稱即可。 <input name=“sex” type=“radio” value=“male”>男 <input name=“sex” type=“radio” value=“female”>女 只能選擇一項的單選鈕-<input type="radio"> 若要提供可讓使用者複選的選項, 則可使用 type=checkbox 設定, 一般也是將同一組的選項設為相 同的名稱。 <input name=“course” type=“checkbox” value=“math”>數學<br> <input name=“course” type=“checkbox” value=“Eng”>英文<br> <input name=“course” type=“checkbox” value=“phy”>物理<br> 勾選其中的2項, 其傳回的資料就會是 “course=math& course=phy"。 可重複選擇的多選鈕-<input type="checkbox"> 使用影像做為輸入欄位時是以圖片做為使用者輸 入的界面, 不過使用影像的輸入欄位時, 使用者所 輸入的資料將是滑鼠在圖形上的座標值。 <input name=“coods” type=“image” src=“image/pic.jpg” align=“middle”> <br> 在圖上點選一下,就會送出圖形座標! 送出圖片的座標值-< input type="image" > name 屬性要加在 <select> 標籤中, value 屬性則 是要加在 <option> 標籤中,不過 value 屬性是可 有可無的, 因為當使用者選擇了未設定 value 屬性的 項目時, 送出的值就會是該項目的文字內容。 <select name=“course”> <option value=“1” selected>數學 <option value=“2”>英文 <option value=“3”>物理 </select> 下拉式的列表欄-<select> 與 <optioin> 列表欄預設的大小只有一列, 要檢視列表中的其它選 項都必須按下右邊的向下箭頭才會列出。 使用 size 屬性則可自由設定方框的大小, 例如改成 3 列, 這樣就只會列出 3 個選項供使用者選擇, 而使 用者也可用列表欄右邊的捲軸來捲動列表的內容。 <select name=“course” size=“2”> <option value=“1”>數學 <option value=“2”>英文 <option value=“3”>物理 </select> 調整列表欄方框的大小- <select size> 如果設定的列數超過 <option> 項目的個數, 例 如將上例改成 size="7", 則多出的三列都會變成 空白。 如果列表欄是個複選題, 而不是只能選擇一項的 單選題, 那麼只要加上 multiple 屬性即可, 此時 使用者可同時按下 [Ctrl] 鍵及滑鼠左鈕,就可以 在列表欄中選擇一個以上的項目。 可選擇多項的列表欄- <select multiple> 使用 <input type="text"> 時, 雖然可用 size 屬性設定欄位 的寬度, 不過仍是只有一列的輸入欄位, 如果輸入的文字超過欄 位大小, 則文字就會往左推, 前面的字就看不到了。 如果要建立像是在留言板或討論區那樣的文字輸入欄位, 就要使 用 <textarea> 標籤了。和一般輸入欄位不同的是, <textarea> 標籤是成對出現的, 至於欄位的高度與寬度則是 分別用 rows 及 cols 屬性來設定。 由於 rows 及 cols 只是設定文字輸入欄在畫面上有幾列幾行, 所以在某一列輸入超過 cols 所指定的字元數, 或是超過 rows 所設的列數時, 捲軸就會自動變為可捲動的, 讓使用者能捲動欄 位內容, 以便查看被捲出欄位外的內容。 如果想在 <textarea> 的欄位中加上預設的輸入內容, 可以放 在 textarea> ..</textarea> 標籤之間。 區塊式文字輸入欄位-<text area> wrap屬性可用來設定在輸入超過欄位寬度的文字時, 是否要自動換行: ◦ 1.<textarea wrap="off"> : 當設定 wrap=“off ”時, 輸入的欄位會出現水平方向的捲軸 。當輸入的資料長度超過欄位寬度的時候, 不會自動換行。 ◦ 2.wrap=“virtual” 及 wrap=“physical”: 這兩項在設定都會讓輸入的文字在超過欄位寬度時自動換行 。但是在送出資料時, wrap=“virtual” 只有在按 [Enter] 鍵的地方會換行, 其它部份並不會自動換行。而 wrap="physical" 則會依照螢幕上所見到的方式將輸入的 資料送出。 設定區塊式文字輸入欄自動換行- <textarea wrap> tabindex=“編號”屬性的作用是設定使用者按 [Tab] 鍵時, 切換欄位的順序。 另一個指定欄位存取方式的屬性則是 accesskey, 其作用就是設定一個可直接移到該 欄位的快捷鍵。 欄位的存取設定 <fieldset> 標籤的用途是將多個輸入欄位組合 在一起, 瀏覽器會自動用一個方框將這些輸入欄 位框起來, 讓使用者能看得比較清楚。 <fieldset> 標籤的用法很簡單, 只要將想放在一 起的輸入欄位都放在 <fieldset>...</fieldset> 之中即可。 將多個輸入欄位框在一起- <fieldset> <legend> 標籤需放在 <fieldset>...</fieldset> 之中, 它是用來做為 <fieldset> 欄位的說明, 在 <legend>...</legend> 中的文字會出現在 <fieldset> 的框線上面, 例如下面這個例子: 在框線顯示說明文字-<legend> 另外還有一種表單標籤 <isindex>, 一般是做為資料庫查詢用的, 比 較有趣的是, 這個標籤需放在 <head> 標籤之間。 使用這個標籤時, 文件中會出現一個文字輸入欄位, 在此輸入的內容 就會成為查詢用的關鍵字。 <head> <isindex action=“處理表單程式URL” prompt=“請輸入查詢:”> </head> action 屬性不一定要使用, 在未指定 action 屬性時, 輸入的內容將 直接傳送到目前的 URL 上, 這也是一般 <isindex> 標籤較常使用 的方式。 prompt 屬性可用這個標籤來設定輸入欄位前的提示文字。 使用 <isinedx> 標籤不需用到 submit 鈕, 因為在使用者按下 [Enter]鍵時, 瀏覽器就會送出使用者輸入的資料。 <isindex>標籤通常是做搜尋的, 而 <body>可用來放置有關搜尋 的說明文字。 建立搜尋用表單-<isindex> Based on 第八章與第九章 最新HTML&CSS網頁程式設計,施威銘研究室 著,台北:旗標出版公司,F6462。 reference 45