全面系統講解CSS工作應用+面試一步搞定


[TOC]

一、課程介紹

二、HTML基礎強化

html常見元素和理解

html常見元素分類

head區元素:(不會在頁面上留下元素)
  * meta
  * title
  * style
  * link
  * script
  * base
body區:
  * div/selection/article/aside/header/footer
  * p
  * span/em/strong
  * table/thead/tbody/tr/td
  * ul/ol/li/dl/dt/dd
  * a
  * form/input/select/textarea/button
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
  <base href="/"> 
  // 指定一個基礎路徑,所有的路徑都是以這個爲基準
  //viewport表示視圖的大小
  //適配移動端第一步,viewport
a[href,target]
//target:打開窗口。也可以設置框架中在哪個框架打開
img[src,alt]
//alt:圖片不可用時候,文字顯示出來
table td[colspan,rowspan]
form[target,method,enctype]
//target:表單提交到哪兒
//enctype:指定編碼,如果上傳文件指定要用form-data
input[type,value]
button[type]
select>option[value]
label[for]
//label與input進行關聯

如何理解html

HTML“文檔”
描述文檔的結構
有區塊和大綱

更好的讓機器、搜索引擎、蜘蛛很好的理解結構
html的語義化

html版本

* HTML4/4.01(SGML) 瀏覽器做很多的容錯和修正工作
* XHTML(XML) 要求非常嚴格,嚴格要求編碼習慣
* HTML5(基於HTML4)

html5新增內容

1、新增區塊標籤
    * section
    * article
    * nav
    * aside //一般不出現在大綱中,表示不重要的廣告類
2、表單增強
    * 日期、時間、搜索
    * 表單驗證
    * placehold自動聚焦

html5新增語意

header/footer頭尾
section/article區域
nav導航
aside不重要內容
em/strong強調
i //icon

元素分類

按默認樣式分

塊級block:
行內inline:
inline-block:

HTML分類法

Alt text

嵌套關係

默認樣式和reset

* 塊級元素可以包含行內元素
* 塊級元素不一定能包含塊級元素(p標籤不能包含div)
* 行內元素一般不能包含塊級元素(a>div 合法,html5中a是transparent元素)
  
HTML標籤在瀏覽器中都有默認的樣式,不同的瀏覽器的默認樣式之間存在差別。例如ul默認帶有縮進樣式,在IE下,它的縮進是由margin實現的,而在Firefox下卻是由padding實現的。開發時瀏覽器的默認樣式可能會給我們帶來多瀏覽器兼容性問題,影響開發效率。現在很流行的解決方式是一開始就將瀏覽器的默認樣式全部覆蓋掉,這就是css reset。

真題

doctype的意義是什麼?

1、讓瀏覽器以標準模式渲染
2、讓瀏覽器知道元素的合法性

HTML、XHTML、HTML5的關係

1、HTML屬於SGML
2、XHTML屬於XML,是HTML進行XML嚴格化的結果
3、HTML5不屬於SGML或者XML,比XHTML寬鬆

HTML5有什麼變化

1、新的語義化標籤
2、表單增強
3、新的API(離線、音視頻、圖形、實時通信、本地存儲、設備能力)

//Canvas+WEBGL等技術,實現無插件的動畫以及圖像、圖形處理能力; 
//地存儲,可實現offline應用; 
//websocket,一改http的純pull模型,實現數據推送的夢想; 
//MathML,SVG等,支持更加豐富的render; 

em和i有什麼區別

1、em是語義化的標籤,表強調
2、i是純樣式的標籤,表斜體
3、HTML5中i不推薦使用,一般用作圖標

語義化的意義是什麼

1、開發者容易理解
2、機器容易理解結構(搜索、讀屏軟件)
3、有助於SEO
4、semantic microdata

哪些元素可以自閉合

1、表單元素input
2、圖片img
3、br hr
4、meta link

HTML和DOM的關係

1、HTML是‘死’的
2、DOM由HTML解析而來,是活的
3、JS可以維護DOM

property和attribute的區別

1、attribute是‘死’的
2、property是‘活’的

form作用

1、直接提交表單
2、使用submit/reset按鈕
3、便於瀏覽器保存表單
4、第三方庫可以整體提取值
5、第三方庫可以進行表單驗證

三、css基礎

cascading style sheet 層疊樣式表

1、選擇器

1、用於匹配HTML元素
2、分類和權重
3、解析方式和性能
    * 瀏覽器的解析方式是從右往左反着,然後再往前驗證,主要出於性能的考慮,更快速的匹配到指定元素
4、值得關注的選擇器

選擇器分類

1、元素選擇器         a{}
2、僞元素選擇器    ::before{}    //不會出現在html中也不會出現DOM樹中,真實存在的元素
3、類選擇器        .link{}
4、屬性選擇器        [type=radio]{}
5、僞類選擇器        :hover{}       //一個元素的狀態
6、ID選擇器        #id{}
6、組合選擇器        [type=checkbox] + label{}
7、否定選擇器        :not(.link){}
8、通用選擇器        *{}

選擇器權重

ID選擇器             +100
類   屬性   僞類     +10
元素 僞元素         +1
其它選擇器         +0
計算一個不進位的數字
#id .link a[href]
#id        +100
.link     +10
a       +1
[href]  +0

結果:111
#id .link.active
#id       +100
.link       +10
.active   +10
結果:120
注意:只要有id選擇器,就是最大,類選擇器再多也不會進位,只能在自己位上

百位   十位    個位
其他選擇器權重
!important優先級最高
元素屬性優先級高   //元素的屬性 > 外部樣式表 (style標籤,外部樣式表) 
相同權重後寫的生效

2、非佈局樣式-字體

字體

1、字體族
    serif
    sans-serif
    monospace
    cursive
    fantasy
2、多字體fallback
3、網絡字體、自定義字體
4、 iconfont
字體機制
先把只有一個平臺纔有的寫到最前面

引用遠程字體有問題的話,要注意跨域問題
阿里巴巴的圖標庫,自選 iconfont.cn

3、非佈局樣式-行高

行高由line-box決定
line-hight會撐起inline-box的高度,並不會影響本來的高度
inline-box組成line-box,line-box是由inline-box決定
1、一般做垂直居中用line-height做就行了
2、默認情況是按照base-line對齊,如果要居中對其就用vertical-align:middle
3、底線、頂線和文字的頂和文字的底是不一樣的

經典圖片空隙問題:

原理:按照inline排版,如果按照inline排版的話,那麼它就有基線排版,默認按照base-line
基線和底線之間有距離的,如果12px字體那麼縫隙可能就是3px
解決方案:按照底線對齊,vertical-align:bottom

4、非佈局樣式-背景

背景顏色

H:Hue(色調)。0(或360)表示紅色,120表示綠色,240表示藍色,也可取其他數值來指定顏色。取值爲:0 - 360
S:Saturation(飽和度)。取值爲:0.0% - 100.0%
L:Lightness(亮度)。取值爲:0.0% - 100.0%

漸變色背景

background: webkit-linear-gradient( left, red, green); //老式寫法
background: linear-gradient(to right,red, green) ; 
background: linear-gradient (45deg, red, green); 
background: linear-gradient( 135deg, red 0, green 50%, blue 100%)
background: linear-gradient ( 135deg, transparent 0, transparent 49.5%,green 50%)

多背景疊加

background: linear-gradient( 135deg, transparent 0, transparent 49.5%,green 49.5%,green 50.5%,transparent 50.5%,transparent 100%),linear-gradient( 45deg, transparent 0, transparent 49.5%,green 49.5%,green 50.5%,transparent 50.5%,transparent 100%)
background實現各種漸變背景,可以通過疊加實現,放射漸變

背景圖片和屬性(雪碧圖)

base64和性能優化

優點:節省http鏈接數
缺點:體積會增大,圖片原來的體積會(增大1/3,增大css文件);增大解碼的開銷(先轉化成圖片再解碼)
適用:小圖標
用法:一般用在構建中轉

多分辨率適配

5、非佈局樣式-邊框

  • 邊框的屬性:線型 大小 顏色
  • 邊框背景圖
  • 邊框銜接(三角形)

原理:利用邊框銜接過程是斜切

6、非佈局樣式-滾動

滾動行爲和滾動條

visible:內容直接顯示,撐出容器
hidden:超出容器部分隱藏
scroll:超出容器滾動,始終顯示滾動條
auto:超出容器滾動,當內容比較短不需要滾動條的時候不顯示滾動條

在mac系統上收系統設置影響

7、非佈局樣式-文本折行

 1、overflow-wrap(word-wrap)通用換行控制:是否保留單詞
 2、word-break針對多字節文字,中文句子也是單詞
 3、white-space空白處是否斷行
overflow-wrap: break-word ;
word-break: keep-all;
white-space: normal ;

不換行的話 white-space: nowrap

word-wrap:
1、normal    只在允許的斷字點換行(瀏覽器保持默認處理)。
2、break-word    在長單詞或 URL 地址內部進行換行。
word-break:
normal    使用瀏覽器默認的換行規則。
break-all    允許在單詞內換行。
keep-all    只能在半角空格或連字符處換行。

8、非佈局樣式-裝飾性屬性(粗體、斜體、下劃線)

1、裝飾性屬性及其它
2、字重(粗體) font-weight
3、斜體font-style:itatic
4、下劃線text-decoration
5、指針cursor

9、hack和案例

1、Hack即不合法但生效的寫法
2、主要用於區分不同的瀏覽器
3、缺點:難理解,難維護,易失效
4、替代方案:特性檢測
5、替代方案:針對性加class

10、面試題

CSS樣式(選擇器)的優先級

計算權重確定
!important
內聯樣式  
後寫的優先級高   

雪碧圖的作用

減少HTTP請求數,提高加載性能
有一些情況下可以減少圖片大小

自定義字體的使用場景

1、宣傳/品牌/banner等固定文案
2、字體圖標

base64的使用

1、用於減少HTTP請求
2、適用於小圖片
3、base64的體積約爲原圖的4/3

僞類和僞元素的區別

1、僞類表狀態
2、僞元素是真的有元素
3、前者單冒號,後者雙冒號(注意兼容性)

如何美化checkbox

1、label[for]和id
2、隱藏原生的input
3、:checked+label

四、css佈局

1、佈局簡介

  • CSS知識體系的重中之重
  • 早期以table爲主(簡單)
  • 後來以技巧性佈局爲主(難)
  • 現在有flexbox/grid(偏簡單)
  • 響應式佈局是必備知識

常用佈局方式

1、table表格佈局
2、float浮動+margin
3、inline-block佈局
4、flexbox佈局

2、佈局方式(表格)

display:table
display:table-row

3、一些佈局屬性

盒模型

Alt text
寬度和高度是隻對內容區生效

display/position

確定元素的顯示類型:
    1、block
    2、inline
    3、inline-block:有寬高有可以與其他元素排在同一行
確定元素的位置:
    1、static:靜態佈局,按照文檔流佈局
    2、relative:相對於元素本身的偏移,relative偏移時,元素所佔據的文檔空間不會產生偏移
    3、absolute:從文檔流脫離,相對於最近的父級absolute或者relative,如果父級不是的話,會一直網上到body
    4、fixed:相對於屏幕/可視區域

定位於relatvie、absolute、fixed都可以設置z-index,數值越大附帶

4、flexbox佈局

彈性盒子
盒子本來就是並列的
指定寬度即可
低版本IE不支持
出過三個版本,市面上各個瀏覽器都有對應的解析,會導致一些兼容性問題

5、float 佈局

元素“浮動”
脫離文檔流
但不脫離文本流

Alt text

float對自身的影響:

1、形成“塊”(BFC),inline元素也可以設置寬高
2、位置儘量靠上
3、位置儘量靠左(右)

Alt text

對兄弟的影響

上面貼着非float元素
旁邊貼float元素
不影響其他塊級元素位置
影響其他塊級元素內部文本

對父級元素的影響

從父級元素上“消失”
高度“塌陷”

解決“高度塌陷”的方案:

1、讓父元素形成BFC來接管自己的高度 overflow:auto/hidden
    //當裏面的元素超出的時候自動滾動

2、用其他元素撐起來
container2::after{
    content:'';
    clear:'both';
    display:block;
    height:0;
    visibility:hidden
}
//比較經典的清除浮動佈局的方式    

float佈局

兼容性好

float和margin實現兩欄佈局和三欄佈局
兩欄佈局:float:left  float:right  margin:""
三欄佈局:記住“儘量往左靠,儘量往右靠”

6、inline-block佈局

像文本一樣排block元素
沒有清除浮動等問題
需要處理間隙

處理間隙

間隙來源:html中的空白
處理辦法:1、直接把兩塊寫在一起;
        2、兩塊中間加一個註釋;
        3、父字體設置font-size:0;子塊重新加上字體font-sizi:14px;

7、響應式設計和佈局

1、在不同的設備上正常使用
2、一般主要處理屏幕大小的問題
3、主要方法:
    * 隱藏+折行+自適應空間
    * rem/viewport/media query

viewport:

1、適配的第一部永遠是加上 viewport,可視區大小=屏幕大小,有些設備默認屏幕寬度980px
* <meta name='viewport' content="width=device-width,initial-scale=1.0">
* 如果固定使用width,可以使不同頁面等比放大
* 也可以根據window.innerWidth動態計算頁面的寬度

media query:

@media(max-width:640px){
    .left{
        display:none;
    }
}

rem:

@media (maxwidth: 375px){
    html{
        font-size :24px ;
    }
}    
@media (max-width: 320px){
    html{
        fonts ize: 20px;
    }
}    
@media (max-width: 640px){
    intro{
        margin: .3rem auto ;
        display: block;
    }
}    

8、主流網站使用的佈局方式

9、CSS面試真題

1、實現兩欄(三欄)佈局的方法

    1、表格佈局 display:table 
    2、float+margin佈局
    3、inline-block佈局:處理間隙
    4、flexbox佈局:兼容性不是特別好

2、position:absolute/fixed有什麼區別?

    1、前者相對於最近的absolute/relative
    2、後者相對屏幕(viewport)
    如果要兼容老的設備,fixed兼容性不是很好    

display:inline-block的間隙

原因:字符間距
解決:消滅字符或者消滅間距

如何清除浮動

1、讓盒子負責自己的佈局
2、overflow:hidden(auto)
3、::after{clear:both}

如何適配移動端頁面?

1、viewport
2、rem / viewport/ media query
3、設計上:隱藏折行自適應

五、css效果

  • box-shadow
  • text-shadow
  • border-radius
  • background
  • clip-path

1、box-shadow

1、營造層次感(立體感)
2、充當沒有寬度的邊框
3、特殊效果


一個div畫xx系列,可以用box-shadow,其他圖形可以通過點,確定是可能有性能問題

2、text-shadow

3、border-radius

圓角矩形
圓形
半圓/扇形
一些奇怪的角角

4、background

多背景疊加
  • 紋理、圖案
  • 漸變
  • 雪碧圖動畫
  • 背景圖尺寸適應方案

動畫效果

.i{
    width: 20px ;
    height :20px ;
    background: url(./background.png) no repeat;
    background-size: 20px 40px;
    transition: background-position .4s ;
}
.i:hover{
    background-position: 0 20px;
}

5、clip-path

  • 對容器進行裁剪
  • 常見集合類型
  • 自定義路徑

clip-path支持動畫且不改變容器大小

clip-path: inset(100px 50px);
clip-path: circle(50px at 100px 100px);
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%, 10% 10%, 40px 10px); 
  clip-path: url(#clipPath);
  background-size: cover; 
 transition:clip-path .4s;

6、3D-transform

變換transform(2D)

  • translate
  • scale
  • skew
  • rotate
缺點:性能不是很好
複雜場景下出現渲染不一樣問題

7、面試題

如何用一個div畫xxx

box-shadow無線投影
::before
::after

如何產生不佔空間的邊框

1、box-shadow
2、outline

如何實現圓形元素(頭像)

border-radius:50%

如何實現IOS圖標的圓角

clip-path:(svg)

如何實現半圓、扇形等圖標

border-radius組合:
有無邊框
邊框粗細
圓角半徑

如何實現背景圖居中顯示/不重複/改變大小

background-position
background-repeat
background-size(cover/contain)

如何平移放大一個元素

transform:translateX(100px)
transform:scale(2)

如何實現3D效果

perspective:500px;              //指定透視的角度
transform-style:preserve-3d;    //保留3D效果
transform:translate rotate;        

六、css動畫

動畫的原理:
  • 1、視覺暫留作用
  • 2、畫面逐漸變化

.

動畫的作用
  • 1、愉悅感
  • 2、因其作用
  • 3、操作進行反饋
  • 4、掩飾(程序在後臺加載)

.

動畫類型:
  • transition補間動畫(中間的過程瀏覽器腦補起來)
  • keyframe關鍵幀動畫(也是補間動畫,但是有很多關鍵幀)
  • 逐幀動畫

1、transition

位置-平移(left/right/margin/transform)
方位-旋轉(transform)
大小-縮放(transform)
透明度(opacity)
其他-線性變換(transform)
transition-delay   //延遲多長時間執行
transition-delay:width 1s,background 3s;  //多個效果疊加
transition-timing-function

timing(easing):定義動畫進度和時間的關係
//linear,ease-in-out
//自定義貝塞爾曲線

Alt text

2、keyframes動畫

相當於多個補間動畫
與元素狀態的變化無關
定義更加靈活
animation:run 1s linear;
animation-direction           //reverse:反向
animation-fill-mode:forword   //forwards,backwards決定動畫最終停留在哪裏
animation-iteration-count     //infinite:循環次數
animation-play-state:pause    //js控制它的停和動

3、逐幀動畫

每幀都是關鍵幀,中間沒有補間過程
依然使用關鍵幀動畫
屬於關鍵幀動畫中的一種特殊情況
適用於無法補間計算的動畫
資源較大
使用steps()
animation-timing-function:steps(1);
//中間不要加東西,每個區間就只有一個狀態
step是指定每個區間幀數

4、CSS面試題

css中動畫怎麼寫,transation和animation和keyframs怎麼寫

CSS中動畫實現的方式有幾種

transition
keyframes(animation)

過渡動畫和關鍵幀動畫的區別

過度動畫需要有狀態變化,關鍵幀動畫不需要有狀態變化
關鍵幀動畫能控制更精細

如何實現逐幀動畫

使用關鍵幀動畫
去掉補間(steps)

CSS動畫的性能

1、性能不壞
2、部分情況下優於JS
3、但JS可以做到更好
4、部分高危屬性,box-shadow等

七、預處理器

介紹
  • 基於CSS的另一種語言
  • 通過工具編譯成CSS
  • 添加了很多CSS不具備的特性(變量)
  • 能提升CSS文件的組織方式

less和sass的區別:

1、less:用JS寫的,編譯速度比較快,有個瀏覽器中可以直接使用的版本,不需要預先編譯
缺點:在一些複雜特性上比較繁瑣
2、sass(scss):ruby寫的比較慢,但是有解決方案,可以使用它的移植版本node-sass

CSS預處理器:

1、嵌套                 反映層級和約束
2、變量和計算            減少重複代碼
3、Extend和Mixin        代碼片段
4、循環                 適用於複雜有規律的樣式
5、import CSS          文件模塊化

1、嵌套

less

加上 &:並不是父子關係而是同級
CSS中並不允許這麼嵌套寫,less和sass允許,結構關係清晰

body{
    padding:0px;
    margin: 0px;
}
.wrapper{
    background: white;
    .nav{
        font-size: 12px;
    }
    &:hover{                      //僞類
        background: red
    }
}

打包指令

lessc a.less > a.css

sass

npm install node-sass

sass的輸出有多重格式

node-sass  a.scss>a.css  --output-style expanded 

使用這條命令時候,我們編譯的路徑,不能有中文名,否則會報錯,之後只要我們更改scss文件,保存後,就會自動修改編譯後的css文件

2、變量

less:@fontSize
sass:$fontSize

less的理念:儘量的接近css的語法
sass的理念:儘量避免產生混淆

3、mixin

CSS中並沒有提供複用CSS的方法,而是通過HTML複用

less

.block(@fontSize){
    font-size: @fontSize;
    border: 1px solid #ccc;
    border-radius: 4px;
}
.block(@fontsize+2px);

不加括號也可以,不加括號.block{}不會被編譯出來,加了會被編譯出來

sass

@mixin block($fontSize) {
    font-size: $fontSize;
    border: 1px solid #ccc;
    border-radius: 4px;
}
@include block(font-size+2px);

區別在於需要顯示的聲明和調用,而且不能既做class又做mixin

場景:mixin清除浮動

4、extend

less

寫法:

.block{
    font-size: @fontSize;
    border: 1px solid #ccc;
    border-radius: 4px;
}

引用:

 .nav:extend(.block){
        font-size: @fontSize;
    }
 .content{
        font-size: @fontSize + 2px;
        &:extend(.block);
    }

生成效果:

.block,
.wrapper .nav,
.wrapper .content {
  font-size: 12px;
  border: 1px solid #ccc;
  border-radius: 4px;
}

sass

寫法:

.block {
    font-size: $fontSize;
    border: 1px solid #ccc;
    border-radius: 4px;
}

引用:

@extend .block;

生成效果:

.block, .wrapper {
  font-size: 12px;
  border: 1px solid #ccc;
  border-radius: 4px; 
}

5、loop

less

less中實際上沒有循環的語法,通過遞歸來實現相應的效果
引用方法:

.gen-col(@n) when (@n > 0 ){
    .gen-col(@n - 1);
    .col-@{n}{
        width: 1000px/12*@n;
    }
}

.gen-col(12);

生成效果:

.col-1 {
  width: 83.33333333px;
}
.col-2 {
  width: 166.66666667px;
}
.col-3 {
  width: 250px;
}
.col-4 {
  width: 333.33333333px;
}
.col-5 {
  width: 416.66666667px;
}
.col-6 {
  width: 500px;
}
.col-7 {
  width: 583.33333333px;
}
.col-8 {
  width: 666.66666667px;
}
.col-9 {
  width: 750px;
}
.col-10 {
  width: 833.33333333px;
}
.col-11 {
  width: 916.66666667px;
}
.col-12 {
  width: 1000px;
}
應用場景:表格、特效等

sass

mixin方式:

@mixin gen-col($n) {
    @if $n>0 {
        @include gen-col($n - 1);
        .col-#{$n} {
            width: 1000px/12*$n;
        }
    }
}

@include gen-col(12);

sass是支持循環的,不需要遞歸

@for $i from 1 through 12 {
    .col-#{$i} {
        width: 1000/12*$i;
    }
}

使得CSS變得更像一門變成語言

6、import

預處理器的變量跨文件

@import "logo";
@import "nav";
@import  "content";

7、預處理器框架

預處理器的模塊化,提供了按需使用他人代碼的可能

SASS-Compass
Less-Lesshat/EST
提供現成mixin
提供JS類庫,封裝常用功能

有兼容性問題的封裝成mixin統一處理

真題

常見的CSS預處理器

Less(Node.js)
Sass(Ruby,有Node版本)

預處理器作用

幫助更好地組織CSS代碼
提高代碼複用率
提升可維護性

預處理利器的作用

嵌套               反應層級和約束
變量和計算           減少重複代碼
Extend和Mixin      代碼片段
循環                適用於複雜有規律的樣式
import                CSS文件模塊化

預處理器的優缺點

優點:提高代碼複用率和可維護性
缺點:需要引入編譯過程  有學習成本

前端工程化發展起來了,預處理器的熱度有所下降

八、Bootstrap

介紹
  • 一個CSS框架
  • twitter出品
  • 提供通用基礎樣式

.

Bootstrap4
  • 兼容IE10+(bootstrap3兼容到IE9)
  • 使用flexbox佈局
  • 拋棄Nomalize.css
  • 提供佈局和reboot版本

.

功能
  • 基礎樣式
  • 常用組件
  • JS插件

現在用sass編寫

1、基本用法

2、Js組件

用於組件交互
    dropdown(下拉)
    modal( 彈窗)
基於jQuery
依賴Popper.js
bootstrap.js    
使用方式
     基於`data-`屬性
     基於JS-API

3、響應式佈局

不同的分辨率下面又不同的分配
Alt text

4、定製化

使用CSS同名類覆蓋
修改源碼重新構建                  //修改徹底,但是需要了解整個框架
使用SCSS源文件,修改變量           //對結構的要求更高

把bootstrap當初一個預處理文件來使用,十一個更乾淨的使用方式

5、CSS真題、

Bootstrap的優缺點

優點:CSS代碼結構合理,現成的樣式可以直接使用
缺點:定製較爲繁瑣,體積大

Bootstrap如何實現響應式佈局

原理:通過media query設置不同分辨率的class
使用:爲不同分辨率選擇不同的網格class

如何基於Bootstrap定製自己的樣式

使用CSS同名覆蓋
修改源碼重新構建
引用SCSS源文件,修改變量

九、css工程化方案

postCSS介紹
  • 組織
  • 優化
  • 構建
  • 維護

1、postCSS插件的使用

Alt text

PostCSS本身只有解析能力
各種神奇的特性全靠插件
目前至少有200多個插件
import模塊合併
autoprefixier自動加前綴
cssnano壓縮代碼
cssnext使用css新特性

2、CSSnext

3、precss

  • 變量
  • 條件
  • 循環
  • MIxin Extend
  • import
  • 屬性值引用

4、gulpPostCSS

postCSS支持的構建工具
  • Webpack postcss-loader
  • Gulp gulp-postcss
  • Grunt grunt-postcss
  • Rollup rollup-postcss

5、webpack

6、webpack處理css

css-loader將css文件變成js文件
style-loader將變成js的css文件注入到頁面中

7、 css-modules和extract-text-plugin

直接將class名全部換掉,確保組件樣式不衝突
 
var styles = require('component.css');

style.green ...

8、 webpack小結

css-loader 將 CSS變成JS
style-loader 將JS樣式插入head
ExtractTextPlugin 將CSS從JS中提取出來
css modules 解決css命名衝突的問題(映射表)
less-loader  sass-loader各類預處理器
postcss-loader  PostCSS處理

9、 真題

如何解決CSS模塊化:

less sass  等CSS預處理器
PostCSS插件(postCSS-import/precss等)
webpack處理CSS(css-loader+style-loader)

PostCSS可以做什麼

取決於插件可以做什麼
autoperfixer cssnext precss等,兼容性處理
import模塊合併
css語法檢查、兼容性檢查
壓縮文件

CSS modules是做什麼的,如何使用

解決類名衝突的問題
使用PostCSS或者webpack等構建工具進行編譯
在HTML模板中使用編譯過程產生的類名

爲什麼使用JS來引用、加載CSS

JS作爲入口,管理資源有天然優勢
將組件的結構、樣式、行爲封裝到一起,增強內聚
可以做更多處理(webpack)

十、三大框架中的css

1、Angular中的CSS

Angular各版本

Angular.js(1.x) 
    *沒有樣式集成能力
Angular(2+)
    *typeScript
    *提供了樣式封裝能力
    *與組件深度集成

shadowDOM

邏輯上是一個DOM
結構上存在子集集合

Alt text

Scoped CSS

限定了範圍的CSS
無法影響外部元素
外部樣式一般不影響內部
可以通過/deep/或>>>穿透

兼容性還存在問題

模擬Scoped CSS

方案一:隨機選擇器(不支持)
方案二:隨機屬性
    *<div abcdefg>
    *div[abcdefg]{}

2、Vue中的CSS

內置CSS解決方案
模擬Scoped CSS
方案一:隨機選擇器    CSS modules
方案二:隨機屬性      <div abcdefg>   <div>[abadafda]{}

vue同時支持了這兩種方案

<style module>
<style scoped>

3、React中的CSS

React的處理
  • 官方沒有集成方案
  • 社區方案衆多
css modules
(babel)react-css-modules
styled components
styled jsx

十一、課程總結

課程內容

  • HTML基礎 CSS基礎
  • CSS佈局
  • 效果和動畫
  • 工具、工程化、框架

Alt text

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