html常見元素分類css
head區元素:(不會在頁面上留下直接內容)html
body區:前端
<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
複製代碼
HTML重要屬性vue
a[href,target]
img[src,alt]
table td[colspan,rowspan]
form[target,method,enctype]
(有表單的地方都建議放上form)
input[type,value]
button[type]
select>option[value]
label[for]
如何理解htmlhtml5
HTML
「文檔」"大綱"做用node
html
的語義化
html
版本react
HTML4/4.01(SGML)
瀏覽器作不少的容錯和修正工做XHTML(XML)
要求很是嚴格,嚴格要求編碼習慣HTML5
(基於HTML4
)
html5
新增內容webpack
section
article
nav
aside
//通常不出如今大綱中,表示不重要的廣告類placehold
自動聚焦
html5
新增語意css3
header
/footer
頭尾section
/article
區域nav
導航aside
不重要內容em
/strong
強調i
//icon
按默認樣式分web
block
inline
inline-block
HTML分類法
嵌套關係
默認樣式和reset
HTML標籤在瀏覽器中都有默認的樣式,不一樣的瀏覽器的默認樣式之間存在差異。例如ul默認帶有縮進樣式,在IE下,它的縮進是由margin實現的,而在Firefox下倒是由padding實現的。開發時瀏覽器的默認樣式可能會給咱們帶來多瀏覽器兼容性問題,影響開發效率。如今很流行的解決方式是一開始就將瀏覽器的默認樣式所有覆蓋掉,這就是css reset。
Normalize.css
doctype
的意義是什麼?HTML
、XHTML
、HTML5
的關係HTML
屬於SGML
XHTML
屬於XML
,是HTML
進行XML
嚴格化的結果HTML5
不屬於SGML
或者XML
,比XHTML
寬鬆API
(離線、音視頻、圖形、實時通訊、本地存儲、設備能力)
Canvas
+WEBGL
等技術,實現無插件的動畫以及圖像、圖形處理能力;offline
應用;websocket
,一改http
的純pull
模型,實現數據推送的夢想;MathML
,SVG
等,支持更加豐富的render
;em
是語義化的標籤,表強調i
是純樣式的標籤,表斜體HTML5
中i
不推薦使用,通常用做圖標SEO
semantic
microdata
input
img
br
hr
meta
link
HTML
是‘死’的(字符串,沒有結構)DOM
由HTML
解析而來,是活的(是樹,有結構)JS
能夠維護DOM
property
和attribute
的區別attribute
是‘死’的(屬性,寫在HTML中)property
是‘活’的(特性,DOM對象中)attribute
不會影響property
,property
也不會影響attribute
form
做用
cascading style sheet
層疊樣式表
選擇器簡介
HTML
元素<div>
可能能找到幾百個)選擇器分類
a{}
::before{}
//真實存在的容器.link{}
[type=radio]{}
:hover{}
//元素的狀態ID
選擇器 #id{}
[type=checkbox]
+ label{}
:not(.link){}
*{}
選擇器權重
計算一個不進位的數字
#id
.link
a[href]
計算:
#id
+100.link
+10a
+1[href]
+0結果:111
#id .link.active
#id +100
.link +10
.active +10
結果:120
複製代碼
不進位
只要有id選擇器,就是最大,類選擇器再多也不會進位,只能在本身位上
百位 十位 個位
其餘選擇器權重
!important
優先級最高元素的屬性
> 外部樣式表 (style標籤,外部樣式表)
非佈局樣式
字體
、字重
、顏色
、大小
、行高
背景
、邊框
滾動
、換行
粗體
、斜體
、下劃線
字體族
serif
(襯線字體)sans-serif
(非襯線字體)monospace
(等寬字體,例如代碼)cursive
(方正靜蕾體)fantasy
多字體
fallback
機制
font-family:Monaco PingFangSC
複製代碼
英文字體用Monaco
,可是Monaco
沒有中文字體,因此若是碰到中文會使用PingFangSC
,一個字體一個字體的找
font-family:"Microsoft Yahei",serif
複製代碼
字體族不須要引號,由於不是具體的字體
.chinese{
font-family:"PingFang SC","Microsoft Yahei",monospace
}
複製代碼
指定在mac
系統上用PingFang SC
,windows
上用Microsoft Yahei
,把單個平臺獨有的字體寫到前面
網絡字體、自定義字體
@font-face{
font-family:"IF";
src:url("./IndieFlower.ttf");
}
.custom-font{
font-family:IF;
}
複製代碼
注意跨域
iconfont
字體機制
iconfont.cn
行高的構成
line-box
決定line-hight
會撐起inline-box
的高度,並不會影響自己佈局的高度,可是會影響外部元素(line-box)inline-box
組成line-box
,line-box
高度是由inline-box
決定行高的相關現象
line-height
作就好了base-line
對齊,若是要居中對齊就用vertical-align:middle
經典圖片空隙問題
inline
排版,若是按照inline
排版的話,默認按照基線排版(base-line
)12px
字體那麼縫隙可能就是3px
vertical-align:bottom
或者display:block
背景顏色
HSL
Hue
(色調)。0(或360)表示紅色,120表示綠色,240表示藍色,也可取其餘數值來指定顏色。取值爲:0 - 360Saturation
(飽和度)。取值爲:0.0% - 100.0%Lightness
(亮度)。取值爲:0.0% - 100.0% background:hsl(0,100%,50%)
RGB(A)
背景圖
漸變色背景
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-size:30px 30px
複製代碼
background實現各類漸變背景,能夠經過疊加實現,放射漸變
背景圖片和屬性(雪碧圖)
優勢:
減小加載網頁圖片時對服務器的請求次數
提升頁面的加載速度
由所需圖片拼成的一張 GIF 圖片的尺寸會明顯小於全部圖片拼合前的大小。
單張的 GIF 只有相關的一個色表,而單獨分割的每一張 GIF
都有本身的一個色表,這就增長了整體的大小。
所以,單獨的一張 JPEG 或者 PNG sprite 在大小上很是可能比把一張圖分紅多張得來的圖片總尺寸小
複製代碼
缺點:
一個例子是來自於WHIT TV的網站。
注意這是一個1299×15,000像素的PNG圖片。
它也被壓縮的很好——實際下載大小隻有大概26K —
可是瀏覽器並不會渲染壓縮後的圖片數據。當這個圖片被下載並被解壓縮以後
複製代碼
base64
和性能優化
多分辨率適配
邊框的屬性
線型
大小
顏色
邊框背景圖
border-img('./border.img') 30 round;
//repeat:可能會致使不完整
//round:整數個拼,可能會有一些空間上的壓縮
複製代碼
邊框銜接(三角形)
原理:利用邊框銜接過程是斜切
width:0px;
border-bottom:30px solid red;
border-left:20px solid transparent;
border-right:20px solid transparent;
複製代碼
滾動行爲和滾動條
visible
:內容直接顯示,撐出容器hidden
:超出容器部分隱藏scroll
:超出容器滾動,始終顯示滾動條auto
:超出容器滾動,當內容比較短不須要滾動條的時候不顯示滾動條在mac系統上收系統設置影響
overflow-wrap(word-wrap)
通用換行控制 - 兼容性不太好,常常還用word-wrap - 是否保留單詞 -normal
只在容許的斷字點換行(瀏覽器保持默認處理)。 -break-word
在長單詞或 URL 地址內部進行換行。
word-break
- 針對多字節文字,中文句子也是單詞 -break-all
容許在單詞內換行。 -keep-all
只能在半角空格或連字符處換行,中文句子也不換行,兼容性還有點問題
white-space
- 空白處是否斷行 - 不換行的話white-space: nowrap
overflow-wrap: break-word ;
word-break: keep-all;
white-space: normal ;
複製代碼
font-weight
font-style:itatic
text-decoration
cursor
hack
Hack
看起來不合法但生效的寫法class
hack
寫到後面checkbox
tabs
CSS佈局
flexbox
/grid
(偏簡單)經常使用佈局方式
佈局方式(表格)
display:table
display:table-row
盒模型
寬度和高度是隻對內容區生效
佔據的空間是content + padding + border
display/position
display
肯定元素的顯示類型:
position
肯定元素的位置:
static
:靜態佈局,按照文檔流佈局relative
:相對於元素自己的偏移,relative偏移時,元素所佔據的文檔空間不會產生偏移absolute
:從文檔流脫離,相對於最近的父級absolute或者relative,若是父級不是的話,會一直網上到bodyfixed
:相對於屏幕/可視區域定位於relatvie、absolute、fixed均可以設置z-index,數值越大附帶
低版本IE不支持
出過三個版本,市面上各個瀏覽器都有對應的解析,會致使一些兼容性問題
react Native
和微信小程序能夠直接用來佈局
float
float對自身的影響:
BFC
),inline
元素也能夠設置寬高(BFC背後的神奇原理)float
本意就是要作文字環繞、圖文混排等內容的
對兄弟的影響
float
元素float
元素對父級元素的影響
解決「高度塌陷」的方案
讓父元素造成BFC
來接管本身的高度
overflow:auto/hidden
用其餘元素撐起來
container2::after{
content:'';
clear:'both'; //保證這個元素左右都是"乾淨"的,沒有浮動元素
display:block;
height:0; //不佔高度
visibility:hidden //不用顯示
}
//比較經典的清除浮動佈局的方式
複製代碼
float佈局
float和margin實現兩欄佈局和三欄佈局
float:left
(左)margin-left:左元素的寬度
(右)float:left
(左)float:right
(右)float
元素不會對其
margin-left:左元素的寬度
margin-right:右元素的寬度
inline-block
佈局block
元素處理間隙
html
中的空白html
寫在一塊兒;<!-- -->
font-size:0
;子塊從新加上字體font-sizi:14px;
響應式設計和佈局
rem/viewport/media query
viewport:
viewport
viewport``可視區大小=屏幕大小
,有些設備默認屏幕寬度980px<meta name='viewport' content="width=device-width,initial-scale=1.0">
window.innerWidth
動態計算頁面的寬度
media query:
@media(max-width:640px){
.left{
display:none;
}
}
複製代碼
rem:
html{
font-size:16px; // 默認16個像素,爲了好記通常設置10px,20px
}
複製代碼
@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;
}
}
//精確性要求高的地方不要使用`rem`佈局
複製代碼
float
佈局:兼容性好
display:table
float
+margin
佈局(清理浮動)inline-block
佈局(處理間隙)flexbox
佈局(兼容性不是特別好)position:absolute/fixed
有什麼區別?absolute/relative
viewport
)fixed
兼容性不是很好display:inline-block
的間隙浮動元素不會佔據父元素空間,所以父元素不會管浮動元素,極可能超出父元素,對其餘元素產生影響。做爲父元素必定要清除浮動,保證對外沒有影響
overflow:hidden(auto)
::after{clear:both}
(也能夠用單獨的元素)viewport
(頁面寬度和移動端適配)rem
/viewport
/media query
(大小方面的適配)css
效果效果屬性
box-shadow
text-shadow
border-radius
background
clip-path
一個div
畫xx
系列,能夠用box-shadow
,其餘圖形能夠經過點,肯定是可能有性能問題
border-radius:50%
) 百分比是寬高的百分比
多背景疊加(顏色、圖片、漸變)
效果
.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;
}
複製代碼
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;
複製代碼
支持svg
3D-transform
變換
transform(2D)
translateZ
3D
立體)transform:translateX(100px) translateY(100px) rotate(25deg)
transform:rotate(25deg) translateX(100px) translateY(100px)
//有順序
複製代碼
box-shadow無限投影
::before
::after
複製代碼
box-shadow
outline
border-radius:50%
clip-path:(svg)
background-position
background-repeat
background-size(cover/contain)
複製代碼
transform:translateX(100px)
transform:scale(2)
複製代碼
perspective:500px; //指定透視的角度
transform-style:preserve-3d; //保留3D效果
transform:translate rotate;
複製代碼
動畫的原理:
動畫的做用
動畫類型
transition
補間動畫(中間的過程瀏覽器腦補起來)keyframe
關鍵幀動畫(也是補間動畫,可是有不少關鍵幀)transition
left/right/margin/transform
)transform
)transform
)opacity
)transform
)transition: [動畫類型] [動畫時間]
transition-delay
//延遲多長時間執行
transition-delay:width 1s,background 3s;
//多個效果疊加
transition-timing-function
timing(easing)
:定義動畫進度和時間的關係
linear
ease-in-out
keyframes
動畫animation:run 1s linear;
animation-direction
//reverse
:反向animation-fill-mode:forword
//forwards
,backwards
決定動畫最終停留在哪裏animation-iteration-count
//infinite
:循環次數animation-play-state:pause
//js
控制它的停和動steps()
例如:圖片合成的動畫
animation-timing-function:steps(1)
step
是指定每一個區間幀數CSS
中動畫怎麼寫,transation
和animation
和keyframs
怎麼寫CSS
中動畫實現的方式有幾種box-shadow
等介紹
less
和sass
的區別
less
node
JS
寫的,編譯速度比較快,有個瀏覽器中能夠直接使用的版本,不須要預先編譯,入門簡單sass(scss)
ruby
寫的比較慢,可是有解決方案,可使用它的移植版本node-sass
CSS預處理器
Extend
和Mixin
代碼片斷import CSS
文件模塊化
less
加上&
:並非父子關係而是同級CSS
中並不容許這麼嵌套寫,les
s和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文件
變量爲了能夠參與運算,提供了各類運算的函數,包括顏色
less
:@fontSize
sass
:$fontSize
less
的理念:儘可能的接近css的語法
sass
的理念:儘可能避免產生混淆
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清除浮動
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;
}
複製代碼
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變得更像一門變成語言
import
預處理器的變量跨文件
@import "logo";
@import "nav";
@import "content";
複製代碼
預處理器的模塊化,提供了按需使用他人代碼的可能
SASS-Compass
Less-Lesshat/EST(國內)
mixin
JS
類庫,封裝經常使用功能有兼容性問題的封裝成mixin統一處理
Less
(Node.js
)Sass
(Ruby
,有Node
版本)Extend
和Mixin
代碼片斷import
CSS
文件模塊化前端工程化發展起來了,預處理器的熱度有所降低
Bootstrap
介紹
CSS
框架twitter
出品
Bootstrap4
bootstrap3
兼容到IE9
)flexbox
佈局Nomalize.css
reboot
版本功能
如今用sass
編寫
Js
組件用於組件交互
dropdown
(下拉)modal
( 彈窗)基於jQuery
Popper.js
bootstrap.js
使用方式
data-
屬性JS-API
不一樣的分辨率下面又不一樣的分配
CSS
同名類覆蓋SCSS
源文件,修改變量 //對結構的要求更高把bootstrap當初一個預處理文件來使用,十一個更乾淨的使用方式
CSS
面試題Bootstrap
的優缺點CSS
代碼結構合理,現成的樣式能夠直接使用Bootstrap
如何實現響應式佈局media query
設置不一樣分辨率的class
class
Bootstrap
定製本身的樣式CSS
同名覆蓋SCSS
源文件,修改變量
CSS
工程化介紹
postCSS
插件的使用PostCSS
自己只有解析能力import
模塊合併autoprefixier
自動加前綴cssnano
壓縮代碼cssnext
使用css新特性precss
MIxin
Extend
import
gulpPostCSS
postCSS
支持的構建工具
Webpack
postcss-loader
Gulp
gulp-postcss
Grunt
grunt-postcss
Rollup
rollup-postcss
webpack
處理css
css-loader
將css文件變成js文件style-loader
將變成js的css文件注入到頁面中css-modules
和extract-text-plugin
直接將class名所有換掉,確保組件樣式不衝突
var styles = require('component.css');
style.green ...
css-loader
將 CSS
變成JS
style-loader
將JS
樣式插入head
ExtractTextPlugin
將CSS
從JS
中提取出來css modules
解決css命名衝突的問題(映射表)less-loader
sass-loader
各種預處理器postcss-loader
PostCSS
處理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
Angular
中的CSS
Angular
各版本
Angular.js(1.x)
Angular(2+)
typeScript
shadowDOM
DOM
Scoped CSS
CSS
/deep/
或>>>
穿透兼容性還存在問題
模擬
Scoped CSS
<div abcdefg>
div[abcdefg]{}
Vue
中的CSS
內置
CSS
解決方案
模擬
Scoped CSS
CSS modules
<div abcdefg>
<div>[abadafda]{}
vue同時支持了這兩種方案
<style module>
<style scoped>
React
中的CSS
React的
處理
官方沒有集成方案
社區方案衆多
css modules
(babel)react-css-modules
styled components
styled jsx
金三銀四,看見你們都在爲了面試而努力 特開了一個前端模擬面試題,組織了面試的羣友天天來羣裏分享面試題,講題 急思衆議,共同進步,歡迎最近在面試或者準備面試的羣友加入本羣,加羣格式: 工做年限-面試等級(初、中、高)-工做地點 (不在面試或者不許備面試或者不說話的勿加本羣,加了也會被清理,咱們的目標是留下一部分願意經過討論學習和分享提升自身能力的羣友)