博客9-16CSS 三大特性
CSS層疊性
所謂層疊性是指多種CSS樣式的疊加。
是瀏覽器處理沖突的一個(gè)能力,如果一個(gè)屬性通過兩個(gè)相同選擇器設(shè)置到同一個(gè)元素上,那么這個(gè)時(shí)候一個(gè)屬性就會(huì)將另一個(gè)屬性層疊掉
比如先給某個(gè)標(biāo)簽指定了內(nèi)部文字顏色為紅色,接著又指定了顏色為藍(lán)色,此時(shí)出現(xiàn)一個(gè)標(biāo)簽指定了相同樣式不同值的情況,這就是樣式?jīng)_突。
一般情況下,如果出現(xiàn)樣式?jīng)_突,則會(huì)按照CSS書寫的順序,以最后的樣式為準(zhǔn)。
CSS繼承性
所謂繼承性是指書寫CSS樣式表時(shí),子標(biāo)簽會(huì)繼承父標(biāo)簽的某些樣式,如文本顏色和字號(hào)。想要設(shè)置一個(gè)可繼承的屬性,只需將它應(yīng)用于父元素即可。
簡(jiǎn)單的理解就是: 子承父業(yè)。
注意:
恰當(dāng)?shù)厥褂美^承可以簡(jiǎn)化代碼,降低CSS樣式的復(fù)雜性。子元素可以繼承父元素的樣式(text-,font-,line-這些元素開頭的都可以繼承,以及color屬性) <!DOCTYPE html> <html lang="en"><head><meta charset="utf-8"><style>div {color: pink;font-size: 20px;}</style></head><body><div><p>王思聰</p></div></body> </html>CSS優(yōu)先級(jí)
定義CSS樣式時(shí),經(jīng)常出現(xiàn)兩個(gè)或更多規(guī)則應(yīng)用在同一元素上,這時(shí)就會(huì)出現(xiàn)優(yōu)先級(jí)的問題。
在考慮權(quán)重時(shí),初學(xué)者還需要注意一些特殊的情況,具體如下:
繼承樣式的權(quán)重為0。即在嵌套結(jié)構(gòu)中,不管父元素樣式的權(quán)重多大,被子元素繼承時(shí),他的權(quán)重都為0,也就是說子元素定義的樣式會(huì)覆蓋繼承來的樣式。行內(nèi)樣式優(yōu)先。應(yīng)用style屬性的元素,其行內(nèi)樣式的權(quán)重非常高,可以理解為遠(yuǎn)大于100。總之,他擁有比上面提高的選擇器都大的優(yōu)先級(jí)。權(quán)重相同時(shí),CSS遵循就近原則。也就是說靠近元素的樣式具有最大的優(yōu)先級(jí),或者說排在最后的樣式優(yōu)先級(jí)最大。CSS定義了一個(gè)!important命令,該命令被賦予最大的優(yōu)先級(jí)。也就是說不管權(quán)重如何以及樣式位置的遠(yuǎn)近,!important都具有最大優(yōu)先級(jí)。 <!DOCTYPE html> <html lang="en"><head><meta charset="utf-8"><style>/* 0, 0 , 0 , 0 特殊性公式 */div { /* 標(biāo)簽選擇器 0,0,0,1*/color: pink;}:first-child { /* 偽類選擇器 0,0,1,0 */color: green;}.king { /* 類選擇器 0,0,1,0 */color: blue;}#wang { /* id選擇器 0,1,0,0 */color: red;}/* 最大的 不是選擇器 */div {color: orange!important; /* important就是重要的 級(jí)別最高 一旦出現(xiàn)優(yōu)先執(zhí)行*/}</style></head><body><div class="king" id="wang" style="color: skyblue"> 王者農(nóng)藥 </div></body> </html>CSS特殊性(Specificity)
關(guān)于CSS權(quán)重,我們需要一套計(jì)算公式來去計(jì)算,這個(gè)就是 CSS Specificity,我們稱為CSS 特性或稱非凡性,它是一個(gè)衡量CSS值優(yōu)先級(jí)的一個(gè)標(biāo)準(zhǔn) 具體規(guī)范入如下:
specificity用一個(gè)四位的數(shù) 字串(CSS2是三位)來表示,更像四個(gè)級(jí)別,值從左到右,左面的最大,一級(jí)大于一級(jí),數(shù)位之間沒有進(jìn)制,級(jí)別之間不可超越。
| 每個(gè)元素(標(biāo)簽)貢獻(xiàn)值為 | 0,0,0,1 |
| 每個(gè)類,偽類貢獻(xiàn)值為 | 0,0,1,0 |
| 每個(gè)ID貢獻(xiàn)值為 | 0,1,0,0 |
| 每個(gè)行內(nèi)樣式貢獻(xiàn)值 | 1,0,0,0 |
| 每個(gè)!important貢獻(xiàn)值 | ∞ 無窮大 |
權(quán)重是可以疊加的
比如的例子:
div ul li ------> 0,0,0,3.nav ul li ------> 0,0,1,2a:hover -----—> 0,0,1,1.nav a ------> 0,0,1,1 #nav p -----> 0,1,0,1 <!DOCTYPE html> <html lang="en"><head><meta charset="utf-8"><style>ul li { /* ul 0001 li 0001 疊加 0,0,0,2 */color: green;}li { /* 0,0,0,1 */color: red;}nav ul li {/* 疊加之后的 0,0,0,3 最后執(zhí)行藍(lán)色*/color: blue;}.daohang ul li { color: pink;}</style></head><body><nav class="daohang"><ul><li>李白</li><li>程咬金</li><li>魯班1號(hào)</li></ul></nav></body> </html> <!DOCTYPE html> <html lang="en"><head><meta charset="utf-8"><style>.daohanglan { /* 0,0,1,0 是 nav 的 不是 li */color: red;}li { /* 0,0,0,1 */color: pink;}</style></head><body><nav class="daohanglan"><ul><li>繼承的權(quán)重為0</li></ul></nav></body> </html> <!DOCTYPE html> <html lang="en"><head><meta charset="utf-8"><style>div {color: red!important; }/* :first-child == div[style] 權(quán)重一樣的 */;* {color: blue;}</style></head><body><div style="color:blue">123</div></body> </html>?
注意:
1.數(shù)位之間沒有進(jìn)制 比如說: 0,0,0,5 + 0,0,0,5 =0,0,0,10 而不是 0,0, 1, 0, 所以不會(huì)存在10個(gè)div能趕上一個(gè)類選擇器的情況。
總結(jié)優(yōu)先級(jí):
盒子模型(CSS重點(diǎn))
其實(shí),CSS就三個(gè)大模塊: 盒子模型 、 浮動(dòng) 、 定位,其余的都是細(xì)節(jié)。要求這三部分,無論如何也要學(xué)的非常精通。
所謂盒子模型就是把HTML頁(yè)面中的元素看作是一個(gè)矩形的盒子,也就是一個(gè)盛裝內(nèi)容的容器。每個(gè)矩形都由元素的內(nèi)容、內(nèi)邊距(padding)、邊框(border)和外邊距(margin)組成。
看透網(wǎng)頁(yè)布局的本質(zhì)
網(wǎng)頁(yè)布局中,我們是如何把里面的文字,圖片,按照美工給我們的效果圖排列的整齊有序呢?
牛奶是怎樣運(yùn)輸,讓消費(fèi)者購(gòu)買的呢?
我們說過,行內(nèi)元素比如 文字 類似牛奶,也需要一個(gè)盒子把他們裝起來,我們前面學(xué)過的雙標(biāo)簽都是一個(gè)盒子。有了盒子,我們就可以隨意的,自由的,擺放位置了。
看透網(wǎng)頁(yè)布局的本質(zhì): 把網(wǎng)頁(yè)元素比如文字圖片等等,放入盒子里面,然后利用CSS擺放盒子的過程,就是網(wǎng)頁(yè)布局。
<
CSS 其實(shí)沒有太多邏輯可言 , 類似我們小時(shí)候玩的積木,我們可以自由的,隨意的擺放出我們想要的效果。
<!DOCTYPE html> <html lang="en"><head><meta charset="utf-8"><style>div, section {width: 300px;height: 300px;background-color: pink;}</style></head><body><div>這是一個(gè)div盒子</div><hr><section>這是一個(gè)section 塊</section></body> </html>盒子模型(Box Model)
這里略過 老舊的ie盒子模型(IE6以下),對(duì)不起,我都沒見過IE5的瀏覽器。
。首先,我們來看一張圖,來體會(huì)下什么是盒子模型。
所有的文檔元素(標(biāo)簽)都會(huì)生成一個(gè)矩形框,我們成為元素框(element box),它描述了一個(gè)文檔元素再網(wǎng)頁(yè)布局匯總所占的位置大小。因此,每個(gè)盒子除了有自己大小和位置外,還影響著其他盒子的大小和位置。
盒子邊框(border)
邊框就是那層皮。 橘子皮。。柚子皮。。橙子皮。。。
語(yǔ)法:
border : border-width || border-style || border-color邊框?qū)傩浴O(shè)置邊框樣式(border-style)
邊框樣式用于定義頁(yè)面中邊框的風(fēng)格,常用屬性值如下:
none:沒有邊框即忽略所有邊框的寬度(默認(rèn)值)solid:邊框?yàn)閱螌?shí)線(最為常用的)dashed:邊框?yàn)樘摼€ dotted:邊框?yàn)辄c(diǎn)線double:邊框?yàn)殡p實(shí)線 <!DOCTYPE html> <html lang="en"><head><meta charset="utf-8"><style>div {width: 200px;height: 200px;border-width: 10px; /* 邊框?qū)挾?粗細(xì) */border-color: pink; /* 邊框顏色 *//* border-style: solid; 邊框樣式 實(shí)線 用的最多的 *//* border-style: dashed; 邊框樣式 大使的 虛詞*//* border-style: dotted; 邊框樣式 點(diǎn)線 */border-style: double; /* 邊框樣式 雙線 */border:1px solid #ccc;}</style></head><body><div>我是一個(gè)盒子</div></body> </html>盒子邊框?qū)懛偨Y(jié)表
| 設(shè)置內(nèi)容 | 樣式屬性 | 常用屬性值 |
| 上邊框 | border-top-style:樣式; border-top-width:寬度;border-top-color:顏色;border-top:寬度 樣式 顏色; | |
| 下邊框 | border-bottom-style:樣式;border- bottom-width:寬度;border- bottom-color:顏色;border-bottom:寬度 樣式 顏色; | |
| 左邊框 | border-left-style:樣式; border-left-width:寬度;border-left-color:顏色;border-left:寬度 樣式 顏色; | |
| 右邊框 | border-right-style:樣式;border-right-width:寬度;border-right-color:顏色;border-right:寬度 樣式 顏色; | |
| 樣式綜合設(shè)置 | border-style:上邊 [右邊 下邊 左邊]; | none無(默認(rèn))、solid單實(shí)線、dashed虛線、dotted點(diǎn)線、double雙實(shí)線 |
| 寬度綜合設(shè)置 | border-width:上邊 [右邊 下邊 左邊]; | 像素值 |
| 顏色綜合設(shè)置 | border-color:上邊 [右邊 下邊 左邊]; | 顏色值、#十六進(jìn)制、rgb(r,g,b)、rgb(r%,g%,b%) |
| 邊框綜合設(shè)置 | border:四邊寬度 四邊樣式 四邊顏色; |
表格的細(xì)線邊框
以前學(xué)過的html表格邊框很粗,這里只需要CSS一句話就可以美觀起來。 讓我們真的相信,CSS就是我們的白馬王子(白雪公主)。
table{ border-collapse:collapse; } collapse 單詞是合并的意思
border-collapse:collapse; 表示邊框合并在一起。
<table cellspacing="0" cellpadding="0"><style>table {width: 700px;height: 300px;border: 1px solid red;/* 合并相鄰邊框 */}td {border: 1px solid red;}</style>圓角邊框(CSS3)
從此以后,我們的世界不只有矩形。radius 半徑(距離)
語(yǔ)法格式:
border-radius: 左上角 右上角 右下角 左下角;課堂案例:
<style>div {width: 200px;height: 200px;border: 1px solid red;}div:first-child { /* 結(jié)構(gòu)偽類選擇器 選親兄弟 */border-radius: 10px; /* 一個(gè)數(shù)值表示4個(gè)角都是相同的 10px 的弧度 */ }div:nth-child(2) {/*border-radius: 100px; 取寬度和高度 一半 則會(huì)變成一個(gè)圓形 */border-radius: 50%; /* 100px 50% 取寬度和高度 一半 則會(huì)變成一個(gè)圓形 */}div:nth-child(3) {border-radius: 10px 40px; /* 左上角 和 右下角 是 10px 右上角 左下角 40 對(duì)角線 */}div:nth-child(4) {border-radius: 10px 40px 80px; /* 左上角 10 右上角 左下角 40 右下角80 */}div:nth-child(5) {border-radius: 10px 40px 80px 100px; /* 左上角 10 右上角 40 右下角 80 左下角 右下角100 */}div:nth-child(6) {border-radius: 100px; height: 100px; }div:nth-child(7) {border-radius: 100px 0; } </style>內(nèi)邊距(padding)
padding屬性用于設(shè)置內(nèi)邊距。 是指 邊框與內(nèi)容之間的距離。
padding-top:上內(nèi)邊距
padding-right:右內(nèi)邊距
padding-bottom:下內(nèi)邊距
padding-left:左內(nèi)邊距
<!DOCTYPE html> <html lang="en"><head><meta charset="utf-8"><style>div {width: 200px;height: 200px;border: 1px solid red;/*padding-left: 20px; padding-top: 30px; 左內(nèi)邊距 *//* padding: 20px; padding 如果只寫一個(gè)值表示 上下左右都是 20像素 *//* padding: 10px 30px; 上下10 左右 30 *//* padding: 10px 30px 50px; 上 10 左右 30 下 50 */padding: 10px 20px 30px 40px; /* 順時(shí)針 上右下左 */}</style></head><body><div>內(nèi)邊距就是內(nèi)容和邊框的距離</div></body> </html>注意: 后面跟幾個(gè)數(shù)值表示的意思是不一樣的。
| 1個(gè)值 | padding:上下左右邊距 比如padding: 3px; 表示上下左右都是3像素 |
| 2個(gè)值 | padding: 上下邊距 左右邊距 比如 padding: 3px 5px; 表示 上下3像素 左右 5像素 |
| 3個(gè)值 | padding:上邊距 左右邊距 下邊距 比如 padding: 3px 5px 10px; 表示 上是3像素 左右是5像素 下是10像素 |
| 4個(gè)值 | padding:上內(nèi)邊距 右內(nèi)邊距 下內(nèi)邊距 左內(nèi)邊距 比如: padding: 3px 5px 10px 15px; 表示 上3px 右是5px 下 10px 左15px 順時(shí)針 |
課堂案例: 新浪導(dǎo)航
外邊距(margin)
margin屬性用于設(shè)置外邊距。 設(shè)置外邊距會(huì)在元素之間創(chuàng)建“空白”, 這段空白通常不能放置其他內(nèi)容。
margin-top:上外邊距
margin-right:右外邊距
margin-bottom:下外邊距
margin-left:上外邊距
margin:上外邊距 右外邊距 下外邊距 左外邊
取值順序跟內(nèi)邊距相同。
外邊距實(shí)現(xiàn)盒子居中
可以讓一個(gè)盒子實(shí)現(xiàn)水平居中,需要滿足一下兩個(gè)條件:
然后就給左右的外邊距都設(shè)置為auto,就可使塊級(jí)元素水平居中。
實(shí)際工作中常用這種方式進(jìn)行網(wǎng)頁(yè)布局,示例代碼如下:
.header{ width:960px; margin:0 auto;}文字盒子居中圖片和背景區(qū)別
清除元素的默認(rèn)內(nèi)外邊距
為了更方便地控制網(wǎng)頁(yè)中的元素,制作網(wǎng)頁(yè)時(shí),可使用如下代碼清除元素的默認(rèn)內(nèi)外邊距:
* {padding:0; /* 清除內(nèi)邊距 */margin:0; /* 清除外邊距 */ }注意: 行內(nèi)元素是只有左右外邊距的,是沒有上下外邊距的。 內(nèi)邊距,在ie6等低版本瀏覽器也會(huì)有問題。
我們盡量不要給行內(nèi)元素指定上下的內(nèi)外邊距就好了。
外邊距合并
使用margin定義塊元素的垂直外邊距時(shí),可能會(huì)出現(xiàn)外邊距的合并。
相鄰塊元素垂直外邊距的合并
當(dāng)上下相鄰的兩個(gè)塊元素相遇時(shí),如果上面的元素有下外邊距margin-bottom,下面的元素有上外邊距margin-top,則他們之間的垂直間距不是margin-bottom與margin-top之和,而是兩者中的較大者。這種現(xiàn)象被稱為相鄰塊元素垂直外邊距的合并(也稱外邊距塌陷)。
解決方案: 避免就好了。
嵌套塊元素垂直外邊距的合并
對(duì)于兩個(gè)嵌套關(guān)系的塊元素,如果父元素沒有上內(nèi)邊距及邊框,則父元素的上外邊距會(huì)與子元素的上外邊距發(fā)生合并,合并后的外邊距為兩者中的較大者,即使父元素的上外邊距為0,也會(huì)發(fā)生合并。
解決方案:
待續(xù)。。。。
content寬度和高度
使用寬度屬性width和高度屬性height可以對(duì)盒子的大小進(jìn)行控制。
width和height的屬性值可以為不同單位的數(shù)值或相對(duì)于父元素的百分比%,實(shí)際工作中最常用的是像素值。
大多數(shù)瀏覽器,如Firefox、IE6及以上版本都采用了W3C規(guī)范,符合CSS規(guī)范的盒子模型的總寬度和總高度的計(jì)算原則是:
/*外盒尺寸計(jì)算(元素空間尺寸)*/Element空間高度 = content height + padding + border + marginElement 空間寬度 = content width + padding + border + margin/*內(nèi)盒尺寸計(jì)算(元素實(shí)際大小)*/Element Height = content height + padding + border (Height為內(nèi)容高度)Element Width = content width + padding + border (Width為內(nèi)容寬度)注意:
1、寬度屬性width和高度屬性height僅適用于塊級(jí)元素,對(duì)行內(nèi)元素?zé)o效( img 標(biāo)簽和 input除外)。
2、計(jì)算盒子模型的總高度時(shí),還應(yīng)考慮上下兩個(gè)盒子垂直外邊距合并的情況。
3、如果一個(gè)盒子沒有給定寬度/高度或者繼承父親的寬度/高度,則padding 不會(huì)影響本盒子大小。
盒子模型布局穩(wěn)定性
開始學(xué)習(xí)盒子模型,同學(xué)們最大的困惑就是, 分不清內(nèi)外邊距的使用,什么情況下使用內(nèi)邊距,什么情況下使用外邊距?
答案是: 其實(shí)他們大部分情況下是可以混用的。 就是說,你用內(nèi)邊距也可以,用外邊距也可以。 你覺得哪個(gè)方便,就用哪個(gè)。
但是,總有一個(gè)最好用的吧,我們根據(jù)穩(wěn)定性來分,建議如下:
按照 優(yōu)先使用 寬度 (width) 其次 使用內(nèi)邊距(padding) 再次 外邊距(margin)。
width > padding > margin原因:
margin 會(huì)有外邊距合并 還有 ie6下面margin 加倍的bug(討厭)所以最后使用。
padding 會(huì)影響盒子大小, 需要進(jìn)行加減計(jì)算(麻煩) 其次使用。
width 沒有問題(嗨皮)我們經(jīng)常使用寬度剩余法 高度剩余法來做。
CSS3盒模型
CSS3中可以通過box-sizing 來指定盒模型,即可指定為content-box、border-box,這樣我們計(jì)算盒子大小的方式就發(fā)生了改變。
可以分成兩種情況:
1、box-sizing: content-box 盒子大小為 width + padding + border content-box:此值為其默認(rèn)值,其讓元素維持W3C的標(biāo)準(zhǔn)Box Mode
2、box-sizing: border-box 盒子大小為 width 就是說 padding 和 border 是包含到width里面的
注:上面的標(biāo)注的width指的是CSS屬性里設(shè)置的width: length,content的值是會(huì)自動(dòng)調(diào)整的。
div {width: 100px;height: 100px;background: skyblue;margin: 0 auto;border: 1px solid gray;/* 默認(rèn)的設(shè)置 如果我們添加了 border屬性 該容器的大小會(huì)發(fā)生改變因?yàn)樗獌?yōu)先保證內(nèi)部的內(nèi)容所占區(qū)域 不變*//* box-sizing 如果不設(shè)置 默認(rèn)的值 就是 content-box: 優(yōu)先保證內(nèi)容的大小 對(duì)盒子進(jìn)行縮放;border-box: 讓 盒子 優(yōu)先保證自己所占區(qū)域的大小,對(duì)內(nèi)容進(jìn)行壓縮;*/box-sizing: border-box; }盒子陰影
語(yǔ)法格式:
box-shadow:水平陰影 垂直陰影 模糊距離 陰影尺寸 陰影顏色 內(nèi)/外陰影;[外鏈圖片轉(zhuǎn)存失敗(img-JDX1IC1B-1568607621298)(media/1498467567011.png)]
總結(jié)
以上是生活随笔為你收集整理的博客9-16CSS 三大特性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试学习资料
- 下一篇: 【JAVADAY9、常见的8个类的使用】