2019互聯網寒冬已至,大批互聯網公司紛紛裁人,其實從2018年下半年開始,裁人和市場部收縮預算就常常被說起,阿里巴巴,華爲都傳出了收縮招聘的新聞。網易的遊戲部門和門戶部門也前後裁人,趣店裁人90%,鬥魚裁人30%。小肆也是被這些消息嚇得瑟瑟發抖,不過生活就是這樣,誰也沒法預料到次日會發生什麼,只有把握好如今,積極爲未知的明天作好準備纔是正道。javascript
對於目前在職的同窗,保持學習,提高本身核心競爭力,讓本身成爲不會被輕易替代的那我的。
對於必須面臨從新找工做的同窗,積極複習,多多刷題,把技術基礎打牢,這樣才容易在面試競爭中獲取領先地位。css
小肆深知找工做的不易,今天給你們精選了一些前端近一年常見的面試題,供你們複習,即使是在職的同窗,也推薦有空就看看,保持憂患意識在目前的大環境下是很是有必要的。html
<!DOCTYPE>
聲明位於HTML文檔中的第一行,處於 <html>
標籤以前。告知瀏覽器的解析器用什麼文檔標準解析這個文檔。DOCTYPE不存在或格式不正確會致使文檔以兼容模式呈現。<!DOCTYPE HTML>
?HTML5 不基於 SGML,所以不須要對DTD進行引用,可是須要doctype來規範瀏覽器的行爲(讓瀏覽器按照它們應該的方式來運行);
而HTML4.01基於SGML,因此須要對DTD進行引用,才能告知瀏覽器文檔所使用的文檔類型。前端
首先:CSS規範規定,每一個元素都有display屬性,肯定該元素的類型,每一個元素都有默認的display值,如div的display默認值爲「block」,則爲「塊級」元素;span默認display屬性值爲「inline」,是「行內」元素。html5
1. 行內元素有:a b span img input select strong(強調的語氣) 2. 塊級元素有:div ul ol li dl dt dd h1 h2 h3 h4… 3. 常見的空元素: `<br>` `<hr>` `<img>` `<input>` `<link>` `<meta>` **說這些可能會加分的**: `<area>` `<base>` `<col>` `<command>` `<embed>` `<keygen>` `<param>` `<source>` `<track>` `<wbr>`
主要分紅兩部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。java
渲染引擎:負責取得網頁的內容(HTML、XML、圖像等等)、整理訊息(例如加入CSS等),以及計算網頁的顯示方式,而後會輸出至顯示器或打印機。瀏覽器的內核的不一樣對於網頁的語法解釋會有不一樣,因此渲染的效果也不相同。全部網頁瀏覽器、電子郵件客戶端以及其它須要編輯、顯示網絡內容的應用程序都須要內核。 JS引擎則:解析和執行javascript來實現網頁的動態效果。 最開始渲染引擎和JS引擎並無區分的很明確,後來JS引擎愈來愈獨立,內核就傾向於只指渲染引擎。
Trident內核:IE,MaxThon,TT,The World,360,搜狗瀏覽器等。[又稱MSHTML]
Gecko內核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
Presto內核:Opera7及以上。 [Opera內核原爲:Presto,現爲:Blink;]
Webkit內核:Safari,Chrome等。 [ Chrome的:Blink(WebKit的分支)]android
HTML5 如今已經不是 SGML 的子集,主要是關於圖像,位置,存儲,多任務等功能的增長。css3
繪畫 canvas; 用於媒介回放的 video 和 audio 元素; 本地離線存儲 localStorage 長期存儲數據,瀏覽器關閉後數據不丟失; sessionStorage 的數據在瀏覽器關閉後自動刪除; 語意化更好的內容元素,好比 article、footer、header、nav、section; 表單控件,calendar、date、time、email、url、search; 新的技術webworker, websocket, Geolocation;
IE8/IE7/IE6支持經過document.createElement方法產生的標籤,
能夠利用這一特性讓這些瀏覽器支持HTML5新標籤,
瀏覽器支持新標籤後,還須要添加標籤默認的樣式。
固然也能夠直接使用成熟的框架、好比html5shim;git
<!--[if lt IE 9]> <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script> <![endif]-->
在用戶沒有與因特網鏈接時,能夠正常訪問站點或應用,在用戶與因特網鏈接時,更新用戶機器上的緩存文件。github
**原理:HTML5的離線存儲是基於一個新建的.appcache文件的緩存機制(不是存儲技術),經過這個文件上的解析清單離線存儲資源,這些資源就會像cookie同樣被存儲了下來。以後當網絡在處於離線狀態下時,瀏覽器會經過被離線存儲的數據進行頁面展現。**
在cache.manifest文件的編寫離線存儲的資源;
CACHE MANIFEST #v0.11 CACHE: js/app.js css/style.css NETWORK: resourse/logo.png FALLBACK: / /offline.html
三、在離線狀態時,操做window.applicationCache進行需求實現。
在線的狀況下,瀏覽器發現html頭部有manifest屬性,它會請求manifest文件,若是是第一次訪問app,那麼瀏覽器就會根據manifest文件的內容下載相應的資源而且進行離線存儲。若是已經訪問過app而且資源已經離線存儲了,那麼瀏覽器就會使用離線的資源加載頁面,而後瀏覽器會對比新的manifest文件與舊的manifest文件,若是文件沒有發生改變,就不作任何操做,若是文件改變了,那麼就會從新下載文件中的資源並進行離線存儲。
離線的狀況下,瀏覽器就直接使用離線存儲的資源。
cookie是網站爲了標示用戶身份而儲存在用戶本地終端(Client Side)上的數據(一般通過加密)。
cookie數據始終在同源的http請求中攜帶(即便不須要),記會在瀏覽器和服務器間來回傳遞。 sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存。
cookie數據大小不能超過4k。
sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,能夠達到5M或更大。
localStorage 存儲持久數據,瀏覽器關閉後數據不丟失除非主動刪除數據;
sessionStorage 數據在當前瀏覽器窗口關閉後自動刪除。
cookie 設置的cookie過時時間以前一直有效,即便窗口或瀏覽器關閉
label標籤來定義表單控制間的關係,當用戶選擇該標籤時,瀏覽器會自動將焦點轉到和標籤相關的表單控件上。
<label for="Name">Number:</label> <input type=「text「name="Name" id="Name"/> <label>Date:<input type="text" name="B"/></label>
給不想要提示的 form 或某個 input 設置爲 autocomplete=off。
WebSocket、SharedWorker;
也能夠調用localstorge、cookies等本地存儲方式;
localstorge另外一個瀏覽上下文裏被添加、修改或刪除時,它都會觸發一個事件,
咱們經過監聽事件,控制它的值來進行頁面信息通訊;
在無痕模式下設置localstorge值時會拋出 QuotaExceededError 的異常;
Adobe Flash Socket 、
ActiveX HTMLFile (IE) 、
基於 multipart 編碼發送 XHR 、
基於長輪詢的 XHR
經過 visibilityState 的值檢測頁面當前是否可見,以及打開網頁的時間等;
在頁面被切換到其餘後臺進程的時候,自動暫停音樂或視頻的播放;
<div style="height:1px;overflow:hidden;background:red"></div>
區分用戶是計算機仍是人的公共全自動程序。能夠防止惡意破解密碼、刷票、論壇灌水;
有效防止黑客對某一個特定註冊用戶用特定程序暴力破解方式進行不斷的登錄嘗試。
title屬性沒有明確意義只表示是個標題,H1則表示層次明確的標題,對頁面信息的抓取也有很大的影響;
strong是標明重點內容,有語氣增強的含義,使用閱讀設備閱讀網絡時:<strong>
會重讀,而<B>
是展現強調內容。
i內容展現爲斜體,em表示強調的文本;
Physical Style Elements -- 天然樣式標籤
b, i, u, s, pre
Semantic Style Elements -- 語義樣式標籤
strong, em, ins, del, code
應該準確使用語義樣式標籤, 但不能濫用, 若是不能肯定時首選使用天然樣式標籤。
(1)有兩種, IE 盒子模型、W3C 盒子模型;
(2)盒模型: 內容(content)、填充(padding)、邊界(margin)、 邊框(border);
(3)區 別: IE的content部分把 border 和 padding計算了進去;
優先級爲:
同權重: 內聯樣式表(標籤內部)> 嵌入樣式表(當前文件中)> 外部樣式表(外部文件中)。 !important > id > class > tag important 比 內聯優先級高
舉例:
p:first-of-type 選擇屬於其父元素的首個 <p>
元素的每一個 <p>
元素。
p:last-of-type 選擇屬於其父元素的最後 <p>
元素的每一個 <p>
元素。
p:only-of-type 選擇屬於其父元素惟一的 <p>
元素的每一個 <p>
元素。
p:only-child 選擇屬於其父元素的惟一子元素的每一個 <p>
元素。
p:nth-child(2) 選擇屬於其父元素的第二個子元素的每一個 <p>
元素。
::after 在元素以前添加內容,也能夠用來作清除浮動。
::before 在元素以後添加內容
:enabled
:disabled 控制表單控件的禁用狀態。
:checked 單選框或複選框被選中。
div{ width:200px; margin:0 auto; }
div { position: absolute; width: 300px; height: 300px; margin: auto; top: 0; left: 0; bottom: 0; right: 0; background-color: pink; /* 方便看效果 */ }
肯定容器的寬高 寬500 高 300 的層
設置層的外邊距
div { position: relative; /* 相對定位或絕對定位都可 */ width:500px; height:300px; top: 50%; left: 50%; margin: -150px 0 0 -250px; /* 外邊距爲自身寬高的一半 */ background-color: pink; /* 方便看效果 */ }
transform
屬性div { position: absolute; /* 相對定位或絕對定位都可 */ width:500px; height:300px; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: pink; /* 方便看效果 */ }
利用 flex 佈局
實際使用時應考慮兼容性
.container { display: flex; align-items: center; /* 垂直居中 */ justify-content: center; /* 水平居中 */ } .container div { width: 100px; height: 100px; background-color: pink; /* 方便看效果 */ }
block 塊類型。默認寬度爲父元素寬度,可設置寬高,換行顯示。
none 缺省值。象行內元素類型同樣顯示。
inline 行內元素類型。默認寬度爲內容寬度,不可設置寬高,同行顯示。
inline-block 默認寬度爲內容寬度,能夠設置寬高,同行顯示。
list-item 象塊類型元素同樣顯示,並添加樣式列表標記。
table 此元素會做爲塊級表格來顯示。
inherit 規定應該從父元素繼承 display 屬性的值。
absolute
生成絕對定位的元素,相對於值不爲 static的第一個父元素進行定位。
fixed (老IE不支持)
生成絕對定位的元素,相對於瀏覽器窗口進行定位。
relative
生成相對定位的元素,相對於其正常位置進行定位。
static
默認值。沒有定位,元素出如今正常的流中(忽略 top, bottom, left, right z-index 聲明)。
inherit
規定從父元素繼承 position 屬性的值。
新增各類CSS選擇器 (: not(.input):全部 class 不是「input」的節點)
圓角 (border-radius:8px)
多列布局 (multi-column layout)
陰影和反射 (ShadowReflect)
文字特效 (text-shadow、)
文字渲染 (Text-decoration)
線性漸變 (gradient)
旋轉 (transform)
縮放,定位,傾斜,動畫,多背景
例如:transform:scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg)Animation:
一個用於頁面佈局的全新CSS3功能,Flexbox能夠把列表放在同一個方向(從上到下排列,從左到右),並讓列表能延伸到佔用可用的空間。
較爲複雜的佈局還能夠經過嵌套一個伸縮容器(flex container)來實現。
採用Flex佈局的元素,稱爲Flex容器(flex container),簡稱"容器"。
它的全部子元素自動成爲容器成員,稱爲Flex項目(flex item),簡稱"項目"。
常規佈局是基於塊和內聯流方向,而Flex佈局是基於flex-flow流能夠很方便的用來作局中,能對不一樣屏幕大小自適應。
在佈局上有了比之前更加靈活的空間。
把上、左、右三條邊隱藏掉(顏色設爲 transparent)
#demo { width: 0; height: 0; border-width: 20px; border-style: solid; border-color: transparent transparent red transparent; }
簡單的方式:
上面的div寬100%, 下面的兩個div分別寬50%, 而後用float或者inline使其不換行便可
利用padding-bottom|margin-bottom正負值相抵;
設置父容器設置超出隱藏(overflow:hidden),這樣子父容器的高度就仍是它裏面的列沒有設定padding-bottom時的高度,
當它裏面的任 一列高度增長了,則父容器的高度被撐到裏面最高那列的高度,
其餘比這列矮的列會用它們的padding-bottom補償這部分高度差。
*{margin:0;padding:0;}
來統一。浮動ie產生的雙倍距離 #box{ float:left; width:10px; margin:0 0 0 100px;}
這種狀況之下IE會產生20px的距離,解決方案是在float的標籤樣式控制中加入 ——_display:inline;將其轉化爲行內屬性。(_這個符號只有ie6會識別)
漸進識別的方式,從整體中逐漸排除局部。
首先,巧妙的使用「9」這一標記,將IE遊覽器從全部狀況中分離出來。
接着,再次使用「+」將IE8和IE七、IE6分離開來,這樣IE8已經獨立識別。
.bb{ background-color:red;/*全部識別*/ background-color:#00deff\9; /*IE六、七、8識別*/ +background-color:#a200ff;/*IE六、7識別*/ _background-color:#1e0bd1;/*IE6識別*/ }
超連接訪問事後hover樣式就不出現了 被點擊訪問過的超連接樣式不在具備hover和active瞭解決方法是改變CSS屬性的排列順序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
行框的排列會受到中間空白(回車空格)等的影響,由於空格也屬於字符,這些空白也會被應用樣式,佔據空間,因此會有間隔,把字符大小設爲0,就沒有空格了。
最簡單的初始化方法: * {padding: 0; margin: 0;}
(強烈不建議)
淘寶的樣式初始化代碼:
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; } body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; } h1, h2, h3, h4, h5, h6{ font-size:100%; } address, cite, dfn, em, var { font-style:normal; } code, kbd, pre, samp { font-family:couriernew, courier, monospace; } small{ font-size:12px; } ul, ol { list-style:none; } a { text-decoration:none; } a:hover { text-decoration:underline; } sup { vertical-align:text-top; } sub{ vertical-align:text-bottom; } legend { color:#000; } fieldset, img { border:0; } button, input, select, textarea { font-size:100%; } table { border-collapse:collapse; border-spacing:0; }
不管屬於哪一種,都要先找到其祖先元素中最近的 position 值不爲 static 的元素,而後再判斷:
若是都找不到,則爲 initial containing block。
補充:
對於普通元素visibility:collapse;
會將元素徹底隱藏,不佔據頁面佈局空間,與display:none;表現相同.
若是目標元素爲table,visibility:collapse;
將table隱藏,可是會佔據頁面佈局空間.
僅在Firefox下起做用,IE會顯示元素,Chrome會將元素隱藏,可是佔據空間.
若是元素的display爲none,那麼元素不被渲染,position,float不起做用,若是元素擁有position:absolute;或者position:fixed;屬性那麼元素將爲絕對定位,float不起做用.若是元素float屬性不是none,元素會脫離文檔流,根據float屬性值來顯示.有浮動,絕對定位,inline-block屬性的元素,margin不會和垂直方向上的其餘元素margin摺疊.
(W3C CSS 2.1 規範中的一個概念,它是一個獨立容器,決定了元素如何對其內容進行定位,以及與其餘元素的關係和相互做用。)
一個頁面是由不少個 Box 組成的,元素的類型和 display 屬性,決定了這個 Box 的類型。
不一樣類型的 Box,會參與不一樣的 Formatting Context(決定如何渲染文檔的容器),所以Box內的元素會以不一樣的方式渲染,也就是說BFC內部的元素和外部的元素不會互相影響。
如下是權重的規則:標籤的權重爲1,class的權重爲10,id的權重爲100,如下例子是演示各類定義的權重值:
/*權重爲1*/ div{ } /*權重爲10*/ .class1{ } /*權重爲100*/ #id1{ } /*權重爲100+1=101*/ #id1 div{ } /*權重爲10+1=11*/ .class1 div{ } /*權重爲10+10+1=21*/ .class1 .class2 div{ }
若是權重相同,則最後定義的樣式會起做用,可是應該避免這種狀況出現
清除浮動是爲了清除使用浮動元素產生的影響。浮動的元素,高度會塌陷,而高度的塌陷使咱們頁面後面的佈局不能正常顯示。
一、父級div定義height;
二、父級div 也一塊兒浮動;
三、常規的使用一個class;
.clearfix::before, .clearfix::after { content: " "; display: table; } .clearfix::after { clear: both; } .clearfix { *zoom: 1; }
四、SASS編譯的時候,浮動元素的父級div定義僞類:after
&::after,&::before{ content: " "; visibility: hidden; display: block; height: 0; clear: both; }
解析原理:
1) display:block 使生成的元素以塊級元素顯示,佔滿剩餘空間;
2) height:0 避免生成內容破壞原有佈局的高度。
3) visibility:hidden 使生成的內容不可見,並容許可能被生成內容蓋住的內容能夠進行點擊和交互;
4)經過 content:"."生成內容做爲最後一個元素,至於content裏面是點仍是其餘都是能夠的,例如oocss裏面就有經典的 content:".",有些版本可能content 裏面內容爲空,一絲冰涼是不推薦這樣作的,firefox直到7.0 content:」" 仍然會產生額外的空隙;
5)zoom:1 觸發IE hasLayout。
經過分析發現,除了clear:both用來閉合浮動的,其餘代碼無非都是爲了隱藏掉content生成的內容,這也就是其餘版本的閉合浮動爲何會有font-size:0,line-height:0。
外邊距合併指的是,當兩個垂直外邊距相遇時,它們將造成一個外邊距。
合併後的外邊距的高度等於兩個發生合併的外邊距的高度中的較大者。
清除浮動,觸發hasLayout;
Zoom屬性是IE瀏覽器的專有屬性,它能夠設置或檢索對象的縮放比例。解決ie下比較奇葩的bug。
譬如外邊距(margin)的重疊,浮動清除,觸發ie的haslayout屬性等。
前因後果大概以下:
當設置了zoom的值以後,所設置的元素就會就會擴大或者縮小,高度寬度就會從新計算了,這裏一旦改變zoom值時其實也會發生從新渲染,運用這個原理,也就解決了ie下子元素浮動時候父元素不隨着自動擴大的問題。
Zoom屬是IE瀏覽器的專有屬性,火狐和老版本的webkit核心的瀏覽器都不支持這個屬性。然而,zoom如今已經被逐步標準化,出如今 CSS 3.0 規範草案中。
目前非ie因爲不支持這個屬性,它們又是經過什麼屬性來實現元素的縮放呢?
能夠經過css3裏面的動畫屬性scale進行縮放。
假設你如今正用一臺顯示設備來閱讀這篇文章,同時你也想把它投影到屏幕上,或者打印出來, 而顯示設備、屏幕投影和打印等這些媒介都有本身的特色,CSS就是爲文檔提供在不一樣媒介上展現的適配方法 <!-- link元素中的CSS媒體查詢 --> 當媒體查詢爲真時,相關的樣式表或樣式規則會按照正常的級聯規被應用。 當媒體查詢返回假, <link> 標籤上帶有媒體查詢的樣式表 仍將被下載 (只不過不會被應用)。 <link rel="stylesheet" media="(max-width: 800px)" href="example.css" /> <!-- 樣式表中的CSS媒體查詢 --> 包含了一個媒體類型和至少一個使用 寬度、高度和顏色等媒體屬性來限制樣式表範圍的表達式。 CSS3加入的媒體查詢使得無需修改內容即可以使樣式應用於某些特定的設備範圍。 <style> @media (min-width: 700px) and (orientation: landscape){ .sidebar { display: none; } } </style>
SASS (SASS、LESS沒有本質區別,只由於團隊前端都是用的SASS)
關鍵選擇器(key selector)。選擇器的最後面的部分爲關鍵選擇器(即用來匹配目標元素的部分);
若是規則擁有 ID 選擇器做爲其關鍵選擇器,則不要爲規則增長標籤。過濾掉無關的規則(這樣樣式系統就不會浪費時間去匹配它們了);
提取項目的通用公有樣式,加強可複用性,按模塊編寫組件;加強項目的協同開發性、可維護性和可擴展性;
使用預處理工具或構建工具(gulp對css進行語法檢查、自動補前綴、打包壓縮、自動優雅降級);
樣式系統從關鍵選擇器開始匹配,而後左移查找規則選擇器的祖先元素。
只要選擇器的子樹一直在工做,樣式系統就會持續左移,直到和規則匹配,或者是由於不匹配而放棄該規則。
margin是用來隔開元素與元素的間距;padding是用來隔開元素與內容的間隔。
margin用於佈局分開元素使元素與元素互不相干;
padding用於元素與內容之間的間隔,讓內容(文字)與(包裹)元素之間有一段
單冒號(:)用於CSS3僞類,雙冒號(::)用於CSS3僞元素。(僞元素由雙冒號和僞元素名稱組成)
雙冒號是在當前規範中引入的,用於區分僞類和僞元素。不過瀏覽器須要同時支持舊的已經存在的僞元素寫法,
好比:first-line、:first-letter、:before、:after等,
而新的在CSS3中引入的僞元素則不容許再支持舊的單冒號的寫法。
想讓插入的內容出如今其它內容前,使用::before,否者,使用::after;
在代碼順序上,::after生成的內容也比::before生成的內容靠後。
若是按堆棧視角,::after生成的內容會在::before生成的內容之上
input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill { background-color: rgb(250, 255, 189); /* #FAFFBD; */ background-image: none; color: rgb(0, 0, 0); }
自動變成了 display:block
一、用圖片:若是是內容固定不變狀況下,使用將小於12px文字內容切出作圖片,這樣不影響兼容也不影響美觀。
二、使用12px及12px以上字體大小:爲了兼容各大主流瀏覽器,建議設計美工圖時候設置大於或等於12px的字體大小,若是是接單的這個時候就須要給客戶講解小於12px瀏覽器不兼容等事宜。
三、繼續使用小於12px字體大小樣式設置:若是不考慮chrome能夠不用考慮兼容,同時在設置小於12px對象設置-webkit-text-size-adjust:none,作到最大兼容考慮。
四、使用12px以上字體:爲了兼容、爲了代碼更簡單 重新考慮權重下兼容性。
-webkit-font-smoothing: antialiased;
傾斜的字體樣式
position:fixed;
在android下無效怎麼處理?fixed的元素是相對整個頁面固定位置的,你在屏幕上滑動只是在移動這個所謂的viewport,
原來的網頁還好好的在那,fixed的內容也沒有變過位置,
因此說並非iOS不支持fixed,只是fixed的元素不是相對手機屏幕固定的。
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
多數顯示器默認頻率是60Hz,即1秒刷新60次,因此理論上最小間隔爲1/60*1000ms = 16.7ms
display:inline-block
何時會顯示間隙?(攜程)移除空格、使用margin負值、使用font-size:0、letter-spacing、word-spacing
除了HTML,CSS咱們須要複習以外,還有JS、網絡,框架相關等知識須要複習,關於這些知識點,在github上有一個10000+star的項目,該項目爲咱們整理了至關全的知識圖譜。小肆把連接放在下面,有須要的同窗快去看看吧!
https://github.com/InterviewM...
最後別忘了關注我哦!