CSS3備忘錄

目錄

一、背景

二、css選擇器

三、css元素分類

四、CSS三大特性

五、CSS三大模塊

5.1、盒子模型

5.2、浮動-float

浮動使用方式

浮動特性

清除浮動

5.3、定位

5.3.1、邊偏移

5.3.2、定位模式 

 5.3.2.1、相對定位模式 

 5.3.2.2、絕對定位模式 

 5.3.2.3、固定定位模式 

5.4 定位總結


一、背景

對於css學習一直停留在大學期間,畢業之後一直從事後端開發(C語言+Java無界面),一直沒有機會深入學習css技術。很多標籤在使用時也不規範嚴謹,甚至是瞎用。最近有點時間,打算花上一兩週時間系統學習一下,本篇博客只是記錄相關重點知識

二、css選擇器

css一大特點就是利用選擇器,設置對應容器(元素)樣式,選擇分爲:基本選擇器和複合選擇器

類別 種類 備註
基本選擇器 標籤選擇器

例如: div {color:red;} 、p {color:red;}

類選擇器 例如:.myfont {font-size:16px;}
id選擇器 例如: #myfont{font-size:16px;}
僞類選擇器 鏈接僞類選擇器:a:link、a:visited、a:hover、a:active(順序必須是這樣)
結構僞類選擇器:E:first-child、E:last-child、E:nth-child(n)、E:nth-last-child(n)
目標僞類選擇器:E:target,結合錨點方式設置屬性
複合選擇器 交集選擇器 E.class名字{//屬性設置},例如:p.one {},選擇類是one且是p標籤的,此選擇器不常用
並集選擇器 主要用於抽出相同樣式代碼,各個選擇器用逗號分割,這些選擇樣式是相同的,例如: .classA#one,div {//屬性設置}
後代選擇器 用於選擇某元素的子元素,用空格分割, 父類元素在前,子類元素在後
子元素選擇器 用於選擇直接子元素,即孫子級別不在選擇, 用>表示,例如: .classA > p 
屬性選擇器

用方括號進行選擇,例如:

     1)a[title] { color: red; },表示選擇a中帶有屬性title
     2)input[type="text"] {color:red;}
     3)[]內部支持正則表達式格式, div[class^=font]、div[class$=font]、div[class*=font]

僞元素選擇器

(css3特性)

 ::after 在元素內部結束位置創建一個元素,該元素爲行內元素且必須要結合content屬性使用,本質是創建一個行內元素
::before 在元素內部開始位置創建一個元素,該元素爲行內元素且必須要結合content屬性使用
::selection 用鼠標拖拉選中後,例如:p::first-letter {color:orange;}
::first-line 第一行,例如:p::first-line {color:green;}
 ::first-letter 第一個字,例如:p::first-letter {color:red;}

三、css元素分類

在css中元素分爲:塊級元素、行內元素、行內塊元素

  常見元素 特點
塊級元素 div、p、h1~h6、ul、ol、li

     1)總是從新的一行開始
     2)高度、行高、外邊距以及內邊劇都可以控制
     3)寬度默認是容器的100%
     4)可以容納內聯元素和其他塊元素

     5)p、h1~h6、dt這些標籤內不能在放其他塊級元素

行內元素 a、span、strong、b、em、i、del、s、ins、u、img、input

     1)和相鄰行內元素在一行上
     2)高、寬無效,水平方向的padding、margin可以設置,而垂直方向無效
     3)默認寬度就是它本身內容的寬度
     4)行內元素只能容納文本或者其他行內元素,不可以放塊級元素,但a標籤除外,a標籤可以放塊級元素。

注意:img input比較特殊,可以設置寬高,通過margin 0 auto來設置img是無效的,必須將其轉成block塊元素

行內塊元素 img、input、td可以設置寬度、高度、對齊屬性

1)和相鄰行內元素(行內塊)在一行上,但是之間會有空間縫隙
2)默認寬度就是它本身內容的寬度,但是可以通過width設置
3)高度、行高、外邊距以及內邊距都可以控制

 


我們可以通過display屬性,來改變元素顯示模式:

  • display:inline 將 塊級元素 轉成  行內元素
  • display:block 將 行內元素 轉成 塊級元素
  • display:inline-block 將塊、行內元素 轉成 行內塊元素

四、CSS三大特性

CSS三大特行包括:層疊性、繼承性、優先級

層疊性:一般情況下,如果樣式出現出衝突,則按照css書寫順序爲準。

繼承性:子標籤會繼承父標籤的某些樣式,如字體、字號、顏色可以繼承而邊框、外邊距、內邊距、定位、元素高度、浮動等屬性不可繼承。

優先級:和權重掛鉤,權重越大優先級越高

css特殊性:

權重表示:0,0,0,0 (從左往右權重越小)

選擇器 權重
標籤選擇器 0,0,0,1
類、僞類選擇器 0,0,1,0
#id選擇器 0,1,0,0
內嵌樣式,即在標籤中增加style="..." 1,0,0,0
!import, 例如: div {color: orange!import;} 優先執行 最高

權重疊加:如下所示,最終顯示red顏色,

<style>
ul li {/* ul權重 0,0,0,1  li權重 0,0,0,1 => 最終疊加後的權重 0,0,0,2*/
  color:red;
}
li {/* li權重 0,0,0,1 */
  color:green;
}
</style>

繼承的權重爲0:

<style>
li {/* 權重 0,0,0,1 */
  color:orange;
}
.daohang {/* 權重 0,0,1,0 */
  color:red;
}
</style>

<nav class="daohang">
  <ul>
    <li>繼承的權重爲0--最後爲orange</li>
  </ul>
</nav>

五、CSS三大模塊

CSS的三大模塊包含:盒子模型、浮動、定位,這部分是無論如何都必須要掌握的。

5.1、盒子模型

網頁佈局就是擺盒子過程,盒子三元素:邊框(border)、內邊距(padding)、外邊距(margin)。

內邊距:只盒子裏的內容與邊框的距離,可以通過padding-top、padding-right、padding-bottom、padding-left來設置

外邊距:盒子的邊框與其他盒子的邊框距離,可以通過margin-top、margin-right、margin-bottom、margin-left來設置。行內元素(例如span)只有左右外邊距,沒有上下外邊距。內邊距上下是有問題的。因此行內元素不建議設置上下內外邊距。

盒子空間尺寸:

高度 = content height + padding + border + margin    寬度 = content width + padding + border + margin

內盒子尺寸:

高度 = content height + padding + border                   寬度 = content width + padding + border

注:一個盒子的沒有指定寬度\高度 或者 子盒子繼承父盒子的寬度\高度,則padding不會影響本盒子的大小

注:我們在使用ul標籤的時候,默認情況下ul有內外邊距,因此我們經常將內外邊距清0

5.2、浮動-float

最早浮動float,是用來實現文字環繞效果(例如:文字環繞圖片),我們只需要給img增加float:right(float:left)即可。但是後來float也用於將任何盒子(塊級元素,例如div)在一行排列顯示,因此float常用於網頁佈局。

元素的浮動是指設置了浮動屬性的元素會脫離標準普通流的控制,移動到其父元素中指定位置的過程。

float取值 說明
left 元素向左浮動
right 元素向右浮動
none 元素不浮動

浮動脫離標準流,不佔位置,會影響標準流,浮動只有左右浮動。

浮動使用方式

我們在使用浮動的時候,往往需要定義一個標準流的盒子(即沒有float屬性)作爲父級元素,在父級元素內添加我們的浮動元素,這樣能保證後面元素不會被被覆蓋。

浮動特性

1、浮動的元素總是找離它最近的父元素進行對其並且不會超過內邊距。

2、一個父盒子裏面的子盒子,如果想要子盒子在一行顯示,必須將所有子盒子設置爲浮動

3、設置float屬性的元素,具有行內塊特性,例如div(塊級元素)添加了float,可以在一行顯示多個div,再或者span元素添加了float,可以對其進行寬度和高度的設置。

清除浮動

某些場景,父級元素在沒有設置高度場景下,子級元素浮動會引起一些問題。例如如下代碼:

<style>
    .father {/* 父級元素 不設置高度 */
        border: 1px solid red;
    }
    .damao {
        width: 100px;
        height: 100px;
        background-color: pink;
        float: left;
    }
    .ermao {
        width: 150px;
        height: 100px;
        background-color: purple;
        float: left;
    }
    .xiaoming {
        width: 300px;
        height: 200px;
        background-color: black;
    }
</style>

<div class="father">
        <div class="damao">大毛</div>
        <div class="ermao">二毛</div>
</div>
<div class="xiaoming">小明</div>

div小明,就會出現被覆蓋現象,例如如下:

解決方法有兩種:

1)給父級元素指定高度,但是有些時候不方便給父級元素高度,例如新聞頁,無法提前獲知新聞內容大小。

2) 清除浮動clear屬性 -- 推薦方法

clear取值 說明
left 清除左側浮動的影響
right 清除右側浮動的影響
both 同時清除左右兩側浮動的影響,推薦使用這個

清除浮動4種方式

1)額外標籤法:在最後一個浮動元素後面添加一個空的標籤,例如<div style="clear:both"></div>,不推薦這種方式

2)父級元素添加overflow屬性, .father { overflow:hidden; /* 觸發BFC,BFC可以清除浮動 */ }

3)使用after僞元素清除浮動,實際是額外標籤法的升級版本,具體代碼如下:

<style>
.clearfix:after {
  content: "."; /* 內容隨意 儘量不空,避免兼容器問題 */
  display: block; /* 轉換爲塊級元素 */
  height: 0; /* 設置高度爲0 */
  visibility: hidden; /* 隱藏盒子,相當於隱藏 content內容 */
  clear: both; /* 清除浮動 */
}
.clearfix {/* 解決兼容器 ie6 ie7 處理方式 */
  /**
   * 1、*代表ie6/ie7能識別的特殊符號 帶有這個*的屬性 只有ie6/ie7才執行 
   * 2、zoom就是ie6/ie7 清除浮動的方法
   */
  *zoom: 1;
}
</style>

<!-- 父級元素引用 clearfix類 -->
<div class="father clearfix">
...
</div>

4)使用before和after雙僞元素清除浮動 -- 推薦方法

.clearfix:before, .clearfix:after {
    content: ""; /* 內容爲空 */
    display: table; /* 此元素會作爲塊級表格來顯示(類似 <table>),表格前後帶有換行符。 */
}
.clearfix:after {
    clear: both;
}
.clearfix {/* 解決兼容器 ie6 ie7 處理方式 */
  /**
   * 1、*代表ie6/ie7能識別的特殊符號 帶有這個*的屬性 只有ie6/ie7才執行 
   * 2、zoom就是ie6/ie7 清除浮動的方法
   */
  *zoom: 1;
}

5.3、定位

元素的定位屬性主要包括邊偏移和定位模式兩部分,只有同時設置這兩個屬性才能起到定位的效果,即完整定位=邊偏移+定位模式

5.3.1、邊偏移

邊偏移屬性 描述 備註
top 頂端偏移量,定義元素相對於其父元素上邊線的距離 在同一個元素中,兩者只能出現一個
bottom 底部偏移量,定義元素相對於其父元素下邊線的距離
left 左側偏移量,定義元素相對於其父元素左邊線的距離 在同一個元素中,兩者只能出現一個
right 右側偏移量,定義元素相對於其父元素右邊線的距離

使用:top:100px; left:30px; 

5.3.2、定位模式 

所謂定位模式實際是定位類型,在CSS中使用position屬性對其進行定位設置,語法格式:選擇器 {position:屬性值},position屬性值如下:

取值 描述 備註
static 靜態定位,默認方式。 邊偏移對該模式是無效的,所以一般用於清除定位的。
relative 相對定位,相對於其原文檔流的位置進行定位 每次移動都以自己的左上角爲起點,開始移動。注意:通過它改變位置,原來佔有的位置繼續佔有。即其他元素不能佔用空缺位置,相對定位不脫離標準流,如圖5-1所示。
absolute 絕對定位,相對於其上一個已經定位的父元素進行定位 絕對定位是脫離標準流的,不佔有原有位置,原有位置會被其他元素替補,如圖5-2所示

 5.3.2.1、相對定位模式 

<style>
    .father {
        background-color: black;
        width: 300px;
        height: 400px;
    }

    .father div {
        width: 100px;
        height: 100px;
        background-color: yellow;
    }
    .child2 {
        top:100px;
        left:150px;
        position: relative;/* 以自己爲左上角爲基準點 自我爲核心模式 佔坑不拉屎角色 */
    }
</style>

<div class="father">
    <div class="child1">child1</div>
    <div class="child2">child2</div>
    <div class="child3">child3</div>
</div>
圖5-1 相對位置 繼續佔有原有位置

 5.3.2.2、絕對定位模式 

<style>
    .father {
        width: 300px;
        height: 300px;
        background-color: pink;
        margin: 130px;
    }
    .son {
        width: 100px;
        height: 100px;
        background-color: purple;
        position: absolute;/* 給大兒子 設置定位*/
        top: 30px;
        left: 30px;
    }
    .son2 {
        width: 100px;
        height: 100px;
        background-color: red;
    }
</style>

<div class="father">
    <div class="son"></div>
    <div class="son2"></div>
</div>
圖5-2 絕對位置 原有位置不佔有

 

在absolute模式(絕對定位)下,有兩種場景:

1)父級元素沒有定位,子元素有定位,則子元素定位以瀏覽器左上角爲基準點

2)父級元素有定位(例如position=relative、position=absolute),子元素有定位,則子元素定位以父元素左上角爲基準點

絕對模式下如何讓盒子水平居中、垂直居中:

注意:加了絕對定位的盒子,在使用"margin X auto" 將無效,不能使其水平居中。 

可以使用如下算法進行設置,可以達到水平、垂直居中:以水平居中爲例:

1、父元素設置相對定位:position:relative;  子元素設置絕對定位:position:absolute; 

2、子元素left值等於元素的width的一半,例如父元素width:800px, 那麼left等於400px;也可以設置爲left:50%

3、子元素設置margin-left爲負值,且數值爲子元素width的一半,例如子元素width:100px, 那麼margin-left:-50px;

       或者使用transform: translate(-50%); 這裏的50%是自己的width的一半,這樣能夠解決width不是偶數場景,免去計算過程

總結:

1) 浮動float的主要目的是將多個塊級元素在一行顯示,

      定位主要是移動位置,讓盒子到我們想要位置上。 

2)相對定位:佔有位置,不脫標準流

      絕對定位:不佔有位置,脫離標準流

3)子絕父相:在網頁中我們通常這樣使用定位,子元素用絕對定位,父元素用相對定位,即爲子絕父相

 5.3.2.3、固定定位模式 

固定定位是絕對定位的一種特殊形式,類似於 正方形是一個特殊的 矩形。它以瀏覽器窗口作爲參照物來定義網頁元素。當position屬性的取值爲fixed時,即可將元素的定位模式設置爲固定定位。

當對元素設置固定定位後,它將脫離標準文檔流的控制,始終依據瀏覽器窗口來定義自己的顯示位置。不管瀏覽器滾動條如何滾動也不管瀏覽器窗口的大小如何變化,該元素都會始終顯示在瀏覽器窗口的固定位置。

固定定位有三點:

1. 固定定位的元素跟父親沒有任何關係,只認瀏覽器。

2. 固定定位完全脫離標準流,不佔有位置(其他盒子會替補到遺留出的位置),不隨着滾動條滾動。

3. 固定定位的盒子一定要指定寬和高,除非由內容自動撐開

5.4 定位總結

定位模式 是否脫標占有位置 是否可以使用邊偏移 移動位置基準 備註
靜態static 不脫標,正常模式 不可以 正常模式  
相對定位relative 不脫標,佔有位置 可以 相對自身位置移動(自戀型)  
絕對定位absolute 完全脫標,不佔有位置 可以 相對於定位父級移動位置(拼爹型) 默認轉成行內塊元素
固定定位fixed 完全脫標,不佔有位置 可以  相對於瀏覽器移動位置(認死理型) 默認轉成行內塊元素

我們可以通過z-index指定疊放次序,數值越大,越在上層顯示。疊放次序有點像PS中圖層概念。z-index只有在相對定位、絕對定位和固定定位下有作用,其他場景均無效。

下一篇,我們繼續

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