網頁制作poluoluo文章簡介:本文提供了關於表單元素和樣式的更多詳細內容,以及在真實的web應用程序設計中表單是如何運用的。
HTML表單一文中介紹了關於表單的創建和樣式化的基礎內容。本文提供了關於表單元素和樣式的更多詳細內容,以及在真實的web應用程序設計中表單是如何運用的。
這一部分提供了關於表單實現和界面布局的新信息。
大量使用class和id標記是違反KISS(保持簡潔)准則的(在CSS盒模型與基礎布局一文中已經解釋過了)。然而,難度大的布局卻經常會在級聯上遇到很多沖突——這些沖突最簡單的解決方法就是在元素中添加標記,以及編寫包含若干選擇符的樣式表規則。
難度最大的布局中到處都是邊緣情況,對這些邊緣情況最好的處理辦法就是給元素賦一個id,來定義一個狹義而唯一的環境。
通常一個實際的表單所需要的不僅僅是按鈕和文本輸入區域,因為我們常常會需要按照選項來構建用戶響應。HTML為有這種要求的設計人員提供了若干選項。
對於網站來說,表單常常是用戶交互和數據搜集的焦點所在。因此,表單對於一個網站的成功與否是非常關鍵的,這就要求我們對表單的設計給予高度的關注。
最容易吸引網站用戶的注意力的是浏覽器畫布(以及穿過布局的線條)上的四個特定點。本文將向你介紹這種現象,並提供一些建議,告訴你如何通過CSS來最大程度地利用這種現象。
前面的文章中我們介紹了如何確保排版的一致性以及最大化地利用空白。本文中我們會更進一步地闡述如何利用em單位來實現一定程度的布局一致性,這種一致性只有通過CSS才能實現。
商業項目中常見的一種要求是,一個被認可的網站設計應當在一種或多種浏覽器上渲染效果一致。本文將會對這種要求的原因,效果,以及用於滿足這種要求的處理方法進行簡要的探討。
通過聯系表單,網站訪客可以直接將e-mail發送到站內信箱中,聯系表單的使用是非常普遍的,這是因為:只要用戶具有激活的e-mail地址,他就可以使用聯系表單,而且聯系表單可以很方便地結合到專門的郵件文件夾中。
在前面的表單一文中,所涉及到的標記就是用來創建這樣的表單的,我們還對這個表單進行了一些修飾:
<form id="contactForm" method="post" action="/cgi-bin/service_email_script.php"> <ul> <li id="nameField" class="required"><label for="realname">Name:</label><input type="text" name="name" value="" class="medium" id="realname" /><span class="note">required</span></li> <li id="addressField" class="required"><label for="address">Email:</label><input type="text" name="email" value="" class="medium" id="address" /><span class="note">required</span></li> <li id="subjectField"><label for="natureOfInquiry">General subject:</label> <select name="subject" class="medium" id="natureOfInquiry"> <option value="support">Support</option> <option value="billing">Accounts & billing</option> <option value="press">Press</option> <option value="other_q">Other questions</option> </select> </li> <li id="acctTypeField"><label for="acctNone">Account type:</label> <fieldset> <label for="acctGold">Gold</label><input type="radio" name="acct_type" id="goldAcct" class="rInput" /> <label for="acctSilver">Silver</label><input type="radio" name="acct_type" id="acctSilver" class="rInput" /> <label for="acctBronze">Bronze</label><input type="radio" name="acct_type" id="acctBronze" class="rInput" /> <label for="acctNone">None</label><input type="radio" name="acct_type" id="acctNone" class="rInput" checked="checked" /> </fieldset> <span class="note">required</span> </li> <li id="availabilityField"> <label for="availability">My account is unavailable:</label><input type="checkbox" name="is_down" id="availability" class="rInput" /></li> <li id="messageField"><label for="messageBody">Comments:</label><textarea name="comments" cols="32" rows="8" class="long" id="messageBody"></textarea></li> <li class="submitField"><input type="submit" value="Send" class="submitButton" /></li> </ul> </form>
除了包含了幾個新元素之外,這段標記之中還添加了許多class和ID,這些class和ID可以在樣式表中加以引用。這樣就可以對每個表單,表單域/值組,以及表單域分別加以引用,而不用管上下文。
此外,通過新的標志符,設計師就可以將必須填寫的表單域和不是必填的表單域區分開來。
最後,這段代碼中還有一些新的類,用來提示自身所在的表單元素應該顯示的信息的數量和類型。通過這些類,就可以將布局細節同時應用到多個任意元素上。
網頁制作poluoluo文章簡介:本文提供了關於表單元素和樣式的更多詳細內容,以及在真實的web應用程序設計中表單是如何運用的。
由於該示例表單只具備最基本的內容,我們用標題替換掉了之前文章的表單中的legend元素。
標簽是最適合用在fieldset中的,而不是label(label更多地是與單個控件相關)。在本例中我們完全忽略掉了legend元素,因為它很難樣式化。
另外還需要注意的是,在源順序中,表單域的“required”標簽最好是放在表單域自身之前,以滿足屏幕閱讀器用戶的需要。然而,為了對這些項目進行合理安排,position屬性(不屬於本文的討論范圍)是必需的。因此,“required”標簽在源順序中是放在其相關控件之後的(即使是在同一個上下文中)。
文本框和提交控件在前面的文章中已經介紹過了。就如上面所說的,我們會遇到很多實際用例,在這些情況中要讓用戶能夠選擇兩個或兩個以上的選項。下面我們將簡要地談一下涉及這些操作的元素。
… <label for="availability">My account is unavailable:</label><input type="checkbox" name="is_down" id="availability" class="rInput" />
選擇加入或選擇退出這類問題通常都是通過這些控件之一來實現的。此外,這類控件還可以用在需要從幾若干選項中任選幾種的時候,比如說,一張個人愛好清單。
… <label for="acctNone">Account type:</label> <fieldset> <label for="acctGold">Gold</label><input type="radio" name="acct_type" id="goldAcct" class="rInput" /> <label for="acctSilver">Silver</label><input type="radio" name="acct_type" id="acctSilver" class="rInput" /> <label for="acctBronze">Bronze</label><input type="radio" name="acct_type" id="acctBronze" class="rInput" /> <label for="acctNone">None</label><input type="radio" name="acct_type" id="acctNone" class="rInput" checked="checked" /> </fieldset>
通過一組單選框,你可以把若干選項排列在一起,在這些選項中只能選擇一個。比如,在1-5或1-10的等級范圍內指定一個數值,這個例子直觀地闡述了radio控件的使用。
跟其它表單控件不同的是,radio控件不僅是允許,更是要求各個相互關聯的控件的name相同。
這些元素的得名是來自於常見的機械式調音的汽車收音機界面。跟那些常見於數字調音收音機的由程序控制的預設不同,機械“預設”按鈕只要一按下,就會從一系列波段中將收音機聚焦在要收聽的那個波段上。
checkbox和radio控件都有checked屬性,只要設置了該屬性,就會在初次渲染的時候默認激活該控件。
關於是用radio控件,還是checkbox控件的問題,最好是在考慮完各種不同因素後再作決定。如果你想讓用戶對一項主觀性的選擇(比如,加入郵件列表)進行確認,那麼checkbox控件可能是最好的選擇。如果你想讓用戶在兩個客觀性的選項(比如說性別)中做出選擇的話,就應該用radio控件。
網頁制作poluoluo文章簡介:本文提供了關於表單元素和樣式的更多詳細內容,以及在真實的web應用程序設計中表單是如何運用的。
… <label for="natureOfInquiry">General subject:</label> <select name="subject" class="medium" id="natureOfInquiry"> <option value="support">Support</option> <option value="billing">Accounts & billing</option> <option value="press">Press</option> <option value="other_q">Other questions</option> </select>
select和option元素跟一系列radio控件的效果差不多,但占的空間卻要少得多。是否用select元素來代替一堆radio控件,這通常是關系到如何使用用戶界面空間的問題;對於電子商務網站裡的一長串地理區域的列表或部門列表這樣的內容,一般都是用select元素比較好,而簡短的選項(比如,是/否,真/偽,年齡段,收入范圍)則應該用radio控件來排列。
慎密的自測表明,操作select列表所需的運動控制水平是很高的,但隨著其包含的option數量的增加,所需的控制水平的增長是很微小的。實際結果就是,簡短的互斥選項列表最好是采用帶有適當label的radio控件的形式。
fieldset元素最重要的目的就是為一組緊密相關的控件劃分一個單獨的語境(比如將一組text控件歸為電話號碼,將select元素歸為日期,等等。)。
既然本文所涉及到的新概念已經概述完了,現在我們就該來看一看實際的應用——下面的十二個示例全面包含了Web表單開發過程中遇到的各種設計概念和樣式化問題。
強烈推薦讀者將示例材料保存到自己的硬盤上,並對其中的樣式表規則進行嘗試。
這些示例按照源代碼順序逐漸深入,而不是按照樣式表的制作順序。之所以這樣做的原因和含義將在本文後面部分進行討論。
我們從html { margin: 0; padding: 0; }規則開始,第一步是對包含該表單的頁面的body進行配置。
body { margin: 0; padding: 1.714em; background-image: url(images/bg_grid.gif); font-size: 14px; font-family: Helvetica,Arial,sans-serif; line-height: 1.714em; }
現在頁面容器已經做好了,接下來的幾個步驟就是改變或刪除用戶代理樣式。
h3 { margin: 0 0 1.2em 0; border-bottom: .05em solid rgb(0,96,192); font-size: 1.429em; line-height: 1.15em; } form { width: 35.929em; margin: 0; } ul { margin: 0; padding: 0; list-style-type: none; }
對h3進行樣式化的目標是創建24像素高的內容框,下面要緊跟24像素的空隙,也就是:
(((14 × 1.429) × 1.15) + (20 × .05)) ≈ 24 14 * 1.429 ≈ 20; 20 * 1.15 == 23; 20 * .05 == 1;
(20 × 1.2) = 24
……現在來為表單元素創建容器。
li { clear: both; height: 1.714em; margin: 0; } fieldset { height: 1.429em; margin: 0 0 -.143em 0; border: 0; }
良好的平面設計(隨之而來的就是良好的界面設計)最大的優點之一就是元素是按照可預測的間距來鋪設的。這些間距又稱作柵格。
上面已經說過,本示例中的最小柵格單元是24像素的正方形,但比起確保設計元素按照細小而可預測的間距來放置,保證布局的協調性所要考慮的事情更多。真正有效的柵格應當具備如下特性:
明顯具有這些特征的布局將會更富吸引力,而且更容易理解,因此也將有利於提高網站的可用性。
網頁制作poluoluo文章簡介:本文提供了關於表單元素和樣式的更多詳細內容,以及在真實的web應用程序設計中表單是如何運用的。
大多數專業人員用來創建站點布局構圖的工具是Adobe Photoshop,它的優點之一就是能輕松使用網格線。為了在Photoshop中顯示最小柵格,你可以選擇View → Show → Grid,這樣就能按照在Guides & Grid Preferences中設置的間距來顯示網格了。
通過選擇View → Rulers,切換到移動工具,將標尺上的指針往標尺外拖動,就可以對諸如列之類的東西添加定位標記了。
正如所指出的那樣——示例樣式表中的一些規則強化了這個概念——在一個布局中實施最小柵格最好的方法是依靠em單位。然而,僅靠em是不夠的;設計師在處理替換字號,空隙,以及邊框時還必須保證分數到小數的轉換正確。
在示例樣式表中還展示了另一種實現柵格的技巧:使用與文檔中各種元素和列的大小有關的class標記。如果保持這些標記的一致的話,大部分實施柵格的工作都可以通過它們來完成。
使元素對齊到柵格就是為標簽和表單控件設置布局屬性。
label { display: block; float: left; clear: left; width: 10.286em; overflow: auto; padding-right: 1.714em; text-align: right; } input { height: 1.143em; border: .071em solid rgb(96,96,96); padding: .071em; line-height: 1; }
圖1:俄勒岡州 Portland的早春景色。我們對這幅照片添加了線條,來闡釋三分法則;注意看右下方的交叉點和形成該交叉點的線條是如何約束視覺活動的。照片作者版權所有,©2000。
在考慮如何實現優秀的布局的時候,有一個普遍存在的規律:如果你將布局或圖片分成三部分,浏覽者的注意力就會集中在分隔這些部分的線條(尤其是線條的交點)上。如果沒有在設計中運用這個奇異的規律的話,你的布局就會顯得不均衡。
對這種現象最簡單的解釋就是,這四條線與符合黃金比例的柵格非常接近,該比例的值接近六分之一。在各種數學領域和自然世界中經常可以遇到黃金比例的例子。
圖2:msnbc.msn.com的屏幕截圖,上面加上了七個金色的矩形。挨在一起的第四和第五個矩形整體說明了頁面布局柵格的本質。
該示例表單的布局中,表單控件都對齊到一個左邊緣,這個左邊緣位於從左邊到假想的表單右邊緣的整個距離的三分之一處,這是經過慎重考慮後出的選擇。而表單的垂直布局就更是如此了——將標題考慮在內,文本區域正符合前面所說的那兩條規律。就算不將標題考慮在內,必填的表單域也符合最重要的那條規律。
對於設計師來說最重要的一點就是,如果在樣式表設計一開始的時候就將三分法則和柵格納入考慮范圍的話,樣式表的規范化工作就會大大簡化。
為了在水平和垂直方向上維持我們想要的柵格,還需要做一些細節調整。這些調整幾乎完全是裝飾性的。
textarea { height: 4.714em; margin-bottom: .286em; border: .071em solid rgb(96,96,96); padding: 0; } select { display: block; float: left; height: 1.571em; font-family: Futura,'Century Gothic',sans-serif; } option { font-size: 100%; }
前一個示例對字體渲染進行了一些調整;現在我們接著來完成這個工作。
input, textarea { display: block; float: left; overflow: hidden; font-family: Futura,'Century Gothic',sans-serif; font-size: 1em; } input, textarea, select { margin-top: 0; font-size: 100%; }
我們需要將各個文本控件的寬度改變一下,不讓它們跟默認值相等。
.medium { width: 11.714em; } select.medium { width: 12em; } .long { width: 20.429em; } .rInput { border: 0; }
我們這個表單的提交按鈕等候處理已經等了很久了……
.submitButton { display: block; clear: both; width: 7.2em; height: 2em; margin: 0 0 0 16.8em; border: 1px solid rgb(128,128,128); padding: 0; font-size: 10px; text-align: center; }
把“required”標簽放到它該去的地方。
li.required span.note { display: block; width: auto; float: right; color: rgb(128,128,128); font-size: .714em; line-height: 2.4em; font-style: italic; }
終於該來解決radio控件的沖突問題了,也就是說這些控件跟源順序中位於它們之下的表單域之間的沖突問題。
fieldset label { margin-right: .25em; padding-right: 0; line-height: 1; } fieldset .rInput { margin-right: .75em; } fieldset label, fieldset .rInput { width: auto; display: inline; float: none; font-size: .857em; } li.required fieldset { width: 18.857em; float: left; }
我們來做最後一步,將剩下的一點小小的參差對齊,讓整個表單井井有條…
#acctTypeField fieldset { padding: .286em 0 0 0; line-height: normal; } #acctTypeField .rInput { margin-top: .167em; } #availabilityField label { height: 3.143em; padding-top: .286em; line-height: normal; } #availabilityField .rInput { margin-top: .286em; } #availabilityField, #messageField { height: 1%; overflow: auto; }
前面所有的樣式規則都是針對Opera或Safari的(隨你挑,這兩種浏覽器都表現得相當好)。下面的這些樣式規則是專門針對IE的,我們通過CSS文件中的link條件注釋代碼塊來指定它只針對IE。
h3 { margin-bottom: 1.2em; } li { margin: 0 0 -.214em 0; } select { height: 1.429em; } textarea { height: 4.571em; } fieldset { height: 1.583em; padding-top: .417em; } .medium { width: 13.429em; } select.medium { width: 13.714em; } .long { width: 20.286em; } fieldset .rInput { border: 0 !important; } #subjectField { margin-bottom: -.214em; } #availabilityField .rInput { margin-top: .286em; } #messageField { padding-bottom: .286em; } input.submitButton { margin-top: .15em; } * html input, * html textarea { float: left; } * html select { font-size: .643em; } * html select.medium { width: 21.364em; } * html textarea { height: 4.643em; } * html #subjectField { margin-top: .071em; margin-bottom: 0; } * html #availabilityField label { padding-top: 0; } * html input.submitButton { margin: .1em 0 0 7em; }
本文示例的最後一部分展示了單獨為IE6和IE7編寫的樣式表,而盡職的網站設計團隊如何針對各種不同的浏覽器進行處理,還需要更多的討論。
Web的現實情況是,用戶們在形形色色的環境下使用著五花八門的浏覽器。有的浏覽器是老式的,而有的卻是最前沿的。有的浏覽器是在配置齊全的計算機上運行的,而有的卻是在電話之類的移動設備上運行。所有浏覽器都是在特定的操作系統上開發的,然後再移植到其它的標准支持程度不同的操作系統上去。除了Opera,所有的浏覽器發行商所發布的浏覽器都被設計成要跟一系列產品中的其它類型的產品搭配使用——這種設計要求增加了這些浏覽器的復雜度,而這種復雜度對於浏覽網頁這樣的簡單任務來說是不必要的。
多種多樣的浏覽器優缺點已經夠設計員們琢磨的了,然而現實中卻還存在著漏洞的問題——安全漏洞,組件漏洞,尤其是還有渲染漏洞。Safari 3.x的用戶們發現,這些演示文檔揭示出他們自己的浏覽器在某些地方存在著令人郁悶的渲染漏洞。
解決這些問題最好的辦法就是定義支持等級。這種做法,又叫做“分等級浏覽器支持”,最先是由Yahoo!的界面開發團隊宣傳開來的。
大體上說來,支持等級分成四個大類:
至於形成該支持等級定義的要求收集過程以及將浏覽器歸類至各個等級之下的詳情,實在是又長又乏味,由於本文已經夠長了,這些內容就略去不談了。
網頁制作poluoluo文章簡介:本文提供了關於表單元素和樣式的更多詳細內容,以及在真實的web應用程序設計中表單是如何運用的。
在上述的背景說明中,我們將示例的出場順序按照樣式表源順序來安排,而不是按照樣式表中實際的規則添加順序來安排。之所以這麼做,原因包括:
Opera 9.6 的 OS X版是開發用的用戶代理;除了這個附加說明和在上面提到過的其它說明之外,下面是對該樣式表進行修改和增添的一般順序:
上述的過程以最寬泛的規則開始,逐漸變得越來越具特異性,直到個別浏覽器的特定缺陷被囊括其中……與樣式表自身的源順序非常相似。然而,它們的結果並不完全相關。這是因為,浏覽器渲染引擎的多樣性以及像float語境之類的東西的特性,在混合進多種樣式的時候導致了不可意料的結果,因此實際的處理比起折返,調整,以及再考慮要更復雜。
本文提供了一個關於表單樣式化和布局的構思慎密的基礎,但在此基礎之上還可以進行更加深入的研究。如果設計師需要創建一個向標准靠攏的web表單,由操作系統(創建Web表單控件時借用了其組件)造成的麻煩,以及浏覽器渲染引擎之間的差異會使得擺在他面前的任務更具有挑戰性。本文對那些有關於這種任務的浏覽器缺陷進行了初步的實驗,並說明了如何達到對web開發中較難的一個方面的熟練掌握。
在下面的表格中,括號內加了星號的數字表示它們是無限循環小數;比如0.2(6*)就等於0.266666666666666…(6是無限循環的)。
因為表格是從左到右閱讀的,表格的左邊是最接近於零的數值,並且越往右越大。
x
1/x
2/x
3/x
4/x
5/x
6/x
7/x
8/x
9/x
10/x
11/x
12/x
13/x
14/x
15/x