ASP.NET 中的網頁可及性支援
更新:2007 年 11 月
ASP.NET 可以協助您建立能夠由行動不便人士存取的 Web 應用程式。無障礙 Web 應用程式可讓使用者利用輔助技術 (例如,螢幕助讀員) 使用 Web 網頁。無障礙 Web 應用程式有下列優點:
它們擁有最廣泛的使用者。
它們涉及的設計原則經常會讓所有使用者都受益,而不只是行動不便人士。
它們滿足了許多要求所有 Web 應用程式都無障礙之機構的需求。
了解了網頁可及性方針,以及 ASP.NET 如何協助您滿足這些方針之後,您便可以為行動不便人士建立更易於互動的應用程式。
網頁可及性方針
各種組織都針對如何建立無障礙應用程式發佈了方針。下面是一些熟知的方針:
Web 內容可及性方針 1.0 (WCAG)。
這些標準是由全球資訊網協會 (W3C) 所開發,並成為許多其他可及性標準的基準。其包含了全世界政府所使用的可及性標準。
如需 Web 內容可及性方針,請移至 World Wide Web Consortium (W3C) 網站。
WCAG 方針定義了不同層級的優先權,這些優先權使用從 1 到 3 的級數表示與每個方針相關的檢查點。一些機構要求所有網站都符合全部優先權 1 和優先權 2 的檢查點。
508 條款。
美國政府在復健法案 (Rehabilitation Act) 第 508 條中定義了與 WCAG 類似的可及性標準。
如需 508 條款的方針,請移至 http://www.section508.gov。
Microsoft 可及性方針。
如需 Microsoft 可及性方針,請移至 Microsoft Accessibility,並移至 MSDN Library,然後搜尋<Accessibility Design Guidelines for the Web>。
測試可及性
在有限的程度上,您可以使用協力廠商提供的各種工具,測試 Web 網頁與可及性標準的符合程度。
如果您有開發環境 (例如,Microsoft Visual Studio 2005),則該環境可能會提供可及性測試工具。如需詳細資訊,請查詢產品文件。不過,設計階段可及性驗證工具不會測試動態產生的輸出 (例如,ASP.NET 伺服器控制項或您自己的程式碼所呈現的標記)。除了使用設計階段可及性驗證工具之外,您還應測試網頁的輸出。
自動化的可及性測試無法對網頁或網站可及性執行完整的診斷。許多可及性方針需要您判斷網頁上的功能是否符合方針。例如,自動化的測試可以判定您是否已為網頁上的所有影像提供了 alt 文字。然而,自動化的測試卻無法判定該 alt 文字是否描述這個影像。類似地,自動化測試也無法客觀地判定網頁上所使用的色彩能否為要求高對比文字的讀者展現足夠的對比。因此,若要建立真正無障礙的應用程式,您必須熟悉方針的特定內容和目的,這樣才能建立符合可及性方針的網頁。工具無法執行的另一項可及性檢查是:只有圖形的影像 (例如,圓角的表格框線) 必須存在 alt 文字。否則,螢幕助讀員將讀取影像檔。如果 alt 文字是空的,則螢幕助讀員將正確地略過該影像。
ASP.NET 中的可及性功能
在大多數情況下,ASP.NET 控制項會呈現產生的網頁符合可及性標準的標記,或者公開 (Expose) 為使網頁無障礙而設定的屬性。不過,ASP.NET 控制項有時會呈現不符合所有可及性標準的輸出。如需詳細資訊,請參閱 ASP.NET 控制項和網頁可及性。
支援可及性的一般控制項功能
ASP.NET 控制項一般會在下列方面滿足可及性的需求:
提供一種可為任何非文字項目指定對等文字的方法。
不具有色彩相依性。
呈現表格的標題和表格資料行行首。
呈現具有 div 項目的 fieldset 和 legend 項目。
不需要樣式表。
支援使用樣式屬性進行定位。
使標籤與控制項產生關聯。
產生與裝置無關 (Device-Independent) 的用戶端指令碼 (例如,不是只回應滑鼠點選的指令碼)。
鍵盤存取
一項重要的可及性功能是網頁上的功能可以使用另一種形式的輸入來執行。實際上,這意味著可以使用滑鼠完成的所有工作都同樣可以使用鍵盤來完成。
ASP.NET 可讓您以下列方式加入對網頁的鍵盤支援:
您可以使用 TabIndex 屬性設定控制項的定位順序。
您可以藉由設定 DefaultButton 屬性,為表單或 Panel 控制項指定預設按鈕。
您可以藉由使用諸如 SetFocus 的方法,或藉由設定表單的 DefaultFocus 屬性,將焦點設定在輸入控制項上。
您可以藉由設定 AccessKey 屬性,定義按鈕控制項的便捷鍵 (Access Key)。
您可以將 Label 控制項與文字方塊搭配使用,藉此為文字方塊定義便捷鍵。如需詳細資訊,請參閱 HOW TO:將 Label Web 伺服器控制項當成標題使用。
影像和替代文字
可及性方針建議您為網頁上具有功能用途的影像 (例如做為資料控制項所呈現的按鈕或影像) 提供有意義的替代文字。這可讓螢幕助讀員報告網頁上每個影像的用途。如果影像除了裝飾之外沒有任何功能上的用途,則應將替代文字設為空字串,這樣螢幕助讀員便可略過該影像。
根據預設,由於 Image、ImageButton 和 ImageMap 控制項無法自動產生有意義的文字,因此這些控制項不會呈現任何替代文字。您應當自行提供文字。可及性檢查工具會將沒有替代文字的影像控制項標示為違反方針。
您應該對影像控制項執行下列其中一項操作:
將 AlternateText 屬性設為有意義的文字。
將 GenerateEmptyAlternateText 屬性設為 true,以讓 ASP.NET Image 控制項呈現空字串做為替代文字。可及性檢查工具會將空白的替代文字解釋為您故意將該影像標示為不重要。
具有固有影像或連結的控制項
某些控制項會將影像或連結呈現為標記的一部分,例如 TreeView 控制項、Menu 控制項和 Web 組件。在這些情況下,控制項會為每個影像或連結建立描述其功能的替代文字。
例如,TreeView 控制項呈現每個節點之展開和摺疊按鈕的影像。TreeView 控制項會根據節點的文字為這些影像產生替代文字。根據預設,展開具有文字「開始」之節點的影像,其替代文字會呈現為「展開開始」。您可以藉由設定 TreeView 控制項的 ExpandImageToolTip 和 CollapseImageToolTip 屬性,指定自己的替代文字。
類似地,[功能表] 命令會為其產生之用於展開和摺疊功能表項目的連結呈現替代文字。Web 組件控制項標題列中的按鈕也會呈現描述每個按鈕功能的替代文字。
略過重複的連結
輔助技術裝置 (例如,螢幕助讀員) 必須依網頁出現的順序列舉網頁上的每個連結。有時,以網站中出現在每個網頁頂端之主版頁面 (Master Page) 的功能表為例,在到達網頁的主要內容之前,會先強制螢幕助讀員讀取每個網頁上的所有項目。在諸如此類的情況下,可及性方針建議提供一種方式,可讓使用者略過重複的連結清單。下列控制項實作的方式即可略過重複的連結:
這些控制項中的每一個都支援 SkipLinkText 屬性。如果將這個屬性設為字串 (可以包含任何文字),則控制項會在連結前呈現錨定 (Anchor),其包含具有替代文字的不可見 .gif 影像。根據預設,替代文字為「略過巡覽連結」,但您也可以設定該文字。該錨定連結到控制項之後的另一個錨定。如此一來,螢幕助讀員和類似的技術可以讓使用者有機會略過控制項產生的連結,而不會在視覺上妨礙網頁的視覺顯示。如果 SkipLinkText 屬性設為空字串,則控制項不會呈現錨定標記。
呈現表格的控制項
可及性方針建議 HTML 表格應包含下列項目:
協助輔助技術識別表格用途的標題。
識別資料行行首的方法。
如果您使用 Table 控制項建立表格,則可以明確設定其 Caption 屬性。您可以使用 TableHeaderRow 類別,將 TableSection 屬性設為 TableRowSection 類別的 TableHeader 列舉型別 (Enumeration),以建立表格標頭。如此會讓表格呈現 thead 項目。當您使用 TableCell 控制項建立儲存格時,可以將儲存格的每個 AssociatedHeaderCellID 屬性設為表格標頭儲存格的 ID。這可讓儲存格呈現 header 屬性,該屬性會使儲存格與對應的資料行行首產生關聯。
下列 ASP.NET 伺服器控制項可以呈現 HTML 表格:
這些控制項可讓您設定 Caption 和 CaptionAlign 屬性,以為產生的表格建立建議的標題。
對於這些控制項,如果您設定 UseAccessibleHeader 屬性,則控制項會呈現具有 scope 屬性的 th 項目,用於識別資料行行首。
另外兩個控制項 (DataList 和 Repeater 控制項) 不會自動呈現 thead 或 th 項目。不過,您可以定義這些控制項的標頭範本。對於 DataList 控制項,標頭範本會呈現 th 項目。Repeater 控制項不會自動呈現任何標記;您需要定義控制項的標頭、主體和頁尾 (Footer) 範本,還可以在其中指定任何標記。如果您指定 Repeater 控制項應當呈現 HTML 表格,則應加入適當的標記以符合可及性標準。
呈現 div 項目的控制項
可及性方針建議將較長的表單分割成區段,以使它們更易於巡覽。HTML 4.0 引入了 fieldset 和 legend 項目,以讓 Web 網頁開發人員能夠將表單分割成區段。
在 ASP.NET 中,您可以使用 Panel 控制項建立表單中的子區段。如果將控制項的 GroupingText 屬性設為字串,則 Panel 控制項會呈現包含 fieldset 項目的 div 項目用於內容,並呈現具有在 GroupingText 屬性中使用之字串的 legend 項目。
某些 Web 組件控制項也會呈現 div 項目。這些控制項會自動呈現 fieldset 和 legend 項目。
驗證控制項
當項目為必要項目,或使用者輸入的資料發生錯誤時,很多 Web 網頁都會在文字方塊旁邊顯示星號 (*)。因為星號沒有意義,所以您一定要在驗證器控制項的 Text 和 ErrorMessage 屬性中指定有意義的錯誤訊息。
此外,驗證器控制項應停用用戶端指令碼 (EnableClientScript=false)。
登入控制項
登入控制項 (例如,Login、ChangePassword、PasswordRecovery 和 CreateUserWizard 控制項) 包含 Label、TextBox 和驗證器控制項等其他控制項。因為您做為 Web 網頁開發人員,並不需要直接控制登入控制項的呈現內容,所以控制項在設計時就已考量到網頁可及性。例如,控制項展現的下列行為可以支援網頁可及性:
文字方塊具有關聯的標籤。
輸入控制項具有定位點索引設定。
不過,如果您要建立這些登入控制項的範本,則必須在範本中設定控制項,以讓控制項符合可及性方針。
用戶端指令碼和 ASP.NET 伺服器控制項
WCAG 標準建議網頁不應出於任何功能上的目的使用用戶端指令碼,而只可將其用於一些不重要的效果 (如滑鼠滾動)。如果輔助技術可以使用指令碼傳回的任何值,508 條款方針則允許使用用戶端指令碼。
一些 ASP.NET Web 伺服器控制項依賴於用戶端指令碼。例如:
LinkButton 和 ImageButton 控制項需要使用用戶端指令碼執行回傳。
Calendar 控制項需要使用用戶端指令碼支援按一下每日連結。
Web 組件控制項依賴用戶端指令碼來關閉、最小化和編輯連結。
如需使用用戶端指令碼之控制項的完整清單,請參閱使用用戶端指令碼的 ASP.NET Web 伺服器控制項。
因此,如果在網頁上使用的任何控制項需要用戶端指令碼,您的網頁都不會符合 WCAG 標準。如果 Web 應用程式必須完全符合 WCAG 標準,您便無法在網頁上使用任何依賴於用戶端指令碼的控制項。不過,這些控制項在網頁中使用用戶端指令碼的確符合 508 條款標準。