是一個虛擬長度單位,是計算機系統的數字化圖像長度單位,若是px要換算成物理長度,須要指定精度DPI(Dots Per Inch,每英寸像素數),在掃描打印時通常都有DPI可選。Windows系統默認是96dpi,Apple系統默認是72dpi。css
是一個相對長度單位,最初是指字母M的寬度,故名em。現指的是字符寬度的倍數,用法相似百分比,如:0.8em, 1.2em,2em等。一般1em=16px。
html
css3中引入了一個新的單位vw/vh,與視圖窗口有關,vw表示相對於視圖窗口的寬度,vh表示相對於視圖窗口高度,除了vw和vh外,還有vmin和vmax兩個相關的單位。各個單位具體的含義以下:css3
單位 | 含義 |
---|---|
vw | 相對於視窗的寬度,視窗寬度是100vw |
vh | 相對於視窗的高度,視窗高度是100vh |
vmin | vw和vh中的較小值 |
vmax | vw和vh中的較大值 |
這裏咱們發現視窗寬高都是100vw/100vh,那麼vw或者vh,下簡稱vw,很相似百分比單位。vw和%的區別爲:
算法
單位 | 含義 |
---|---|
% | 大部分相對於祖先元素,也有相對於自身的狀況好比(border-radius、translate等) |
vw/vh | 相對於視窗的尺寸 |
聖盃佈局與雙飛翼佈局針對的都是三列左右欄固定中間欄邊框自適應的網頁佈局
bootstrap
@午後苦咖啡提醒:聖盃佈局中相對佈局中,main元素必須是container的第一個元素
瀏覽器
html代碼:bash
<div class="container">
<div class="main">main</div>
<div class="left">left</div>
<div class="right">right</div>
</div>複製代碼
.container {
width: 100%;
min-height: 300px;
padding: 0 60px;
box-sizing: border-box;
}
.container > div {
position: relative;
float: left;
}
.left, .right {
width: 60px;
height: 100%;
}
.left {
left: -60px;
margin-left: -100%;
}
.right {
right: 0;
margin-right: -100%;
}
.main {
width: 100%;
height: 100%;
}複製代碼
.container {
width: 100%;
min-height: 300px;
display: flex;
}
.main {
flex-grow: 1;
}
.left {
order: -1;
flex-basis: 60px;
}
.right {
flex-basis: 60px;
}複製代碼
.container {
width: 100%;
min-height: 300px;
position: relative;
}
.container > div {
position: absolute;
}
.left, .right {
width: 60px;
height: 100%;
}
.main {
width: calc(100% - 120px);
height: 100%;
left: 60px;
}
.left {
left: 0;
}
.right {
right: 0;
}複製代碼
流式佈局 使用非固定像素來定義網頁內容,也就是百分比佈局,經過盒子的寬度設置成百分比來根據屏幕的寬度來進 行伸縮,不受固定像素的限制,內容向兩側填充。框架
響應式開發 利用CSS3 中的 Media Query(媒介查詢),經過查詢 screen 的寬度來指定某個寬度區間的網頁佈局。佈局
因爲響應式開發顯得繁瑣些,通常使用第三方響應式框架來完成,好比 bootstrap 來完成一部分工做,固然也 能夠本身寫響應式。post
- | 流式佈局 | 響應式開發 |
---|---|---|
開發方式 | 移動Web開發+PC開發 | 響應式開發 |
應用場景 | 通常在已經有PC端網站,開發移動的的時候只須要單獨開發移動端 | 針對一些新建的網站,如今要求適配移動端,因此就一套頁面兼容各類終端 |
開發 | 正對性強,開發效率高 | 兼容各類終端,效率低 |
適配 | 只適配移動設備,pad上體驗相對較差 | 能夠適配各類終端 |
效率 | 代碼簡潔,加載快 | 代碼相對複雜,加載慢 |
!important
聲明的樣式優先級最高,若是衝突再進行計算。RGBA和透明度
background-image background-origin(content-box/padding-box/border-box) background-size background-repeat
word-wrap(對長的不可分割單詞換行)word-wrap:break-word
文字陰影:text-shadow: 5px 5px 5px #FF0000;(水平陰影,垂直陰影,模糊距離,陰影顏色)
font-face屬性:定義本身的字體
圓角(邊框半徑):border-radius 屬性用於建立圓角
邊框圖片:border-image: url(border.png) 30 30 round
盒陰影:box-shadow: 10px 10px 5px #888888
媒體查詢:定義兩套css,當瀏覽器的尺寸變化時會採用不一樣的屬性
避免過分約束
避免後代選擇符
避免鏈式選擇符
使用緊湊的語法
避免沒必要要的命名空間
避免沒必要要的重複
最好使用表示語義的名字。一個好的類名應該是描述他是什麼而不是像
避免!important,能夠選擇其餘選擇器
儘量的精簡規則,你能夠合併不一樣類裏的重複規則
CSS 中的 transform,transition 和 animation 是分開的三部份內容,其中 transfrom 主要是控制元素變形,並無一個時間控制的概念,而 transition 和 animation 纔是動畫的部分,它們能夠控制在一個時間段裏,元素在兩個或以上的狀態切換的效果。
transition 屬性:
transition-delay 延遲多久後開始動畫
transition-duration 過渡動畫的一個持續時間
transition-property 執行動畫對應的屬性,例如 color,background 等,可使用 all 來指定全部的屬性
transition-timing-function 隨着時間推動,動畫變化軌跡的計算方式,常見的有:linear,ease,ease-in,ease-out,cubic-bezier(...) 等。
transition 相關的事件
transitionend 事件會在 transition 動畫結束的時候觸發。一般咱們會在動畫結束後執行一些方法,例如繼續下一個動畫效果或者其餘。Zepto.js 中的動畫方法都是使用 CSS 動畫屬性來處理,而其中動畫運行後的回調便應該是使用這個事件來處理。
雖然 transition已經提供了很棒的動畫效果了,可是咱們只可以控制從一個狀態到達另一個狀態,無法來控制多個狀態的不斷變化,而 animation 而幫助咱們實現了這一點。使用 animation 的前提是咱們須要先使用 @keyframes 來定義一個動畫效果,@keyframes 定義的規則能夠用來控制動畫過程當中的各個狀態的狀況,語法大抵是這個樣子:
@keyframes W {
from { left: 0; top: 0; }
to { left: 100%; top: 100%; }
}複製代碼
@keyframes 關鍵詞後跟動畫的名字,而後是一個塊,塊中有動畫進度的各個選擇器,選擇器後的塊則依舊是咱們常見的各個 CSS 樣式屬性。
animation 屬性:
animation-name 你須要的動畫效果的 @keyframes 的名字。
animation-delay 和 transition-delay 同樣,動畫延遲的時間。
animtaion-duration 和 transition-duration 同樣,動畫持續的時間。
animation-direction 動畫的一個方向控制。
默認是 normal,若是是上述的 left 從 0% 到 100%,那麼默認是從左到右。若是這個值是 reverse,那麼即是從右到左
因爲 animation 提供了循環的控制,因此還有兩個值是 alternate 和 alternate-reverse,這兩個值會在每次循環開始的時候調轉動畫方向,只不過是起始的方向不一樣。
animation 相關事件
能夠經過綁定事件來監聽 animation 的幾個狀態,這些事件分別是:
animationstart 動畫開始事件,若是有 delay 屬性的話,那麼等到動畫真正開始再觸發,若是是沒有 delay,那麼當動畫效果應用到元素時,這個事件會被觸發。
animationend 動畫結束的事件,和 transitionend 相似。若是有多個動畫,那麼這個事件會觸發屢次,像上邊的例子,這個事件會觸發三次。若是 animation-iteration-count 設置爲 infinite,那麼這個事件則不會被觸發。
animationiteration 動畫循環一個生命週期結束的事件,和上一個事件不同的是,這個在每次循環結束一段動畫時會觸發,而不是整個動畫結束時觸發。無限循環時,除非 duration 爲 0,不然這個事件會無限觸發
BFC全稱是Block Formatting Context,即塊格式化上下文。它是CSS2.1規範定義的,關於CSS渲染定位的一個概念。要明白BFC究竟是什麼,首先來看看什麼是視覺格式化模型。
視覺格式化模型(visual formatting model)是用來處理文檔並將它顯示在視覺媒體上的機制,它也是CSS中的一個概念。
視覺格式化模型定義了盒(Box)的生成,盒主要包括了塊盒、行內盒、匿名盒(沒有名字不能被選擇器選中的盒)以及一些實驗性的盒(將來可能添加到規範中)。盒的類型由display屬性決定。
float
不爲none
);position
爲absolute
或fixed
);inline-blocks
(元素的 display: inline-block
);display: table-cell
,HTML表格單元格默認屬性);overflow
的值不爲visible
的元素;display: flex
或inline-flex
);但其中,最多見的就是overflow:hidden
、float:left/right
、position:absolute
。也就是說,每次看到這些屬性的時候,就表明了該元素以及建立了一個BFC了。
瀏覽器對BFC區域的約束規則:
BFC是頁面上的一個隔離的獨立容器,容器裏面的子元素不會影響到外面元素,反之亦然。咱們能夠利用BFC的這個特性來作不少事。
基本概念
採用 Flex 佈局的元素,稱爲 Flex 容器(flex container),簡稱"容器"。它的全部子元素自動成爲容器成員,稱爲 Flex 項目(flex item),簡稱"項目"。
容器默認存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開始位置(與邊框的交叉點)叫作main start,結束位置叫作main end;交叉軸的開始位置叫作cross start,結束位置叫作cross end。
項目默認沿主軸排列。單個項目佔據的主軸空間叫作main size,佔據的交叉軸空間叫作cross size。
該屬性可能取6個值,除了auto,其餘都與align-items屬性徹底一致。
grid 佈局是 css 中的一種新的佈局方式,對盒子和盒子內容的位置及尺寸有很強的控制能力。與 flex 不一樣,flex 着重於單軸,而 grid 適應於多軸,下面就來作個簡單的介紹。
grid 容器的屬性仍是有點多的,一共有 18 個,可是不少能夠經過簡寫完成,因此也不用太緊張。
設置CSS盒模型爲標準模型或IE模型。標準模型的寬度只包括content,二IE模型包括border和padding box-sizing屬性能夠爲三個值之一:
有時候動畫可能會致使用戶的電腦卡頓,你能夠在特定元素中使用硬件加速來避免這個問題:
.block {
transform: translateZ(0);
}
複製代碼
你並不會察覺有什麼不一樣,但瀏覽器會爲這個元素進行3D硬件加速,在will-change
這個特殊屬性未被全面支持以前,這個方法仍是頗有用的。
(持續更新...)
等等