|
一、px,em,rem、vw、vh 1.px (pixel,像素): 是一個虛擬長度單位,是計算機系統(tǒng)的數(shù)字化圖像長度單位,如果px要換算成物理長度,需要指定精度DPI(Dots Per Inch,每英寸像素數(shù)),在掃描打印時一般都有DPI可選。Windows系統(tǒng)默認是96dpi,Apple系統(tǒng)默認是72dpi。 2.em(相對長度單位,相對于當前對象內(nèi)文本的字體尺寸): 是一個相對長度單位,最初是指字母M的寬度,故名em?,F(xiàn)指的是字符寬度的倍數(shù),用法類似百分比,如:0.8em, 1.2em,2em等。通常1em=16px。 3.rem(root em,根em): rem是一個相對單位,1rem等于html元素上字體設(shè)置的大小。我們只要設(shè)置html上font-size的大小,就可以改變rem所代表的大小。這樣我們就有了一個可控的統(tǒng)一參考系。我們現(xiàn)在有兩個目標: rem單位所代表的尺寸大小和屏幕寬度成正比, 也就是設(shè)置html元素的font-size和屏幕寬度成正比rem單位和px單位很容易進行換算,方便我們按照標注稿寫cssrem與em的區(qū)別: rem是相對于根元素(html)的字體大小,而em是相對于其父元素的字體大小 em最多取到小數(shù)點的后三位 4.vw、vh: css3中引入了一個新的單位vw/vh,與視圖窗口有關(guān),vw表示相對于視圖窗口的寬度,vh表示相對于視圖窗口高度,除了vw和vh外,還有vmin和vmax兩個相關(guān)的單位。各個單位具體的含義如下: 這里我們發(fā)現(xiàn)視窗寬高都是100vw/100vh,那么vw或者vh,下簡稱vw,很類似百分比單位。 vw和%的區(qū)別為: 二、圣杯布局-雙飛翼布局 圣杯布局與雙飛翼布局針對的都是三列左右欄固定中間欄邊框自適應(yīng)的網(wǎng)頁布局 三列布局,中間寬度自適應(yīng),兩邊定寬 提醒:圣杯布局中相對布局中,main元素必須是container的第一個元素 html代碼 1.相對布局: 2.flex布局: 3.絕對布局: 三、流式布局與響應(yīng)式布局 流式布局 使用非固定像素來定義網(wǎng)頁內(nèi)容,也就是百分比布局,通過盒子的寬度設(shè)置成百分比來根據(jù)屏幕的寬度來進 響應(yīng)式開發(fā) 利用CSS3 中的 Media Query(媒介查詢),通過查詢 screen 的寬度來指定某個寬度區(qū)間的網(wǎng)頁布局。 超小屏幕(移動設(shè)備) 768px 以下 由于響應(yīng)式開發(fā)顯得繁瑣些,一般使用第三方響應(yīng)式框架來完成,比如 bootstrap 來完成一部分工作,當然也 可以自己寫響應(yīng)式。 四、CSS優(yōu)先級算法 元素選擇符: 1 !important聲明的樣式優(yōu)先級最高,如果沖突再進行計算。 五、CSS3新增偽類有那些? p:first-of-type 選擇屬于其父元素的首個元素 六、CSS3新特性 1.RGBA和透明度 2.background-image background-origin(content-box/padding-box/border-box) background-size background-repeatword-wrap(對長的不可分割單詞換行) 3.word-wrap:break-word 4.文字陰影:text-shadow: 5px 5px 5px #FF0000;(水平陰影,垂直陰影,模糊距離,陰影顏色) 5.font-face屬性:定義自己的字體 6.圓角(邊框半徑):border-radius 屬性用于創(chuàng)建圓角 7.邊框圖片:border-image: url(border.png) 30 30 round 8.盒陰影:box-shadow: 10px 10px 5px #888888 9.媒體查詢:定義兩套css,當瀏覽器的尺寸變化時會采用不同的屬性 七、CSS優(yōu)化、提高性能的方法有哪些? 1.避免過度約束 2.避免后代選擇符 3.避免鏈式選擇符 4.使用緊湊的語法 5.避免不必要的命名空間 6.避免不必要的重復(fù) 7.最好使用表示語義的名字。一個好的類名應(yīng)該是描述他是什么而不是像 8.避免!important,可以選擇其他選擇器 9.盡可能的精簡規(guī)則,你可以合并不同類里的重復(fù)規(guī)則 八、CSS動畫 CSS 中的 transform,transition 和 animation 是分開的三部分內(nèi)容,其中 transfrom 主要是控制元素變形,并沒有一個時間控制的概念,而 transition 和 animation 才是動畫的部分,它們可以控制在一個時間段里,元素在兩個或以上的狀態(tài)切換的效果。 1.transition transition屬性:transition-delay 延遲多久后開始動畫 transition-duration 過渡動畫的一個持續(xù)時間 transition-property 執(zhí)行動畫對應(yīng)的屬性,例如 color,background 等,可以使用 all 來指定所有的屬性 transition-timing-function 隨著時間推進,動畫變化軌跡的計算方式,常見的有:linear,ease,ease-in,ease-out,cubic-bezier(...) 等。 transition 相關(guān)的事件 transitionend 事件會在 transition 動畫結(jié)束的時候觸發(fā)。 通常我們會在動畫結(jié)束后執(zhí)行一些方法,例如繼續(xù)下一個動畫效果或者其他。 Zepto.js 中的動畫方法都是使用 CSS 動畫屬性來處理,而其中動畫運行后的回調(diào)便應(yīng)該是使用這個事件來處理。 2.animation 雖然 transition已經(jīng)提供了很棒的動畫效果了,但是我們只能夠控制從一個狀態(tài)到達另外一個狀態(tài),沒法來控制多個狀態(tài)的不斷變化,而 animation 而幫助我們實現(xiàn)了這一點。使用 animation 的前提是我們需要先使用 @keyframes 來定義一個動畫效果,@keyframes 定義的規(guī)則可以用來控制動畫過程中的各個狀態(tài)的情況,語法大抵是這個樣子: @keyframes 關(guān)鍵詞后跟動畫的名字,然后是一個塊,塊中有動畫進度的各個選擇器,選擇器后的塊則依舊是我們常見的各個 CSS 樣式屬性。 animation 屬性: animation-name 你需要的動畫效果的 @keyframes 的名字。 animation-delay 和 transition-delay 一樣,動畫延遲的時間。 animtaion-duration 和 transition-duration 一樣,動畫持續(xù)的時間。animation-direction 動畫的一個方向控制。 默認是 normal,如果是上述的 left 從 0% 到 100%,那么默認是從左到右。如果這個值是 reverse,那么便是從右到左 由于 animation 提供了循環(huán)的控制,所以還有兩個值是 alternate 和 alternate-reverse,這兩個值會在每次循環(huán)開始的時候調(diào)轉(zhuǎn)動畫方向,只不過是起始的方向不同。 由于 animation 提供了循環(huán)的控制,所以還有兩個值是 alternate 和 alternate-reverse,這兩個值會在每次循環(huán)開始的時候調(diào)轉(zhuǎn)動畫方向,只不過是起始的方向不同。 animation 相關(guān)事件 可以通過綁定事件來監(jiān)聽 animation 的幾個狀態(tài),這些事件分別是: animationstart 動畫開始事件,如果有 delay 屬性的話,那么等到動畫真正開始再觸發(fā),如果是沒有 delay,那么當動畫效果應(yīng)用到元素時,這個事件會被觸發(fā)。 animationend 動畫結(jié)束的事件,和 transitionend 類似。如果有多個動畫,那么這個事件會觸發(fā)多次,像上邊的例子,這個事件會觸發(fā)三次。如果 animation-iteration-count 設(shè)置為 infinite,那么這個事件則不會被觸發(fā)。 animationiteration 動畫循環(huán)一個生命周期結(jié)束的事件,和上一個事件不一樣的是,這個在每次循環(huán)結(jié)束一段動畫時會觸發(fā),而不是整個動畫結(jié)束時觸發(fā)。無限循環(huán)時,除非 duration 為 0,否則這個事件會無限觸發(fā) 九、BFC BFC全稱是Block Formatting Context,即塊格式化上下文。它是CSS2.1規(guī)范定義的,關(guān)于CSS渲染定位的一個概念。要明白BFC到底是什么,首先來看看什么是視覺格式化模型。 視覺格式化模型 視覺格式化模型(visual formatting model)是用來處理文檔并將它顯示在視覺媒體上的機制,它也是CSS中的一個概念。 視覺格式化模型定義了盒(Box)的生成,盒主要包括了塊盒、行內(nèi)盒、匿名盒(沒有名字不能被選擇器選中的盒)以及一些實驗性的盒(未來可能添加到規(guī)范中)。盒的類型由display屬性決定。 怎樣才能形成BFC
但其中,最常見的就是 瀏覽器對BFC區(qū)域的約束規(guī)則:
BFC是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面元素,反之亦然。我們可以利用BFC的這個特性來做很多事。 十、flex 布局 基本概念 采用 Flex 布局的元素,稱為 Flex 容器(flex container),簡稱"容器"。它的所有子元素自動成為容器成員,稱為 Flex 項目(flex item),簡稱"項目"。 容器默認存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開始位置(與邊框的交叉點)叫做main start,結(jié)束位置叫做main end;交叉軸的開始位置叫做cross start,結(jié)束位置叫做cross end。 項目默認沿主軸排列。單個項目占據(jù)的主軸空間叫做main size,占據(jù)的交叉軸空間叫做cross size。 容器的屬性: 1.flex-direction: 屬性決定主軸的方向(即項目的排列方向) row(默認值):主軸為水平方向,起點在左端。 2.flex-wrap :默認情況下,項目都排在一條線(又稱"軸線")上 nowrap(默認):不換行。 3.flex-flow:是flex-direction屬性和flex-wrap屬性的簡寫形式 4.justify-content:定義了項目在主軸上的對齊方式 flex-start(默認值):左對齊 所以,項目之間的間隔比項目與邊框的間隔大一倍。 5.align-items:定義項目在交叉軸上如何對齊 flex-start:交叉軸的起點對齊。 6.align-content:定義了多根軸線的對齊方式。 如果項目只有一根軸線,該屬性不起作用flex-start:與交叉軸的起點對齊。 項目的屬性order屬性定義項目的排列順序。 數(shù)值越小,排列越靠前,默認為0。 flex-shrink屬性定義了項目的縮小比例,默認為1,即如果空間不足,該項目將縮小。 該屬性可能取6個值,除了auto,其他都與align-items屬性完全一致。 十一、Grid 布局總結(jié) grid 布局是 css 中的一種新的布局方式,對盒子和盒子內(nèi)容的位置及尺寸有很強的控制能力。與 flex 不同,flex 著重于單軸,而 grid 適應(yīng)于多軸,下面就來做個簡單的介紹。 flex 布局示意 grid 布局示意 基本概念 設(shè)置 display: grid; 的元素稱為容器,它的直接子元素稱為項目,但注意子孫元素不是項目。 grid line:網(wǎng)格線,構(gòu)成 grid 布局的結(jié)構(gòu),分為水平和豎直兩種。grid track:兩條相鄰網(wǎng)格線之間的空間,可以認為是一行或者一列。 容器屬性 grid 容器的屬性還是有點多的,一共有 18 個,但是很多可以通過簡寫完成,所以也不用太緊張。 grid-template 系列 grid-template-columns grid-gap 系列 grid-column-gap place-items 系列 justify-items place-content 系列 justify-content grid 系列 grid-auto-columns 十二、box-sizing 設(shè)置CSS盒模型為標準模型或IE模型。標準模型的寬度只包括content,二IE模型包括border和padding box-sizing屬性可以為三個值之一: content-box,默認值,只計算內(nèi)容的寬度,border和padding不計算入width之內(nèi) 十三、硬件加速 有時候動畫可能會導(dǎo)致用戶的電腦卡頓,你可以在特定元素中使用硬件加速來避免這個問題: 你并不會察覺有什么不同,但瀏覽器會為這個元素進行3D硬件加速,在will-change這個特殊屬性未被全面支持之前,這個方法還是很有用的。 |
|
|