1. 程式人生 > >初識css與css選擇器

初識css與css選擇器

前面總結完了html部分的基礎內容之後,我總結了一下一下css部分的內容,希望對大家有所幫助~

 

初識CSS

• css的全稱為cascading style sheet 層疊樣式表,它的主要作用是為我們的html標籤新增各種各樣的樣式和修飾效果。

• 這裡我總結的css屬於css2.0的知識點,css3.0的知識我打算在後面的文章裡面總結。

• 其實html+css部分的知識點總共站前端的知識總量的1%-2%,但是卻佔了20%-30%的重要度,所以我們一定不能輕視html和css。(這是針對最近網上有很多人學習前端忽視html和css說的…)

 

首先我們要介紹一下,html頁面如何引入我們的css樣式

css的引入方式一共有4種

1.行間樣式 直接在html 的標籤裡面寫style屬性 前面兩篇裡面的更改標籤的樣式都是用的這一種方式

2.頁面級css 在head標籤裡面新增一個style標籤

<style type=”text/css”></style>

這裡的style標籤的type要不不寫,不然就要寫正確,只要書寫錯誤,這個樣式就不會生效。

3.外部css檔案 <—我們選擇這種方式

我們在外面建立一個.css字尾的檔案,然後在html裡面引入這個外部的css檔案即可。

在head標籤裡面加上一個link標籤。

<link rel=”stylesheet” href=””>

• link標籤裡面的href屬性上寫我們建立的css檔案的地址,最好用相對地址的形式。

 

我們為什麼要選擇這種載入方式?

因為link載入不會阻塞html的載入,html和css屬於非同步載入

4.import方式引入(已經棄用)

在head標籤裡面寫一個style標籤,在第一行寫上@import url();url裡面寫上css檔案的地址,可以加引號也可以不加引號。

這種引入方式有幾種缺點導致它現在被廢棄使用

1.必須寫在第一行

,若有多個則一起寫在最前面。

2.ie6的環境下,只能使用最多31次,這個數字據說是阿里的開發人員一點一點測試出來的。

3.程式讀到import的時候,會忽略掉import,等到html裡面的所有內容包括圖片在內的所有資源全都載入完之後才載入import的css檔案,也就是說,import引入的css檔案和html的載入是同步進行的。

• 這裡有一點不得不說明的是,link標籤引入和style標籤修改樣式二者之間並沒有什麼優先順序,誰寫在前面誰就先執行,寫在後面的css檔案會覆蓋掉前面的css檔案。有時候會因為網速問題,link寫在上面,但是link還沒有載入進來,所以先運行了後面的style,這種問題是網速導致的,並不是二者本身擁有優先順序的問題。

 

介紹完了如何引入css檔案之後,我們再來介紹一下css選擇器的知識

• css選擇器的作用是讓我們找到我們想要修改樣式的元素,然後為其修改樣式。

我們的選擇方式有很多種:

1.id選擇器

我們給元素新增一個id屬性,這個id是唯一標識,一個元素只能有一個id,一個id也只能給一個元素。然後我們在css檔案中,通過#id {}的方式,就可以選擇到我們新增id的那個元素了。

<div id=”demo”></div>

CSS; “複製程式碼”); “檢視純文字程式碼”); “返回程式碼高亮”)

2.class類選擇器

在元素的屬性中寫一個叫做class的屬性,這個屬性是為這個元素新增一個類名,每一個元素可以有多個類名,同一個類名也可以賦給很多個元素。然後我們在css檔案中,通過.class {} 的方式來選擇出添加了類名的元素。

<div class=”demo”></div>

CSS; “複製程式碼”); “檢視純文字程式碼”); “返回程式碼高亮”)

3.標籤選擇器

div{}  只要是div的標籤就會被選擇出來。

• 這裡有一個很重要的程式設計思想我們先寫css在寫html,是我們自己在創造標籤,而如果我們現在html再寫css的話,是我們在新增樣式。比如:我們在em加上font-weight: bold;的樣式,這樣我們就創造了一個加粗斜體的標籤。

4.萬用字元選擇器 {} 所有的標籤都會被選擇出來加上樣式,body標籤頁包含在內。所以如果{background-color: red}的話,那麼整個頁面都會變紅,因為我們同時給body元素也添加了背景顏色。

• 我們在單獨的樣式後面加上 !important之後,這個樣式就會被賦予最高階的優先順序,在沒有特殊情況下,後面怎麼新增樣式都不會覆蓋或者修改這個樣式。比如:background-color: red !important;沒有特殊情況的話後面怎麼加樣式都是紅色的。

5.屬性選擇器

[id] {} 這樣有id屬性的標籤就都會被選擇出來。

我經過測試發現:

優先順序 !important > 行間樣式 > id > class|屬性 > 標籤 > * 

但是我們不必背這些東西,我們只需要記住他們每一種選擇器的權重值就可以了。

• 值得一提的是,在數學中無窮大+1依然是無窮大,但是在css選擇器的權重值裡面,無窮大+1 > 無窮大。

 

有了權重值  我們就可以瞭解父子選擇器了

6.父子選擇器  (派生選擇器)

div p {}

給div下面的p加樣式 這時候的p的權重值是加和的結果

• 在實際開發中,我們因為要注意瀏覽器尋找時候的耗能,一般父子選擇器不超過4層

.wrapper .box .content .name  一般不超過像這樣的四層。

7.直接子元素選擇器

div>strong

div直接子元素裡面的strong,div的子元素裡面的不是div的直接子元素的strong就不符合要求。

<div>

<strong></strong>

</div>

<div>

<em>

<strong></strong>

</em>

</div>

×

id和class也是可以使用父子選擇器的喲~

8.並列選擇器

<p class=”select”></p>

<div class=”select”></div>

怎麼選擇出類名是select的div呢?

我們可以使用div.select {} 來選擇出來

這種方式是隻有div和.select同時作用在一個標籤上的時候才會被選擇出來,書寫的時候標籤名放在前面,其他的放在後面。

9.分組選擇器

<p></p>

<strong></strong>

<em></em>

<div></div>

我們要想同時給四種標籤都加上color: red的樣式,不可能把四個標籤都寫一遍樣式,因此要用分組選擇器。

div, p, em, strong {} 這樣的寫法,我們可以把前面寫的所有的標籤都選擇出來加上樣式,中間是用逗號連線的。這個樣子四種標籤就全都被選擇出來並且都加上了統一的樣式。

 

最後有一個很重要的問題,那就是父子選擇器的時候瀏覽器是怎麼檢索的?

div p strong em span 這樣的選擇器,瀏覽器是怎麼找的?是從左往右,還是從右往左?

答案是從右往左喲~

這是為什麼呢?

• 因為如果是從左往右尋找的話,每找到一個父級標籤,都要把它下面的所有標籤都遍歷一遍,看看有沒有我們下一個標籤,上面那個選擇器中,瀏覽器會先找到div這個標籤,然後把div下面所有的子元素都遍歷一遍後,找到strong這個標籤,然後再把strong這個標籤下面的所有元素遍歷一遍,找到em這個標籤,以此類推,這樣是十分消耗效能並且速度非常慢的。

• 而如果是從右往左的話,那麼瀏覽器只需要先找到span標籤,然後從span這個節點向上尋找,只要找到em就可以停止尋找,以此類推,不必遍歷所有的節點,而且需要遍歷的點非常的少,這樣的好處顯而易見,速度非常快,而且不耗效能。

 

最後有一些需要說

• 我們一般不給標籤加id,而是通過新增class類名來選擇的,因為id代表唯一標示,我們一般用id來做標記,後臺的php會提取出來id,然後換成他們的標記,因此可能會導致我們的選擇器選擇不出來我們想要的標籤。

• 我們寫類名的時候,一定要注意語義化,要符合語義化標準,要用英文單詞去命名,而不是用看不懂的abc之類的類名。

希望以上的知識會對大家有所幫助喲~