CSS知識點總結
給自己時間,不要焦急,一步一步來,一日一日過,
請相信生命的韌性是驚人的,跟自己向上的心去合作,不要放棄對自己的愛護。
元素的顯示與隱藏
display顯示
使用disply隱藏之後,不再保留原來的位置,會被之後正常的文件流覆蓋
display: none 隱藏物件
display:block 除了轉換為塊級元素之外,同時還有顯示元素的意思。
複製程式碼
visibility可見性
和display隱藏不同的是,使用可見性隱藏,元素仍然會保留原來的位置
visibility:visible ;  物件可視
visibility:hidden;   物件隱藏
複製程式碼
overflow溢位
這是一個神奇的單詞哈?,很多地方都會用到它,之前提到的清除浮動也使用到了overflow
屬性值 | 描述 |
---|---|
visible | 不剪下內容也不新增滾動條 |
hidden | 不顯示超過物件尺寸的內容,超出的部分隱藏掉 |
scroll | 不管超出內容否,總是顯示滾動條 |
auto | 超出自動顯示滾動條,不超出不顯示滾動條 |
綜合運用
HTML部分
CSS部分(很重要的思想轉換,一定要記得
)
CSS使用者介面樣式
滑鼠樣式cursor
屬性值 | 描述 |
---|---|
default | 小白 預設 |
pointer | 小手 |
move |
移動 |
text | 文字 |
not-allowed | 禁止 |
輪廓線
平時我們最直接的寫法是 :outline: none,取消輪廓線。
<input type="text" style="outline: none;"/>
複製程式碼
防止文字域拖拽
平時使用文字域佈局的時候,如果不設定任何屬性,使用者抗議自己修改文字域的大小,會影響頁面的整體佈局,這時我們就要注意了: 實際開發中,我們文字域右下角是不可以拖拽的 ❗
<textarea style="resize: none;"></textarea>
複製程式碼
vertical-align 垂直對齊
vertical-align 不影響塊級元素中的內容對齊,它只針對於行內元素
或者行內塊元素
特別是行內塊元素, 通常用來控制圖片/表單與文字的對齊。
vertical-align : baseline |top |middle |bottom
複製程式碼
對齊方式依次是:基線、頂線、中線、底線
溢位的文字省略號顯示
設定或檢索是否使用一個省略標記(...)標示物件內文字的溢位
text-overflow : clip ;不顯示省略標記(...),而是簡單的裁切
text-overflow:ellipsis ; 當物件內文字溢位時顯示省略標記(...)
複製程式碼
white-space設定或檢索物件內文字顯示方式。通常我們使用於強制一行顯示內容
white-space:normal ;預設處理方式
white-space:nowrap ; 強制在同一行內顯示所有文字,直到文字結束或者遭遇br標籤物件才換行。
複製程式碼
省略號三部曲
/*1. 先強制一行內顯示文字*/
white-space: nowrap;
/*2. 超出的部分隱藏*/
overflow: hidden;
/*3. 文字用省略號替代超出的部分*/
text-overflow: ellipsis;
複製程式碼
CSS精靈技術(sprite) 很重要
為什麼需要sprites技術
?圖為網頁的請求原理圖,當用戶訪問一個網站時,需要向伺服器傳送請求,網頁上的每張影象都要經過一次請求才能展示給使用者,但是
一個網頁中往往會應用很多小的背景圖作為修飾,當網頁中的影象過多,伺服器就會頻繁的接收和傳送請求,會降低頁面的載入速度
特點:有效的減少伺服器接收和傳送請求的次數,提高頁面的載入速度
精靈技術講解
CSS精靈圖實際上是將網頁中的一些背景圖整合到一張大圖中,這樣當用戶訪問該頁面時,只需要向伺服器傳送一次請求,網頁中的背景影象即可全部展示出來
需要使用到的CSS技術:background-image、background-repeat、background-position屬性進行背景定位。
精靈技術使用的核心總結
- 精確測量,每個小背景圖片的大小和位置。
- 給盒子指定小背景圖片時, 背景定位基本都是負值。
CSS佈局的三種機制
普通流
塊級元素會獨佔一行,從上向下
順序排列;
- 常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
複製程式碼
行內元素會按照順序,從左到右
順序排列,碰到父元素邊緣則自動換行;
- 常用元素:span、a、i、em等
複製程式碼
浮動
浮動最主要的價值是可以讓多個塊級元素在同一行內展示出來。
元素的浮動是指設定了浮動屬性的元素會
- 脫離標準普通流的控制
- 移動到指定位置。
選擇器 { float: 屬性值; }
屬性值 | 描述 |
---|---|
none | 元素不浮動(預設值) |
left | 元素向左浮動 |
right | 元素向右浮動 |
我們使用浮動的核心目的——讓多個塊級盒子在同一行顯示。 這個也是我們最常見的一種佈局方式
一個完整的網頁,是 標準流 + 浮動 + 定位 一起完成的。
浮動只會影響當前的或者是後面的標準流盒子,不會影響前面的標準流,每個標準流單獨佔一行。
如果一個盒子裡面有多個子盒子,如果其中一個盒子浮動了,其他兄弟也應該浮動,避免引起其他的問題哈。
下面我們來看以下?幾種情況:
以下所說的div結構均為此:
<div>
<div class="a"></div>
<div class="b"></div>
</div>
複製程式碼
當a盒子浮動,b盒子也浮動的時候,a、b兩盒子會顯示在同一行。 當a盒子不浮動,b盒子浮動的時候,a盒子即是標準的文件流,是很霸道的哈,他會單獨佔據一行,所以b盒子會依照a盒子為參考,b盒子浮動。
清除浮動
我們為什麼要清除浮動呢 ❓
父級盒子很多情況下,不方便給高度
,但是子盒子浮動就不佔有位置,注意哦,浮動的盒子不佔位置。
最後父級盒子高度為0,就影響了下面的標準流盒子,下面的標準流盒子會覆蓋原本想展示的內容。
- 總結:
- 由於浮動元素不再佔用原文件流的位置,所以它會對後面的元素排版產生影響
- 準確地說,並不是清除浮動,而是
清除浮動後造成的影響。
清除浮動主要為了解決父級元素因為子級浮動引起內部高度為0 的問題。清除浮動之後, 父級就會根據浮動的子盒子自動檢測高度。父級有了高度,就不會影響下面的標準流了。
清除浮動的方法
如下圖所示,若父元素nav盒子沒有設定高度,子元素均設定浮動,則會導致子元素浮動在正常文件流之外,父元素的高度為:0,影響之後正常的文件流,所以此時我們會清除浮動。
以下?所示的四種清除浮動的方式,均以此案例為參照
注意此處說的浮動元素是指浮動的最後一個元素哈
2.父級新增overflow屬性方法W3C推薦的做法是通過在浮動元素末尾新增一個空的標籤例如 < div style=”clear:both”>< /div>。
可以給父級新增: overflow為 hidden| auto| scroll 都可以實現。
一般我們會在父級元素樣式後加:overflow:hidden。
缺點: 內容增多時候容易造成不會自動換行導致內容被隱藏掉,無法顯示需要溢位的元素。
3.使用after偽元素清除浮動
此方式雖然程式碼多一點,但是不會改變html的結構
:after相當於在結構後用css添加了一個新的標籤。
/*宣告清除浮動的樣式 */
.clearfix:after{
content: "";
display: block;
height: 0;
visibility: hidden;
clear: both;
}
.clearfix{
*zoom:1; /* ie6,7專門清除浮動的樣式*/
}
複製程式碼
4.使用雙偽元素清除浮動
跟第三種方式差不多哈,在盒子的前後插入一個盒子
.clearfix:before,.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
}
複製程式碼
定位與塌陷(塌陷的解決方法)
之前我們有提到過,當給一個父元素內部的子元素設定margin值的時候,父級元素可能也會發生改變,即外邊距合併就是通常所說的塌陷,但是絕對定位和浮動不會觸發外邊距合併
?:
什麼是塌陷
為什麼會出現塌陷呢,只有父子元素會出現塌陷嗎,下面會進行詳細的講解,很重要的,一定要掌握理解,只有瞭解了原因才會自然的想起他的解決方式。
原因:在標準文件流中,豎直方向的margin會出現疊加現象(水平方向不會塌陷),兩個margin緊挨著,中間沒有border或者padding,當兩個margin直接接觸,就產生了合併,即外邊距合併,表現為較大的margin會覆蓋掉較小的margin,豎直方向的兩個盒子中間只有一個較大的margin,這就是margin塌陷現象。
出現塌陷的物件
- 兄弟關係的盒子
- 父子關係的盒子
塌陷的解決方案
這裡總結了一下七種解決方案,需要根據專案的要求,選擇適合的解決方案即可
定位詳解
語法:定位 = 定位模式 + 邊偏移
邊偏移
在 CSS 中,通過 top
、bottom
、left
和 right
屬性定義元素的邊偏移,簡單的說就是上下左右四個方向名詞?
邊偏移屬性 | 示例 | 描述 |
---|---|---|
top |
top: 80px |
頂端偏移量,定義元素相對於其父元素上邊線的距離。 |
bottom |
bottom: 80px |
底部偏移量,定義元素相對於其父元素下邊線的距離。 |
left |
left: 80px |
左側偏移量,定義元素相對於其父元素左邊線的距離。 |
right |
right: 80px |
右側偏移量,定義元素相對於其父元素右邊線的距離 |
定位的盒子有了邊偏移才有價值。 一般情況下,凡是有定位地方必定有邊偏移。
定位模式
在CSS中,通過position的屬性定義元素的定位模式,就是定位的分類,很重要的需要掌握的
選擇器 { position: 屬性值; }
複製程式碼
定位模式是有不同分類的,在不同情況下,我們用到不同的定位模式。
值 | 語義 |
---|---|
static |
靜態定位(預設) |
relative |
相對定位 |
absolute |
絕對定位 |
fixed |
固定定位 |
相對定位(relative)很重要
相對定位是元素相對於他自己原來在標準流中的位置來移動的。
相對定位的特性:
- 相對於他自己原來在標準流中的位置來移動的。
- 定位的盒子原來在標準流中的區域繼續佔有,後面的盒子仍然以標準流的方式來對待他。
絕對定位(absolute)很重要
絕對定位是元素以帶有定位的父級元素來移動的
絕對定位的特性:
- 完全不佔任何位置
- 依據最近的已經定位(絕對、固定或者相對定位)的父元素進行定位。
- 父元素如果沒有定位,則以瀏覽器為標準定位
如?圖所示的,父級元素有一個相對定位模式,給子元素設定一個絕對定位,此時子盒子會以父級的左上角為標準點進行定位。
如下圖所示,父級元素沒有定位的時候,給子元素設定一個絕對定位,該子盒子就會以文件即瀏覽器為標準進行定位。注意這裡的父級元素不僅指子元素的上一級父親元素,會一級一級元素的向上找,如果父親元素的上一級有定位,就以爺爺元素為準進行定位。
總結一下:將元素依據最近的已經定位(絕對、固定或者相對定位)的父元素進行定位。
固定定位(fixed)很重要
固定定位是絕對定位的特殊形式
固定定位的特性:
- 完全不佔有位置
- 只認瀏覽器的可視視窗,跟父級元素無任何關係,不隨滾動條而滾動
絕對定位盒子居中對齊
絕對定位的盒子不能通過margin:0 auto水平居中。
這裡有一個簡單的計算公式讓絕對定位的盒子水平居中,我們先讓盒子左移50%,這時我們會發現,移動位置多了呀,多的長度是盒子的一般,那我們就需要減去盒子一半的長度,可以設定margin-left為負數,負數的值就等於盒子寬度的一半。
我們可以來實踐一下: 給父級元素盒子設定一個position:relative,給需要居中的盒子設定絕對定位,left等於50%,margin-left等於-盒子寬度的一半。絕對定位盒子垂直水平居中hin重要
?上面主要是對絕對定位水平居中有一個詳細的講解,接下來通過一張圖對絕對定位的的垂直水平居中,以及其他位置的居中進行詳細的講解:
我們先看這個圖片,整個黑色邊框是一個長800px,高度為400px的大盒子,示例盒子寬度為200px,高度為100px,上下兩個盒子分別水平居中,左右兩個盒子是垂直居中,和水平居中原理一致。
重點來啦
,我們平時經常會用到的垂直水平居中,給盒子設定絕對定位後,設定:left:50%,top:50%,這時會發現盒子距離中間位置向右多偏移了寬度的一半,向下多偏移了高度的一半,所以也是需要減去的,給盒子來一個margin:-50px -100px;具體程式碼示例如下?: