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