搜尋
首頁web前端html教學深度剖析HTML的語意與與其相關的前端框架_HTML/Xhtml_網頁製作

關於語意

語意研究的是標誌與符號之間的關係,以及它們所代表的意義。在語言學中,它主要是研究這些標誌(如單詞,短語,或聲音)在語言中的意義。而在前端開發領域,語意主要涉及的是HTML元素、屬性和屬性值(包括像Microdata這樣的擴充)所約定的意義。這些在規範中常用的正式約定語義,可以幫助程式(以及後來參與開發的人)更好地理解一個網站各方面的資訊。然而,即使這些元素、屬性和屬性值的語意是正式化的,它們依然得服從於開發者的適應程度以及共同選擇的結果。這使得正式的約定語意也可能在未來被修改(而這正是HTML設計原則之一)。
區分不同類型的HTML語意

遵守編寫「語意化的HTML」這個原則,是現代專業前端開發的基礎之一。絕大多數的語意都與目前或預期的內容性質有關(如:h1元素,lang屬性,type屬性的email值,Microdata)。

然而,並非所有的語意都需要以內容為導向。類別名稱不能“無語義”。不管是用什麼名字命名,它們都必須有意義與目的。類別名的語意可以和那些HTML元素不同。我們可以藉助HTML元素、某些HTML屬性、Microdata等所具有的「全域性」語義,然後利用網站或應用的「局部性」特定語意加以區分,這些特定語意通常包含在屬性值中,例如class屬性。

儘管在HTML5規範的class屬性這一章節中重申了這個假定的「最佳實踐」…

    …鼓勵開發者使用class屬性值來描述實際內容,而不是描述期望展現的內容。

…並沒有什麼內在的原因非這樣做不可。事實上,當這種方法在大型網站或應用程式中運用時,它往往會成為一種障礙。

    HTML元素和其它屬性已經提供了內容層的語義
    對於機器或訪客來說,類別名稱所能透露的有用的語義資訊非常少,甚至沒有。除非它是已經約定好的那一小部分名稱(機器同樣可讀) —— Mircoformats
    類別名稱的主要用途是成為CSS和JavaScript的鉤子。如果你不需要為你的頁面添加表現和行為,那麼你或許不必在你的HTML裡添加類別名稱
    類別名稱應該為開發者傳達有用的訊息。當你閱讀一個DOM片段時,它將有助於理解某個類別名稱的具體作用。尤其是在多人協作的開發團隊裡,與HTML元件打交道的可不光只有前端開發者。

舉一個很簡單的例子:

XML/HTML Code複製內容到剪貼簿
  1. div class="news">  
  2.     h2>News>News>News
  3. >
  4. News
  5. >
  6. News>News>News
  7. >
News
>News 🎜>>       [news content]    div>  

當內容還不明顯的時候,這個類別名稱news不能告訴你任何事。它沒有向你提供關於這個組件整體結構的信息,而且一旦內容不再是“新聞”時,使用這個類名就顯得非常不妥。類別名的語意過度貼近內容,架構既不容易擴展,也不容易為其他開發人員所用。
與內容無關的類別名稱

從某個設計模式的結構與功能中提取類別名稱的語意是一種更好的方法。那些類別名稱與內容無關的元件可重複使用性較高。

我們不應該害怕讓各層之間的關係變得清晰而明確(這裡應該是指結構層、內容層等,譯者註),而不是用類名嚴格地反應明確的內容。這樣做不會使類別名稱“無語義”,這只是表明它們的語義並不取決於內容。我們也不應該害怕使用額外的HTML元素,只要它們能幫助你創造出更強壯、更靈活且更具重複使用性的元件。這樣做不會使HTML變得“無語義”,這僅僅意味著你標記內容所使用的元素數量超過了最小值而已。
前端架構

元件、模板、物件導向的體系結構的目的是能夠開發出一種數量有限的可重複使用的元件,它可以在一定範圍內包含不同的內容類型。在大型的應用程式中,對類名語義來說最重要的事情是,能夠用實用主義服務於它們的主要目的—— 提供有意義的、靈活的、可重複使用的表現或行為的鉤子供開發者使用。
可重複使用且可組合的組件

總的來說,可擴充的HTML/CSS必須依賴HTML中的class,以便建立可重複使用的元件。一個靈活的、可重複使用的元件,既不依賴DOM樹的某一部分,也不需要使用特定類型的元素。它應該能適應不同的容器,並且可以輕鬆更換主題。如果有必要,額外的HTML元素(超出標記內容所需的元素之外的元素)可以讓元件更強壯。 Nicole Sullivan所說的media object就是一個很好的例子。

避免用類型選擇器支援class,可以讓元件更容易合併。下面這個範例中,btn組件與uilist組件不易於合併。問題在於.btn的權重比.uilist a要小(這將覆蓋任何共享屬性)。而且ulist元件需要錨點作為子節點。

XML/HTML Code複製內容到剪貼簿
  1. .btn { /* styles */ }   
  2. .uilist { /* styles */ }   
  3. .uilist a { /* styles */ }   
  4.   
  5. nav class=class=class=>
  6.   
  7.     a href href href href 
  8. href
  9.  href href href> 🎜>>Homea> >
  10.     a href href href href href href href
  11.  
  12. href> 🎜>>Abouta
  13. >
 
> >     a class="btn" href="#">Login>LoginLogin a>   nav>  

一種讓uilist元件與其它元件輕鬆組合的方法是,uilist的子級DOM元素用class來加入樣式。儘管這會降低權重,但是它的主要好處在於,它為你提供了處理子節點的任何結構樣式的選擇權。

XML/HTML Code複製內容到剪貼簿
  1. .btn { /* styles */ }   
  2. .uilist { /* styles */ }   
  3. .uilist-item { /* styles */ }   
  4.   
  5. nav class=class=class=>
  6.   
  7.     a class="uilist-item " href="#">Home>a>
  8.        a class="uilist-item " href="#">Abouta>  
  9.     span class="uilist-item ">  
  10.         a class="btn" href="#">Login>LoginLogin a>
  11.        span>
  12.  🎜>> 🎜>
  13. nav
>

  

JavaScript專用類別 使用某種形式的JavaScript專用類,可以降低因元件樣式或結構的改變而導致JavaScript失效的風險。我已經找到了一個非常有效的方法,那就是專為JavaScript的鉤子使用一種特定的類別——js-*——不要在這個類別名稱上添加任何描述。
    XML/HTML Code
  1. 複製內容到剪貼簿 a href=hrefclass="btn btn-primary js-login">
  2. a
>
  

在你修改組件的結構或樣式的時候,可能會不經意間對那些必要的JavaScript行為和復雜的功能造成影響,用這種方法的話,可以降低這種可能性。
組件修改器

組件常常會有一些變體,它們與基本組件只有細微的差別。例如,不同的背景色或邊框。主要有兩種創建這些組件變體的模式。我將它們稱為“單類名”模式和“多類名”模式。

單類名模式

XML/HTML Code複製內容到剪貼簿
  1. .btn, .btn-primary { /* 按鈕範本樣式 */ }   
  2. .btn-primary { /* 主按鈕的特殊樣式 */ }   
  3.   
  4. button class="btn">Defaultbutton> 🎜>>
  5.    button class="btn-primary ">Loginbutton> 🎜>
  6. >
  

多類別名稱模式
XML/HTML Code
複製內容到剪貼簿
  1. .btn { /* 按鈕範本樣式 */ }   
  2. .btn-primary { /* 主按鈕的特殊樣式 */ }   
  3.   
  4. button class="btn">Defaultbutton>
  5.  🎜>
  6. >   button class=class=> primary">Loginbutton
>
button

>

button

>
如果你使用預處理程序,你可以用Sass的@extend功能,以減少一些在使用「單類名」模式時所涉及的維護工作。然而,即使有預處理程序的幫忙,我仍然傾向於使用「多類別名稱」模式,並在HTML中修改類別名稱。
我發現這是一種更具擴展性的模式。例如,要實現一個基本的btn元件,並增加5種類型的按鈕與3種額外的尺寸。用「多類別名稱」模式的話只要9個class就可以搞定,用「單一類別名稱」模式則需要24個class。 如果需要的話,它也更容易讓情境環境適應元件。你可能想要對出現在其它組件中的任一btn做一些細節調整。 XML/HTML Code複製內容到剪貼簿
  1. /* 「多類別名稱」樣式調整 */   
  2. .thing .btn { /* 對應的樣式調整 */ }   
  3.   
  4. /* 「單類名稱」樣式調整 */   
  5. .thing .btn,   
  6. .thing .btn-primary,   
  7. .thing .btn-danger,   
  8. .thing .btn-etc { /* 對應的樣式調整 */ }  

「多類別名稱」模式意味著,你只需要使用一個單獨的元件內部選擇器,便可以改變所有類型的btn元素的樣式。 「單類名」模式意味著,你必須顧及所有可能的按鈕類型,並在創造一個新的按鈕變體時調整這個選擇器。
結構化的類別名稱

當創建一個元件時-並為此增加了「主題」-其中一些class被用來區分各個元件,有些class被當作元件的修改器,其它的class則用來關聯DOM節點,它們一起被包含在一個較大的抽象組件中。

很難去判斷bt​​n(元件)、btn-primary(修改器)、brn-group(元件)和btn-group-item(元件子物件)之間的關係,這是因為這些名字不能清楚地表現class的目的。沒有一致的模式。

在過去的一年中,我一直在嘗試命名模式,目的是能幫助我快速理解在一個DOM片段中節點的表象之間的關係,而不用為此來回切換HTML、CSS與JS文件拼湊網站的架構。這種模式主要受到BEM系統的命名方法的影響,但被改編成一種我認為更容易瀏覽的形式。


複製程式碼
程式碼如下:
t-template-name
程式碼如下:

t-template-name
t-template- name--modifier-name
t-template-name__sub-object
t-template-name__sub-object--modifier-name

component-name
component-name--modifier-name

component-name__sub-objectcomponent-name__sub-object--modifier-name

is-state-type

js-action-name

js-component-type


我將一些結構當作抽象的「模板」來處理,其它的則視為更清晰的組件(通常建立在「模板」上)。但是這種區分並非總是必要的。 這只是我目前發現的一種有用的命名模式。命名模式可以是任何形式。但這種命名模式的好處在於消除了模糊的類別名,只依賴(單)連接符,或是下劃線,或是駝峰格式。

原始檔案大小與HTTP壓縮的注意事項

任何關於模組化與可擴展的CSS的討論都會談及對檔案大小與「膨脹」的擔憂。

Nicole Sullivan的言論

中經常會提到文件大小的存儲(以及維護改進),並提到了像Facebook這樣的公司採用這種方法的經歷。進一步的,我想我會分享我在預處理輸出時的HTTP壓縮效果,以及大量使用HTML類別的一些事情。

當Twitter Bootstrap剛問世的時候,我重寫了已編譯的CSS,以便更好地與手動操作的檔案比較大小。在最小化所有的檔案之後,手動操作的CSS檔案比預處理程序輸出的小10%。但是當所有的檔案都通過gzip壓縮後,預處理程式輸出的CSS檔案比手動操作的小了5%。


這強調了比較HTTP壓縮後檔案大小的重要性,因為減少的檔案大小並不能說明全部問題。它暗示了有經驗的CSS開發者在用預處理程序時不必太過關注編譯後的CSS中一定程度的重複,因為它將在HTTP壓縮後變得更小。透過預處理程序處理更易於維護的CSS程式碼所帶來的好處,要勝過關注原始CSS和壓縮後輸出的CSS的美觀或檔案大小。

在另一個實驗中,我從線上扒了一個60KB的HTML檔案(由許多可重複使用的元件組成),並刪除了它的每一個class屬性。這樣處理之後,檔案大小會減少到25KB。當原始檔案與扒下來的檔案都經過gzip壓縮後,它們的大小分別變為7.6KB和6KB—只相差1.6KB。自由使用class所導致的實際檔案大小的結果已經不值得再去強調了。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
HTML超文本标记语言--超在那里?(文档分析)HTML超文本标记语言--超在那里?(文档分析)Aug 02, 2022 pm 06:04 PM

本篇文章带大家了解一下HTML(超文本标记语言),介绍一下HTML的本质,HTML文档的结构、HTML文档的基本标签和图像标签、列表、表格标签、媒体元素、表单,希望对大家有所帮助!

html和css算编程语言吗html和css算编程语言吗Sep 21, 2022 pm 04:09 PM

不算。html是一种用来告知浏览器如何组织页面的标记语言,而CSS是一种用来表现HTML或XML等文件样式的样式设计语言;html和css不具备很强的逻辑性和流程控制功能,缺乏灵活性,且html和css不能按照人类的设计对一件工作进行重复的循环,直至得到让人类满意的答案。

web前端笔试题库之HTML篇web前端笔试题库之HTML篇Apr 21, 2022 am 11:56 AM

总结了一些web前端面试(笔试)题分享给大家,本篇文章就先给大家分享HTML部分的笔试题(附答案),大家可以自己做做,看看能答对几个!

总结HTML中a标签的使用方法及跳转方式总结HTML中a标签的使用方法及跳转方式Aug 05, 2022 am 09:18 AM

本文给大家总结介绍a标签使用方法和跳转方式,希望对大家有所帮助!

html中document是什么html中document是什么Jun 17, 2022 pm 04:18 PM

在html中,document是文档对象的意思,代表浏览器窗口的文档;document对象是window对象的子对象,所以可通过“window.document”属性对其进行访问,每个载入浏览器的HTML文档都会成为Document对象。

HTML5中画布标签是什么HTML5中画布标签是什么May 18, 2022 pm 04:55 PM

HTML5中画布标签是“<canvas>”。canvas标签用于图形的绘制,它只是一个矩形的图形容器,绘制图形必须通过脚本(通常是JavaScript)来完成;开发者可利用多种js方法来在canvas中绘制路径、盒、圆、字符以及添加图像等。

html5废弃了哪个列表标签html5废弃了哪个列表标签Jun 01, 2022 pm 06:32 PM

html5废弃了dir列表标签。dir标签被用来定义目录列表,一般和li标签配合使用,在dir标签对中通过li标签来设置列表项,语法“<dir><li>列表项值</li>...</dir>”。HTML5已经不支持dir,可使用ul标签取代。

Html5怎么取消td边框Html5怎么取消td边框May 18, 2022 pm 06:57 PM

3种取消方法:1、给td元素添加“border:none”无边框样式即可,语法“td{border:none}”。2、给td元素添加“border:0”样式,语法“td{border:0;}”,将td边框的宽度设置为0即可。3、给td元素添加“border:transparent”样式,语法“td{border:transparent;}”,将td边框的颜色设置为透明即可。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),