新聞中心
如果在項(xiàng)目里面使用了通用的reset.css樣式,但是在具體的頁面里面要對同一個(gè)樣式進(jìn)行覆蓋式修改,不借助與scoped的和inner style,你會(huì)怎么做?會(huì)不會(huì)像我一樣在剛接觸的時(shí)候給要覆蓋的樣式后面加上!important屬性
創(chuàng)新互聯(lián)建站主營三穗網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),三穗h5微信小程序開發(fā)搭建,三穗網(wǎng)站營銷推廣歡迎三穗等地區(qū)企業(yè)咨詢
本文將告訴大家關(guān)于CSS選擇器和優(yōu)先級總結(jié),同時(shí)告誡大家不能任性使用!important。
舉個(gè)詳細(xì)點(diǎn)例子,下面這段代碼輸出的樣式是什么樣的?以及為什么是你說說的答案?
CSS三大特性—— 繼承、 優(yōu)先級和層疊。
繼承:即子類元素繼承父類的樣式;
優(yōu)先級:是指不同類別樣式的權(quán)重比較;
層疊:是說當(dāng)數(shù)量相同時(shí),通過層疊(后者覆蓋前者)的樣式。
CSS選擇符分類
首先來看一下css選擇符(css選擇器)有哪些?
1.標(biāo)簽選擇器(如:body,div,p,ul,li)
2.類選擇器(如:class="head",class="head_logo")
3.ID選擇器(如:id="name",id="name_txt")
4.全局選擇器(如:*號)
5.組合選擇器(如:.head .head_logo,注意兩選擇器用空格鍵分開)
6.后代選擇器 (如:#head .nav ul li 從父集到子孫集的選擇器)
7.群組選擇器 div,span,img {color:Red} 即具有相同樣式的標(biāo)簽分組顯示
8.繼承選擇器(如:div p,注意兩選擇器用空格鍵分開)
9.偽類選擇器(如:就是鏈接樣式,a元素的偽類,4種不同的狀態(tài):link、visited、active、hover。)
10.字符串匹配的屬性選擇符(^ $ *三種,分別對應(yīng)開始、結(jié)尾、包含)
11.子選擇器 (如:div>p ,帶大于號>)
12.CSS 相鄰兄弟選擇器器 (如:h1+p,帶加號+)
CSS優(yōu)先級
當(dāng)兩個(gè)規(guī)則都作用到了同一個(gè)html元素上時(shí),如果定義的屬性有沖突,那么應(yīng)該用誰的值的,CSS有一套優(yōu)先級的定義。
不同級別
- 在屬性后面使用 !important 會(huì)覆蓋頁面內(nèi)任何位置定義的元素樣式。
- 作為style屬性寫在元素內(nèi)的樣式
- id選擇器
- 類選擇器
- 標(biāo)簽選擇器
- 通配符選擇器
- 瀏覽器自定義或繼承
總結(jié)排序:!important > 行內(nèi)樣式>ID選擇器 > 類選擇器 > 標(biāo)簽 > 通配符 > 繼承 > 瀏覽器默認(rèn)屬性
同一級別
同一級別中后寫的會(huì)覆蓋先寫的樣式
上面的級別還是很容易看懂的,但是有時(shí)候有些規(guī)則是多個(gè)級別的組合,像這樣
CSS優(yōu)先級:是由四個(gè)級別和各級別的出現(xiàn)次數(shù)決定的。
四個(gè)級別分別為:
- 行內(nèi)選擇符
- ID選擇符
- 類別選擇符
- 元素選擇符
優(yōu)先級的算法:
- 每個(gè)規(guī)則對應(yīng)一個(gè)初始"四位數(shù)":0、0、0、0
- 若是 行內(nèi)選擇符,則加1、0、0、0
- 若是 ID選擇符,則加0、1、0、0
- 若是 類選擇符/屬性選擇符/偽類選擇符,則分別加0、0、1、0
- 若是 元素選擇符/偽元素選擇符,則分別加0、0、0、1
算法:將每條規(guī)則中,選擇符對應(yīng)的數(shù)相加后得到的”四位數(shù)“,從左到右進(jìn)行比較,大的優(yōu)先級越高。
為了更好的理解這些計(jì)算規(guī)則,舉些例子如下:
選擇器的解析原則
以前一直認(rèn)為選擇器的定位DOM元素是從左向右的方向,查看了網(wǎng)上的相關(guān)資料之后才發(fā)現(xiàn)原來自己一直都是錯(cuò)的。鄭重的聲明選擇器定位DOM元素是從右往左的方向,這樣的好處是盡早的過濾掉一些無關(guān)的樣式規(guī)則和元素 。
簡潔、高效的css
所謂高效就是讓瀏覽器查找更少的元素標(biāo)簽來確定匹配的style元素。
1.不要再ID選擇器前使用標(biāo)簽名
解釋:ID選擇是唯一的,加上標(biāo)簽名相當(dāng)于畫蛇添足了,沒必要。
2.不要在類選擇器前使用標(biāo)簽名
解釋:如果沒有相同的名字出現(xiàn)就是沒必要,但是如果存在多個(gè)相同名字的類選擇器則有必要添加標(biāo)簽名防止混淆如(p.colclass{color:red;} 和 span.colclass{color:red;}
3.盡量少使用層級關(guān)系;
#divclass p.colclass{color:red;}改為 .colclass{color:red;}
4.使用類選擇器代替層級關(guān)系
5. 保持CSS的可讀性
本文標(biāo)題:CSS選擇器和優(yōu)先級總結(jié),告誡自己不能任性使用!important
網(wǎng)址分享:http://fisionsoft.com.cn/article/dhseois.html


咨詢
建站咨詢

