1. 程式人生 > >掛多個css還是新建class-多用組合,少用繼承

掛多個css還是新建class-多用組合,少用繼承

轉載於http://blog.csdn.net/hacke2/article/details/21707133

5. CSS的聚合/組合原則--掛多個class還是新建

CSS裡也包含了設計模式的6大原則,今天講講聚合/組合原則--多用組合,少用繼承

假設有如圖3-1所示的模組。

3-1 三個簡單模組

我們如何設定它的CSS呢?方案一如程式碼清單3-11所示。

方案一可以實現我們想要的效果,但它非常冗餘,“.numberList1”、“.numberList2”和“.numberList3”的CSS設定相同,“.numberList1 li”、“.numberList2 li”和“

.numberList3 li”有部分CSS一致。我們對它們進行改進,產生方案二,如程式碼清單3-12所示。

程式碼清單3-12 方案二

除了方案二,還有另一種思路,方案三如程式碼清單3-13所示。

程式碼清單3-13 方案三

方案一將圖中的三個模組視為完全不同且彼此獨立的三個類,分別命名為numberList1numberList2numberList3,並對它們分別設定樣式。其缺點是程式碼冗餘。方案二和方案一思路相同,仍將模組視為完全不同且彼此獨立的三個類,只是使用CSS技巧將三個類相同的部分提取出來,去除了程式碼的冗餘。方案三換了種思路,提取了更多粒度更小的類,通過類的組合實現設計圖的效果。

方案二和方案三看似都是不錯的解決方案,其中方案二的優勢是呼叫簡單,一個模組只需掛一個類;方案三呼叫稍麻煩,但也有效控制了冗餘,程式碼精簡。看起來似乎方案二和方案三都不錯,但如果想實現如圖3-11所示的效果,又會如何呢?

按照方案二的思路,程式碼如程式碼清單3-14所示。

按照方案三的思路,程式碼如清單3-15所示。

按照方案二的思路,我們需要再定義一個新的類numberList4,在CSS裡需要修改好幾處;按照方案三的思路,我們無需擴充套件新的類,只需在HTML標籤的class裡將之前定義的類重新組合即可。

在面向物件程式設計裡,有類似的情況;繼承與組合。繼承的思路是將一個複雜且包含變化的類,拆分成幾個複雜但穩定的子類。首先明確一個抽象的父類,父類有著幾乎所有的方法和屬性,子類繼承自父類,根據需求,新增新的方法和屬性,覆蓋掉與父類有變化的方法和屬性。但使用繼承的話,任何一點小的變化也需要重新定義一個類,很容易引起類的爆炸式增長,產生一大堆有著細微不同的子類。組合的思路是將一個複雜的類分成容易產生變化的部分和相對穩定的部分,將容易變化的部分拆分出去,每一種可能的變化設計成一個個單獨的類,相對穩定的部分設計成一個主體類。這樣,將一個複雜的類拆分成幾個簡單的類,類之間沒有繼承關係,這遵循了面向物件設計的“單一職責”原則。這些容易變化的類的例項賦值給主體類作為一個屬性,實現了類的組合。用組合的方式,可以大大減少類的數量。在面向物件程式設計裡,有個很重要的原則就是“多用組合,少用繼承”。一些偏激的工程師甚至認為繼承是錯誤的,是造成維護性差的罪魁禍首,主張完全使用組合,拒接使用繼承。

方案三就是借鑑了程式設計領域類的組合的思想,將方案二中複雜的numberList1類、numberList2類和numberList3類拆分成了幾個相對簡單的類,其中相對穩定的部分拆分成numberList類,而可能變化的部分拆分成fl2類、fl6類和red類。通過類的組合,很容易實現類的擴充套件,避免產生類爆炸。

HTML標籤的class屬性和id屬性不同,id只能掛一個,而class可以掛多個,用空格分隔。例如“<p id=’test’></p><div class=”fl2 red box”></div>”。HTMLclass與程式中“類”有相同的“味道”,class可以掛多個,從技術上支援了“組合”的用法。我們在使用css時,如果能靈活運用這點就可以大大減少類的數量,一方面減少了程式碼量,提高了可維護性,另一方面使類的職責更單一,彈性更強,增加了類的重用性,提高了開發效率。

掛多個class會不會讓HTML標籤看起來過於臃腫呢?這樣做真的好嗎?臃腫固然不好看,但它帶來的好處卻是不容忽視的,筆者推薦掛多個class,哪怕它讓HTML標籤看起來不太輕盈。YahooYUI3官方演示文件中的一部分程式碼如程式碼清單3-16所示。

程式碼清單3-16 YUI3中的class    

可以看出Yahoo前端開發工程師也喜歡掛多個class的方式。

相關推薦

css還是新建class-多用組合繼承

轉載於http://blog.csdn.net/hacke2/article/details/21707133 5. CSS的聚合/組合原則--掛多個class還是新建 CSS裡也包含了設計模式的6大原則,今天講講聚合/組合原則--多用組合,少用繼承 假設有如圖3-

CSSclass樣式使用實踐-多用組合繼承

先用繼承實現一個效果,程式碼如下:<style type="text/css">         .numberList1, .numberList2,  .numberList3, .numberList4{  border:1px solid #ccc;pa

java 為什麼說多用組合繼承

對類的功能的擴充套件,要多用組合,少用繼承。組合:新的類由現有物件所組成。繼承:按照現有類的型別來建立新類,無需改變現有類的形式,採用現有類的形式並在其中新增新程式碼。當繼承現有型別時,也就創造新的型別,這個新型別不僅包括現有型別的所有成員(儘管private成員被隱藏起來並

設計模式之多用組合繼承

對類的功能的擴充套件,要多用組合,少用繼承。 對於類的擴充套件,在面向物件的程式設計過程中,我們首先想到的是類的繼承,由子類繼承父類,從而完成了對子類功能的擴充套件。但是,面向物件的原則告訴我們,對類的功能的擴充套件要多用組合,而少用繼承。其中的原因有以下幾點: 第一、子類

組合還是繼承這是一個問題?——由模式談面向物件的原則之多用組合繼承

                                                      組合還是繼承,這是一個問題                                              ——由模式談面向物件的原則之多用組合、少用繼承剛剛接觸模式或者學習模式的人,經常

在HTML中引入css檔案

在HTML中引入css的兩個方法:匯入式和連結式。 匯入式和連結式的目的都是將一個獨立的css檔案引入一個檔案中,二者的區別不大,事實上,二者最大的區別在於連結式使用html的標記引入外部css檔案,而使用匯入式則是使用css規則引入外部css檔案。因此它們的語法也不同。 1. 連結式

css檔案在同一個html中的執行順序2

1、檔案位置在head裡面引入,無 !important 時  或 檔案位置在body裡面引入,無 !important 時        按照從上到下的順序依次執行,同一樣式會選擇最後一個檔案裡面的渲染[就近原則]。  

使用window.matchMedia()匹配CSS媒體查詢

一個常見的問題是如何使用它window.matchMedia() 來對多個CSS媒體查詢做出反應。在教程中,我們快速概述 並使用它來響應單個CSS媒體查詢更改:window.matchMedia() 1 2 3 4 五 6

jquery的設定 CSS 屬性

一、獲取css屬性 $("p").css("background-color"); 二、設定單個css屬性 $("p").css("background-color","yellow"); 三、設定多個csss屬性 $("p").css({"background-

Python爬蟲:在帶有屬性值的class選擇器中選擇其中一個值實現標籤快速精準定位

在寫爬蟲時,定位標籤位置獲取想要的資料是匹配工作的重點。通過class或id選擇器的值(屬性值要求在網頁中是唯一的)可以很快的實現標籤的定位。 <span data-post-id="114214" class=" btn-bluet-bigger href-styl

css類選擇器使用規則

類選擇器在style中的寫法:    .類選擇器名字   注意前面有個點在body中的寫法:     class="類選擇器名字"通常為了減少程式碼量,使程式碼更簡潔,機智的程式設計師們會選擇呼叫已有的符合條件的樣式,而若一個標籤需要多個樣式,或存在包含關係,則要考慮用多個類

css檔案合併到一個css

````此外,採用這兩種方式後的現實效果也略有區別。使用連結式時,會在裝載頁面主體部分之前裝載css檔案,這樣現實出來的頁面從一開始就是帶有樣式效果的,而使用匯入式時,會在整個頁面裝載完成之後再裝載css檔案,對於有的瀏覽器來說,在一些情況下,如果頁面檔案的體積比較大,則會出現先現實無樣式的頁面,閃爍一下之後

CSS樣式檔案的link問題

在web專案的開發過程中,CSS樣式無疑是頁面設計中不可缺少的一環。然而當寫了多個CSS檔案以後,並且在同一個頁面進行link引用。就會出一些問題。接下來就對問題及其解決方式做出說明。 呼叫樣式的部分程式碼如下: <div class="box">

三.組合CSS、JavaScript檔案的訪問請求變成一個請求(ngx_http_concat_module)

1.該模組類似於apache中的mod_concat模組,用於合併多個檔案在一個響應報文中。 預設安裝tengine的時候是不安裝http_concat_module的,需要重新install一下,還是使用tengine的原始碼。 2.進入到/home/jihuan/te

[CSS] 當CSS檔案對同一個元素屬性進行設定會發生什麼?

CSS作為Web前端的三劍客之一,有著極為重要的地位。它使得頁面的表現與內容很好地分離開來,如今各大瀏覽器對它的支援也日趨完善起來。 但是多處CSS檔案對同一個元素或者類的樣式進行修改的情況屢見不鮮,以至於在程式碼量成幾何倍增加時,有時會讓人產生迷惑感。下面舉個例子:

無法對含有.java(或.class)文檔的程序進行編譯(或解釋)

解決方案 rtu 多個 ali 後綴名 otto str 通配 pre 通常初學者會出現這樣的問題:無法對含有多個.java(或.class)文檔的程序進行編譯(或解釋)。 root@yogile-VirtualBox:/alive/string# javac work/C

jmeter 正則獲取返回token至本地文件並跨線程組調

mage 表達 processor csv文件 參數 res 例如 通過 mark 1、打開jmeter,創建setup Thread Group對於setup Thread Group和tearDown Thread Group來說,從字面意思上來看就是安裝線程組和卸載線

線程之間共享數據(探究)一下十一的車票是怎麽賣的

地方 water private ron image 關鍵字 ket css col 十月一到了,大家有沒有搶到回家的車票。筆者有事退了回家的臥鋪票,今年十一就不回家了。算下來有8個多月沒有回家了,混沌之余想想搶票是怎麽回事吧。為什麽會有許多的搶票軟件,還有12306發售的

spring cloud消費端重複定義feign client模組掃描

問題連線:點選開啟連結  嘗試將FeignClient單獨建立了一個模組G,將對各個模組的FeignClient呼叫介面集中在模組G中管理,A,B,C,D,E,F模組互調時,只需要在pom中引入G模組即可。但一直失敗,對於該問題網上大都是 加@ComponentScan(basePack

資料庫擴充套件性設計:使用二進位制解決一條記錄關聯狀態的問題(轉)可以嘗試一下

程式開發中,經常遇到一條記錄有多個狀態位,比如一條商品,他屬於熱門,新品,特賣。我們的資料庫如何設計呢? 一般有幾種方法 (1)建立關聯表 關聯表字段:關係Id,商品Id,屬性Id 查詢:使用關聯表的方式,查詢某屬性的商品。 程式:寫入時,寫商品表和關聯表;