CSS學習筆記 2016年12月15日整理 CSS基礎 Chapter1 在console輸入escape("宋體") ENTER 就會出現unicode編碼 顯示"%u5B8B%u4F53" 就是\5B8B\4F53 font family: 中文,英文,最好的是unicode編碼 eg. fon ...
CSS學習筆記
2016年12月15日整理
CSS基礎
Chapter1
在console輸入escape("宋體") ENTER
就會出現unicode編碼
顯示"%u5B8B%u4F53" 就是\5B8B\4F53
font-family: 中文,英文,最好的是unicode編碼
eg. font-family: "SimSun","SimHei",sans-serif;
字體名稱 英文名稱 Unicode 編碼
宋體 SimSun \5B8B\4F53
新宋體 NSimSun \65B0\5B8B\4F53
黑體 SimHei \9ED1\4F53
微軟雅黑 microsoft yahei \5FAE\8F6F\96C5\9ED1
楷體 _GB2312 KaiTi_GB2312 \6977\4F53_GB2312
隸書 LiSu \96B6\4E66
幼園 YouYuan \5E7C\5706
華文細黑 STXihei \534E\6587\7EC6\9ED1
細明體 MingLiU \7EC6\660E\4F53
新細明體 PMingLiU \65B0\7EC6\660E\4F53
- CSS(cascading style sheet) 層疊樣式表
CSS書寫位置:
1. 行內式:基本不用。代碼可維護性極差,css代碼和html結構沒有實現分離,影響的範圍只有當前標簽 <p style="color:red">...</p> 2. 內嵌式:少用。代碼可維護性較差,沒有實現css代碼與html結構的完全分離,影響的範圍只有當前頁面 <head> <style type="text/css"> ... </style> </head> 3. 外聯式:多用。代碼可維護性高,css與html結構完全分離,影響範圍廣,當前整個網頁站點 <link rel="stylesheet" href="CSS/main.css"> 4. 導入式:和外聯式一樣都是導入某一個文件夾的CSS樣式,不過寫法不同,並且@import必須寫在所有CSS樣式的前面(不推薦使用) @import url(CSS/main.css)
- 選擇器
- 基礎選擇器:
- 標簽選擇器
p { }
類選擇器
.classname { }
1. 不能以純數字或者以數字開頭定義類名 2. 不推薦使用漢字定義類名 3. 不能以特殊符號或者以特殊符號開頭("_"除外)定義類名 4. 不建議使用標簽名或者屬性名定義類名 5. 一個標簽可以同時調用多個類樣式,多個標簽可以同時調用一個類樣式 6. 不要去試圖用一個類名,把某個標簽的所有樣式寫完。這個標簽要多攜帶幾個類,共同造成這個標簽的樣式。 7. 每一個類要儘可能小,有“公共”的概念,能夠讓更多的標簽使用。
id選擇器
#idname { }
1. id的命名要以字母開頭,可以有數字、下劃線,大小寫嚴格區別 2. id名是唯一的,可以說id是js專用 3. 一個標簽只能調用一個id樣式
- 通配符選擇器
* { }
(基本不用,因為會選中所有標簽,效率低下)
- 標簽選擇器
- 複合選擇器
p.classname { }
- 標簽指定式選擇器/交集選擇器
p.classname { }
&
p#idname { }
(一般寫成#idname { }
) - 後代選擇器
div p { }
標簽之間必須屬於嵌套關係 - 並集選擇器/分組選擇器
div, p { }
- 標簽指定式選擇器/交集選擇器
- 選擇器IE相容問題
- IE6能夠相容: 標簽選擇器、id選擇器、類選擇器、後代、交集選擇器、並集選擇器、通配符
- IE7能夠相容: 兒子選擇器
div>p
、下一個兄弟選擇器h3+p
- IE8能夠相容:
ul li:first-child
ul li:last-child
等
- 基礎選擇器:
Chapter2
- 標簽的分類:
- HTML將標簽分為容器級和文本級
- 文本級:p、span、a、b、i、u、em
- 容器級:div、h系列、li、dt、dd
CSS將標簽分為塊級元素、行內元素和行內塊元素
1. 塊級元素 `<div>`, `<p>`, `<li>`, `<h1>`... 1. 元素自己獨占一行顯示(預設有寬度); 2. 可以設置寬度和高度; 3. 當嵌套一個塊級元素,子元素如果不設置寬度,那麼該子元素的寬度為父元素的寬度。 2. 行內元素 `span`, `a`, `font`, `strong`... 1. 元素在一行上顯示 2. 不能直接設置寬度和高度 3. 行內塊元素 `image`, `input` 1. 元素在一行上顯示 2. 可以設置寬度和高度
所有的文本級標簽,都是行內元素,除了p是個文本級,但是是個塊級元素。
所有的容器級標簽都是塊級元素。
- HTML將標簽分為容器級和文本級
- 元素之間的轉換
- display: inline
- display: block
- display: inline-block
- CSS特性
層疊性:層疊性是一種能力,就是處理衝突的能力。
1. 樣式覆蓋。與樣式的**調用順序**沒關,與樣式的**定義順序**有關; 2. 層疊性發生的前提: 樣式衝突。
繼承性
1. 繼承性發生的前提:標簽之間屬於嵌套關係; **與文字有關的屬性都可以實現繼承** 2. 文字顏色color可以實現繼承 3. 文字font-xxx 可以實現繼承 4. 行高line-hight 可以實現繼承 5. text-indent, text-align 可以實現繼承 6. 特殊: 1. `<a href="#"></a>` 不能繼承父元素中的文字顏色(層疊掉了) 2. `<h1></h1>` 標題標簽不能繼承父元素中的文字大小
- 優先順序(特定性、權重)
- 數值越大,特定性遠大,規則就越特定
- 選擇上了,數權重,(id的數量,類的數量,標簽的數量)。
如果權重一樣,誰寫在後面聽誰的。 沒有選擇上,通過繼承影響的,就近原則,誰描述的近聽誰的。
如果描述的一樣近,比如選擇器權重,如果權重再一樣重,誰寫在後面聽誰的。!important > 行內式 > id > 類/偽類 > 元素名 > 認樣式 先按作者、讀者、瀏覽器的順序排列,然後如果作者跟讀者出現同分數的,最後出現的規則越優先
!important
使用註意事項!important
提升的是一個屬性,而不是一個選擇器!important
無法提升繼承的權重,該是0還是0!important
不影響就近原則
如果大家都是繼承來的,!importan
不能影響就近原則呢,應該按照“就近原則”來計算權重!important
做網站的時候,不允許使用。因為會讓css寫的很亂
- 繼承的權重為0,權重會疊加
Chapter3
1. 行高
行高 = 文字大小 + 上間距 + 下間距
行高、字型大小,一般都是偶數
- 行高的作用:
當行高值為父容器的高度時,可以讓父容器中的文字垂直顯示 - 行高的單位:
- 單獨給一個元素設置行高
- 盒子嵌套,給父元素設置行高值,子元素的行高問題
當父元素設置的行高值除不帶單位情況下,都是先與父元素的文字大小相乘最後的結果,被子元素繼承。
當父元素設置的行高值不帶單位時,行高 = 子元素文字大小 * 行高值 - 單獨給一個元素設置行高
表單優化寫法:
<!-- for裡面寫input的id --> <label for="username"></label> 用戶名: <input type="text" class="username" id="username" /> 什麼表單元素都有label
- 繼承的盒子在父盒子寬度範圍內,padding值不會影響該盒子大小。(
box-sizing: content-box
時) - 外邊距合併問題:
- 當兩個盒子垂直顯示的時候,外邊距以設置的最大值為準
- 盒子嵌套(外邊距塌陷):
1. 給父盒子設置邊框
2. 給父盒子設置overflow:hidden;
,但會觸發BFC(Block formatting contexts)
- 行內元素不要給上下的margin和padding
- 上下的margin和padding會被忽略
- 左右margin和padding會起作用
- margin最好用於兄弟關係之間,padding最好用於父子關係之間
a:link
、a:visited
都是可以省略的,a標簽涵蓋了link、visited的狀態Chapter4
標準流(文檔流)
元素預設的顯示方式就是標準流。1. 空白摺疊現象:比如,如果我們想讓img標簽之間沒有空隙,必須緊密連接 2. 高矮不齊,底邊對齊 3. 自動換行,一行寫不滿,換行寫
- 三種脫標方法
- 浮動
- 絕對定位
- 固定定位
- 浮動
float:left/right;
特點: 脫標,貼邊,字圍,收縮
收縮:一個浮動的元素,如果沒有設置width,那麼將自動收縮為文字的寬度(這點非常像行內元素)1. 設置了浮動的元素不占原來的位置(脫標) 2. 一旦浮動,所有標簽就不區分行內元素、塊級元素,將能夠併排,並且能夠設置寬高 3. 可以讓塊級元素在一行上顯示 4. 浮動可以行內元素轉化為行內塊元素 5. 設置了浮動的元素,影響其後面的元素 6. 模式轉換的過程中,能用display就用display
作用:
1. 浮動用來解決文字圖片環繞問題 2. 製作導航欄 3. 網頁佈局
清除浮動
1. 清除浮動不是刪除浮動,清除浮動指的是清除浮動的影響 2. 當子元素設置了浮動,父元素沒有高度的時候,造成頁面佈局混亂。 這種情況下進行清除浮動。
- 清除浮動帶來的影響的七種方式
- 給浮動元素的父盒子添加
height
工作中用的很少,因為父盒子的高度能被內容撐高
加高度很麻煩,還要手動,並且不能適應頁面的快速變化 - 給浮動元素的父盒子設置
overflow: hidden
(該盒子BFC了)
如果父盒子中有定位的元素,一般不推薦使用該種方式清除浮動,會把超出父盒子的定位的元素隱藏掉。 - 使用
clear: both;
- 外牆法:在浮動元素的父盒子後面添加一個
<div>
並設置.clearfix { clear: both; }
缺點:白白添加一個div
,對網頁結構不好。並且浮動元素的父盒子沒高度,不能設置背景顏色跟背景圖片等。 - 內牆法:在浮動元素後面直接添加一個
<div>
並設置.clearfix { clear: both; }
缺點:白白添加一個div
,對網頁結構不好。浮動元素的父盒子有高度,可以設置背景顏色跟背景圖片等 - 直接在浮動元素的父盒子後面的盒子添加一個
.clearfix { clear: both; }
屬性
缺點:有一個非常大的、致命的問題,margin失效,兩個div之間,沒有任何的間隙
- 外牆法:在浮動元素的父盒子後面添加一個
使用偽元素清除浮動①
給父盒子添加class="clearfix"
.clearfix:after{ content:""; display: block; height:0; line-height:0; clear: both; visibility: hidden; } .clearfix{ zoom: 1; /* 為了相容IE瀏覽器 */ }
推薦:使用偽元素清除浮動②
.clearfix:before,.clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix{ *zoom:1;/*IE/7/6*/ }
- 給浮動元素的父盒子添加
overflow
的使用
overflow: visible/hidden/scroll/auto
- 定位(position)
- 靜態定位(static): 元素標準流的顯示方式
絕對定位(absolute)
1. 當給一個單獨的元素設置絕對定位,以瀏覽器左上角(body)為基準設置定位的。 2. 如果父盒子沒有設置定位,子盒子設置定位以瀏覽器左上角為基準設置定位。 3. 如果父盒子設置定位,子盒子設置定位父盒子左上角為基準設置定位。 4. 給盒子設置了絕對定位,該盒子不占位置(脫標) 5. 行內元素轉化為行內塊元素 6. 絕對定位的兒子,無視參考的那個盒子的padding
相對定位(relative):微調元素。做絕對定位的參考,子絕父相
1. 元素設置了相對定位後占原來的位置(沒有脫標) 2. 設置相對定位以自己的位置為參照設置位置 3. 相對定位不能進行元素的模式轉換 4. 子絕父相(子元素設置絕對定位,父元素設置相對定位)(子絕父絕的其他情況也是可以的)
固定定位(fixed): 將元素定在瀏覽器視窗,屏幕滾動也不會移動
1. 固定定位不占位置(脫標) 2. 將行內元素轉化為行內塊元素 3. IE6不相容。
- IE瀏覽器相容問題
IE6,不支持小於12px的盒子,任何小於12px的盒子,在IE6中看都大
解決辦法:將盒子的字型大小,設置小(小於盒子的高),比如0pxheight: 4px; _font-size: 0px;
- IE6留了一個後門,就是只要給css屬性之前,加上下劃線,這個屬性就是IE6認識的專有屬性
IE6不支持用
overflow:hidden;
來清除浮動,但支持使用overflow:hidden;
來將溢出盒子的border的東西隱藏
解決辦法:在後面追加一條_zoom:1;
,_zoom:1;能夠觸發IE6瀏覽器專有的hasLayout機制。overflow: hidden; _zoom:1;
- IE6雙倍
margin
的bug當出現連續浮動的元素,margin和浮動方向相同時,隊首的元素,會雙倍
marign
解決辦法 1. 使浮動的方向和margin的方向相反 2. 使用hack(沒必要,不能慣著這個IE6) 單獨給隊首的元素,寫一個一半的_margin
- IE6的3px的bug
- 當子盒子使用
margin-right
踢了父盒子時,margin-right
會多出3px - 當出現這個問題,說明你的代碼不標準,因為不允許子盒子使用
margin-right
踢父盒子
- 當子盒子使用
Chapter5
- 標準流下的盒子(必須有明確的width)居中顯示:
margin: 0 auto;
定位的盒子居中顯示(重要):
.father { position: relative; } .child { width: (xxx)px; height: 100px; position: absolute; left: 50%; margin-left: -(xxx)px; }
標簽包含規範
1. div可以包含任何標準流下的元素 2. p標簽中不能包含div 和 標題標簽 及列表標簽。 3. 標題標簽可以包含其他標簽。 4. 行內元素最好不要包含其他標簽。
規避脫標流
1. 網頁佈局過程中,能用標準流佈局就用流佈局。 2. 標準流不能解決用浮動 3. 浮動不能解決用定位 4. margin-left: auto; 子盒子會被擠到右邊 margin-right: auto; 子盒子會被擠到左邊 可以將盒子自動衝到另一邊。
- 圖片與文字垂直對齊
- 每一種inlne-block元素,都有一個預設的
vertical-align: baseline
<img>
屬於行內元素,但在表現上更傾向於 inline-block - 使用
vertical-align: middle;
可以將圖片與文字垂直對齊 vertical-align
與inline-block
更搭配
- 每一種inlne-block元素,都有一個預設的
- CSS可見性(隱藏的三種方式):
overflow: hidden
將超出部分進行隱藏display: none;
將元素隱藏後不占位置visibility: hidden;
將元素隱藏後占原來的位置
logo優化(內容移除文字)
1. <div> 文字 </div> 設置div樣式 div { height: 0; width: 200px; padding-top: 100px; overflow: hidden; } 2. <a href="#">文字</a> a { display: inline-block; width: 200px; height: 200px; text-indent:-9999em; }
- 精靈圖/雪碧圖(spirit.png):減少了http請求
- 是一種處理網頁背景圖像的方式。精靈圖也是一種背景圖片
精靈圖的使用
1. 使用fw一定要用打開的方式打開精靈圖 2. 使用精靈圖作為背景圖片的時候,常與background-position配合使用
- 製作精靈圖步驟:
- 新建,選擇透明文檔
- 右下角,樣式,選擇塑料樣式
- 製作,另存為png格式即可
CSS進階
Chapter1
- 滑鼠樣式
- cursor: pointer 滑鼠變成小手
- cursor: default; 小白
- cursor : move; 移動
- cursor : text ; 文本輸入
- cursor: pointer 滑鼠變成小手
a
無所不能,裡面什麼都可以放- 透明
opacity會繼承父元素的 opacity 屬性,而RGBA設置的元素的後代元素不會繼承不透明屬性- opacity: 0.5; (預設值為1)
- 讓盒子半透明,裡面的內容也半透明
- 指定不透明度。從0.0(完全透明)到1.0(完全不透明)
- IE不相容,使用濾鏡
filter: alpha(opacity=50);
- 讓盒子半透明,裡面的內容也半透明
- background: rgba(0,0,0,0.5);
- 讓盒子背景半透明,裡面的內容不透明
- 指定不透明度。從0.0(完全透明)到1.0(完全不透明)
- opacity: 0.5; (預設值為1)