1. 程式人生 > >Web前端學習筆記——CSS顯示模式、特性、背景

Web前端學習筆記——CSS顯示模式、特性、背景

標籤顯示模式(display)

非洲黑人: 面板內黑色素含量高,以吸收陽光中的紫外線,保護面板內部結構免遭損害,頭髮象羊毛一樣捲曲,使每根捲髮周圍都有許多空隙,空隙充滿空氣,捲髮有隔熱作用。

歐洲白人: 生活寒帶或著是說常年溫度較低的地緣,加上年日照時間少,身體的黑色素沉澱比較少``所以出現面板、髮色、瞳暈都呈現淺色

最重要的總結: 是為了更好的適應環境而完成的自然選擇。

同理,我們網頁的標籤非常多,再不同地方會用到不同型別的標籤,以便更好的完成我們的網頁。

標籤的型別(顯示模式)

HTML標籤一般分為塊標籤和行內標籤兩種型別,它們也稱塊元素和行內元素。具體如下:

塊級元素(block-level)

每個塊元素通常都會獨自佔據一整行或多整行,可以對其設定寬度、高度、對齊等屬性,常用於網頁佈局和網頁結構的搭建。

常見的塊元素有<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等,其中<div>標籤是最典型的塊元素。

塊級元素的特點:

(1)總是從新行開始

(2)高度,行高、外邊距以及內邊距都可以控制。

(3)寬度預設是容器的100%

(4)可以容納內聯元素和其他塊元素。

行內元素(inline-level)

行內元素(內聯元素)不佔有獨立的區域,僅僅靠自身的字型大小和影象尺寸來支撐結構,一般不可以設定寬度、高度、對齊等屬性,常用於控制頁面中文字的樣式。

常見的行內元素有<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>等,其中<span>標籤最典型的行內元素。

行內元素的特點:

(1)和相鄰行內元素在一行上。

(2)高、寬無效,但水平方向的padding和margin可以設定,垂直方向的無效。

(3)預設寬度就是它本身內容的寬度。

(4)行內元素只能容納文字或則其他行內元素。(a特殊)

注意:

  1. 只有 文字才 能組成段落 因此 p 裡面不能放塊級元素,同理還有這些標籤h1,h2,h3,h4,h5,h6,dt,他們都是文字類塊級標籤,裡面不能放其他塊級元素。
  2. 連結裡面不能再放連結。

塊級元素和行內元素區別

塊級元素的特點:
(1)總是從新行開始
(2)高度,行高、外邊距以及內邊距都可以控制。
(3)寬度預設是容器的100%
(4)可以容納內聯元素和其他塊元素。
行內元素的特點:
(1)和相鄰行內元素在一行上。
(2)高、寬無效,但水平方向的padding和margin可以設定,垂直方向的無效。
(3)預設寬度就是它本身內容的寬度。
(4)行內元素只能容納文字或則其他行內元素。

行內塊元素(inline-block)

在行內元素中有幾個特殊的標籤——<img />、<input />、<td>,可以對它們設定寬高和對齊屬性,有些資料可能會稱它們為行內塊元素。

行內塊元素的特點:
(1)和相鄰行內元素(行內塊)在一行上,但是之間會有空白縫隙。
(2)預設寬度就是它本身內容的寬度。
(3)高度,行高、外邊距以及內邊距都可以控制。

標籤顯示模式轉換 display

塊轉行內:display:inline;

行內轉塊:display:block;

塊、行內元素轉換為行內塊: display: inline-block;

此階段,我們只需關心這三個,其他的是我們後面的工作。

CSS書寫規範

開始就形成良好的書寫規範,是你專業化的開始。

空格規範

【強制】 選擇器 與 { 之間必須包含空格。

示例: .selector { }

【強制】 屬性名 與之後的 : 之間不允許包含空格, : 與 屬性值 之間必須包含空格。

示例:

font-size: 12px;

選擇器規範

【強制】 當一個 rule 包含多個 selector 時,每個選擇器宣告必須獨佔一行。

示例:

/* good */
.post,
.page,
.comment {
    line-height: 1.5;
}


/* bad */
.post, .page, .comment {
    line-height: 1.5;
}

【建議】 選擇器的巢狀層級應不大於 3 級,位置靠後的限定條件應儘可能精確。

示例:

/* good */
#username input {}
.comment .avatar {}

/* bad */
.page .header .login #username input {}
.comment div * {}

屬性規範

【強制】 屬性定義必須另起一行。

示例:

/* good */
.selector {
    margin: 0;
    padding: 0;
}

/* bad */
.selector { margin: 0; padding: 0; }

【強制】 屬性定義後必須以分號結尾。

示例:

/* good */
.selector {
    margin: 0;
}

/* bad */
.selector {
    margin: 0
}

CSS 三大特性

層疊 繼承 優先順序 是我們學習CSS 必須掌握的三個特性。

CSS層疊性

所謂層疊性是指多種CSS樣式的疊加。

是瀏覽器處理衝突的一個能力,如果一個屬性通過兩個相同選擇器設定到同一個元素上,那麼這個時候一個屬性就會將另一個屬性層疊掉

比如先給某個標籤指定了內部文字顏色為紅色,接著又指定了顏色為藍色,此時出現一個標籤指定了相同樣式不同值的情況,這就是樣式衝突。

一般情況下,如果出現樣式衝突,則會按照CSS書寫的順序,以最後的樣式為準。

  1. 樣式衝突,遵循的原則是就近原則。 那個樣式離著結構近,就執行那個樣式。
  2. 樣式不衝突,不會層疊
CSS最後的執行口訣:  長江後浪推前浪,前浪死在沙灘上。

CSS繼承性

所謂繼承性是指書寫CSS樣式表時,子標籤會繼承父標籤的某些樣式,如文字顏色和字號。想要設定一個可繼承的屬性,只需將它應用於父元素即可。

簡單的理解就是: 子承父業。

CSS最後的執行口訣:  龍生龍,鳳生鳳,老鼠生的孩子會打洞。

注意:

恰當地使用繼承可以簡化程式碼,降低CSS樣式的複雜性。子元素可以繼承父元素的樣式(text-,font-,line-這些元素開頭的都可以繼承,以及color屬性)
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		/*p {
			color: red;	
		}*/
		.jianlin {
			color: pink;
			font-size: 50px;
			height: 100px;
		}
	</style>
</head>
<body>
	<div class="jianlin">
		<p>王思聰</p>
	</div>
</body>
</html>

CSS優先順序

定義CSS樣式時,經常出現兩個或更多規則應用在同一元素上,這時就會出現優先順序的問題。

在考慮權重時,初學者還需要注意一些特殊的情況,具體如下:

繼承樣式的權重為0。即在巢狀結構中,不管父元素樣式的權重多大,被子元素繼承時,他的權重都為0,也就是說子元素定義的樣式會覆蓋繼承來的樣式。

行內樣式優先。應用style屬性的元素,其行內樣式的權重非常高,可以理解為遠大於100。總之,他擁有比上面提高的選擇器都大的優先順序。

權重相同時,CSS遵循就近原則。也就是說靠近元素的樣式具有最大的優先順序,或者說排在最後的樣式優先順序最大。

CSS定義了一個!important命令,該命令被賦予最大的優先順序。也就是說不管權重如何以及樣式位置的遠近,!important都具有最大優先順序。

CSS特殊性(Specificity)

關於CSS權重,我們需要一套計算公式來去計算,這個就是 CSS Specificity,我們稱為CSS 特性或稱非凡性,它是一個衡量CSS值優先順序的一個標準 具體規範入如下:

specificity用一個四位的數 字串(CSS2是三位)來表示,更像四個級別,值從左到右,左面的最大,一級大於一級,數位之間沒有進位制,級別之間不可超越。

繼承或者* 的貢獻值 0,0,0,0
每個元素(標籤)貢獻值為 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,2

a:hover      -----—>      0,0,1,1

.nav a       ------>      0,0,1,1   

#nav p       ----->       0,1,0,1

注意:

1.數位之間沒有進位制 比如說: 0,0,0,5 + 0,0,0,5 =0,0,0,10 而不是 0,0, 1, 0, 所以不會存在10個div能趕上一個類選擇器的情況。

  1. 繼承的 權重是 0

總結優先順序:

  1. 使用了 !important宣告的規則。
  2. 內嵌在 HTML 元素的 style屬性裡面的宣告。
  3. 使用了 ID 選擇器的規則。
  4. 使用了類選擇器、屬性選擇器、偽元素和偽類選擇器的規則。
  5. 使用了元素選擇器的規則。
  6. 只包含一個通用選擇器的規則。
  7. 同一類選擇器則遵循就近原則。
總結:權重是優先順序的演算法,層疊是優先順序的表現

CSS 背景(background)

CSS 可以新增背景顏色和背景圖片,以及來進行圖片設定。

background-color 背景顏色
background-image 背景圖片地址
background-repeat 是否平鋪
background-position 背景位置
background-attachment 背景固定還是滾動
背景的合寫(複合屬性)
background:背景顏色 背景圖片地址 背景平鋪 背景滾動 背景位置

背景圖片(image)

語法:

background-image : none | url (url) 

引數:

none :  無背景圖(預設的) url :  使用絕對或相對地址指定背景影象

background-image 屬性允許指定一個圖片展示在背景中(只有CSS3才可以多背景)可以和 background-color 連用。 如果圖片不重複地話,圖片覆蓋不到地地方都會被背景色填充。 如果有背景圖片平鋪,則會覆蓋背景顏色。

小技巧: 我們提倡 背景圖片後面的地址,url不要加引號。

背景平鋪(repeat)

語法:

background-repeat : repeat | no-repeat | repeat-x | repeat-y 

引數:

repeat :  背景影象在縱向和橫向上平鋪(預設的)

no-repeat :  背景影象不平鋪

repeat-x :  背景影象在橫向上平鋪

repeat-y :  背景影象在縱向平鋪

設定背景圖片時,預設把圖片在水平和垂直方向平鋪以鋪滿整個元素。

repeat-x :  背景影象在橫向上平鋪

repeat-y :  背景影象在縱向平鋪

設定背景圖片時,預設把圖片在水平和垂直方向平鋪以鋪滿整個元素。

背景位置(position)

語法:

background-position : length || length

background-position : position || position 

引數:

length :  百分數 | 由浮點數字和單位識別符號組成的長度值。請參閱長度單位 position :  top | center | bottom | left | center | right

說明:

設定或檢索物件的背景影象位置。必須先指定background-image屬性。預設值為:(0% 0%)。 如果只指定了一個值,該值將用於橫座標。縱座標將預設為50%。第二個值將用於縱座標。

注意:

  1. position 後面是x座標和y座標。 可以使用方位名詞或者 精確單位。
  2. 如果和精確單位和方位名字混合使用,則必須是x座標在前,y座標後面。比如 background-position: 15px top; 則 15px 一定是 x座標 top是 y座標。

實際工作用的最多的,就是背景圖片居中對齊了。

背景附著

語法:

background-attachment : scroll | fixed 

引數:

scroll :  背景影象是隨物件內容滾動 fixed :  背景影象固定

說明:

設定或檢索背景影象是隨物件內容滾動還是固定的。

背景簡寫

background屬性的值的書寫順序官方並沒有強制標準的。為了可讀性,建議大家如下寫:

background:背景顏色 背景圖片地址 背景平鋪 背景滾動 背景位置

background: transparent url(image.jpg) repeat-y  scroll 50% 0 ;

背景透明(CSS3)

CSS3支援背景半透明的寫法語法格式是:

background: rgba(0,0,0,0.3);

最後一個引數是alpha 透明度 取值範圍 0~1之間

注意: 背景半透明是指盒子背景半透明, 盒子裡面的內容不收影響。

導航欄案例

使用技巧:在一行內的盒子內,我們設定行高等於盒子的高度,就可以使文字垂直居中。

<head>
        <meta charset="utf-8">
        <style>
		body {
			background-color: #000;
		}
		a {
			width: 200px;
			height: 50px;
			/* background-color: orange; */
			display: inline-block;  /* 把a 行內元素轉換為行內塊元素 */
			text-align: center;  /* 文字水平居中 */
			line-height: 50px;  /* 我們設定行高等於盒子的高度,就可以使文字垂直居中 */
			color: #fff;
			font-size: 22px;
			text-decoration: none;  /* 取消下劃線 文字裝飾 */
		}
		a:hover {  /* 滑鼠經過 給我們的連結新增背景圖片*/
			background: url(images/h.png) no-repeat; 
		}
        </style>
    </head>
    <body>
    <a href="#">專區說明</a>
    <a href="#">申請資格</a>
    <a href="#">兌換獎勵</a>
    <a href="#">下載遊戲</a>
    </body>