1. 程式人生 > >前端面試經典題目合集(HTML+CSS)

前端面試經典題目合集(HTML+CSS)

1、瀏覽器頁面有哪三層構成,分別是什麼,作用是什麼?

       構成:結構層、表示層、行為層

       分別是:HTML、CSS、JavaScript

       作用:HTML實現頁面結構,CSS完成頁面的表現與風格,JavaScript實現一些客戶端的功能與業務。

2、HTML5的優點與缺點?

優點: 

       a、網路標準統一、HTML5本身是由W3C推薦出來的;

       b、多裝置、跨平臺;

       c、即時更新;

       d、提高可用性和改進使用者的友好體驗;

       e、有幾個新的標籤,這將有助於開發人員定義重要的內容;

       f、可以給站點帶來更多的多媒體元素(視訊和音訊); 

       g、可以很好的替代Flash和Silverlight;

       h、涉及到網站的抓取和索引的時候,對於SEO很友好;

       i、被大量應用於移動應用程式和遊戲。

缺點:

      a、安全:像之前Firefox4的web socket和透明代理的實現存在嚴重的安全問題,同時web storage、web socket 這樣的功能很容易被黑客利用,來盜取使用者的資訊和資料。

      b、完善性:許多特性各瀏覽器的支援程度也不一樣。

      c、技術門檻:HTML5簡化開發者工作的同時代表了有許多新的屬性和API需要開發者學習,像web worker、web socket、web storage 等新特性,後臺甚至瀏覽器原理的知識,機遇的同時也是巨大的挑戰

      d、效能:某些平臺上的引擎問題導致HTML5效能低下。

      e、瀏覽器相容性:最大缺點,IE9以下瀏覽器幾乎全軍覆沒。

3、Doctype作用? 嚴格模式與混雜模式如何區分?它們有何意義?

       Doctype宣告指出閱讀程式應該使用什麼規則集來解釋文件中的標記。在Web文件的情況下,“閱讀程式”通常是瀏覽器或者校驗器這樣的一個程式,“規則”則是W3C所釋出的一個文件型別定義(DTD)中包含的規則。

       (1)   宣告位於文件中的最前面的位置,處於標籤之前。此標籤可告知瀏覽器文件使用哪種 HTML 或 XHTML 規範。該標籤可宣告三種 DTD 型別,分別表示嚴格版本、過渡版本以及基於框架的HTML 文件。

       (2)   所謂的標準模式是指,瀏覽器按 W3C 標準解析執行程式碼;怪異模式則是使用瀏覽器自己的方式解析執行程式碼,因為不同瀏覽器解析執行的方式不一樣,所以我們稱之為怪異模式。嚴格模式是瀏覽器根據web標準去解析頁面,是一種要求嚴格的DTD,不允許使用任何表現層的語法,如嚴格模式的排版和JS 運作模式是以該瀏覽器支援的最高標準執行混雜模式則是一種向後相容的解析方法,說的透明點就是可以實現IE5.5以下版本瀏覽器的渲染模式。

        (3)   瀏覽器解析時到底使用標準模式還是怪異模式,與你網頁中的 DTD 宣告直接相關, DTD 宣告定義了標準文件的型別(標準模式解析)文件型別,會使瀏覽器使用相應的方式載入網頁並顯示,忽略 DTD 宣告 ,將使網頁進入怪異模式。

4、HTML5有哪些新特性、移除了哪些元素?

       Html5新增了 27 個元素,廢棄了 16 個元素,根據現有的標準規範,把 HTML5 的元素按優先順序定義為結構性屬性、級塊性元素、行內語義性元素和互動性元素4 大類。

結構性元素主要負責web上下文結構的定義

       section:在 web 頁面應用中,該元素也可以用於區域的章節描述。

       header:頁面主體上的頭部, header 元素往往在一對 body 元素中。

       footer:頁面的底部(頁尾),通常會標出網站的相關資訊。

       nav:專門用於選單導航、連結導航的元素,是 navigator 的縮寫。

       article:用於表現一篇文章的主體內容,一般為文字集中顯示的區域。

級塊性元素主要完成web頁面區域的劃分,確保內容的有效分割。

      aside:用於表達註記、貼士、側欄、摘要、插入的引用等作為補充主體的內容。

      figure:是對多個元素進行組合並展示的元素,通常與 ficaption 聯合使用。

      code:表示一段程式碼塊。

      dialog:用於表達人與人之間的對話,該元素包含 dt 和 dd 這兩個組合元素, dt 用於表示說話者,而 dd 用來表示說話內容。

      行內語義性元素主要完成web頁面具體內容的引用和描述,是豐富內容展示的基礎。

      meter:表示特定範圍內的數值,可用於工資、數量、百分比等。

      time:表示時間值。

      progress:用來表示進度條,可通過對其 max、min、step 等屬性進行控制,完成對進度的表示和監事。

      video:視訊元素,用於支援和實現視訊檔案的直接播放,支援緩衝預載和多種視訊媒體格式。

       audio:音訊元素,用於支援和實現音訊檔案的直接播放,支援緩衝預載和多種音訊媒體格式。

互動性元素主要用於功能性的內容表達,會有一定的內容和資料的關聯,是各種事件的基礎。

       details:用來表示一段具體的內容,但是內容預設可能不顯示,通過某種手段(如單擊)與 legend 互動才會顯示出來。

       datagrid:用來控制客戶端資料與顯示,可以由動態指令碼及時更新。

       menu:主要用於互動選單(曾被廢棄又被重新啟用的元素)。

       command:用來處理命令按鈕。

 移除的元素:

       (1)    純表現的元素:basefont, big, center, font, s, strike, tt, u;

       (2)    對可用性產生負面影響的元素:frame, frameset, noframes;

5、你做的網頁在哪些瀏覽器測試過,這些瀏覽器的核心分別是什麼?

        IE:trident核心

        Firefox:gecko核心

        Safari:webkit核心

        Opera:以前是presto核心,Opera現已改用Goolge Chrome的Blink核心

        Chrome:Blink(基於webkit, Google與Opera Software共同開發)

6、說說你對HTML5的認識,是什麼?為什麼?

       是什麼:HTML5指的是包括 HTML 、 CSS 和 JavaScript 在內的一套技術組合。它希望能夠減少網頁瀏覽器對於需要外掛的豐富性網路應用服務(Plug-in-Based Rich Internet Application ,RIA ),例如: AdobeFlash 、 Microsoft Silverlight 與 Oracle JavaFX 的需求,並且提供更多能有效加強網路應用的標準集。 HTML5 是 HTML 最新版本, 2014 年 10 月由全球資訊網聯盟( W3C )完成標準制定。目標是替換1999 年所制定的 HTML4.01 和 XHTML 1.0 標準,以期能在網際網路應用迅速發展的時候,使網路標準達到匹配當代的網路需求。

       為什麼:HTML4陳舊不能滿足日益發展的網際網路需要,特別是移動網際網路。為了增強瀏覽器功能Flash 被廣泛使用,但安全與穩定堪憂,不適合在移動端使用(耗電、觸控、不開放)。HTML5增強了瀏覽器的原生功能,符合HTML5 規範的瀏覽器功能將更加強大,減少了 Web 應用對外掛的依賴,讓使用者體驗更好,讓開發更加方便,另外 W3C 從推出 HTML4.0 到 5.0 之間共經歷了 17 年, HTML 的變化很小,這並不符合一個好產品的演進規則。

7、對WEB標準以及W3C的理解與認識?

(1)WEB標準

        什麼是WEB標準:一系列標準的集合,包括結構化標準語言(html等)、表現標準語言(css)、行為標準語言(ECMAScript等)。這些標準大部分是由全球資訊網聯盟起草和釋出。

          為什麼使用web標準:為了解決因瀏覽器版本不同、軟硬體裝置不同導致的需多版本開發的問題。

(2)W3C(World WideWeb Consortium)

          全球資訊網聯盟,是一個web開發的國際性聯盟,是Web技術領域最權威和影響力的國際中立性技術標準機構。

8、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><meta>

9、什麼是WebGL,它有什麼優點?

       WebGL(全寫 WebGraphics Library )是一種 3D 繪圖標準,這種繪圖技術標準允許把 JavaScript 和 OpenGL ES 2.0 結合在一起,通過增加 OpenGL ES 2.0 的一個 JavaScript 繫結, WebGL 可以為 HTML5 Canvas 提供硬體 3D 加速渲染,這樣 Web 開發人員就可以藉助系統顯示卡來在瀏覽器裡更流暢地展示 3D 場景和模型了,還能建立複雜的導航和資料視覺化。顯然,WebGL 技術標準免去了開發網頁專用渲染外掛的麻煩,可被用於建立具有複雜 3D 結構的網站頁面,甚至可以用來設計 3D 網頁遊戲等等。

        WebGL完美地解決了現有的 Web 互動式三維動畫的兩個問題:

第一,它通過HTML指令碼本身實現 Web 互動式三維動畫的製作,無需任何瀏覽器外掛支援 ;

第二,它利用底層的圖形硬體加速功能進行的圖形渲染,是通過統一的、標準的、跨平臺的OpenGL介面實現的。

       通俗說WebGL中 canvas 繪圖中的 3D 版本。因為原生的 WebGL 很複雜,我們經常會使用一些三方的庫,如 three.js 等,這些庫多數用於 HTML5 遊戲開發。

10、請你描述一下cookies, sessionStorage和localStorage的區別?

       (1)cookies:一小段文字資訊,伴隨著使用者請求和頁面在伺服器和瀏覽器之間傳遞。因為HTTP協議是無狀態,對於一個瀏覽器發出的多次請求,web伺服器無法區分是否來自同一個瀏覽器,此時需要額外的資料用於維持會話。
       (2)sessionStorage:用於本地儲存一個會話中的資料,這些資料只有在同一個會話中的頁面才能訪問,會話結束資料隨之銷燬,它並非持久化的本地儲存。

        (3)localStorage:用於持久化的本地儲存,除非主動刪除資料,否則資料永遠都不會過期。

       sessionStorage 和 localStorage 是 HTML5 Web Storage API 提供的,可以方便的在 web 請求之間儲存資料。有了本地資料,就可以避免資料在瀏覽器和伺服器間不必要地來回傳遞。

        sessionStorage、 localStorage 、 cookie 都是在瀏覽器端儲存的資料,其中 sessionStorage 的概念很特別,引入了一個“瀏覽器視窗”的概念。sessionStorage 是在同源的同窗口(或 tab)中,始終存在的資料。也就是說只要這個瀏覽器視窗沒有關閉,即使重新整理頁面或進入同源另一頁面,資料仍然存在。關閉視窗後, sessionStorage 即被銷燬。同時“獨立”開啟的不同視窗,即使是同一頁面, sessionStorage 物件也是不同的。cookies會發送到伺服器端。其餘兩個不會。

       Microsoft 指出 Internet Explorer 8 增加 cookie 限制為每個域名 50 個,但 IE7 似乎也允許每個域名 50 個 cookie 。 Firefox 每個域名 cookie 限制為 50 個。 Opera 每個域名 cookie 限制為 30 個。 Firefox 和 Safari 允許 cookie 多達 4097 個位元組,包括名( name )、值( value )和等號。 Opera 許 cookie 多達 4096 個位元組,包括:名( name )、值( value )和等號。 Internet Explorer 允許 cookie 多達 4095 個位元組,包括:名( name )、值( value )和等號。

區別:

Cookie

l  每個域名儲存量比較小(各瀏覽器不同,大致4k)

l  所有域名的儲存量有限制(各瀏覽器不同,大致4k)

l  有個數限制(各瀏覽器不同)

l  會隨請求傳送到伺服器

LocalStorage

l  永久儲存

l  單個域名的儲存量有限制(推薦5MB,各瀏覽器不同)

l  總體數量無限制

SessionStorage

l  只在Session內有效

l  儲存量更大(推薦沒有限制,但是實際上各瀏覽器也不同)

11、對HTML語義化的理解?

什麼是HTML語義化?

       (基本都是圍繞著幾個主要的標籤,像標題(H1~H6)、列表(li)、強調(strong em)等等)根據內容的結構化(內容語義化),選擇合適的標籤(程式碼語義化)便於開發者閱讀和寫出更優雅的程式碼的同時讓瀏覽器的爬蟲和機器很好地解析。

為什麼要語義化?

       為了在沒有CSS的情況下,頁面也能呈現出很好地內容結構、程式碼結構;

       使用者體驗:例如title、alt用於解釋名詞或解釋圖片資訊、label標籤的活用;

       有利於SEO:和搜尋引擎建立良好溝通,有助於爬蟲抓取更多的有效資訊:爬蟲依賴於標籤來確定上下文和各個關鍵字的權重。

       方便其他裝置解析(如螢幕閱讀器、盲人閱讀器、移動裝置)以意義的方法來渲染頁面;

       便於團隊開發和維護,語義化更具可讀性,是下一步頁面的重要動向,遵循W3C標準的團隊都要遵循這個標準,可以減少差異化。

語義化標籤

<header></header>

<footer></footer>

<nav></nav>

<section></section>

<article><article>SM:用來在頁面找那個表示一套結構完整且獨立的內容部分。

        <aside></aside>SM:主題的附屬資訊(用途很廣,主要就是一個附屬內容),如果article裡面為一篇文章的話,那麼文章的作者以及資訊內容就是這篇文章的附屬內容了。

         <figrue></figure>SM:媒體元素,比如一些視訊,圖片等等。

         <datalist></datalist>SM:選項列表,與input元素配合使用,來定義input可能的值。

         <details></details>SM:用於描述文件或者文件某個部分的細節,預設屬性為open,配合summary一起使用。

12、link和@import的區別?

XML/HTML程式碼

<link rel='stylesheet' rev='stylesheet'href='CSS檔案 'type='text/css' media='all' />

XML/HTML程式碼

<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不支援。

13、對SVG的理解?

       SVG可縮放向量圖形(ScalableVector 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的本地執行環境下的廠家支援程度。

瀏覽器支援:

InternetExplorer9, 火狐,谷歌Chrome,Opera和Safari都支援SVG。

IE8和早期版本都需要一個外掛,如Adobe SVG瀏覽器,這是免費提供的。

14、HTML全域性屬性有哪些?

accesskey 規定啟用元素的快捷鍵;

class 規定元素的一個或多個類名(引用樣式表中的類);

contenteditable 規定元素內容是否可編輯;

contextmenu 規定元素的上下文選單。上下文選單在使用者點選元素時顯示。

data-* 用於儲存頁面或應用程式的私有定製資料。

dir 規定元素中內容的文字方向。

draggable 規定元素是否可拖動。

dropzone 規定在拖動被拖動資料時是否進行復制、移動或連結。

hidden  樣式上會導致元素不顯示,但是不能用這個屬性實現樣式。

id 規定元素的唯一 id。

lang 規定元素內容的語言。

spellcheck 規定是否對元素進行拼寫和語法檢查。

style 規定元素的CSS行內元素。

tabindex 規定元素的tab鍵次序。

title 規定有關元素的額外資訊。

translate 規定是否應該翻譯元素內容。

15、超連結target屬性的取值和作用?

它的引數值主要有:

_blank:瀏覽器總在一個新開啟、未命名的視窗中載入目標文件。

       _parent:這個目標使得文件載入父視窗或者包含來超連結引用的框架的框架集。如果這個引用是在視窗或者在頂級框架中,那麼它與目標_self等效。

        _self:這個目標的值對所有沒有指定目標<a>標籤是預設目標,它使得目標文件載入並顯示在相同的框架或者視窗中作為源文件。這個目標是多餘且不必要的,除非和文件標題<base>標籤中的target屬性一起使用。

       _top:這個目標使得文件載入包含這個超連結的視窗,用_top目標將會清除所有被包含的框架並將文件載入整個瀏覽器視窗。

16、‘data-’屬性的作用是什麼?

    ‘data-’為H5新增的為前端開發者提供自定義屬性,這些屬性集可以通過物件的‘dataset’屬性獲取,不支援該屬性的瀏覽器可以通過’getAttribute’方法獲取:

       需要注意的是:“data-”之後的以連字元分割的多個單片語成的屬性,獲取的時候使用駝峰風格。所有主流瀏覽器都支援data-*屬性。即:當沒有合適的屬性和元素時,自定義的data屬性是能夠儲存頁面或App的私有的自定義資料。

17、介紹一下你對瀏覽器核心的理解?

       主要分成兩部分:渲染引擎(layoutengineer或RenderingEngine)和JS引擎。

       渲染引擎:負責取得網頁的內容(HTML、XML、影象等等)、整理訊息(例如加入CSS等),以及計算網頁的顯示方式,然後會輸出至顯示器或印表機。瀏覽器的核心的不同對於網頁的語法解釋會有不同,所以渲染的效果也不相同。所有網頁瀏覽器,電子郵件客戶端以及其它需要編輯、顯示網路內容的應用程式都需要核心。

       JS引擎:解析和執行JavaScript來實現網頁的動態效果。

       最開始渲染引擎和JS引擎並沒有區分的很明確,後來JS引擎越來越獨立,核心就傾向於只指渲染引擎。

18、常見的瀏覽器核心是什麼?

viewsourceprint?

1.Trident核心: IE,MaxThon,TT,The World,360, 搜狗瀏覽器等。 [ 又稱 MSHTML]

2.Gecko核心: Netscape6 及以上版本, FF,MozillaSuite/SeaMonkey等

3.Presto核心: Opera7 及以上。 [Opera 核心原為:Presto,現為:Blink;]

4.Webkit核心: Safari,Chrome 等。[ Chrome 的:Blink(WebKit 的分支)]

19、iframe有哪些缺點?

(1)iframe會阻塞主頁面的onload事件;

(2)搜尋引擎的檢索程式無法解讀這種頁面,不利於SEO(Search Engine Optimization)搜尋引擎優化;

(3)Iframe和主頁面共享連線池,而瀏覽器對相同域的連線有限制,所以會影響頁面的並行載入;

(4)使用iframe之前需要考慮這兩個缺點。如果需要使用iframe,最好是通過javascript;

20、Label的作用是什麼,是怎麼用的?

label標籤來定義表單控制間的關係,當用戶選擇該標籤時,瀏覽器會自動將焦點轉到和標籤相關的表單控制元件上。

<labelfor='Name'>Number:</label>

<inputtype=“ text “ name='Name' id='Name'/>

<label>Date:<inputtype='text' name='B'/></label>

注意:label的for屬性值要與後面對應的input標籤id屬性值相同

<labelfor='Name'>Number:</label>

<inputtype=“ text “ name='Name' id='Name'/>

21、如何實現瀏覽器多個標籤頁之間的通訊?

        資料儲存有本地和伺服器儲存兩種方式,這裡主要講解用本地儲存方式解決。即呼叫localStorage、Cookie等本地儲存方式。

第一種——呼叫localStorage

      在一個標籤頁裡面使用localStorage.setItem(key,value)新增(修改、刪除)內容;在另一個標籤頁裡面監聽storage 事件。即可得到 localstorge 儲存的值,實現不同標籤頁之間的通訊。

第二種——呼叫cookie+setInterval()

       將要傳遞的資訊儲存在cookie中,每個一定時間讀取cookie訊息,即可隨時獲取要傳遞的資訊。

22、如何在頁面上實現一個圓形的可點選區域?

 方法一:<img>通過usemap對映到<map>的circle形<area>

 方法二:設定div的border-radius:50%

方法三:JS實現,獲取滑鼠點選位置座標,判斷其到原點的距離是否不大於圓的半徑,來判斷點選位置是否在圓內。

23、title與h3的區別、b與strong的區別、i與em的區別?

title屬性沒有明確意義只表示是個標題,h1則表示層次明確的標題,對頁面資訊的抓取也有很大的影響。

        Strong是標明重點內容,有語氣加強的含義,使用閱讀裝置閱讀網路時:<strong>會重度,而<B>是表示強調內容。I內容展示為斜體,em表示強調的文字。

Physical Style Elements—自然樣式標籤: b,i, u, s, pre

Semantic Style Elements -- 語義樣式標籤: strong,em, ins, del, code

應該準確使用語義樣式標籤,但不能濫用,如果不能確定時首選使用自然樣式標籤。

24、實現不使用border畫出1px高的線,在不同瀏覽器的標準模式與怪異模式下都能保持一致的效果?

25、HTML5標籤的作用?

(1)使web頁面的內容更加有序和規範

(2)使搜尋引擎更加容易按照HTML5規則識別出有效的內容

(3)使web頁面更接近於一種資料欄位和表

26、簡述一下src與href的區別?

src用於替換當前元素,href用於在當前文件和引用資源之間確立聯絡。

        src是source的縮寫,指向外部資源的位置,指向的內容將會嵌入到文件中當前標籤所在位置;在請求src資源時會將其指向的資源下載並應用到文件內,例如js指令碼,img圖片和frame等元素。

         <scriptsrc=“js.js”></script>

       當瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源載入、編譯、執行完畢,圖片和框架等元素也如此,類似於將所指向資源嵌入當前標籤內。這也是為什麼將js指令碼放在底部而不是頭部。

       href是 HypertextReference 的縮寫,指向網路資源所在位置,建立和當前元素(錨點)或當前文件(連結)之間的連結,如果我們在文件中新增<link href='common.css' rel='stylesheet'/>那麼瀏覽器會識別該文件為css檔案,就會並行下載資源並且不會停止對當前文件的處理。這也是為什麼建議使用 link方式來載入 css ,而不是使用 @import 方式。

27、談談你對canvas的理解?

      HTML5的canvas元素使用JavaScript在網頁上繪製圖像。畫布是一個矩形區域,您可以控制其每一畫素。Canvas擁有多種繪製路徑、矩形、圓形、字元以及新增影象的方法。canvas可以完成動畫、遊戲、圖示、影象處理等原來需要Flash完成的一些功能。

28、WebSocket與訊息推送?

 B/S架構的系統多使用HTTP協議

        HTTP協議的特點:(1)無狀態協議(2)用於通過Internet傳送請求訊息和響應訊息(3)使用埠接收和傳送訊息,預設為80埠,底層通訊還是使用Socket完成。

        HTTP協議決定了伺服器與客戶端之間的連線方式,無法直接實現訊息推送(F5已壞),一些變相的解決辦法:

雙向通訊與訊息推送

輪詢:客戶端定時向伺服器傳送Ajax請求,伺服器接到請求後馬上返回響應資訊並關閉連線。

優點:後端程式編寫比較容易。

缺點:請求中有大半是無用,浪費頻寬和伺服器資源。

例項:適於小型應用。

        長輪詢:客戶端向伺服器傳送Ajax請求,伺服器接到請求後 hold 住連線,直到有新訊息才返回響應資訊並關閉連線,客戶端處理完響應資訊後再向伺服器傳送新的請求。

優點:在無訊息的情況下不會頻繁的請求,耗費資小。

缺點:伺服器hold連線會消耗資源,返回資料順序無保證,難於管理維護。 Comet 非同步的 ashx ,

例項:WebQQ、Hi 網頁版、FacebookIM 。

        長連線:在頁面裡嵌入一個隱蔵iframe,將這個隱蔵 iframe 的 src 屬性設為對一個長連線的請求或是採用 xhr 請求,伺服器端就能源源不斷地往客戶端輸入資料。

優點:訊息即時到達,不發無用請求;管理起來也相對便。

缺點:伺服器維護一個長連線會增加開銷。

例項:Gmail聊天

        Flash Socket:在頁面中內嵌入一個使用了Socket 類的 Flash 程式 JavaScript 通過呼叫此 Flash 程式提供的 Socket 介面與伺服器端的 Socket 介面進行通訊, JavaScript 在收到伺服器端傳送的資訊後控制頁面的顯示。

優點:實現真正的即時通訊,而不是偽即時。

缺點:客戶端必須安裝Flash外掛;非 HTTP 協議,無法自動穿越防火牆。

例項:網路互動遊戲。 

        Websocket:

        WebSocket是 HTML5 開始提供的一種瀏覽器與伺服器間進行全雙工通訊的網路技術。依靠這種技術可以實現客戶端和伺服器端的長連線,雙向實時通訊。

特點:

a、事件驅動

b、非同步

c、使用 ws 或者 wss 協議的客戶端 socket

d、能夠實現真正意義上的推送功能

缺點:少部分瀏覽器不支援,瀏覽器支援的程度與方式有區別。

29、img的title和alt有什麼區別?

Alt用於圖片無法載入時顯示,Title為該屬性提供資訊,通常當滑鼠滑動到元素上的時候顯示。

30、表單的基本組成部分有哪些,表單的主要用途是什麼?

組成:表單標籤、表單域、表單按鈕

a、表單標籤:這裡麵包含了處理表單資料所用 CGI 程式的 URL, 以及資料提交到伺服器的方法。

b、表單域:包含了文字框、密碼框、隱藏域、多行文字框、複選框、單選框、下拉選擇框、和檔案上傳框等。

        c、表單按鈕:包括提交按鈕,復位按鈕和一般按鈕;用於將資料傳送到伺服器上的 CGI 指令碼或者取消輸入,還可以用表單按鈕來控制其他定義了處理指令碼的處理工作。

        主要用途:表單在網頁中主要負責資料採集的功能,和向伺服器傳送資料。

31、表單提交中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 安全性較高。

32、HTML5有哪些新增的表單元素?

新增表單元素:

email:提交表單的時候驗證輸入值是否滿足email格式

<inputtype=“email” name=“email”/>

url:提交表單的時候驗證輸入值是否滿足url的格式:

<inputtype=“url” name=“url”/>

         number:根據你的設定提供選擇數字的功能,其中min為最小值,max為最大值,value為預設值,step為點選箭頭時數字的變化量,max,min,step,value均可不寫,目前某些瀏覽器還不支援。

         range:會以一個滑塊的形式表現包含一定範圍內數字值的輸入域,max為最大值,min為最小值,value為預設值,如果沒有設定max和min,預設值是1-100。

<inputtype=“range”name=“range” min=20 max=200 value=“60”/>

date:選取日、月、年<inputtype=“date” name=“date”/>

month:選取月、年<inputtype=“month”name=“month”/>

week:選取周、年<inputtype=“week” name=“week”/>

time:選取小時、分鐘<inputtype=“time” name=“time”/>

datetime:選取時間、日、月、年(UTC時間)<input type=“datetime” name=“datetime”/>

datetime-local:選取時間、日、月、年(本地時間)

 <input type=“datetime-local”name=“datetime-local”/>

search:用於搜尋域,若加上result=“s”屬性,則會在搜尋框前面加一個搜尋圖示

<inputtype="search" name="search" result="s"/>

tel:驗證輸入的是否是電話號碼的格式

<inputtype="tel" name="tel" />

       color:color型別會提供顏色拾取器,供使用者選擇顏色,並將使用者選擇的顏色填充到此元素中<input type="color" name="color"/>

33、HTML5廢棄了哪些HTML4標籤?

         frame frameset noframe appletbig center basefront

34、HTML5提供的應用程式API主要有:

     Media API、Text TrackAPI、Application Cache API、UserInteraction、Data Transfer API、CommandAPI、Constraint Validation API、HistoryAPI

35、HTML5儲存型別有什麼區別?

HTML5能夠本地儲存資料,在之前都是使用cookies使用的。HTML5提供了下面兩種本地儲存方案:

localStorage:用於持久化的本地儲存,資料永遠不會過期,關閉瀏覽器也不會丟失。

        sessionStorage:同一個會話中的頁面才能訪問並且當會話結束後資料也隨之銷燬。因此sessionStorage不是一種持久化的本地儲存,僅僅是會話級別的儲存。

36、應用程式快取和瀏覽器快取有什麼區別?

       應用程式快取是HTML5的重要特性之一,提供了離線使用的功能,讓應用程式可以獲取本地的網站內容,例如HTML、CSS、圖片以及JavaScript。這個特性可以提高網站效能,它的實現藉助於manifest檔案,如下:

<!doctypehtml>

<htmlmanifest=”example.appcache”>

…..

</html>

        與傳統瀏覽器快取相比,它不強制使用者訪問的網站內容被快取。

37、HTML5 Canvas元素有什麼用?

Canvas元素用於在網頁上繪製圖形,該元素標籤的強大之處在於可以直接在HTML上進行圖形操作

<canvas id=“canvas1”width=“300” height=“100”>

</canvas>

38、除了audio和video,HTML5還有哪些媒體標籤?

HTML5對於多媒體提供了強有力的支援,除了 audio 和 video 標籤外,還支援以下標籤:

<embed> 標籤定義嵌入的內容,比如外掛。

<embedtype=“video/quicktime”  src= “Fishing.mov”>

<source> 對於定義多個數據源很有用。

<videowidth=” 450 ″ height= ” 340″ controls>

     <source src=”jamshed.mp4 ″ type= ” video/mp4″ >

     <source src=” jamshed.ogg ” type= ”video/ogg ” >

</video>

        <track> 標籤為諸如 video 元素之類的媒介規定外部文字軌道。 用於規定字幕檔案或其他包含文字的檔案,當媒介播放時,這些檔案是可見的。

<videowidth=“450”height= ” 340 ″ controls>

     <source src=”jamshed.mp4 ″ type= ” video/mp4″ >

     <source src=” jamshed.ogg ” type= ”video/ogg ” >

     <track kind=” subtitles ”label=“English”src= ” jamshed_en.vtt ” srclang= ” en ”default></track>

     <track kind=“subtitles”label=“Arabic”src= “jamshed_ar.vtt”srclang= “ar”></track>

</video>

        據源很有用。標籤為諸如 video 元素之類的媒介規定外部文字軌道。 用於規定字幕檔案或其他包含文字的檔案,當媒介播放時,這些檔案是可見的。

39、HTML5中如何嵌入視訊?

和音訊類似,HTML5支援MP4、WebM和Ogg格式的視訊,下面是簡單示例:

40、HTML5中如何嵌入音訊?

HTML5支援 MP3 、 Wav 和 Ogg 格式的音訊,下面是在網頁中嵌入音訊的簡單示例:

41、新的HTML5文件型別和字符集是?

HTML5文件型別很簡單:

<!doctypehtml>

HTML5使用UTF-8編碼示例:

<metacharset=“UTF-8”>

42、解釋一下CSS的盒子模型?

標準的盒模型:width = content

IE盒模型:width = content+padding-Left+padding-right+border-left+ border-right

43、請你說說CSS選擇器的型別有哪些,並舉幾個例子說明其用法?

CSS選擇器有以下:

1.元素選擇器(又稱為型別選擇器)

html{color:black;}

h1{color:blue;}

h2{color:silver;}

2.類選擇器

<h1class="important">

Thisheading is very important.

</h1>

3.ID選擇器

<pid="intro">This is a paragraph of introduction.</p>

4.屬性選擇器

a[href]{color:red;}

5.後代選擇器(又稱為包含選擇器)

h1em {color:red;}

6.子元素選擇器

h1> strong {color:red;}

7.相鄰兄弟選擇器

h1+ p {margin-top:50px;}

44、CSS有什麼特殊性?(優先順序、計算特殊值)

一般情況下,優先順序如下:

       (外部樣式)External style sheet <(內部樣式)Internalstyle sheet <(內聯樣式)Inline style有個例外的情況,就是如果外部樣式放在內部樣式的後面,則外部樣式將覆蓋內部樣式。

內聯樣式表的權值最高1000;

ID 選擇器的權值為 100

Class 類選擇器的權值為 10

HTML 標籤選擇器的權值為 1

45、要動態改變層中內容可以使用的方法?

innerHTML,innerText

46、常見瀏覽器相容性問題與解決方案

(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,遨遊中高度超出自己設定高度

問題症狀:IE6、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個都寫上就行,就能實現相容

47、列出display的值並說明它們的作用?

      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

none: 隱藏物件。與visibility屬性的hidden值不同,其不為被隱藏的物件保留其物理空間

inline: 指定物件為內聯元素。

block: 指定物件為塊元素。

list-item: 指定物件為列表專案。

inline-block: 指定物件為內聯塊元素。(CSS2)

table: 指定物件作為塊元素級的表格。類同於html標籤<table>(CSS2)

inline-table: 指定物件作為內聯元素級的表格。類同於html標籤<table>(CSS2)

table-caption: 指定物件作為表格標題。類同於html標籤<caption>(CSS2)

table-cell: 指定物件作為表格單元格。類同於html標籤<td>(CSS2)

table-row: 指定物件作為表格行。類同於html標籤<tr>(CSS2)

table-row-group: 指定物件作為表格行組。類同於html標籤<tbody>(CSS2)

table-column: 指定物件作為表格列。類同於html標籤<col>(CSS2)

table-column-group: 指定物件作為表格列組顯示。類同於html標籤<colgroup>(CSS2)

table-header-group: 指定物件作為表格標題組。類同於html標籤<thead>(CSS2)

table-footer-group: 指定物件作為表格腳註組。類同於html標籤<tfoot>(CSS2)

run-in: 根據上下文決定物件是內聯物件還是塊級物件。(CSS3)

box: 將物件作為彈性伸縮盒顯示。(伸縮盒最老版本)(CSS3)

inline-box: 將物件作為內聯塊級彈性伸縮盒顯示。(伸縮盒最老版本)(CSS3)

flexbox: 將物件作為彈性伸縮盒顯示。(伸縮盒過渡版本)(CSS3)

inline-flexbox: 將物件作為內聯塊級彈性伸縮盒顯示。(伸縮盒過渡版本)(CSS3)

flex: 將物件作為彈性伸縮盒顯示。(伸縮盒最新版本)(CSS3)

inline-flex: 將物件作為內聯塊級彈性伸縮盒顯示。(伸縮盒最新版本)(CSS3)

48、如何居中div,如何居中一個浮動元素?

(1)非浮動元素居中:可以設定margin:0 auto另其居中,定位,父級元素text-align:center等等

(2)浮動元素居中:

方法一:設定當前div的寬度,然後設定margin-left:50%;position:relative;left:-250px;其中的left是寬度的一半。

方法二:父元素和子元素同時左浮動,然後父元素相對左移動50%,再然後子元素相對左移動-50%。

方法三:position定位等等。

49、CSS中link和@import的區別是?

(1)link屬於HTML標籤,而@import是CSS提供的;

(2)頁面被載入時,link會同時被載入,而@import引用的CSS會等到頁面被載入完再載入;

(3)import只在IE5以上才能識別,而link是HTML標籤,無相容問題;

(4)link方式的樣式權重高於@import的權重。

50、請列舉幾種清除浮動的方法(至少兩種)?

(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浮動問題

優點:瀏覽器支援好、不容易出現怪問題(目前:大型網站都有