CSS 的主要缺陷是什麼?

假如不考慮不同瀏覽器的兼容性問題,把 CSS 當為一個可以用在桌面電腦、移動設備、平面印刷等領域的通用樣式語言,會產生哪些問題?它的主要缺陷是什麼?

有哪些事情是不適合用 CSS 做的?


@Philip Walton Side Effects in CSS

http://philipwalton.com/articles/side-effects-in-css/

已經分析得很清楚了, 搬過來分享下吧

裡面提到了CSS的副作用主要是由於CSS是全局的, 會造成各種各樣的衝突.

&> CSS is global, and every rule you write has the potential to affect entirely unrelated parts of the site.

CSS中最難的部分

1. 如何實現某種效果(cosmetic problems)

2. 如何組織管理CSS(architectural problems)

CSS的副作用主要體現為

* 樣式衝突

* 命名衝突


我CSS用的不多,拋磚引玉一下。

1. 選擇器污染的問題,為了避免被污染,有時可能會過度依賴於ID選擇器和很複雜的class選擇器(有人提議用Web Component來解決這個問題,不過普及起來不知要到猴年馬月)。

2. 缺少一個像Flash那樣大一統的WYSIWYG(所見即所得)開發環境(還要保證這個開發環境所產生的代碼是人能讀懂的)。


看過一點 QML,感覺那種聲明式的語法更好,而且包含了許多 CSS 缺少的特徵:

1. 元素可命名,這就讓元素可以被定位,其屬性可以在其他位置設置和獲取;

2. 值的引用,可以引用其他元素的屬性值;

3. 值的計算,可以 + - * /,也可以寫 JS 代碼。

值的動態獲取和實時計算對於運行中的 GUI 狀態變化比較重要,可以將響應式推向另一個高度。

CSS 缺少的一些特徵,LESS、SASS 等都在進行彌補和擴展。但運行時的動態獲取及計算目前還只能依賴麻煩的 JS。

畢竟 CSS 最初產生的目的,只是為了改改顏色之類的表現屬性。目前發展出來的新技術和新需求會催化出新的 Web/GUI 開發方式,讓我們保持期待。


CSS當然還有很多問題,但就目前而言似乎沒有比CSS更優秀的樣式描述語言,其它的樣式樣式要麼強依賴於編輯器,要麼強依賴於程序語言,而CSS在源碼可讀性及邏輯性之間已經平衡得相當不錯了,在其上也已經延伸出了非常豐富的工具庫

就目前而言,通用樣式語言方面已經沒有更好的選擇。


選擇器不能後向匹配:比如可以選擇子元素卻不能選擇父元素,可以選擇 nextSibling 卻不能選擇 previousSibling。當然這也是為了性能考慮,要允許後向匹配的話,CSS 引擎就不是讀一遍文檔這麼簡單了。

不同值之間難以互相引用。比如要是能夠 height: 50%; width: 50% * ${height}; line-height: 50% * ${height}; font-size: 25% * ${line-height}; 這樣的話我會非常愉悅。然而這當然也會造成很多歧義和麻煩。

總的來說這些小的限制也並不是那麼討厭。


寫到後來,你不知道要怎麼命名


不能實時渲染,每次改完都要刷新……把一個元素1px 1px 的嘗試到正確位置真是腎疼。


如果式樣的值可以用JS的變數就好了.


沒有辦法寫函數做複雜操作吧


css的主要缺陷是css


css的缺陷就是:都是預先寫好css,然後去引用它。什麼時候做到能夠根據周圍的環境做適應的變化就好了。


不宜維護,代碼積累多了以後,會發現好多廢棄的代碼,但是又不能隨便刪掉,因為你不知道何處使用了它


兼容性比較坑


CSS最主要的缺陷就是,寫CSS的人覺得CSS很多缺陷,都沒有用心去想這麼神奇的語言能做些什麼,怎樣才能做到健壯,生命化。


不便於控制 需要js輔助

偏底層 沒有統一向上一層的組件式封裝(其實有的 不過各家有各家的 行業習慣 不統一)如果像qt上做UI,可以直接拖動,會省時省力些 不過個性化定製也意味著基本推翻重來

總之現在已經不錯了嚕 要是能自動寫好兼容性代碼就更好了嚕


計算吧

雖然css現在支持計算了,但那性能......

都不敢用了。


寫起來很煩躁


兼容性


沒有邏輯感


最神煩的就是瀏覽器兼容!還有不能寫函數…


布局比起anchor-based的差幾條街


不便於大幅度修改


推薦閱讀:

如何讓前圓括弧與段落邊界視覺對齊?
只是一般的使用,Markdown+CSS有哪些不可回避的缺点?
請問indesign怎麼可以讓字體顏色和背景顏色反相?
InDesign 里如何讓頭尾的標點都在文本框內?
使用 InDesign 製作一本 32頁的畫冊,打算使用騎馬釘裝訂,請問製作時是否需要特別排版,例如首頁和最後一頁排在一起?如果需要請問如何排版?

TAG:前端開發 | CSS | 排版 | 平面設計 | HTML5 |