CSS3知識點複習與總結

CSS3知識點複習與總結

文章目錄

一、術語解釋

CSS規則 = 選擇器 + 聲明塊

選擇器:用來選中元素

  1. 元素選擇器:使用元素名選擇(h1{}
  2. ID選擇器:指定元素ID進行選擇(#id{}
  3. 類選擇器:選中所有聲明此類名的元素(.red{}
    聲明塊:出現在大括號中,用來聲明樣式

二、CSS書寫位置

1、內部樣式表

通常書寫在HTML頁面的<head>中,其實寫在<body>中也可以,但要注意寫在正文前面,先加載樣式,後加載內容。
渡一袁進(比喻鬼才):樣式如果寫在body最後,加載網頁就好像先出來一個沒有化妝的,過了一會才化好妝,視覺體驗極差


在代碼量少的時候,200行以內,可以使用內部樣式表,可以提高第一次訪問的響應速度,因爲少加載了一個CSS文件。

<style>
        h1{}
</style>

2、內聯樣式表,元素樣式表

<h1 style="color: gray; background-color: hotpink">現在開始添加樣式</h1>

3、外部樣式表

將樣式書寫在獨立的CSS文件中

<link rel="stylesheet" href="css/1.css">

爲什麼推薦使用外部樣式表

  1. 外部樣式表可以解決多頁面樣式重複的問題(便於維護)
  2. 有利於瀏覽器緩存,提高頁面響應速度
  3. 有利於代碼分離(HTML和CSS),更容易閱讀和維護

三、常見樣式聲明

color(元素內部文字顏色)

  • 預設值,常見的顏色單詞,如red,blue
  • 三原色,色值:(光學三原色,紅綠藍),每個顏色0-255,組合成色值.
  • RGB表示法rgb(0,255,0)
  • hex16進製表示法:##FF4400(紅綠藍)

background-color(元素背景顏色)

background-color: #008c8c;

font-size(元素內部文字尺寸大小)

用到兩種單位:像素px、em

  1. 像素px,絕對單位
  2. em,相對單位,相對於父元素的字體大小

每個元素都必須有字體大小,如果沒有聲明,則使用父元素的字體大小,如果沒有父元素(HTML),則使用基準字號,基準字號在瀏覽器設置中。

font-weight(文字粗細程度)

可以使用數字和預設值(單詞),默認值爲“normal=400”

  1. 數字:默認爲400,加粗爲700
  2. 預設值:常用normal,bold
  3. strong也有加粗的效果
font-weight: bold;


<strong>表示重要的不能忽略 的內容</strong>

font-family(文字類型)

字體類型必須用戶計算機中存在纔有效,因此通常匹配多個字體
通常在末尾加上 sans-serif,如果其他字體都沒有,則使用電腦上有的非襯線字體

font-family: consolas,'Times New Roman', Times, serif,微軟雅黑,sans-serif;

font-style(字體樣式,通常用來設置斜體)

i元素默認傾斜;但是實際使用中,通常用它表示一個圖標

em 強調內容,樣式爲斜體

font-style: italic;

<i>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Suscipit, magni.</i>
<em>表示強調的內容,表示爲斜體</em>

text-decoration(文本修飾,給文本加線)

  1. none,用於去掉超鏈接的下劃線
  2. line-through,刪除線
  3. underline,加下劃線

del元素表示錯誤的內容,樣式裏面有刪除線
s元素表示已經過期的信息,可以在商品原價上用

text-decoration: underline;

text-indent(首行文本縮進)

style="text-indent:2em "     #縮進兩個中文字符寬度

line-height(行文本高度)

值越大,每行文本之間的距離就越大
設置爲容器的高度,可以讓單行文本垂直居中
行高可以設置爲純數字,表示當前元素字體大小的倍數

line-height: 1.5;

width和height(寬度和高度)

letter-spacing(文字間隙)

letter-spacing: 1em;

text-align(元素內部文字水平排列方式)

text-align: center

樣式補充(透明度、盒子隱藏、鼠標、背景圖)

透明度、鼠標樣式

設置整個元素的透明度(包含所有子元素,文字,都會變得透明)
p{
    background-color: black;
    opacity: .5;
}

在顏色位置設置阿爾法通道改變透明度

鼠標樣式
cursor: pointer;
cursor:url("img/1.ico");

盒子隱藏

.box1{
    display: none;
    #改變display屬性,不再是盒子了

	visibility: hidden;
	#這個屬性是生成盒子,但是顯示隱藏,一個隱身的盒子
}

背景圖片

  • img術語HTML的概念(當圖片屬於網頁內容的時候,必須使用img元素)
  • 背景圖屬於CSS的概念(當圖片僅用於美化頁面時,必須使用背景圖)

背景圖片涉及的CSS屬性

background-image: url();

#控制圖片重複
background-repeat: no-repeat;

#保證圖片尺寸完整顯示
background-size: contain;
cover:保證比例不變,撐滿,會有部分顯示不出來

#尺寸:支持百分比和像素
background-size: 100% 100%;

#設置位置
background-position: center;

#背景圖相對於視口固定
background-attachment: fixed;

四、選擇器

簡單選擇器

1、ID選擇器

#p1{
    color: red;
}

2、元素選擇器

h2{
    background-color: #008c8c;
    text-align: center
}

3、類選擇器

.blue{
    background-color: #008c8c;
}

4、通配符選擇器(選中所有元素)

*{
    color: yellow;
}

5、屬性選擇器(根據屬性名和屬性值選中元素)

/* 選中所有具有href屬性的元素 */
[href]{
    color: red;
    text-decoration-line: none;
}

/* 屬性加屬性值 */
[href="qq"]{
    color: skyblue;
}

6、僞類選擇器(選中某些元素的某種狀態)

  1. hover 鼠標懸停狀態(常用,很多元素都可以用,懸停上去變大)
  2. active 鼠標按下狀態,激活狀態
  3. link 超鏈接未被訪問時的狀態
  4. visited 超鏈接被訪問過的狀態

first-child / last-child / first_of_-type / nth-child /nth-of-type

li:first-child	選中子元素中第一個li元素  , 注意中間沒有內容是  並  的意思
li:first-child{
    color: red;
}

選中ul下面的第一個li
.box1 ul :first-child{
    color: blue;
}

.box1 ul :nth-child(2){
    color: red;
}

.box1 ul li:nth-of-type(2){
    color: red;
}


書寫順序:link、visited、hover、active

a:link{
    text-decoration: none;
    color: black;
}

a:visited{
    color: skyblue;
}

a:hover{
    color: red;
    font-size: 2em;
}

a:active{
    color: blue;
}
  • focus ------- 聚焦時的樣式
  • checked — 單選或者多選被選中時的樣式
input:focus{
    outline: none;
    border: 5px solid red;
}

單選多選框樣式無法控制,但是可以使用checked來控制單選框後面的label的樣式

7、僞元素選擇器

在某個元素的內部的最前面或最後面增加一個子元素並設置樣式

h2::before{
    content: "~~~~~~《";
    color:red;
}
h2::after{
    content: "》~~~~~~";
    color:red;
}

first-letter / first-line / selection
selection:選中被用戶框選的文字

p::first-letter{
    font-size: 2em;
    color: red;
}

p::first-line{
    color: #008c8c;
}

p::selection{
    color: skyblue;
}

選擇器的組合

1、並且(兩個選擇器連着寫)

p#p1{
    color:red;
}

2、後代元素(加空格)(找兒子找孫子都行)

div h2{
    color:red;
}

#p1 li{
    color:#008c8c;
}

3、子元素(a>b)(b必須是a的兒子)

4、相鄰兄弟元素(a+b)

h2+p{
    color:#008c8c;
}

5、後面出現的所有兄弟元素(a~b)

.blue h2~p{
    color:red;
}

選擇器的並列(多個選擇器,用“,”分隔)(a,b都使用同一個樣式)

.blue h2~p,h2{
    color:red;
}

五、層疊(解決聲明衝突的過程)

聲明衝突:同一個樣式,多次應用到同一個元素

層疊的瀏覽器自動處理過程

1、比較重要性(權重從高到低)

  1. 作者樣式表中加了!important的屬性h2{background-color: #008c8c !important;}
  2. 作者樣式表中的普通樣式
  3. 瀏覽器默認樣式表

2、比較特殊性 (看選擇器)

總體規則:選擇器選中的範圍越窄,越特殊(類和ID選擇器 總是 比 元素選擇器 特殊)
具體規則:通過選擇器,計算出一個四位數(XXXX)

  1. 千位:如果是內聯樣式,記1,否則,記0
  2. 百位:等於選擇器中所有ID選擇器的數量,可以有多個ID
  3. 十位:等於選擇器中所有類選擇器、屬性選擇器、僞類選擇器的數量
  4. 個位:等於選擇器中所有元素選擇器、僞類選擇器的數量(body a 選擇器(0002) 大於 a選擇器(0001))

3、比較源次序(代碼書寫靠後的勝出)

應用

  1. 重置樣式表(書寫作者樣式表,覆蓋瀏覽器默認樣式表)(網上有專用的重置樣式表)
  2. 愛恨法則(lvha)(link、visited、hover、active)

六、繼承(子元素會繼承父元素的某些CSS屬性)

通常跟文字內容相關的屬性,可以繼承


七、屬性值的計算過程

瀏覽器是一個元素一個元素依次渲染
渲染每個元素的前提條件是:該元素的所有CSS屬性必須都有值

+-----------------------------------------------------------+
一個元素,從屬性都沒有值到全部有值的計算過程   叫做   屬性值的計算過程
+-----------------------------------------------------------+

在這裏插入圖片描述

聲明值 = 開發者寫的 + 瀏覽器默認樣式

1、確定聲明值:參考樣式表中沒有衝突的聲明,作爲CSS屬性值

2、 層疊衝突:對樣式表有衝突的聲明使用重疊規則,確定CSS屬性值

3、使用繼承:對仍然沒有屬性的值,若可以繼承,則繼承父元素的值

4、使用默認值:對仍然沒有屬性的值,使用默認值

小問題:爲什麼 div 裏面的 a 元素不會繼承 div 的color屬性值,而p元素會?
答:p元素在確定聲明值這一步沒有color,只能繼承父元素的
------a元素在第一步確定聲明值的過程中,使用了瀏覽器的默認樣式,所以color屬性已經確定
*****由此可知,更改a元素的某些屬性必須進行聲明。

#強制繼承
a{
	color:inherit;
}

#使用默認值
background-color: initial;

八、盒模型

box,盒子,每個元素都會在頁面中生成一個矩形區域

  1. 行盒:display屬性 = inline的元素
  2. 塊盒:display屬性 = block的元素

display默認值爲inline

瀏覽器自帶屬性將所有容器元素都設爲block

盒子的組成部分

  1. 內容 content (width、height,設置盒子內容的寬高)
  2. 填充 padding ( padding-left;padding-right;padding-top;padding-bottom;
  3. 邊框 border (邊框樣式+寬度+顏色)
  4. 外邊距 margin
h2{
    color:red;
    background-color: skyblue;
    
    width: 100px;
    height: 100px;

    border-style:solid;
    border-width: 10px;
    border-color: #008c8c;
    
    padding-left: 5px;
    padding-right: 5px;
    padding-top: 5px;
    padding-bottom: 5px;
}

盒模型的應用

1、改變寬高範圍(box-sizing)

默認情況下,width和height設置的是內容盒的寬高

在衡量設計稿尺寸的時候往往使用的是邊框盒

以前方法是精確計算
現在CSS3採用 box-sizing,用來影響width和height的影響範圍

#設置爲border-box後,width和height將成爲盒子整體的寬高
box-sizing: border-box;

2、改變背景覆蓋範圍(background-clip)

默認情況下,背景覆蓋邊框盒
可以使用background-clip改變背景的覆蓋範圍
在這裏插入圖片描述

3、溢出處理(overflow)

overflow,控制內容溢出邊框盒後的處理方式

overflow: hidden;

4、斷詞規則(word-break)

  • normal:對於CJK字符(中日韓),在字符後面截斷,對於非CJK,在單詞後面截斷
  • break-all:所有的都在字符處截斷
  • keep-all:都在單詞截斷,中文沒有空格,無法使用

5、空白處理(white-space)

overflow: hidden;
white-space: normal;#不換行
text-overflow: ellipsis;

行盒盒模型

常見的行盒元素:span、strong、em、i、img、video、audio

特點

  1. 行盒跟着內容延伸
  2. 行盒不能設置寬高(要調整寬高,只能調整字體大小,字體類型,行高)
  3. 內邊距(填充區),在水平方向上有效,垂直方向只會影響背景,不會實際佔據空間
  4. 邊框和內邊距一樣
  5. 外邊距也一樣,都是左右有效,而上下無效,
  6. 結論:調整上下只能設置行高

行塊盒(指display屬性 = inline-block 的盒子)

  1. 不獨佔一行
  2. 盒模型中所有尺寸都有效

可替換元素 和 非可替換元素

非可替換元素:大部分元素,頁面上顯示的效果,取決於元素內容
可替換元素:少部分元素,頁面顯示結果取決於元素的屬性

可替換元素:img、video、audio

可替換元素類似於行塊盒


九、常規流

視覺格式化模型:頁面中的多個盒子的排列規則(佈局規則)

視覺格式化模型的三種方式

  1. 常規流
  2. 浮動
  3. 定位

常規流佈局(文檔流)

所有元素,默認情況下,都屬於常規流佈局,即沒有經過作者改動

  • 總體規則:
  • 塊盒獨佔一行
  • 行盒依次排列

(包含塊–containning-block):-----每個盒子都有自己的包含塊,包含塊決定了盒子的排列區域。
絕大部分情況下,每個盒子的包含塊爲其父元素的內容盒

塊盒規則1:水平方向上

  • 每個塊盒的總寬度,必須剛好等於包含塊的寬度(即 margin、border、padding、content的總寬度 = 父元素內容盒的寬度)
  • 寬度的默認值爲auto(將剩餘空間全部吸收)
  • 若寬度、邊框、內邊距、外邊距計算後,仍然有剩餘空間,則該空間被margin-right全部吸收
  • 在常規流中,塊盒在其包含塊中居中可以定寬,然後左右margin使用margin:auto;

塊盒規則2:垂直方向上的auto值

  • height:auto 適應內容的高度
  • margin:auto 就是0

百分比取值

  • padding、寬高、margin可以設置爲百分比
  • 以上所有的百分比相對於包含塊的寬度(只有寬度爲標準值,高度不算)
  • 高度的百分比設置:包含塊的高度是否取決於子元素的高度,設置百分比無效
  • 若包含塊的高度不取決於子元素的高度,則百分比相對於父元素的高度

上下外邊距的合併

兩個常規流塊盒,上下外邊距相鄰,會進行合併(兩個外邊距取最大值)

  • 同級相鄰的兩個div如此
  • 父子元素上下外邊距相鄰,也會合並,注意是相鄰(即中間沒有隔開的東西,可以設置border隔開)

十、浮動

應用場景

  1. 文字環繞
  2. 橫向排列

浮動的基本特點

修改float屬性值爲:

  1. left,元素靠上靠左排列
  2. right,元素靠上靠右排列
  3. 默認值爲none

特點

  1. 當一個元素浮動後,它必定爲塊盒
  2. 浮動元素的包含塊和常規流一樣,是父元素的內容盒

盒子尺寸特點

  1. 寬度爲auto時,表示適應內容的寬度
  2. 高度爲auto時,和常規流一樣,同樣是適應內容的高度
  3. margin爲auto時,始終爲0
  4. 邊框、內邊距、百分比設置與常規流相同

浮動排列

  1. 左浮動的盒子靠上靠左排列
  2. 右浮動的盒子靠上靠右排列
  3. 浮動盒子在包含塊中排列時,會避開常規流盒子
  4. 常規流塊盒在排列時,無視浮動盒子
  5. 行盒在排列時,會避開浮動盒子(img float 文字環繞)
  6. 外邊距合併不會發生

問題(高度坍塌)

根源

因爲常規流盒子的自動高度是適應內容,在計算時不會考慮浮動盒子

即父常規流盒子認爲:常規流子元素是我親兒子,你要多大地兒,我就開闢多大地兒
浮動子元素不是我親兒子,我有地兒你可以用,我要是沒有,也懶得給你再開了

解決方案:使用clear屬性

  1. clear(清除浮動)
  2. 默認值爲none
  3. left:清除左浮動,該元素必須出現在前面所有左浮動盒子的下方(如果你有兄弟在天上飛,你不能無視他
  4. right:該元素必須出現在前面所有右浮動盒子的下方
  5. both:所有
#修復方式
用一個隱身的常規流盒子放在所有的浮動盒子下方
clear:both;

理解:父盒子有一個親兒子,親兒子最小,但是親兒子注重兄弟情義(使用了clear:both),他不管親生不親生,要求自己的土地必須在所有兄弟的下面,因爲他是親兒子,父盒子必須讓他在自己的土地範圍內,沒有辦法,只好開闢大片土地。


十一、定位(手動控制元素在包含塊中的精準位置)

position屬性

  1. static:靜態、不定位
  2. relative:相對定位
  3. absolute:絕對定位
  4. fixed:固定定位

定位元素會脫離文檔流(相對定位除外)
一個脫離了文檔流的元素:文檔流中的元素擺放時,會忽略脫離了文檔流的元素

相對定位

不會導致元素脫離文檔流,只是讓元素在原來位置上偏移

可以通過四個屬性設置其相對偏移位置

  1. left
  2. right
  3. top
  4. bottom

相對定位,盒子不會影響其他盒子

絕對定位

包含塊變化:找祖先元素中第一個定位元素,該元素的填充盒爲其包含塊

絕對定位第一件事是要找爹,往上翻輩分,第一個有定位的元素就是爹,如果沒有,就是整個網頁

常用來一個元素蓋在另一個元素上面

固定定位

特點:和絕對定位的包含塊不一樣

固定定位的包含塊爲 視口

無論寫到哪個犄角旮旯,他爹永遠是視口
常用來 回到頂部 頂部的導航欄

定位體系下的居中

某個方向居中

  1. 定寬(高)
  2. 左右設置爲0
  3. margin設置爲auto

多個定位元素重疊時

堆疊上下文

使用z-index   #  另一根座標系

z-index還可以設置爲負數,如果是負數,遇到常規流和浮動元素,它會被覆蓋

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章