1. 程式人生 > 實用技巧 >2020年12月-第01階段-前端基礎-CSS Day02

2020年12月-第01階段-前端基礎-CSS Day02

CSS Day02

  • 複合選擇器

後代選擇器

並集選擇器

1. CSS複合選擇器

  • 理解

理解css複合選擇器分別的應用場景

為什麼要學習css複合選擇器

CSS選擇器分為 基礎選擇器 和 複合選擇器 ,但是基礎選擇器不能滿足我們實際開發中,快速高效的選擇標籤。

  • 目的是為了可以選擇更準確更精細的目標元素標籤。
  • 複合選擇器是由兩個或多個基礎選擇器,通過不同的方式組合而成的

1.1 後代選擇器(重點)

  • 概念:

後代選擇器又稱為包含選擇器

  • 作用:

用來選擇元素或元素組的子孫後代

  • 其寫法就是把外層標籤寫在前面,內層標籤寫在後面,中間用空格分隔,先寫父親爺爺,在寫兒子孫子。
父級 子級{屬性:屬性值;屬性:屬性值;}
  • 語法:
.class h3{color:red;font-size:16px;}

  • 當標籤發生巢狀時,內層標籤就成為外層標籤的後代。
  • 子孫後代都可以這麼選擇。 或者說,它能選擇任何包含在內 的標籤。

1.2 子元素選擇器

  • 作用:

子元素選擇器只能選擇作為某元素子元素(親兒子)的元素。

  • 其寫法就是把父級標籤寫在前面,子級標籤寫在後面,中間跟一個 > 進行連線

  • 語法:

.class>h3{color:red;font-size:14px;}

這裡的子 指的是 親兒子 不包含孫子 重孫子之類。

白話:

比如:  .demo > h3 {color: red;}   說明  h3 一定是demo 親兒子。  demo 元素包含著h3。

1.3 交集選擇器

  • 條件

交集選擇器由兩個選擇器構成,找到的標籤必須滿足:既有標籤一的特點,也有標籤二的特點。

  • 語法:

  • 其中第一個為標籤選擇器,第二個為class選擇器,兩個選擇器之間不能有空格,如h3.special。

記憶技巧:

交集選擇器 是 並且的意思。 即...又...的意思

比如:   p.one   選擇的是: 類名為 .one  的 段落標籤。

用的相對來說比較少,不太建議使用。

1.4 並集選擇器(重點)

  • 應用:

如果某些選擇器定義的相同樣式,就可以利用並集選擇器,可以讓程式碼更簡潔。

  • 並集選擇器(CSS選擇器分組)是各個選擇器通過,連線而成的,通常用於集體宣告。

  • 語法:

  • 任何形式的選擇器(包括標籤選擇器、class類選擇器id選擇器等),都可以作為並集選擇器的一部分。
  • 記憶技巧:

並集選擇器通常用於集體宣告 ,逗號隔開的,所有選擇器都會執行後面樣式,逗號可以理解為 和的意思。

比如  .one, p , #test {color: #F00;}  
表示   .one 和 p  和 #test 這三個選擇器都會執行顏色為紅色。 
通常用於集體宣告。

案例

<!-- 主導航欄 -->
<div class="nav">   
  <ul>
    <li><a href="#">公司首頁</a></li>
	<li><a href="#">公司簡介</a></li>
	<li><a href="#">公司產品</a></li>
	<li><a href="#">聯絡我們</a></li>
  </ul>
</div>
<!-- 側導航欄 -->
<div class="sitenav">    
  <div class="site-l">左側側導航欄</div>
  <div class="site-r"><a href="#">登入</a></div>
</div>

1.5 連結偽類選擇器(重點)

  • 偽類選擇器:

為了和我們剛才學的類選擇器相區別

類選擇器是一個點 比如 .demo {}
而我們的偽類 用 2個點 就是 冒號  比如  :link{}    偽娘 
  • 作用:

用於向某些選擇器新增特殊的效果。比如給連結新增特殊效果, 比如可以選擇 第1個,第n個元素。

因為偽類選擇器很多,比如連結偽類,結構偽類等等。我們這裡先給大家講解連結偽類選擇器。

  • a:link /* 未訪問的連結 */
  • a:visited /* 已訪問的連結 */
  • a:hover /* 滑鼠移動到連結上 */
  • a:active /* 選定的連結 */

注意:

  • 寫的時候,他們的順序儘量不要顛倒 按照 lvha 的順序。否則可能引起錯誤。
  • 因為叫連結偽類,所以都是 利用交集選擇器 a:link a:hover
  • 因為a連結瀏覽器具有預設樣式,所以我們實際工作中都需要給連結單獨指定樣式。
  • 實際工作開發中,我們很少寫全四個狀態,一般我們寫法如下:
a {   /* a是標籤選擇器  所有的連結 */
			font-weight: 700;
			font-size: 16px;
			color: gray;
}
a:hover {   /* :hover 是連結偽類選擇器 滑鼠經過 */
			color: red; /*  滑鼠經過的時候,由原來的 灰色 變成了紅色 */
}

1.6 複合選擇器總結

選擇器 作用 特徵 使用情況 隔開符號及用法
後代選擇器 用來選擇元素後代 是選擇所有的子孫後代 較多 符號是空格 .nav a
子代選擇器 選擇 最近一級元素 只選親兒子 較少 符號是> .nav>p
交集選擇器 選擇兩個標籤交集的部分 既是 又是 較少 沒有符號 p.one
並集選擇器 選擇某些相同樣式的選擇器 可以用於集體宣告 較多 符號是逗號 .nav, .header
連結偽類選擇器 給連結更改狀態 類似交集選擇器 較多 重點記住 a{} 和 a:hover 實際開發的寫法

2. 標籤顯示模式(display)重點

  • 理解

標籤的三種顯示模式

三種顯示模式的特點以及區別

理解三種顯示模式的相互轉化

  • 應用

實現三種顯示模式的相互轉化

2.1 什麼是標籤顯示模式

  • 什麼是標籤的顯示模式?

標籤以什麼方式進行顯示,比如div 自己佔一行, 比如span 一行可以放很多個

  • 作用:

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

  • 標籤的型別(分類)

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

2.2 塊級元素(block-level)

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

  • 塊級元素的特點
(1)比較霸道,自己獨佔一行
(2)高度,寬度、外邊距以及內邊距都可以控制。
(3)寬度預設是容器(父級寬度)的100%
(4)是一個容器及盒子,裡面可以放行內或者塊級元素。
  • 注意:

只有 文字才 能組成段落 因此 p 裡面不能放塊級元素,特別是 p 不能放div

同理還有這些標籤h1,h2,h3,h4,h5,h6,dt,他們都是文字類塊級標籤,裡面不能放其他塊級元素。

2.3 行內元素(inline-level)

  • 例:
常見的行內元素有<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>等,其中<span>標籤最
典型的行內元素。有的地方也成內聯元素

  • 行內元素的特點:
(1)相鄰行內元素在一行上,一行可以顯示多個。
(2)高、寬直接設定是無效的。
(3)預設寬度就是它本身內容的寬度。
(4)行內元素只能容納文字或則其他行內元素。

注意:

  • 連結裡面不能再放連結。
  • 特殊情況a裡面可以放塊級元素,但是給a轉換一下塊級模式最安全。

2.4 行內塊元素(inline-block)

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

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

2.5 三種模式總結區別

元素模式 元素排列 設定樣式 預設寬度 包含
塊級元素 一行只能放一個塊級元素 可以設定寬度高度 容器的100% 容器級可以包含任何標籤
行內元素 一行可以放多個行內元素 不可以直接設定寬度高度 它本身內容的寬度 容納文字或則其他行內元素
行內塊元素 一行放多個行內塊元素 可以設定寬度和高度 它本身內容的寬度

2.6 標籤顯示模式轉換 display

  • 塊轉行內:display:inline;

  • 行內轉塊:display:block;

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

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

3. 行高那些事(line-height)

  • 理解

能說出 行高 和 高度 三種關係
能簡單理解為什麼行高等於高度單行文字會垂直居中

3.1 行高測量

行高的測量方法:

3.2 單行文字垂直居中

行高我們利用最多的一個地方是: 可以讓單行文字在盒子中垂直居中對齊。

文字的行高等於盒子的高度。
這裡情況些許複雜,開始學習,我們可以先從簡單地方入手學會。

行高 = 上距離 + 內容高度 + 下距離

上距離和下距離總是相等的,因此文字看上去是垂直居中的。
行高和高度的三種關係

  • 如果行高 等於 高度 文字會 垂直居中
  • 如果行高 大於 高度 文字會 偏下
  • 如果行高 小於 高度 文字會 偏上

4. CSS 背景(background)

  • 理解

背景的作用
css背景圖片和插入圖片的區別

4.1 背景顏色(color)

  • 語法:
background-color:顏色值;   預設的值是 transparent  透明的

4.2 背景圖片(image)

  • 語法:
background-image : none | url (url) 
引數 作用
none 無背景圖(預設的)
url 使用絕對或相對地址指定背景影象
  • 小技巧: 我們提倡 背景圖片後面的地址,url不要加引號。

4.3 背景平鋪(repeat)

  • 語法:
background-repeat : repeat | no-repeat | repeat-x | repeat-y 
引數 作用
repeat 背景影象在縱向和橫向上平鋪(預設的)
no-repeat 背景影象不平鋪
repeat-x 背景影象在橫向上平鋪
repeat-y 背景影象在縱向平鋪

4.4 背景位置(position) 重點

  • 語法:
background-position : length || length

background-position : position || position 
引數
length 百分數 由浮點數字和單位識別符號組成的長度值
position top center bottom left center right 方位名詞
  • 注意:
1.必須先指定background-image屬性
2.position 後面是x座標和y座標。 可以使用方位名詞或者 精確單位。
3.如果指定兩個值,兩個值都是方位名字,則兩個值前後順序無關,比如left  top和top  left效果一致
4.如果只指定了一個方位名詞,另一個值預設居中對齊。
5.如果position 後面是精確座標, 那麼第一個,肯定是 x  第二的一定是y
6.如果只指定一個數值,那該數值一定是x座標,另一個預設垂直居中
7.如果指定的兩個值是 精確單位和方位名字混合使用,則第一個值是x座標,第二個值是y座標

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

4.5 背景附著

  • 背景附著就是解釋背景是滾動的還是固定的

  • 語法:

background-attachment : scroll | fixed 
引數 作用
scroll 背景影象是隨物件內容滾動
fixed 背景影象固定

4.6 背景簡寫

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

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

  • 語法:

background: transparent url(image.jpg) repeat-y  scroll center top ;

4.7 背景透明(CSS3)

  • 語法:
background: rgba(0, 0, 0, 0.3);
  • 最後一個引數是alpha 透明度 取值範圍 0~1之間
  • 我們習慣把0.3 的 0 省略掉 這樣寫 background: rgba(0, 0, 0, .3);
  • 注意:背景半透明是指盒子背景半透明, 盒子裡面的內容不受影響
  • 因為是CSS3 ,所以 低於 ie9 的版本是不支援的。

4.8 背景總結

屬性 作用
background-color 背景顏色 預定義的顏色值/十六進位制/RGB程式碼
background-image 背景圖片 url(圖片路徑)
background-repeat 是否平鋪 repeat/no-repeat/repeat-x/repeat-y
background-position 背景位置 length/position 分別是x 和 y座標, 切記 如果有 精確數值單位,則必須按照先X 後Y 的寫法
background-attachment 背景固定還是滾動 scroll/fixed
背景簡寫 更簡單 背景顏色 背景圖片地址 背景平鋪 背景滾動 背景位置; 他們沒有順序
背景透明 讓盒子半透明 background: rgba(0,0,0,0.3); 後面必須是 4個值

5. CSS 三大特性

  • 理解

能說出css樣式衝突採取的原則
能說出那些常見的樣式會有繼承

  • 應用

能寫出CSS優先順序的演算法
能會計算常見選擇器的疊加值

5.1 CSS層疊性

  • 概念:

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

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

  • 原則:

樣式衝突,遵循的原則是就近原則。 那個樣式離著結構近,就執行那個樣式。
樣式不衝突,不會層疊

5.2 CSS繼承性

  • 概念:

子標籤會繼承父標籤的某些樣式,如文字顏色和字號。

想要設定一個可繼承的屬性,只需將它應用於父元素即可。

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

  • 注意:

恰當地使用繼承可以簡化程式碼,降低CSS樣式的複雜性。比如有很多子級孩子都需要某個樣式,可以給父級
指定一個,這些孩子繼承過來就好了。

子元素可以繼承父元素的樣式(text-,font-,line-這些元素開頭的可以繼承,以及color屬性)

5.3 CSS優先順序(重點)

  • 概念:

定義CSS樣式時,經常出現兩個或更多規則應用在同一元素上,此時,

選擇器相同,則執行層疊性

選擇器不同,就會出現優先順序的問題。

1). 權重計算公式

關於CSS權重,我們需要一套計算公式來去計算,這個就是 CSS Specificity(特殊性)

標籤選擇器 計算權重公式
繼承或者 * 0,0,0,0
每個元素(標籤選擇器) 0,0,0,1
每個類,偽類 0,0,1,0
每個ID 0,1,0,0
每個行內樣式 style="" 1,0,0,0
每個!important 重要的 ∞ 無窮大
  • 值從左到右,左面的最大,一級大於一級,數位之間沒有進位制,級別之間不可超越。
  • 關於CSS權重,我們需要一套計算公式來去計算,這個就是 CSS Specificity(特殊性)
  • div {
    color: pink!important;
    }

2). 權重疊加

我們經常用交集選擇器,後代選擇器等,是有多個基礎選擇器組合而成,那麼此時,就會出現權重疊加。

就是一個簡單的加法計算

  • 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

注意:

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

3). 繼承的權重是0

這個不難,但是忽略很容易繞暈。其實,我們修改樣式,一定要看該標籤有沒有被選中。

1) 如果選中了,那麼以上面的公式來計權重。誰大聽誰的。
2) 如果沒有選中,那麼權重是0,因為繼承的權重為0.

6. CSS註釋

CSS註釋規則:

/*  需要註釋的內容  */  進行註釋的,即在需要註釋的內容前使用 "/*" 標記開始註釋,在內容的結尾使用 "*/"結束。

** 例如:**

p {
 /* 所有的字型是14畫素大小*/
  font-size: 14px;                 
}