1、HTMLjavascript
一、瀏覽器頁面有哪三層構成,分別是什麼,做用是什麼?
構成:結構層、表示層、行爲層
分別:HTML、CSS、JavaScript
做用:HTML實現頁面結構,CSS完成頁面的表現與風格,JavaScript實現一些客戶端的功能與業務。css
二、HTML5的優勢與缺點?
優勢:
(1)網絡標準統1、HTML5自己是由W3C推薦出來的。
(2)多設備、跨平臺
(3)即時更新。
(4)提升可用性和改進用戶的友好體驗;
(5)有幾個新的標籤,這將有助於開發人員定義重要的內容;
(6)能夠給站點帶來更多的多媒體元素(視頻和音頻);
(7)能夠很好的替代Flash和Silverlight;
(8)涉及到網站的抓取和索引的時候,對於SEO很友好;
(9)被大量應用於移動應用程序和遊戲。
缺點:
(1)安全:像以前Firefox4的web socket和透明代理的實現存在嚴重的安全問題,同時web storage、web socket 這樣的功能很容易被黑客利用,來盜取用戶的信息和資料。
(2)完善性:許多特性各瀏覽器的支持程度也不同。
(3)技術門檻:HTML5簡化開發者工做的同時表明了有許多新的屬性和API須要開發者學習,像web worker、web socket、web storage 等新特性,後臺甚至瀏覽器原理的知識,機遇的同時也是巨大的挑戰
(4)性能:某些平臺上的引擎問題致使HTML5性能低下。
(5)瀏覽器兼容性:最大缺點,IE9如下瀏覽器幾乎全軍覆沒。html
三、Doctype做用? 嚴格模式與混雜模式如何區分?它們有何意義?
(1)聲明位於文檔中的最前面,處於標籤以前。告知瀏覽器的解析器,用什麼文檔類型 規範來解析這個文檔。
(2)嚴格模式的排版和JS 運做模式是以該瀏覽器支持的最高標準運行。
(3)在混雜模式中,頁面以寬鬆的向後兼容的方式顯示。模擬老式瀏覽器的行爲以防止站點沒法工做。
(4)DOCTYPE不存在或格式不正確會致使文檔以混雜模式呈現。前端
四、HTML5有哪些新特性、移除了哪些元素?
Html5新增了 27 個元素,廢棄了 16 個元素,根據現有的標準規範,把 HTML5 的元素按優先級定義爲結構性屬性、級塊性元素、行內語義性元素和交互性元素 4 大類。
(1)結構性元素主要負責web上下文結構的定義
section:在 web 頁面應用中,該元素也能夠用於區域的章節描述。
header:頁面主體上的頭部, header 元素每每在一對 body 元素中。
footer:頁面的底部(頁腳),一般會標出網站的相關信息。
nav:專門用於菜單導航、連接導航的元素,是 navigator 的縮寫。
article:用於表現一篇文章的主體內容,通常爲文字集中顯示的區域。
(2)級塊性元素主要完成web頁面區域的劃分,確保內容的有效分割。
aside:用於表達註記、貼士、側欄、摘要、插入的引用等做爲補充主體的內容。
figure:是對多個元素進行組合並展現的元素,一般與 ficaption 聯合使用。
code:表示一段代碼塊。
dialog:用於表達人與人之間的對話,該元素包含 dt 和 dd 這兩個組合元素, dt 用於表示說話者,而 dd 用來表示說話內容。
(3)行內語義性元素主要完成web頁面具體內容的引用和描述,是豐富內容展現的基礎。
meter:表示特定範圍內的數值,可用於工資、數量、百分比等。
time:表示時間值。
progress:用來表示進度條,可經過對其 max 、 min 、 step 等屬性進行控制,完成對進度的表示和監事。
video:視頻元素,用於支持和實現視頻文件的直接播放,支持緩衝預載和多種視頻媒體格式。
audio:音頻元素,用於支持和實現音頻文件的直接播放,支持緩衝預載和多種音頻媒體格式。
(4)交互性元素主要用於功能性的內容表達,會有必定的內容和數據的關聯,是各類事件的基礎。
details:用來表示一段具體的內容,可是內容默承認能不顯示,經過某種手段(如單擊)與 legend 交互纔會顯示出來。
datagrid:用來控制客戶端數據與顯示,能夠由動態腳本及時更新。
menu:主要用於交互菜單(曾被廢棄又被從新啓用的元素)。
command:用來處理命令按鈕。java
五、你作的網頁在哪些流覽器測試過,這些瀏覽器的內核分別是什麼?
(1)IE: trident 內核
(2)Firefox : gecko 內核
(3)Safari:webkit 內核
(4)Opera: 之前是 presto 內核, Opera 現已改用 Google Chrome 的 Blink 內核
(5)Chrome:Blink( 基於 webkit , Google 與 Opera Software 共同開發 )web
六、說說你對HTML5認識?
(1)HTML5指的是包括HTML、CSS和JavaScript在內的一套技術組合。它但願可以減小網頁瀏覽器對於須要插件的豐富性網絡應用服務( Plug-in-Based Rich Internet Application , RIA ),例如: AdobeFlash 、 Microsoft Silverlight 與 Oracle JavaFX 的需求,而且提供更多能有效增強網絡應用的標準集。 HTML5 是 HTML 最新版本, 2014 年 10 月由萬維網聯盟( W3C )完成標準制定。目標是替換 1999 年所制定的 HTML 4.01 和 XHTML 1.0 標準,以期能在互聯網應用迅速發展的時候,使網絡標準達到匹配當代的網絡需求。
(2)HTML4陳舊不能知足日益發展的互聯網須要,特別是移動互聯網。爲了加強瀏覽器功能 Flash 被普遍使用,但安全與穩定堪憂,不適合在移動端使用(耗電、觸摸、不開放)。
(3)HTML5加強了瀏覽器的原生功能,符合 HTML5 規範的瀏覽器功能將更增強大,減小了 Web 應用對插件的依賴,讓用戶體驗更好,讓開發更加方便,另外 W3C 從推出 HTML4.0 到 5.0 之間共經歷了 17 年, HTML 的變化很小,這並不符合一個好產品的演進規則。算法
七、HTML5行內元素有哪些,塊級元素有哪些, 空元素有哪些?
(1)行內元素
a:錨點
abbr:縮寫
acronym:首字
b:粗體 ( 不推薦 )
bdo:bidi override
big:大字體
br:換行
cite:引用
code:計算機代碼 ( 在引用源碼的時候須要 )
dfn:定義字段
em:強調
font:字體設定 ( 不推薦 )
i:斜體
img:圖片
input:輸入框
kbd:定義鍵盤文本
label:表格標籤
q:短引用
s:中劃線 ( 不推薦 )
samp:定義範例計算機代碼
select:項目選擇
small:小字體文本
span:經常使用內聯容器,定義文本內區塊
strike:中劃線
strong:粗體強調
sub:下標
sup:上標
textarea:多行文本輸入框
tt:電傳文本
u:下劃線
var:定義變量
(2)塊元素 (block element)
address:地址
blockquote:塊引用
center:舉中對齊塊
dir:目錄列表
div:經常使用塊級容易,也是 css layout 的主要標籤
dl:定義列表
fieldset:form控制組
form:交互表單
h1:大標題
h2:副標題
h3:3級標題
h4:4級標題
h5:5級標題
h6:6級標題
hr:水平分隔線
isindex:input prompt
menu:菜單列表
noframes:frames可選內容,(對於不支持 frame 的瀏覽器顯示此區塊內容
noscript:)可選腳本內容(對於不支持 script 的瀏覽器顯示此內容)
ol:排序表單
p:段落
pre:格式化文本
table:表格
ul:非排序列表
可變元素
可變元素爲根據上下文語境決定該元素爲塊元素或者內聯元素。
applet:java applet
button:按鈕
del:刪除文本
iframe:inline frame
ins:插入的文本
map:圖片區塊 (map)
object:object對象
script:客戶端腳本
(3)空元素 ( 在 HTML[1] 元素中,沒有內容的 HTML 元素被稱爲空元素 )
<br/>:換行
<hr>:分隔線
<input> :文本框等
<img>:圖片
<link>:連接資源bootstrap
八、什麼是WebGL,它有什麼優勢?
(1)WebGL(全寫 Web Graphics Library )是一種 3D 繪圖標準,這種繪圖技術標準容許把 JavaScript 和 OpenGL ES 2.0 結合在一塊兒,經過增長 OpenGL ES 2.0 的一個 JavaScript 綁定, WebGL 能夠爲 HTML5 Canvas 提供硬件 3D 加速渲染,這樣 Web 開發人員就能夠藉助系統顯卡來在瀏覽器裏更流暢地展現 3D 場景和模型了,還能建立複雜的導航和數據視覺化。顯然, WebGL 技術標準免去了開發網頁專用渲染插件的麻煩,可被用於建立具備複雜 3D 結構的網站頁面,甚至能夠用來設計 3D 網頁遊戲等等。
(2)WebGL完美地解決了現有的 Web 交互式三維動畫的兩個問題:
第一,它經過HTML腳本自己實現 Web 交互式三維動畫的製做,無需任何瀏覽器插件支持 ;
第二,它利用底層的圖形硬件加速功能進行的圖形渲染,是經過統一的、標準的、跨平臺的OpenGL接口實現的。
通俗說WebGL中 canvas 繪圖中的 3D 版本。由於原生的 WebGL 很複雜,咱們常常會使用一些三方的庫,如 three.js 等,這些庫多數用於 HTML5 遊戲開發。canvas
九、請你描述一下 cookies,sessionStorage 和 localStorage 的區別?
(1)Cookie
每一個域名存儲量比較小(各瀏覽器不一樣,大體 4K )
全部域名的存儲量有限制(各瀏覽器不一樣,大體 4K )
有個數限制(各瀏覽器不一樣)
會隨請求發送到服務器
(2)LocalStorage
永久存儲
單個域名存儲量比較大(推薦 5MB ,各瀏覽器不一樣)
整體數量無限制
(3)SessionStorage
只在 Session 內有效
存儲量更大(推薦沒有限制,可是實際上各瀏覽器也不一樣)windows
十、說說你對HTML語義化的理解?
(1)什麼是 HTML 語義化?
基本上都是圍繞着幾個主要的標籤,像標題( H1~H6 )、列表( li )、強調( strong em )等等
根據內容的結構化(內容語義化),選擇合適的標籤(代碼語義化)便於開發者閱讀和寫出更優雅的代碼的同時讓瀏覽器的爬蟲和機器很好地解析。
(2)爲何要語義化?
爲了在沒有CSS的狀況下,頁面也能呈現出很好地內容結構、代碼結構 : 爲了裸奔時好看;
用戶體驗:例如title、 alt 用於解釋名詞或解釋圖片信息、 label 標籤的活用;
有利於SEO:和搜索引擎創建良好溝通,有助於爬蟲抓取更多的有效信息:爬蟲依賴於標籤來肯定上下文和各個關鍵字的權重;
方便其餘設備解析(如屏幕閱讀器、盲人閱讀器、移動設備)以意義的方式來渲染網頁;
便於團隊開發和維護,語義化更具可讀性,是下一步吧網頁的重要動向,遵循W3C標準的團隊都遵循這個標準,能夠減小差別化。
(3) 語義化標籤
<header></header>
<footer></footer>
<nav></nav>
<section></section>
<article></article> :用來在頁面中表示一套結構完整且獨立的內容部分
<aslde></aside> :主題的附屬信息 ( 用途很廣,主要就是一個附屬內容 ) ,若是 article 裏面爲一篇文章的話,那麼文章的做者以及信息內容就是這篇文章的附屬內容了
<figure></figure>:媒體元素,好比一些視頻,圖片啊等等
<datalist></datalist>:選項列表,與 input 元素配合使用,來定義 input 可能的值
<details></details>:用於描述文檔或者文檔某個部分的細節 ~ 默認屬性爲 open~
ps:配合 summary 一塊兒使用
十一、link和@import的區別?
HTML代碼
<link rel='stylesheet' rev='stylesheet' href='CSS文件 ' type='text/css' media='all' />
<style type='text/css' media='screen'>
@import url('CSS文件 ');
</style>
二者都是外部引用CSS的方式,可是存在必定的區別:
(1)link 是 XHTML 標籤,除了加載 CSS 外,還能夠定義 RSS 等其餘事務; @import 屬於 CSS 範疇,只能加載 CSS 。
(2)link 引用 CSS 時,在頁面載入時同時加載; @import 須要頁面網頁徹底載入之後加載。
(3)link 是 XHTML 標籤,無兼容問題; @import 是在 CSS2.1 提出的,低版本的瀏覽器不支持。
(4)link 支持使用 Javascript 控制 DOM 去改變樣式;而 @import 不支持。
十二、說說你對SVG理解?
SVG可縮放矢量圖形( Scalable Vector Graphics )是基於可擴展標記語言( XML ),用於描述二維矢量圖形的一種圖形格式。SVG 是 W3C('World Wide Web ConSortium' 即 ' 國際互聯網標準組織 ') 在 2000 年 8 月制定的一種新的二維矢量圖形格式,也是規範中的網絡矢量圖形標準。 SVG 嚴格聽從 XML 語法,並用文本格式的描述性語言來描述圖像內容,所以是一種和圖像分辨率無關的矢量圖形格式。 SVG 於 2003 年 1 月 14 日成爲 W3C 推薦標準。
特色:
(1)任意放縮
用戶能夠任意縮放圖像顯示,而不會破壞圖像的清晰度、細節等。
(2)文本獨立
SVG圖像中的文字獨立於圖像,文字保留可編輯和可搜尋的狀態。也不會再有字體的限制,用戶系統即便沒有安裝某一字體,也會看到和他們製做時徹底相同的畫面。
(3)較小文件
整體來說,SVG文件比那些 GIF 和 JPEG 格式的文件要小不少,於是下載也很快。
(4)超強顯示效果
SVG圖像在屏幕上老是邊緣清晰,它的清晰度適合任何屏幕分辨率和打印分辨率。
(5)超級顏色控制
SVG圖像提供一個 1600 萬種顏色的調色板,支持 ICC 顏色描述文件標準、 RGB 、線 X 填充、漸變和蒙版。
(6)交互 X 和智能化。 SVG 面臨的主要問題一個是如何和已經佔有重要市場份額的矢量圖形格式 Flash 競爭的問題,另外一個問題就是 SVG 的本地運行環境下的廠家支持程度。
瀏覽器支持:
Internet Explorer9,火狐,谷歌 Chrome , Opera 和 Safari 都支持 SVG 。
IE8和早期版本都須要一個插件 - 如 Adobe SVG 瀏覽器,這是免費提供的。
1三、HTML全局屬性(global attribute)有哪些?
(1)accesskey:設置快捷鍵,提供快速訪問元素如aaa在windows下的firefox中按alt + shift + a可激活元素
(2)class:爲元素設置類標識,多個類名用空格分開,CSS和javascript可經過class屬性獲取元素
(3)contenteditable: 指定元素內容是否可編輯
(4)contextmenu: 自定義鼠標右鍵彈出菜單內容
(5)data-*: 爲元素增長自定義屬性
(6)dir: 設置元素文本方向
(7)draggable: 設置元素是否可拖拽
(8)dropzone: 設置元素拖放類型
(9)id: 元素id,文檔內惟一
(10)lang: 元素內容的的語言
(11)spellcheck: 是否啓動拼寫和語法檢查
(12)style: 行內css樣式
(13)tabindex: 設置元素能夠得到焦點,經過tab能夠導航
(14)title: 元素相關的建議信息
(15)translate: 元素和子孫節點內容是否須要本地化
1四、說說超連接target屬性的取值和做用?
target這個屬性指定所連接的頁面在瀏覽器窗口中的打開方式。
它的參數值主要有:
(1)_blank :在新瀏覽器窗口中打開連接文件
(2)_parent :將連接的文件載入含有該連接框架的父框架集或父窗口中。若是含有該連接的框架不是嵌套的,則在瀏覽器全屏窗口中載入連接的文件,就象 _self 參數一。
(3)_self :在同一框架或窗口中打開所連接的文檔。此參數爲默認值,一般不用指定。可是我不太理解。
(4)_top :在當前的整個瀏覽器窗口中打開所連接的文檔,於是會刪除全部框架。
1五、`data-`屬性的做用是什麼?
(1)`data-`爲前端開發者提供自定義的屬性,這些屬性集能夠經過對象的 `dataset` 屬性獲取,不支持該屬性的瀏覽器能夠經過 `getAttribute` 方法獲取。
(2)須要注意的是:`data-`以後的以連字符分割的多個單詞組成的屬性,獲取的時候使用駝峯風格。並非全部的瀏覽器都支持 .`dataset` 屬性,測試的瀏覽器中只有 Chrome 和 Opera 支持。
即:當沒有合適的屬性和元素時,自定義的 data 屬性是可以存儲頁面或 App 的私有的自定義數據。
1六、介紹一下你對瀏覽器內核的理解?
(1)主要分紅兩部分:渲染引擎(layout engineer或 Rendering Engine) 和 JS 引擎。
(2)渲染引擎:負責取得網頁的內容(HTML、 XML 、圖像等等)、整理訊息(例如加入 CSS 等),以及計算網頁的顯示方式,而後會輸出至顯示器或打印機。瀏覽器的內核的不一樣對於網頁的語法解釋會有不一樣,因此渲染的效果也不相同。全部網頁瀏覽器、電子郵件客戶端以及其它須要編輯、顯示網絡內容的應用程序都須要內核。
(3)JS引擎則:解析和執行 javascript 來實現網頁的動態效果。
(4)最開始渲染引擎和JS引擎並無區分的很明確,後來 JS 引擎愈來愈獨立,內核就傾向於只指渲染引擎。
1七、iframe有那些缺點?
(1)iframe會阻塞主頁面的 Onload 事件;
(2)搜索引擎的檢索程序沒法解讀這種頁面,不利於 SEO;
(3)iframe和主頁面共享鏈接池,而瀏覽器對相同域的鏈接有限制,因此會影響頁面的並行加載。
若是須要使用 iframe ,最好是經過 javascript 動態給iframe添加 src 屬性值,這樣能夠繞開以上兩個問題。
1八、Label的做用是什麼,是怎麼用的?
(1)做用:label標籤來定義表單控制間的關係 , 當用戶選擇該標籤時,瀏覽器會自動將焦點轉到和標籤相關的表單控件上。
(2)使用實例:
<label for='Name'>Number:</label>
<input type='text' name='Name' id='Name'/>
<label>Date: <input type='text' name='B'/></label>
1九、如何實現瀏覽器內多個標籤頁之間的通訊?
(1)WebSocket、 SharedWorker ;
(2)也能夠調用localstorage、 cookies 等本地存儲方式;
(3)localstorage另外一個瀏覽上下文裏被添加、修改或刪除時,它都會觸發一個事件,
(4)經過監聽事件,控制它的值來進行頁面信息通訊;
注意quirks: Safari 在無痕模式下設置 localstorge 值時會拋出 QuotaExceededError 的異常;
20、如何在頁面上實現一個圓形的可點擊區域?
(1)map+area 或者 svg
(2)border-radius
(3)純 js 實現 須要求一個點在不在圓上簡單算法、獲取鼠標座標等等
2一、title與h3的區別、b與strong的區別、i與em的區別?
(1)title屬性沒有明確意義只表示是個標題, h3 則表示層次明確的標題,對頁面信息的抓取也有很大的影響;
(2)strong是標明重點內容,有語氣增強的含義,使用閱讀設備閱讀網絡時: <strong> 會重讀,而 <b> 是展現強調內容。
(3)i內容展現爲斜體, em 表示強調的文本;
ps:
(1)Physical Style Elements -- 天然樣式標籤:b, i, u, s, pre
(2)Semantic Style Elements -- 語義樣式標籤:strong, em, ins, del, code
(3)應該準確使用語義樣式標籤, 但不能濫用 , 若是不能肯定時首選使用天然樣式標籤。
2二、實現不使用 border 畫出1px高的線,在不一樣瀏覽器的標準模式與怪異模式下都能保持一致的效果?
<div style='height:1px;overflow:hidden;background:red'></div>
2三、HTML5標籤的做用?
(1)使Web頁面的內容更加有序和規範
(2)使搜索引擎更加容易按照HTML5規則識別出有效的內容
(3)使Web頁面更接近於一種數據字段和表
2四、簡述一下src與href的區別?
(1)src用於替換當前元素, href 用於在當前文檔和引用資源之間確立聯繫。
(2)src是 source 的縮寫,指向外部資源的位置,指向的內容將會嵌入到文檔中當前標籤所在位置;在請求 src 資源時會將其指向的資源下載並應用到文檔內,例如 js 腳本, img 圖片和 frame 等元素。
實例:
(1)<script src ='js.js'></script>
當瀏覽器解析到該元素時,會暫停其餘資源的下載和處理,直到將該資源加載、編譯、執行完畢,圖片和框架等元素也如此,相似於將所指向資源嵌入當前標籤內。這也是爲何將js腳本放在底部而不是頭部。
(2)<link href='common.css' rel='stylesheet'/>
href是 Hypertext Reference 的縮寫,指向網絡資源所在位置,創建和當前元素(錨點)或當前文檔(連接)之間的連接,若是咱們在文檔中添加那麼瀏覽器會識別該文檔爲css文件,就會並行下載資源而且不會中止對當前文檔的處理。這也是爲何建議使用 link 方式來加載 css ,而不是使用 @import 方式。
2五、談談你對canvas的理解?
(1)canvas是HTML5中新增一個HTML5標籤與操做canvas的javascript API,它能夠實如今網頁中完成動態的2D與3D圖像技術。
(2)canvas標記和 SVG以及 VML 之間的一個重要的不一樣是,有一個基於 JavaScript 的繪圖 API,而 SVG 和 VML 使用一個 XML 文檔來描述繪圖。SVG 繪圖很容易編輯與生成,但功能明顯要弱一些。 canvas能夠完成動畫、遊戲、圖表、圖像處理等原來須要Flash完成的一些功能。
2六、消息推送的實現
(1)短輪詢:客戶端定時向服務器發送Ajax請求,服務器接到請求後立刻返回響應信息並關閉鏈接。
優勢:後端程序編寫比較容易。
缺點:請求中有大半是無用,浪費帶寬和服務器資源。
實例:適於小型應用。
(2)長輪詢:客戶端向服務器發送Ajax請求,服務器接到請求後 hold 住鏈接,直到有新消息才返回響應信息並關閉鏈接,客戶端處理完響應信息後再向服務器發送新的請求。
優勢:在無消息的狀況下不會頻繁的請求,耗費資小。
缺點:服務器hold鏈接會消耗資源,返回數據順序無保證,難於管理維護。 Comet 異步的 ashx ,
實例:WebQQ、 Hi 網頁版、 Facebook IM 。
(3)長鏈接:在頁面裏嵌入一個隱蔵iframe,將這個隱蔵 iframe 的 src 屬性設爲對一個長鏈接的請求或是採用 xhr 請求,服務器端就能源源不斷地往客戶端輸入數據。
優勢:消息即時到達,不發無用請求;管理起來也相對便。
缺點:服務器維護一個長鏈接會增長開銷。
實例:Gmail聊天
(4)Flash Socket:在頁面中內嵌入一個使用了 Socket 類的 Flash 程序 JavaScript 經過調用此 Flash 程序提供的 Socket 接口與服務器端的 Socket 接口進行通訊, JavaScript 在收到服務器端傳送的信息後控制頁面的顯示。
優勢:實現真正的即時通訊,而不是僞即時。
缺點:客戶端必須安裝Flash插件;非 HTTP 協議,沒法自動穿越防火牆。
實例:網絡互動遊戲。
(5)Websocket:WebSocket是 HTML5 開始提供的一種瀏覽器與服務器間進行全雙工通信的網絡技術。依靠這種技術能夠實現客戶端和服務器端的長鏈接,雙向實時通訊。
優勢:事件驅動、異步、可以實現真正意義上的推送功能
缺點:使用 ws 或者 wss 協議的客戶端 socket、少部分瀏覽器不支持,瀏覽器支持的程度與方式有區別。
2七、img的title和alt有什麼區別?
Alt 用於圖片沒法加載時顯示 Title 爲該屬性提供信息,一般當鼠標滑動到元素上的時候顯示
2八、表單的基本組成部分有哪些,表單的主要用途是什麼?
組成:表單標籤、表單域、表單按鈕
(1)表單標籤:這裏麪包含了處理表單數據所用 CGI 程序的 URL, 以及數據提交到服務器的方法。
(2)表單域:包含了文本框、密碼框、隱藏域、多行文本框、複選框、單選框、下拉選擇框、和文件上傳框等。
(3)表單按鈕:包括提交按鈕,復位按鈕和通常按鈕;用於將數據傳送到服務器上的 CGI 腳本或者取消輸入,還能夠用表單按鈕來控制其餘定義了處理腳本的處理工做。
主要用途:表單在網頁中主要負責數據採集的功能,和向服務器傳送數據。
2九、表單提交中Get和Post方式的區別?
(1)get 是從服務器上獲取數據, post 是向服務器傳送數據。
(2)get 是把參數數據隊列加到提交表單的 ACTION 屬性所指的 URL 中,值和表單內各個字段一一對應,在 URL 中能夠看到。 post 是經過 HTTP post 機制,將表單內各個字段與其內容放置在 HTML HEADER 內一塊兒傳送到 ACTION 屬性所指的 URL 地址 , 用戶看不到這個過程。
(3)對於 get 方式,服務器端用 Request.QueryString 獲取變量的值,對於 post 方式,服務器端用 Request.Form 獲取提交的數據。
(4)get 傳送的數據量較小,不能大於 2KB 。 post 傳送的數據量較大,通常被默認爲不受限制。但理論上, IIS4 中最大量爲 80KB , IIS5 中爲 100KB 。
(5)get 安全性低, post 安全性較高。
30、HTML5 有哪些新增的表單元素?
(1)datalist
(2)datetime
(3)output
(4)keygen
(5)date
(6)month
(7)week
(8)time
(9)color
(10)number
(11)range
(12)email
(13)Url
3一、HTML5 廢棄了哪些 HTML4 標籤?
(1)frame
(2)frameset
(3)noframe
(4)applet
(5)big
(6)center
(7)basefront
3二、HTML5 標準提供了哪些新的 API?
(1)Media API
(2)Text Track API
(3)Application Cache API
(4)User Interaction
(5)Data Transfer API
(6)Command API
(7)Constraint Validation API
(8)History API
3三、HTML5 應用程序緩存和瀏覽器緩存有什麼區別?
應用程序緩存是 HTML5 的重要特性之一,提供了離線使用的功能,讓應用程序能夠獲取本地的網站內容,例如 HTML 、 CSS 、圖片以及 JavaScript 。這個特性能夠提升網站性能,它的實現藉助於 manifest 文件,以下:
<!doctype html>
<html manifest=」example.appcache」>
…..
</html>
與傳統瀏覽器緩存相比,它不強制用戶訪問的網站內容被緩存。
3四、HTML5 Canvas 元素有什麼用?
Canvas 元素用於在網頁上繪製圖形,該元素標籤強大之處在於能夠直接在 HTML 上進行圖形操做,
3五、除了 audio 和 video,HTML5 還有哪些媒體標籤?
(1)<embed> 標籤訂義嵌入的內容,好比插件。
(2)<source> 對於定義多個數據源頗有用。
(3)<track> 標籤爲諸如 video 元素之類的媒介規定外部文本軌道。 用於規定字幕文件或其餘包含文本的文件,當媒介播放時,這些文件是可見的。
3六、HTML5 中如何嵌入視頻?
和音頻相似,HTML5 支持 MP4 、 WebM 和 Ogg 格式的視頻,下面是簡單示例:
<video width=」 450 ″ height= 」 340 ″ controls>
<source src=」 jamshed.mp4 ″ type= 」 video/mp4 ″ >
Your browser does’ nt support video embedding feature.
</video>
3七、HTML5 中如何嵌入音頻?
HTML5 支持 MP3 、 Wav 和 Ogg 格式的音頻,下面是在網頁中嵌入音頻的簡單示例:
<audio controls>
<source src=」 jamshed.mp3 ″ type= 」 audio/mpeg 」 >
Your browser does’ nt support audio embedding feature.
</audio>
3八、新的 HTML5 文檔類型和字符集是?
(1)HTML5 文檔類型很簡單:<!doctype html>
(2)HTML5 使用 UTF-8 編碼示例:<meta charset=」 UTF-8 ″ >
3九、解釋一下CSS的盒子模型?
回答一:
(1)標準的css盒子模型:寬度=內容的寬度+邊框的寬度+加上內邊具的寬度
(2)網頁設計中常聽的屬性名:內容(content)、填充(padding)、邊框(border)、邊界(margin), CSS盒子模式都具有這些屬性。
(3)這些屬性咱們能夠把它轉移到咱們平常生活中的盒子(箱子)上來理解,平常生活中所見的盒子也就是能裝東西的一種箱子,也具備這些屬性,因此叫它盒子模式。CSS盒子模型就是在網頁設計中常常用到的CSS技術所使用的一種思惟模型。
回答二:
盒子模型也有人稱爲框模型,HTML中的多數元素都會在瀏覽器中生成一個矩形的區域,每一個區域包含四個組成部分,從外向內依次是:外邊距(Margin)、邊框(Border)、內邊距(Padding)和內容(Content),其實盒子模型有兩種,分別是 ie 盒子模型和標準 w3c 盒子模型,加上了doctype聲明,讓全部瀏覽器都會採用標準 w3c 盒子模型去解釋你的盒子。
40、請你說說CSS有什麼特殊性?(優先級、計算特殊值)
優先級
(1)同類型,同級別的樣式後者先於前者
(2)ID > 類樣式 > 標籤 > *
(3)內聯>ID選擇器>僞類>屬性選擇器>類選擇器>標籤選擇器>通用選擇器(*)>繼承的樣式
(4)具體 > 泛化的,特殊性即css優先級
(5)近的 > 遠的 (內嵌樣式 > 內部樣式表 > 外聯樣式表)
內嵌樣式:內嵌在元素中,<span style="color:red">span</span>
內部樣式表:在頁面中的樣式,寫在<style></style>中的樣式
外聯樣式表:單獨存在一個css文件中,經過link引入或import導入的樣式
(6)!important 權重最高,比 inline style 還要高
計算特殊性值
important > 內嵌 > ID > 類 > 標籤 | 僞類 | 屬性選擇 > 僞對象 > 繼承 > 通配符
權重、特殊性計算法:
CSS樣式選擇器分爲4個等級,a、b、c、d
(1)若是樣式是行內樣式(經過Style=「」定義),那麼a=1,1,0,0,0
(2)b爲ID選擇器的總數 0,1,0,0
(3)c爲屬性選擇器,僞類選擇器和class類選擇器的數量。0,0,1,0
(4)d爲標籤、僞元素選擇器的數量 0,0,0,1
(5)!important 權重最高,比 inline style 還要高
4一、要動態改變層中內容可使用的方法?
document.innerHTML、document.innerText
4二、常見瀏覽器兼容性問題與解決方案?
(1)瀏覽器兼容問題一:不一樣瀏覽器的標籤默認的外補丁和內補丁不一樣
問題症狀:隨便寫幾個標籤,不加樣式控制的狀況下,各自的margin 和padding差別較大。
碰到頻率:100%
解決方案:CSS裏 *{margin:0;padding:0;}
備註:這個是最多見的也是最易解決的一個瀏覽器兼容性問題,幾乎全部的CSS文件開頭都會用通配符*來設置各個標籤的內外補丁是0。
(2)瀏覽器兼容問題二:塊屬性標籤float後,又有橫行的margin狀況下,在IE6顯示margin比設置的大
問題症狀:常見症狀是IE6中後面的一塊被頂到下一行
碰到頻率:90%(稍微複雜點的頁面都會碰到,float佈局最多見的瀏覽器兼容問題)
解決方案:在float的標籤樣式控制中加入 display:inline;將其轉化爲行內屬性
備註:咱們最經常使用的就是div+CSS佈局了,而div就是一個典型的塊屬性標籤,橫向佈局的時候咱們一般都是用div float實現的,橫向的間距設置若是用margin實現,這就是一個必然會碰到的兼容性問題。
(3)瀏覽器兼容問題三:設置較小高度標籤(通常小於10px),在IE6,IE7,遨遊中高度超出本身設置高度
問題症狀:IE六、7和遨遊裏這個標籤的高度不受控制,超出本身設置的高度
碰到頻率:60%
解決方案:給超出高度的標籤設置overflow:hidden;或者設置行高line-height 小於你設置的高度。
備註:這種狀況通常出如今咱們設置小圓角背景的標籤裏。出現這個問題的緣由是IE8以前的瀏覽器都會給標籤一個最小默認的行高的高度。即便你的標籤是空的,這個標籤的高度仍是會達到默認的行高。
(4)瀏覽器兼容問題四:行內屬性標籤,設置display:block後採用float佈局,又有橫行的margin的狀況,IE6間距bug
問題症狀:IE6裏的間距比超過設置的間距
碰到概率:20%
解決方案 : 在display:block;後面加入display:inline;display:table;
備註:行內屬性標籤,爲了設置寬高,咱們須要設置display:block;(除了input標籤比較特殊)。在用float佈局並有橫向的margin後,在IE6下,他就具備了塊屬性float後的橫向margin的bug。不過由於它自己就是行內屬性標籤,因此咱們再加上display:inline的話,它的高寬就不可設了。這時候咱們還須要在display:inline後面加入display:talbe。
(5) 瀏覽器兼容問題五:圖片默認有間距
問題症狀:幾個img標籤放在一塊兒的時候,有些瀏覽器會有默認的間距,加了問題一中提到的通配符也不起做用。
碰到概率:20%
解決方案:使用float屬性爲img佈局
備註 : 由於img標籤是行內屬性標籤,因此只要不超出容器寬度,img標籤都會排在一行裏,可是部分瀏覽器的img標籤之間會有個間距。去掉這個間距使用float是正道。(個人一個學生使用負margin,雖然能解決,但負margin自己就是容易引發瀏覽器兼容問題的用法,因此我禁止他們使用)
(6) 瀏覽器兼容問題六:標籤最低高度設置min-height不兼容
問題症狀:由於min-height自己就是一個不兼容的CSS屬性,因此設置min-height時不能很好的被各個瀏覽器兼容
碰到概率:5%
解決方案:若是咱們要設置一個標籤的最小高度200px,須要進行的設置爲:{min-height:200px; height:auto !important; height:200px; overflow:visible;}
備註:在B/S系統前端開時,有不少狀況下咱們又這種需求。當內容小於一個值(如300px)時。容器的高度爲300px;當內容高度大於這個值時,容器高度被撐高,而不是出現滾動條。這時候咱們就會面臨這個兼容性問題。
(7)瀏覽器兼容問題七:透明度的兼容CSS設置
通常在ie中用的是filter:alpha(opacity=0);這個屬性來設置div或者是塊級元素的透明度,而在firefox中,通常就是直接使用opacity:0,對於兼容的,通常的作法就是在書寫css樣式的將2個都寫上就行,就能實現兼容
4三、列出display的值並說明他們的做用?
(1)display: none | inline | block | list-item | inline-block | table | inline-table | table-caption | table-cell | table-row | table-row-group | table-column | table-column-group | table-footer-group | table-header-group | run-in | box | inline-box | flexbox | inline-flexbox | flex | inline-flex
默認值:inline
(1)none: 隱藏對象。與visibility屬性的hidden值不一樣,其不爲被隱藏的對象保留其物理空間
(2)inline: 指定對象爲內聯元素。
(3)block: 指定對象爲塊元素。
(4)list-item: 指定對象爲列表項目。
(5)inline-block: 指定對象爲內聯塊元素。(CSS2)
(6)table: 指定對象做爲塊元素級的表格。類同於html標籤<table>(CSS2)
(7)inline-table: 指定對象做爲內聯元素級的表格。類同於html標籤<table>(CSS2)
(8)table-caption: 指定對象做爲表格標題。類同於html標籤<caption>(CSS2)
(9)table-cell: 指定對象做爲表格單元格。類同於html標籤<td>(CSS2)
(10)table-row: 指定對象做爲表格行。類同於html標籤<tr>(CSS2)
(11)table-row-group: 指定對象做爲表格行組。類同於html標籤<tbody>(CSS2)
(12)table-column: 指定對象做爲表格列。類同於html標籤<col>(CSS2)
(13)table-column-group: 指定對象做爲表格列組顯示。類同於html標籤<colgroup>(CSS2)
(14)table-header-group: 指定對象做爲表格標題組。類同於html標籤<thead>(CSS2)
(15)table-footer-group: 指定對象做爲表格腳註組。類同於html標籤<tfoot>(CSS2)
(16)run-in: 根據上下文決定對象是內聯對象仍是塊級對象。(CSS3)
(17)box: 將對象做爲彈性伸縮盒顯示。(伸縮盒最老版本)(CSS3)
(18)inline-box: 將對象做爲內聯塊級彈性伸縮盒顯示。(伸縮盒最老版本)(CSS3)
(19)flexbox: 將對象做爲彈性伸縮盒顯示。(伸縮盒過渡版本)(CSS3)
(20)inline-flexbox: 將對象做爲內聯塊級彈性伸縮盒顯示。(伸縮盒過渡版本)(CSS3)
(21)flex: 將對象做爲彈性伸縮盒顯示。(伸縮盒最新版本)(CSS3)
(22)inline-flex: 將對象做爲內聯塊級彈性伸縮盒顯示。(伸縮盒最新版本)(CSS3)
4四、如何居中div, 如何居中一個浮動元素?
一、非浮動元素居中:能夠設置 margin:0 auto 令其居中, 定位 ,父級元素text-algin:center等等
二、浮動元素居中:
(1)設置當前div的寬度,而後設置margin-left:50%; position:relative; left:-250px;其中的left是寬度的一半。
(2)父元素和子元素同時左浮動,而後父元素相對左移動50%,再而後子元素相對左移動-50%。
(3)position定位等等。
4五、請列舉幾種清除浮動的方法(至少兩種)?
(1)、父級div定義 height
原理:父級div手動定義height,就解決了父級div沒法自動獲取到高度的問題。
優勢:簡單、代碼少、容易掌握
缺點:只適合高度固定的佈局,要給出精確的高度,若是高度和父級div不同時,會產生問題
建議:不推薦使用,只建議高度固定的佈局時使用
(2)、結尾處加空div標籤 clear:both
原理:添加一個空div,利用css提升的clear:both清除浮動,讓父級div能自動獲取到高度
優勢:簡單、代碼少、瀏覽器支持好、不容易出現怪問題
缺點:很多初學者不理解原理;若是頁面浮動佈局多,就要增長不少空div,讓人感受很很差
建議:不推薦使用,但此方法是之前主要使用的一種清除浮動方法
(3)、父級div定義 僞類:after 和 zoom
原理:IE8以上和非IE瀏覽器才支持:after,原理和方法2有點相似,zoom(IE轉有屬性)可解決ie6,ie7浮動問題
優勢:瀏覽器支持好、不容易出現怪問題(目前:大型網站都有使用,如:騰迅,網易,新浪等等)
缺點:代碼多、很多初學者不理解原理,要兩句代碼結合使用才能讓主流瀏覽器都支持。
建議:推薦使用,建議定義公共類,以減小CSS代碼。
(4)、父級div定義 overflow:hidden
原理:必須定義width或zoom:1,同時不能定義height,使用overflow:hidden時,瀏覽器會自動檢查浮動區域的高度
優勢:簡單、代碼少、瀏覽器支持好
缺點:不能和position配合使用,由於超出的尺寸的會被隱藏。
建議:只推薦沒有使用position或對overflow:hidden理解比較深的朋友使用。
(5)、父級div定義 overflow:auto
原理:必須定義width或zoom:1,同時不能定義height,使用overflow:auto時,瀏覽器會自動檢查浮動區域的高度
優勢:簡單、代碼少、瀏覽器支持好
缺點:內部寬高超過父級div時,會出現滾動條。
建議:不推薦使用,若是你須要出現滾動條或者確保你的代碼不會出現滾動條就使用吧。
4六、block,inline和inlinke-block細節對比?
一、display:block
(1)block元素會獨佔一行,多個block元素會各自新起一行。默認狀況下,block元素寬度自動填滿其父元素寬度。
(2)block元素能夠設置width,height屬性。塊級元素即便設置了寬度,仍然是獨佔一行。
(3)block元素能夠設置margin和padding屬性。
二、display:inline
(1)inline元素不會獨佔一行,多個相鄰的行內元素會排列在同一行裏,直到一行排列不下,纔會新換一行,其寬度隨元素的內容而變化。
(2)inline元素設置width,height屬性無效。
(3)inline元素的margin和padding屬性,水平方向的padding-left, padding-right, margin-left, margin-right都產生邊距效果;但豎直方向的padding-top, padding-bottom, margin-top, margin-bottom不會產生邊距效果。
三、display:inline-block
(1)簡單來講就是將對象呈現爲inline對象,可是對象的內容做爲block對象呈現。以後的內聯對象會被排列在同一行內。好比咱們能夠給一個link(a元素)inline-block屬性值,使其既具備block的寬度高度特性又具備inline的同行特性。
四、補充說明
(1)通常咱們會用display:block,display:inline或者display:inline-block來調整元素的佈局級別,其實display的參數遠遠不止這三種,僅僅是比較經常使用而已。
(2)IE(低版本IE)原本是不支持inline-block的,因此在IE中對內聯元素使用display:inline-block,理論上IE是不識別的,但使用display:inline-block在IE下會觸發layout,從而使內聯元素擁有了display:inline-block屬性的表象。
4七、什麼叫優雅降級和漸進加強?
(1)優雅降級: Web站點在全部新式瀏覽器中都能正常工做,若是用戶使用的是老式瀏覽器,則代碼會檢查以確認它們是否能正常工做。因爲IE獨特的盒模型佈局問題,針對不一樣版本的IE的hack實踐過優雅降級了,爲那些沒法支持功能的瀏覽器增長候選方案,使之在舊式瀏覽器上以某種形式降級體驗卻不至於徹底失效.
(2)漸進加強: 從被全部瀏覽器支持的基本功能開始,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增長無害於基礎瀏覽器的額外樣式和功能的。當瀏覽器支持時,它們會自動地呈現出來併發揮做用。
4八、你有哪些性能優化的方法?
(1)減小http請求次數:CSS Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網頁Gzip,CDN託管,data緩存 ,圖片服務器。
(2)前端模板 JS+數據,減小因爲HTML標籤致使的帶寬浪費,前端用變量保存AJAX請求結果,每次操做本地變量,不用請求,減小請求次數
(3)用innerHTML代替DOM操做,減小DOM操做次數,優化javascript性能。
(4)當須要設置的樣式不少時設置className而不是直接操做style。
(5)少用全局變量、緩存DOM節點查找的結果。減小IO讀取操做。
(6)避免使用CSS Expression(css表達式)又稱Dynamic properties(動態屬性)。
(7)圖片預加載,將樣式表放在頂部,將腳本放在底部 加上時間戳。
4九、爲何要初始化CSS樣式?
由於瀏覽器的兼容問題,不一樣瀏覽器對有些標籤的默認值是不一樣的,若是沒對CSS初始化每每會出現瀏覽器之間的頁面顯示差別。
50、談談你對CSS中刻度的認識?
一、特殊值0能夠省略單位。例如:margin:0px能夠寫成margin:0
二、一些屬性可能容許有負長度值,或者有必定的範圍限制。若是不支持負長度值,那應該變換到可以被支持的最近的一個長度值。
三、長度單位包括:相對單位和絕對單位。
(1)相對長度單位有: em, ex, ch, rem, vw, vh, vmax, vmin
(2)絕對長度單位有: cm, mm, q, in, pt, pc, px
(3)絕對長度單位:1in = 2.54cm = 25.4 mm = 72pt = 6pc = 96px
(4)文本相對長度單位:em、rem(CSS3)
(5)相對長度單位是相對於當前對象內文本的字體尺寸,如當前對行內文本的字體尺寸未被人爲設置,則相對於瀏覽器的默認字體尺寸。(相對父元素的字體大小倍數)
5一、請你說說box-sizing屬性的的用法?
設置或檢索對象的盒模型組成模式
(1)box-sizing:content-box: padding和border不被包含在定義的width和height以內。對象的實際寬度等於設置的width值和border、padding之和,即 ( Element width = width + border + padding,但佔有頁面位置還要加上margin ) 此屬性表現爲標準模式下的盒模型。
(2)box-sizing:border-box: padding和border被包含在定義的width和height以內。對象的實際寬度就等於設置的width值,即便定義有border和padding也不會改變對象的實際寬度,即 ( Element width = width ) 此屬性表現爲怪異模式下的盒模型。
5二、瀏覽器標準模式和怪異模式之間的區別是什麼?
在「標準模式」(Standards Mode) 頁面按照 HTML 與 CSS 的定義渲染,而在「怪異模式」(Quirks Mode)就是瀏覽器爲了兼容很早以前針對舊版本瀏覽器設計、並未嚴格遵循 W3C 標準的網頁而產生的一種頁面渲染模式。瀏覽器基於頁面中文件類型描述的存在以決定採用哪一種渲染模式;若是存在一個完整的`DOCTYPE`則瀏覽器將會採用標準模式,而若是它缺失則瀏覽器將會採用怪異模式。
強烈建議閱讀加深理解:[怪異模式(Quirks Mode)對 HTML 頁面的影響](http://www.ibm.com/developerworks/cn/web/1310_shatao_quirks/),這裏列下瀏覽器標準模式和怪異模式的區別:
(1)盒模型:
在怪異模式下,盒模型爲IE盒模型而非標準模式下的W3C
盒模型:在 IE 盒模型中,
box width = content width + padding left + padding right + border left + border right,
box height = content height + padding top + padding bottom + border top + border bottom。
而在 W3C 標準的盒模型中,box 的大小就是 content 的大小。
(2)圖片元素的垂直對齊方式:
對於`inline`元素和`table-cell`元素,在 IE Standards Mode 下 vertical-align 屬性默認取值爲`baseline`。而當`inline`元素的內容只有圖片時,如`table`的單元格`table-cell`。在 IE Quirks Mode 下,`table`單元格中的圖片的 `vertical-align` 屬性默認爲`bottom`,所以,在圖片底部會有幾像素的空間。
(3)`<table>`元素中的字體:
CSS 中,描述`font`的屬性有`font-family`,`font-size`,`font-style`,`font-weigh`,上述屬性都是能夠繼承的。而在 IE Quirks Mode 下,對於`table` 元素,字體的某些屬性將不會從`body`或其餘封閉元素繼承到`table`中,特別是 `font-size`屬性。
(4)內聯元素的尺寸:
在 IE Standards Mode 下,non-replaced inline 元素沒法自定義大小,而在 IE Quirks Mode 下,定義這些元素的`width`和`height` 屬性,可以影響該元素顯示的大小尺寸。
(5)元素的百分比高度:
a、CSS 中對於元素的百分比高度規定以下,百分比爲元素包含塊的高度,不可爲負值。若是包含塊的高度沒有顯式給出,該值等同於「auto」(即取決於內容的高度)。因此百分比的高度必須在父元素有聲明高度時使用。
b、當一個元素使用百分比高度時,在 IE Standards Mode 下,高度取決於內容的變化,而在 Quirks Mode 下,百分比高度則被正確應用。
(6)元素溢出的處理:
在 IE Standard Mode 下,`overflow`取默認值 `visible`,即溢出可見,這種狀況下,溢出內容不會被裁剪,呈如今元素框外。而在 Quirks Mode 下,該溢出被當作擴展`box`來對待,即元素的大小由其內容決定,溢出不會被裁剪,元素框自動調整,包含溢出內容。
5三、說說你對邊距摺疊的理解?
外邊距摺疊: 相鄰的兩個或多個外邊距 (margin) 在垂直方向會合併成一個外邊距(margin)
相鄰: 沒有被非空內容、padding、border 或 clear 分隔開的margin特性. 非空內容就是說這元素之間要麼是兄弟關係或者父子關係
垂直方向外邊距合併計算:
(1)參加摺疊的margin都是正值:取其中 margin 較大的值爲最終 margin 值。
(2)參與摺疊的 margin 都是負值:取的是其中絕對值較大的,而後,從 0 位置,負向位移。
(3)參與摺疊的 margin 中有正值,有負值:先取出負 margin 中絕對值中最大的,而後,和正 margin 值中最大的 margin 相加。
5四、內聯與塊級標籤有何區別?
Html中的標籤默認主要分爲兩大類型,一類爲塊級元素,另外一類是行內元素,許多人也把行內稱爲內聯,因此叫內聯元素,其實就是一個意思。爲了很好的佈局,必須理解它們間的區別。
5五、說說隱藏元素的方式有哪些?
(1)使用CSS的display:none,不會佔有原來的位置
(2)使用CSS的visibility:hidden,會佔有原來的位置
(3)使用HTML5中的新增屬性hidden="hidden",不會佔有原來的位置
5六、談談你對BFC與IFC的理解?(是什麼,如何產生,做用)
(1)、什麼是BFC與IFC
a、BFC(Block Formatting Context)即「塊級格式化上下文」, IFC(Inline Formatting Context)即行內格式化上下文。常規流(也稱標準流、普通流)是一個文檔在被顯示時最多見的佈局形態。一個框在常規流中必須屬於一個格式化上下文,你能夠把BFC想象成一個大箱子,箱子外邊的元素將不與箱子內的元素產生做用。
b、BFC是W3C CSS 2.1 規範中的一個概念,它決定了元素如何對其內容進行定位,以及與其餘元素的關係和相互做用。當涉及到可視化佈局的時候,Block Formatting Context提供了一個環境,HTML元素在這個環境中按照必定規則進行佈局。一個環境中的元素不會影響到其它環境中的佈局。好比浮動元素會造成BFC,浮動元素內部子元素的主要受該浮動元素影響,兩個浮動元素之間是互不影響的。也能夠說BFC就是一個做用範圍。
c、在普通流中的 Box(框) 屬於一種 formatting context(格式化上下文) ,類型能夠是 block ,或者是 inline ,但不能同時屬於這二者。而且, Block boxes(塊框) 在 block formatting context(塊格式化上下文) 裏格式化, Inline boxes(塊內框) 則在 Inline Formatting Context(行內格式化上下文) 裏格式化。
(2)、如何產生BFC
當一個HTML元素知足下面條件的任何一點,均可以產生Block Formatting Context:
a、float的值不爲none
b、overflow的值不爲visible
c、display的值爲table-cell, table-caption, inline-block中的任何一個
d、position的值不爲relative和static
CSS3觸發BFC方式則能夠簡單描述爲:在元素定位非static,relative的狀況下觸發,float也是一種定位方式。
(3)、BFC的做用與特色
a、不和浮動元素重疊,清除外部浮動,阻止浮動元素覆蓋
若是一個浮動元素後面跟着一個非浮動的元素,那麼就會產生一個重疊的現象。常規流(也稱標準流、普通流)是一個文檔在被顯示時最多見的佈局形態,當float不爲none時,position爲absolute、fixed時元素將脫離標準流。
5七、說說你對頁面中使用定位(position)的理解?
使用css佈局position很是重要,語法以下:
position:static | relative | absolute | fixed | center | page | sticky
默認值:static,center、page、sticky是CSS3中新增長的值。
(1)static
能夠認爲靜態的,默認元素都是靜態的定位,對象遵循常規流。此時4個定位偏移屬性不會被應用,也就是使用left,right,bottom,top將不會生效。
(2)relative
相對定位,對象遵循常規流,而且參照自身在常規流中的位置經過top,right,bottom,left這4個定位偏移屬性進行偏移時不會影響常規流中的任何元素。
(3)absolute
a、絕對定位,對象脫離常規流,此時偏移屬性參照的是離自身最近的定位祖先元素,若是沒有定位的祖先元素,則一直回溯到body元素。盒子的偏移位置不影響常規流中的任何元素,其margin不與其餘任何margin摺疊。
b、元素定位參考的是離自身最近的定位祖先元素,要知足兩個條件,第一個是本身的祖先元素,能夠是父元素也能夠是父元素的父元素,一直找,若是沒有則選擇body爲對照對象。第二個條件是要求祖先元素必須定位,通俗說就是position的屬性值爲非static都行。
(4)fixed
固定定位,與absolute一致,但偏移定位是以窗口爲參考。當出現滾動條時,對象不會隨着滾動。
(5)center
與absolute一致,但偏移定位是以定位祖先元素的中心點爲參考。盒子在其包含容器垂直水平居中。(CSS3)
(6)page
與absolute一致。元素在分頁媒體或者區域塊內,元素的包含塊始終是初始包含塊,不然取決於每一個absolute模式。(CSS3)
(7)sticky
對象在常態時遵循常規流。它就像是relative和fixed的合體,當在屏幕中時按常規流排版,當捲動到屏幕外時則表現如fixed。該屬性的表現是現實中你見到的吸附效果。(CSS3)
5八、如何解決多個元素重疊問題?
使用z-index屬性能夠設置元素的層疊順序
(1)語法:z-index: auto | <integer>
(2)默認值:auto
(3)適用於:定位元素。即定義了position爲非static的元素
(4)取值:
auto: 元素在當前層疊上下文中的層疊級別是0。元素不會建立新的局部層疊上下文,除非它是根元素。
整數: 用整數值來定義堆疊級別。能夠爲負值。 說明:
檢索或設置對象的層疊順序。
(5)z-index用於肯定元素在當前層疊上下文中的層疊級別,並肯定該元素是否建立新的局部層疊上下文。當多個元素層疊在一塊兒時,數字大者將顯示在上面。
5九、頁面佈局的方式有哪些?
方式:雙飛翼、多欄、彈性、流式、瀑布流、響應式佈局
(1)雙飛翼佈局
經典三列布局,也叫作聖盃佈局【Holy Grail of Layouts】是Kevin Cornell在2006年提出的一個佈局模型概念,在國內最先是由淘寶UED的工程師傳播開來,在中國也有叫法是雙飛翼佈局,它的佈局要求有幾點:
a、三列布局,中間寬度自適應,兩邊定寬;
b、中間欄要在瀏覽器中優先展現渲染;
c、容許任意列的高度最高;
d、要求只用一個額外的DIV標籤;
e、要求用最簡單的CSS、最少的HACK語句;
在不增長額外標籤的狀況下,聖盃佈局已經很是完美,聖盃佈局使用了相對定位,之後佈局是有侷限性的,並且寬度控制要改的地方也多。在淘寶UED(User Experience Design)探討下,增長多一個div就能夠不用相對佈局了,只用到了浮動和負邊距,這就是咱們所說的雙飛翼佈局。
(2)多欄佈局
a、欄柵格系統:就是利用浮動實現的多欄佈局,在bootstrap中用的很是多。
b、多列布局:柵格系統並無真正實現分欄效果(如word中的分欄),CSS3爲了知足這個要求增長了多列布局模塊
(3)彈性佈局(Flexbox)
CSS3引入了一種新的佈局模式——Flexbox佈局,即伸縮佈局盒模型(Flexible Box),用來提供一個更加有效的方式制定、調整和分佈一個容器裏項目佈局,即便它們的大小是未知或者動態的,這裏簡稱爲Flex。
Flexbox佈局經常使用於設計比較複雜的頁面,能夠輕鬆的實現屏幕和瀏覽器窗口大小發生變化時保持元素的相對位置和大小不變,同時減小了依賴於浮動佈局實現元素位置的定義以及重置元素的大小。
Flexbox佈局在定義伸縮項目大小時伸縮容器會預留一些可用空間,讓你能夠調節伸縮項目的相對大小和位置。例如,你能夠確保伸縮容器中的多餘空間平均分配多個伸縮項目,固然,若是你的伸縮容器沒有足夠大的空間放置伸縮項目時,瀏覽器會根據必定的比例減小伸縮項目的大小,使其不溢出伸縮容器。
綜合而言,Flexbox佈局功能主要具備如下幾點:
a、屏幕和瀏覽器窗口大小發生改變也能夠靈活調整佈局;
b、能夠指定伸縮項目沿着主軸或側軸按比例分配額外空間(伸縮容器額外空間),從而調整伸縮項目的大小;
c、能夠指定伸縮項目沿着主軸或側軸將伸縮容器額外空間,分配到伸縮項目以前、以後或之間;
d、能夠指定如何將垂直於元素佈局軸的額外空間分佈到該元素的周圍;
e、能夠控制元素在頁面上的佈局方向;
f、能夠按照不一樣於文檔對象模型(DOM)所指定排序方式對屏幕上的元素從新排序。也就是說能夠在瀏覽器渲染中不按照文檔流前後順序重排伸縮項目順序。
(4)瀑布流佈局
瀑布流佈局是流式佈局的一種。是當下比較流行的一種網站頁面佈局,視覺表現爲良莠不齊的多欄佈局,隨着頁面滾動條向下滾動,這種佈局還會不斷加載數據塊並附加至當前尾部。最先採用此佈局的網站是Pinterest,逐漸在國內流行開來。
優勢
a、有效的下降了界面複雜度,節省了空間:咱們再也不須要臃腫複雜的頁碼導航連接或按鈕了。
b、對觸屏設備來講,交互方式更符合直覺:在移動應用的交互環境當中,經過向上滑動進行滾屏的操做已經成爲最基本的用戶習慣,並且所須要的操做精準程度遠遠低於點擊連接或按鈕。
c、更高的參與度:以上兩點所帶來的交互便捷性可使用戶將注意力更多的集中在內容而不是操做上,從而讓他們更樂於沉浸在探索與瀏覽當中。
缺點
a、有限的用例:
無限滾動的方式只適用於某些特定類型產品當中一部分特定類型的內容。
例如,在電商網站當中,用戶時常須要在商品列表與詳情頁面之間切換,這種狀況下,傳統的、帶有頁碼導航的方式能夠幫助用戶更穩妥和準確的回到某個特定的列表頁面當中。
b、額外的複雜度:
那些用來打造無限滾動的JS庫雖然都自稱很容易使用,但你總會須要在本身的產品中進行不一樣程度的定製化處理,以知足大家本身的需求;另外這些JS庫在瀏覽器和設備兼容性等方面的表現也良莠不齊,你必須作好充分的測試與調整工做。
c、再見了,頁腳:
若是使用了比較典型的無限滾動加載模式,這就意味着你能夠和頁腳說拜拜了。
最好考慮一下頁腳對於你的網站,特別是用戶的重要性;若是其中確實有比較重要的內容或連接,那麼最好換一種更傳統和穩妥的方式。
千萬不要耍弄你的用戶,當他們一次次的瀏覽到頁面底部,看到頁腳,卻由於自動加載的內容忽然出現而不管如何都沒法點擊頁腳中的連接時,他們會變的愈加憤怒。
d、集中在一頁當中動態加載數據,與一頁一頁的輸出相比,究竟那種方式更利於SEO,這是你必須考慮的問題。對於某些以類型網站來講,在這方面進行冒險是很不划算的。
e、關於頁面數量的印象:
其實站在用戶的角度來看,這一點並不是負面;不過,若是對於你的網站來講,經過更多的內容頁面展現更多的相關信息(包括廣告)是很重要的策略,那麼單頁無限滾動的方式對你並不適用。
(5)流式佈局(Fluid)
固定佈局和流式佈局在網頁設計中最經常使用的兩種佈局方式。固定佈局能呈現網頁的原始設計效果,流式佈局則不受窗口寬度影響,流式佈局使用百分比寬度來限定佈局元素,這樣能夠根據客戶端分辨率的大小來進行合理的顯示。
(6)響應式佈局
響應式佈局是Ethan Marcotte在2010年5月份提出的一個概念,簡而言之,就是一個網站可以兼容多個終端——而不是爲每一個終端作一個特定的版本。這個概念是爲解決移動互聯網瀏覽而誕生的。
響應式佈局能夠爲不一樣終端的用戶提供更加溫馨的界面和更好的用戶體驗,並且隨着目前大屏幕移動設備的普及,用「大勢所趨」來形容也不爲過。隨着愈來愈多的設計師採用這個技術,咱們不只看到不少的創新,還看到了一些成形的模式。
優勢
a、面對不一樣分辨率設備靈活性強
b、可以快捷解決多設備顯示適應問題
缺點
a、兼容各類設備工做量大,效率低下
b、代碼累贅,會出現隱藏無用的元素,加載時間加長
c、其實這是一種折中性質的設計解決方案,多方面因素影響而達不到最佳效果
d、必定程度上改變了網站原有的佈局結構,會出現用戶混淆的狀況
60、overfloa:hidden是否造成新的塊級格式化上下文?會造成,觸發BFC的條件有:(1)float的值不爲none。(2)overflow的值不爲visible。(3)display的值爲table-cell, table-caption, inline-block 中的任何一個。(4)position的值不爲relative 和static。