<abbr id="y2asm"></abbr><abbr id="y2asm"></abbr>
  • <code id="y2asm"></code>
    <code id="y2asm"></code>
  • <button id="y2asm"></button>
    <rt id="y2asm"></rt>

    A11Y 101: 構建可訪問性React應用的技巧

    眾所周之,React目前是前端領域最為流行的JavaScript框架之一,很多Web開發都是基于React進行Web開發。愛掏網 - it200.com但據 WebAIM Million統計分析可得知“使用React框架開發的Web應用或Web頁面就可訪問性方面而言,其錯誤要比一般的主頁多出5.7%”。愛掏網 - it200.com而且在社區中普遍認為,基于React開發的Web應用對于Web可訪問性本來就差,而且開發者無法很好的基于React框架開發出具有可訪問性的Web應用。愛掏網 - it200.com事實上這是一種錯誤的認知,基于React能不能開發出具有可訪問性的Web應用和React本身并沒有太多的關系,因為開發一個具有可訪問性的Web應用更多的是和HTML和WAI-ARIA有著緊密的關聯。愛掏網 - it200.com換句說,基于React開發具有可訪問性的Web應用,應該注意些什么,以及如何更好的開發更具可訪問性的Web應用。愛掏網 - it200.com這是今天要和大家一起聊的話題。愛掏網 - it200.com

    為什么說基于React框架開發的Web應用或頁面更不具可訪問性呢?” 這除了源于錯誤的認知之外,還有一定的客觀因素存在的。愛掏網 - it200.com其中一個原因就是基于React框架開發Web應用時會(或者可能會)使用組件庫。愛掏網 - it200.com如果使用的組件庫自身就不具有Web可訪問性的話,就會造成React開發的應用不具Web可訪問性。愛掏網 - it200.com換句話說,使用其他組件(特別是第三方組件)進行開發,要改善Web可訪問性而言是件痛苦的事情,而且成本也是極高的。愛掏網 - it200.com因為在這個場景之下,要徹底優化Web可訪問性就需要去修改組件。愛掏網 - it200.com

    另外,那就是基于React框架開發者自身就存在一定的問題。愛掏網 - it200.com比如 @BrittanyIRL 在2024年React Conf大會上分享的話題中提到的:

    簡單地說,很多開發者,特別是基于React這樣的JavaScript框架開發者而言,已經習慣了只使用來構建自己的模板(Template)。愛掏網 - it200.com也就是說,不基于語義化的HTML進行Web開發,要讓Web應用更具可訪問性,難度是極大的,即使優化起來成本也很高。愛掏網 - it200.com

    另外一個原因正如 @estellevw 在Twitter上的吐槽:

    用一句話來概括的話,就是:

    如果要僅基于divspan進行開發,要開發具有Web可訪問性的Web應用或Web頁面就需要強度的依賴于WAI-ARIA相關的技術。愛掏網 - it200.com

    有關于WAI-ARIA更詳細的介紹可以閱讀《A11Y 101:WAI-ARIA初探》一文,或者閱讀下面相關教程:

    • WAI-ARIA Overview
    • Contribute to w3c/wai-tutorials
    • The WAI Forward
    • ARIA 簡介
    • Demystifying WAI-ARIA
    • WAI-ARIA basics
    • WAI-ARIA in 5 steps
    • POURing ARIA into the HTML element specs
    • Using ARIA for Web Applications
    • The Dangers of Using WAI-ARIA Incorrectly
    • ARIA Has Perfect Support
    • ARIA: poison or antidote?
    • Accessible Charts with ARIA
    • POURing ARIA into the HTML element specs
    • Beginning to Demystify ARIA
    • Complete List of WAI ARIA Roles and Their Uses
    • Introduction to ARIA - Accessible Rich Internet Applications

    如果你曾經接觸過Web可訪問性相關的知識的話,你應該知道。愛掏網 - it200.com針對于Web開發而言,構建可訪問性的Web應用可以根據相關的規范(即 網絡內容無障礙指南,也就是大家所說的WCAG指南)來做開發。愛掏網 - it200.com另外和WCAG相關的規范還有:

    • Wuhcag提供的WCAG檢查表(WCAG Checklist From Wuhcag)
    • WebAIM提供的WCAG檢查表(WCAG Checklist From WebAIM)
    • A11Y Project提供的檢查表(Checklist Frome The A11Y Project)

    React框架還沒有出現之前(或者說不基于任何JavaScript框架開發Web應用),都是基于HTML來進行開發。愛掏網 - it200.comHTML是構建Web應用最基本的部分之一,但對于可訪問的Web應用而言,在原有的DOM基礎上會有另一個解析樹,即 AOM樹(可訪問性樹)。愛掏網 - it200.com粗略地說,AOM是DOM樹的一個子集。愛掏網 - it200.com我們可以用下圖來描述AOM和DOM之間的關系:

    對于用戶界面和輔助技術,也可以用AOM和DOM來描述它們之間的關系:

    但是,基于React框架開發的Web應用和我們平時使用HTML開發的Web應用還是有很大區別的。愛掏網 - it200.com在React中,它通過構建一個“虛擬DOM”來替代DOM,執行DOM更新的替代方法(直接更新DOM的開銷可能相當大)。愛掏網 - it200.com對于每個DOM對象,虛擬DOM中將有一個對應的對象。愛掏網 - it200.com

    因此,雖然虛擬DOM本質上只是DOM的克隆,但它沒有修改用戶所看到的內容的能力。愛掏網 - it200.com這實際上使整個過程更快,因為可以“批處理”對虛擬DOM的更改,并且可以在事件循環結束時進行差異(diff)操作

    當你渲染一個JSX元素時,每個虛擬DOM節點將被更新,然后在更新之前的虛擬DOM和更新之后的現在的虛擬DOM之間執行一個“差異操作”,并能夠理解哪些對象被更改了。愛掏網 - it200.com

    虛擬DOM是一個非常重要也是非常復雜的概念,如果你想了解有關于虛擬DOM更多的知識,可以閱讀:

    • Understanding the Virtual DOM
    • JSX and the Virtual DOM
    • React 中的虛擬 DOM 和 diff 算法
    • 圖解 React Virtual DOM

    先拋開虛擬DOM不聊,根據AOM和DOM之間的關系,我們可以把虛擬DOM結合進來,那么用下圖來描述:

    換句話說,即使你對虛擬DOM不太了解也不過于太擔心,因為基于React構建可訪問的Web應用和以往構建可訪問的Web應用相同,采用的也是相同的規范,只不過在寫模板(Template)時有所差異。愛掏網 - it200.comJSX語法編寫模板愛掏網 - it200.com如果你不熟悉它,建議你花點時間閱讀以下資源:

    • 閱讀React文檔,根據其官方文檔提供的教程使用React
    • 了解React的鉤子函數的使用,特別是useStateuseEffect的基本使用
    • 理解React組件中spread操作符的使用
    • 了解React中children的使用
    • 理解JavaScript數組中的map()函數的使用
    • npm的使用有基本的了解

    有了這些基礎,我們就來開始看看如何在React環境下構建更具可訪問性的Web應用。愛掏網 - it200.com

    HTML屬性和保留字

    熟悉JSX或了解React開發的同學都知道,在React中編寫HTML時要記住的一件事是,HTML屬性需要用camelCase(駝峰)編寫愛掏網 - it200.com例如,tabindex需要寫成tabIndex愛掏網 - it200.com這個規則的例外是,任何data-*aria-*aria-*是ARIA中的屬性集,比如aria-labelaria-hidden等)屬性仍然按照以往的寫法,不需要換成駝峰寫法。愛掏網 - it200.com

    JSX是JavaScript中的一種擴展語法,而JavaScript中還有一些特定HTML屬性名匹配的保留字。愛掏網 - it200.com這些不能以你期望的方式來書寫。愛掏網 - it200.com比如for就是JavaScript中的一個保留字,在JavaScript中它用于循環遍歷,而在React中元素時,可以使用for屬性與相應的表單控件綁定在一起,那么這個時候,在JSX中就需要把for換成htmlFor屬性。愛掏網 - it200.com另外,class也是JavaScript中的保留字,它在HTML中是用來給元素聲明類名,那么在React中它就得換成className愛掏網 - it200.com除此之外,可能還有更多屬性需要關注,但到目前為止,我發現JavaScript中保留字和HTML屬性之間只有這些沖突。愛掏網 - it200.com

    語義化的HTML

    語義化的HTML指的是具有語義的HTML標簽,它使用針對其目的而全名的元素。愛掏網 - it200.com語義化的HTML也是構建可訪問Web應用的基礎,利用多種HTML元素來強化你的Web應用中的信息通常可以使用你直接構建更具可訪問性的Web應用。愛掏網 - it200.com但正如前面 @BrittanyIRL提到的,如今天很多使用React(或類似于React框架,比如Vue)的開發者過度的依賴于這種無語義化的HTML標簽,甚至很多開發者都不知道如何在開發中使用有語義化的標簽。愛掏網 - it200.com

    正因為,使用類似React框架開發的Web應用可能只能看到標簽,也讓眾多開發者造成一種誤解:

    這也讓React背上了不可構建可訪問性Web應用的鍋。愛掏網 - it200.com換句話說,我們使用React框架來開發Web應該,不應該只使用這兩個無語義的HTML標簽,我們更應該在寫模板(JSX模板)時考慮有語義的HTML。愛掏網 - it200.com這樣做有幾個原因:

    包月會員查看

    分享到:
    • 上一篇:使用React Hooks構建CSS的transition和animation
    • 下一篇:SVG在React中的運用

    相關內容

      發表評論
      更多 網友評論0 條評論) 暫無評論

      聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
      發表評論
      更多 網友評論0 條評論)
      暫無評論

      返回頂部

      主站蜘蛛池模板: 国产拍拍拍无码视频免费| 久久网免费视频| 四虎影视8848a四虎在线播放| 在线观看国产剧情麻豆精品| 日韩激情淫片免费看| 神马重口味456| 青青草国产青春综合久久| 99久久久精品免费观看国产| 久99频这里只精品23热视频| 亚洲免费中文字幕| 人人爽人人爽人人爽人人片av| 国产乱国产乱老熟300部视频| 国产精品无码久久综合网| 好男人视频社区www在线观看| 日本xxx在线播放| 欧美一区二区三区在观看| 特区爱奴在线观看| 秋霞免费理论片在线观看午夜| 边亲边摸边做视频免费| 国产精品亚洲综合五月天| 91香蕉视频污污| av片在线观看永久免费| 一本色道无码道dvd在线观看| 久久久久亚洲精品中文字幕| 亚洲AV无码专区国产不乱码| 亚洲国产精品久久丫| 亚洲欧洲国产视频| 亚洲视频第一页| 亚洲综合无码无在线观看| 免费精品国产日韩热久久| 品色堂永久免费| 啊用力点国产嗯快在线观看| 国产丝袜视频一区二区三区| 国产成人无码av| 国产卡一卡二卡3卡乱码免费| 国产校园另类小说区| 国产狂喷潮在线观看在线观看 | 爱情岛论坛亚洲品质自拍视频| 短篇丝袜乱系列集合嘉嘉| 色多多视频在线播放| 精品久久久久久蜜臂a∨|