Html/CSS的符號學

banq發表於2018-11-13

本文從索緒爾語言哲學等理論高度認為不需要CSS中的class屬性。
CSS的好處是:HTML元素可以在不依賴class屬性的情況下實現各種風格的樣式化,文章試圖證明class屬性是過時的,不適合於佈局,不用class可以訓練我們建立更多可用,可重用的內容。
如果同一型別的兩個元素屬於出現在相同的上下文中,則它們是相似的 ,怎麼辦?
索緒爾對語言作為一個系統的理解基於兩種基本關係; 正規化和語段(聚合關係和組合關係):

正規化
正規化是是一組詞 ,具有功能相似性但在含義上有細微或根本的差異。比如“螃蟹位於龍蝦旁邊”,“位於”這個詞屬於一種替代詞的正規化,還可以代指包括“休息於”和“蹲伏於”以及“站立於”,這是一種替代關係。
在英語中替換有一定的規則,動詞不能用名詞替換,就像在HTML中一樣,內聯元素(表示內聯這樣的動作動詞)不能總是用塊級元素(名詞)替換。

語段
一個語段基本上是一個由正規化選擇組成的結構段。在英語中,句子,段落,章節和書籍都是語段。在HTML中,由您選擇的元素組成的程式碼塊可以被視為一種語段。
每個語段都有自己的語義系統,較小的語段可以屬於較大的語段系統,就像一個段落可以屬於一個章節,

用處?
索緒爾的語言模型可以識別或寫出數TB的小說,小說,散文和戲劇,不必發明新詞或重新定義舊詞。如果這個模型對於諸如英語之類的自然語言來說已經足夠好了,那麼它對於諸如HTML之類的簡單元語言來說已經足夠好了。當然,隨著時間的推移,新詞會被創造出來,就像HTML規範中慢慢引入新元素一樣,但這是透過仔細的審議和共識來完成的。class沒有這樣的授權過程。
索緒爾模型為我們提供了足夠的優雅和發明空間,並禁止我們做出錯誤的選擇。透過根據它們的內容和位置what and where來構造元素的樣式從而組成我們文件,那麼現在誤導或混淆使用者就變得極其困難,我們所做的只是使用CSS來顯示頁面的固有結構。

語境的重要性
從符號學的角度來看,也許兩個相似的事物之間唯一真正的區別在於它們的背景:它們被發現的環境。英國本土人和法國本地人在基因上相似但在文化上有所不同。他們的國籍背景使他們以許多值得注意的方式不相同。
下面這段Html/CSS:

// HTML:

<article>
   <h1 class="main-title">Article Title</h1>
   <aside>
      <h1 class="main-title">Aside Title</h1>
   </aside>
</article>

// CSS:
.main-title {
   font-size:30px;
}

創造class型別為.main-title,我們建立了一個翻譯器來幫助我們輕鬆地為所有頂級標題設定相似的樣式。但是,我們示例中的兩個標題h1並不相似,任何理解HTML5解析器的人都會知道,有一個標題h1屬於aside組合,而另外一個標題h1直接屬於article內,這兩種關係哪個最重要?
直接屬於article:

<article>
   <h1 class="main-title">Article Title</h1>


直接屬於aside, aside屬於article:

<article>
   <h1 class="main-title">Article Title</h1>
   <aside>
      <h1 class="main-title">Aside Title</h1>



解析器將把aside的h1標題視為僅僅是副標題,屬於第一個標題之後的副標題。
這個例子中的class是多餘的:我們可以使用h1 style屬性來設定元素的樣式如font-size: 30px。關鍵是如果我們根據上下文區分這兩個元素,那麼區分上下文的辦法是使用派生選擇器:aside h1,那麼CSS將繫結到HTML的結構(aside h1是一種結構,h1屬於小語段,aside屬於大語段,h1小語段被包含在大語段aside中),並且元素的外觀將與其計算的含義一致。

模組化和可移植性
使用Class屬性的方法其實是一種物件導向方法,物件導向的方法是想讓一個元素在任何地方都看起來一樣,不受環境背景的影響,這如同一個英國人移民到其他國家,拒絕說當地語言,這是不恰當的。
我不認為CSS是物件導向的; 我認為它是面向介面的。CSS的目的不是讓單個專案看起來像我們想要的那樣,而是提供一個介面來樣式化HTML文件,這些介面具有說服力和可讀性。為了使介面具有最佳可理解性,所有元件應該禮貌地協同工作,並且應該尊重整體視覺結構,無論元件來自何處。
簡而言之,我們的目標應該是真正區分樣式和內容,允許內容在不同樣式介面介面之間傳播,但樣式介面仍然不動。在任何格式正確的文件中,屬性應該是表達內容來源的(class作為元素屬性卻不是表達內容來源,而是表達內容來源的型別)。

相關文章