2019年8月3日 星期六

css選擇器是什麼?該怎麼用


css又被稱為網頁的美容/化妝師,今天來介紹一下怎麼給html添加樣式

閱讀這篇文章前需要對標籤選擇器,類選擇器和ID選擇器有基本概念,並且閱讀過上一篇文(css優先級)

如果已經有概念或是曾經使用過,那麼就達到學習門檻囉



這是一個html標籤的結構圖
當我們想要給hello,world添加顏色的時候,我們可以選擇這樣做


沒錯,這就是所謂的行內樣式,這樣做的缺點就是如果有很多

個div,就要寫很多次行內樣式,如果要修改的話會找很久,

而優點就是立即見效,因為他的優先級很高,也不用考慮結構

問題,如果配上UI庫來使用的話,能夠很快的產出東西,對

維護性不要求的場合非常方便,這也是一般初學者最先接觸的

設置樣式的方法


如果遇到很多個div, 他們有共通的樣式,就可以考慮標籤選

擇器,只要把標籤名寫上去就大功告成,他的效果為全部的

div都套用紅色字體


再來是比較進階一點的情境,div一層包一層的時候,上圖可

以發現一層包了一層又包一層,在html裡面,標籤是有關係

的,包來包去的關係,就叫父子級,我們把最外層的div命名

為outer(外),而裡面(中),就叫做outer的子級,而更裡面

內)就叫做outer的孫子級,今天我們只想給子元素(中)添

加顏色,不想動到孫子級(內)的時候,這時就可以選用  > 

這個符號,叫做子級選擇器, 他的效果就是輩份比自己小一

階的元素能夠得到效果,而小兩階或三階等孫輩份元素都套用

不到


那麼,如果我想讓所有我的後代都能得到效果呢,這時可以這

樣寫,只要加個空格就OK,意思就是輩份比outer小的div都

能得到效果


如果我想讓某個元素有顏色,但我又不想用行內樣式,我能怎麼做呢?

可以選擇類選擇器或ID選擇器,而類選擇器的優點是效能高

速度快,可複用性強,ID選則器的優點是優先級高,立即見

效,缺點是這個元素在網頁上的身份必須獨一無二(比方說L

OGO圖,或主標題),如果我只是想添加藍色,而且我確定

我會使用很多次藍色,那麼就不是獨一無二的元素,所以這裡

用類選擇器比較適合


類選擇器和ID選擇器我都知道了,還有沒有其他方法?

有,li:nth-child(2)

意思就是li元素裡的所有子元素的第二個,套用效果

當使用這種方法的時候,可能會遇到一些問題,比方說新增

或刪除標籤結構的時候,這時原本的第二個元素可能就變成

第三個元素或第一個元素,要怎麼辦呢?



這時就可以使用nth-of-type,就不是ul內的所有子元素的第二

個,而是ul內class相同或tag相同的元素的第二個,這樣一

來,就算新增元素,只要他不是相同的類型,就不會影響計



而數字可以寫成n,2n,3n-1等等的方式,製作有規律樣式的表格很方便,比方說條紋顏色


接下來介紹的這個我都稱呼為兄弟選擇器,或比鄰選擇器,他

就是可以選到鄰居,範例的意思就是.first後面(只有後面,前

面沒用)緊跟著的span元素能得到效果(對,只能對一個元素

有效),需要注意的地方是他們是兄弟關係,不是父子關係


*,這個東西叫做通配符,或是通用選擇器,意思就是,全部,我全都要.jpg

不管你是tag還是class還是id啥的,只要你在文檔裡面,就連

html和body標籤都無法倖免,通通都設為藍色文字顏色,但

相對的,這個選擇器的優先級很低


*除了拿來初始化tag的margin和border和padding以外就沒有用了?
are you sure?

其實可以這麼用,就是某個部分裡面的全部我都一次設定,也是相當實用的寫法


有時候,我需要選擇一大包東西,但有些不是我想要的,怎麼辦呢?

這時候就輪到not選擇器出場了,not的括號裡面可以寫各種

條件,讓你過濾掉不想要的元素




最後再來介紹一下中括號三兄弟,他的缺點是效能差,但優點

對付表單元素很好用,有時候也會有class取的沒有那麼統一

的時候,總體來說還是非常有機會能派上用場的

*=的意思就是  "包含"  class*='funny'就是class裡面有包含funny的元素都能套用到效果


而  ^= 的意思就是,開頭為,也就是funny開頭的都套用效果


而   $= 的意思是,結尾為,也就是結尾為last的元素都套用效果