面試常問 HTML題庫(長期更新...)

Coderfei發表於2019-04-27

1.你做的頁面在哪些流覽器測試過?這些瀏覽器的核心分別是什麼?

IE: trident核心

Firefox:gecko核心

Safari:webkit核心

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

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

2.每個HTML檔案裡開頭都有個很重要的東西,Doctype,知道這是幹什麼的嗎?

  答案:<!DOCTYPE> 宣告位於文件最前面的位置,處於<html>標籤之前。此標籤可告知瀏覽器文件使用哪種HTML規範。(重點:告訴瀏覽器按照何種規範解析頁面)

3.Quirks模式是什麼?它和Standards模式有什麼區別?

  答案:從IE6開始,引入了Standards模式,標準模式中,瀏覽器嘗試給符合標準的文件在規範上的正確處理達到在指定瀏覽器中的程度。

  在IE6之前CSS還不夠成熟,所以IE5等之前的瀏覽器對CSS的支援很差,IE6將對CSS提供更好的支援,然而這時的問題就來了,因為有很多頁面是基於舊的佈局方式寫的,而如果IE6支援CSS則將令這些頁面顯示不正常,如何在即保證不破壞現有頁面,又提供新的渲染機制呢?

  在寫程式時我們也會經常遇到這樣的問題,如何保證原來的介面不變,又提供更強大的功能,尤其是新功能不相容舊功能時。遇到這種問題時的一個常見做法是增加引數和分支,即當某個引數為真時,我們就使用新功能,而如果這個引數不為真時,就使用舊功能,這樣就能不破壞原有的程式,又提供新功能。IE6也是類似這樣做的,它將DTD當成了這個“引數”,因為以前的頁面大家都不會去寫DTD,所以IE6就假定 如果寫了DTD,就意味著這個頁面將採用對CSS支援更好的佈局,而如果沒有,則採用相容之前的佈局方式。這就是Quirks模式(怪癖模式,詭異模式,怪異模式)。

  區別:總體會有佈局、樣式解析和指令碼執行三個方面的區別。

  盒模型:在W3C標準中,如果設定一個元素的寬度和高度,指的是元素內容的寬度和高度,而在Quirks 模式下,IE的寬度和高度還包含了padding和border。

面試常問 HTML題庫(長期更新...)

  設定行內元素的高寬:在Standards模式下,給<span>等行內元素設定wdith和height都不會生效,而在quirks模式下,則會生效。

  設定百分比的高度:在standards模式下,一個元素的高度是由其包含的內容來決定的,如果父元素沒有設定百分比的高度,子元素設定一個百分比的高度是無效的用margin:0 auto設定水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下卻會失效。

4. div+css的佈局較table佈局有什麼優點?

改版的時候更方便 只要改css檔案。

頁面載入速度更快、結構化清晰、頁面顯示簡潔。

表現與結構相分離。

易於優化(seo)搜尋引擎更友好,排名更容易靠前。

5. img的alt與title有何異同?strong與em的異同?

alt:為不能顯示影象時顯示出來的提示文字。title:滑鼠移入時顯示的提示文字

strong:粗體強調標籤,強調,表示內容的重要性,em:斜體強調標籤,更強烈強調,表示內容的強調點

6. 你能描述一下漸進增強和優雅降級之間的不同嗎?

漸進增強:針對低版本瀏覽器進行構建頁面,保證最基本的功能,然後再針對高階瀏覽器進行效果、互動等改進和追加功能達到更好的使用者體驗。

優雅降級:一開始就構建完整的功能,然後再針對低版本瀏覽器進行相容。

區別:優雅降級是從複雜的現狀開始,並試圖減少使用者體驗的供給,而漸進增強則是從一個非常基礎的,能夠起作用的版本開始,並不斷擴充,以適應未來環境的需要。 

“優雅降級”觀點認為應該針對那些最高階、最完善的瀏覽器來設計網站。而將那些被認為“過時”或有功能缺失的瀏覽器下的測試工作安排在開發週期的最後階段,並把測試物件限定為主流瀏覽器(如 IE、Mozilla 等)的前一個版本。在這種設計範例下,舊版的瀏覽器被認為僅能提供“簡陋卻無妨”的瀏覽體驗。你可以做一些小的調整來適應某個特定的瀏覽器。但由於它們並非我們所關注的焦點,因此除了修復較大的錯誤之外,其它的差異將被直接忽略。

  “漸進增強”觀點則認為應關注於內容本身。內容是我們建立網站的誘因。有的網站展示它,有的則收集它,有的尋求,有的操作,還有的網站甚至會包含以上的種種,但相同點是它們全都涉及到內容。這使得“漸進增強”成為一種更為合理的設計範例。這也是它立即被 Yahoo! 所採納並用以構建其“分級式瀏覽器支援”策略的原因所在。  

7. 請談一下你對網頁標準和標準制定機構重要性的理解。

  (無標準答案)網頁標準和標準制定機構都是為了能讓web發展的更‘健康’,開發者遵循統一的標準,降低開發難度,開發成本,SEO也會更好做,也不會因為濫用程式碼導致各種BUG、安全問題,最終提高網站易用性。

8. 請描述一下cookie,sessionStorage和localStorage的區別?  

sessionStorage用於本地儲存一個會話(session)中的資料,這些資料只有在同一個會話中的頁面才能訪問並且當會話結束後資料也隨之銷燬。因此sessionStorage不是一種持久化的本地儲存,僅僅是會話級別的儲存。而localStorage用於持久化的本地儲存,除非主動刪除資料,否則資料是永遠不會過期的。

Web Storage的概念和cookie相似,區別是它是為了更大容量儲存設計的。Cookie的大小是受限的,並且每次你請求一個新的頁面的時候Cookie都會被髮送過去,這樣無形中浪費了頻寬,另外cookie還需要指定作用域,不可以跨域呼叫。除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發者自己封裝setCookie,getCookie。但是Cookie也是不可以或缺的:cookie的作用是與伺服器進行互動,作為HTTP規範的一部分而存在 ,而Web Storage僅僅是為了在本地“儲存”資料而生。

9. 簡述一下src與href的區別。

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

src是source的縮寫,指向外部資源的位置,指向的內容將會嵌入到文件中當前標籤所在位置;在請求src資源時會將其指向的資源下載並應用到文件內,例如js指令碼,img圖片和frame等元素。當瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源載入、編譯、執行完畢,圖片和框架等元素也如此,類似於將所指向資源嵌入當前標籤內。這也是為什麼將js指令碼放在底部而不是頭部。

href是Hypertext Reference的縮寫,指向網路資源所在位置,建立和當前元素(錨點)或當前文件(連結)之間的連結,如果我們在文件中新增

<link href="common.css" rel="stylesheet"/>那麼瀏覽器會識別該文件為css檔案,就會並行下載資源並且不會停止對當前文件的處理。這也是為什麼建議使用link方式來載入css,而不是使用@import方式。

10. 知道的網頁製作會用到的圖片格式有哪些?

png-8,png-24,jpeg,gif,svg。

  但是上面的那些都不是面試官想要的最後答案。面試官希望聽到是Webp,Apng。(是否有關注新技術,新鮮事物)

  科普一下Webp:WebP格式,谷歌(google)開發的一種旨在加快圖片載入速度的圖片格式。圖片壓縮體積大約只有JPEG的2/3,並能節省大量的伺服器頻寬資源和資料空間。Facebook Ebay等知名網站已經開始測試並使用WebP格式。在質量相同的情況下,WebP格式影象的體積要比JPEG格式影象小40%。

  Apng:全稱是“Animated Portable Network Graphics”, 是PNG的點陣圖動畫擴充套件,可以實現png格式的動態圖片效果。04年誕生,但一直得不到各大瀏覽器廠商的支援,直到日前得到 iOS safari 8的支援,有望代替GIF成為下一代動態圖示準。

11. 知道什麼是微格式嗎?談談理解。在前端構建中應該考慮微格式嗎?

微格式是一種讓機器可讀的語義化XHTML詞彙的集合,是結構化資料的開放標準。是為特殊應用而制定的特殊格式。

  優點:將智慧資料新增到網頁上,讓網站內容在搜尋引擎結果介面可以顯示額外的提示。

12. 在css/js程式碼上線之後開發人員經常會優化效能,從使用者重新整理網頁開始,一次js請求一般情況下有哪些地方會有快取處理?

  答案:dns快取,cdn快取,瀏覽器快取,伺服器快取。

13. 一個頁面上有大量的圖片(大型電商網站),載入很慢,你有哪些方法優化這些圖片的載入,給使用者更好的體驗。

圖片懶載入,在頁面上的未可視區域可以新增一個滾動條事件,判斷圖片位置與瀏覽器頂端的距離與頁面的距離,如果前者小於後者,優先載入。

如果為幻燈片、相簿等,可以使用圖片預載入技術,將當前展示圖片的前一張和後一張優先下載。

如果圖片為css圖片,可以使用CSSsprite,SVGsprite,Iconfont、Base64等技術。

如果圖片過大,可以使用特殊編碼的圖片,載入時會先載入一張壓縮的特別厲害的縮圖,以提高使用者體驗。

如果圖片展示區域小於圖片的真實大小,則因在伺服器端根據業務需要先行進行圖片壓縮,圖片壓縮後大小與展示一致。   

14. 你如何理解HTML結構的語義化?  

去掉或樣式丟失的時候能讓頁面呈現清晰的結構:

html本身是沒有表現的,我們看到例如<h1>是粗體,字型大小2em,加粗;<strong>是加粗的,不要認為這是html的表現,這些其實html預設的css樣式在起作用,所以去掉或樣式丟失的時候能讓頁面呈現清晰的結構不是語義化的HTML結構的優點,但是瀏覽器都有有預設樣式,預設樣式的目的也是為了更好的表達html的語義,可以說瀏覽器的預設樣式和語義化的HTML結構是不可分割的。

螢幕閱讀器(如果訪客有視障)會完全根據你的標記來“讀”你的網頁.

例如,如果你使用的含語義的標記,螢幕閱讀器就會“逐個拼出”你的單詞,而不是試著去對它完整發音.

PDA、手機等裝置可能無法像普通電腦的瀏覽器一樣來渲染網頁(通常是因為這些裝置對CSS的支援較弱),使用語義標記可以確保這些裝置以一種有意義的方式來渲染網頁.理想情況下,觀看裝置的任務是符合裝置本身的條件來渲染網頁.

  語義標記為裝置提供了所需的相關資訊,就省去了你自己去考慮所有可能的顯示情況(包括現有的或者將來新的裝置).例如,一部手機可以選擇使一段標記了標題的文字以粗體顯示.而掌上電腦可能會以比較大的字型來顯示.無論哪種方式一旦你對文字標記為標題,您就可以確信讀取裝置將根據其自身的條件來合適地顯示頁面.

搜尋引擎的爬蟲也依賴於標記來確定上下文和各個關鍵字的權重,過去你可能還沒有考慮搜尋引擎的爬蟲也是網站的“訪客”,但現在它們他們實際上是極其寶貴的使用者.沒有他們的話,搜尋引擎將無法索引你的網站,然後一般使用者將很難過來訪問.

你的頁面是否對爬蟲容易理解非常重要,因為爬蟲很大程度上會忽略用於表現的標記,而只注重語義標記.

因此,如果頁面檔案的標題被標記,而不是,那麼這個頁面在搜尋結果的位置可能會比較靠後.除了提升易用性外,語義標記有利於正確使用CSS和JavaScript,因為其本身提供了許多“鉤鉤”來應用頁面的樣式與行為.
SEO主要還是靠你網站的內容和外部連結的。

便於團隊開發和維護

  W3C給我們定了一個很好的標準,在團隊中大家都遵循這個標準,可以減少很多差異化的東西,方便開發和維護,提高開發效率,甚至實現模組化開發

15. 談談以前端角度出發做好SEO需要考慮什麼?

瞭解搜尋引擎如何抓取網頁和如何索引網頁:你需要知道一些搜尋引擎的基本工作原理,各個搜尋引擎之間的區別,搜尋機器人(SE robot 或叫 web crawler)如何進行工作,搜尋引擎如何對搜尋結果進行排序等等。

Meta標籤優化:主要包括主題(Title),網站描述(Description),和關鍵詞(Keywords)。還有一些其它的隱藏文字比如Author(作者),Category(目錄),Language(編碼語種)等。

如何選取關鍵詞並在網頁中放置關鍵詞:搜尋就得用關鍵詞。關鍵詞分析和選擇是SEO最重要的工作之一。首先要給網站確定主關鍵詞(一般在5個上下),然後針對這些關鍵詞進行優化,包括關鍵詞密度(Density),相關度(Relavancy),突出性(Prominency)等等。

瞭解主要的搜尋引擎:雖然搜尋引擎有很多,但是對網站流量起決定作用的就那麼幾個。比如英文的主要有Google,Yahoo,Bing等;中文的有百度,搜狗,有道等。不同的搜尋引擎對頁面的抓取和索引、排序的規則都不一樣。還要了解各搜尋門戶和搜尋引擎之間的關係,比如AOL網頁搜尋用的是Google的搜尋技術,MSN用的是Bing的技術。

主要的網際網路目錄:Open Directory自身不是搜尋引擎,而是一個大型的網站目錄,他和搜尋引擎的主要區別是網站內容的收集方式不同。目錄是人工編輯的,主要收錄網站主頁;搜尋引擎是自動收集的,除了主頁外還抓取大量的內容頁面。

按點選付費的搜尋引擎:搜尋引擎也需要生存,隨著網際網路商務的越來越成熟,收費的搜尋引擎也開始大行其道。最典型的有Overture和百度,當然也包括Google的廣告專案Google Adwords。越來越多的人通過搜尋引擎的點選廣告來定位商業網站,這裡面也大有優化和排名的學問,你得學會用最少的廣告投入獲得最多的點選。

搜尋引擎登入:網站做完了以後,別躺在那裡等著客人從天而降。要讓別人找到你,最簡單的辦法就是將網站提交(submit)到搜尋引擎。如果你的是商業網站,主要的搜尋引擎和目錄都會要求你付費來獲得收錄(比如Yahoo要299美元),但是好訊息是(至少到目前為止)最大的搜尋引擎Google目前還是免費,而且它主宰著60%以上的搜尋市場。

連結交換和連結廣泛度(Link Popularity):網頁內容都是以超文字(Hypertext)的方式來互相連結的,網站之間也是如此。除了搜尋引擎以外,人們也每天通過不同網站之間的連結來Surfing(“衝浪”)。其它網站到你的網站的連結越多,你也就會獲得更多的訪問量。更重要的是,你的網站的外部連結數越多,會被搜尋引擎認為它的重要性越大,從而給你更高的排名。

合理的標籤使用

16. 清除浮動的幾種方法

(1)給父元素新增高度height,防止父元素無法獲取高度的問題(防止父元素高度變為0),只建議高度固定的佈局

(2)結尾處加空div標籤給 clear:both

(3)父級div定義 偽類 :after 和 zoom

div:after{
    content:"";
    height:0;
    line-height:0;
    display:block;
    visibility:hidden;
    clear:both; 
}
div{
    zoom:1;
}複製程式碼

(4) 父級div定義 overflow:hidden或auto

(5)(只做瞭解,不推薦使用)父級div 也一起浮動

(6)(只做瞭解,不推薦使用)父級div定義 display:table

17. 寫HTML程式碼時應注意什麼?

儘可能少的使用無語義的標籤div和span;

在語義不明顯時,既可以使用div或者p時,儘量用p, 因為p在預設情況下有上下間距,對相容特殊終端有利;

不要使用純樣式標籤,如:b、font、u等,改用css設定。

需要強調的文字,可以包含在strong或者em標籤中(瀏覽器預設樣式,能用CSS指定就不用他們),strong預設樣式是加粗(不要用b),em是斜體(不用i);

使用表格時,標題要用caption,表頭用thead,主體部分用tbody包圍,尾部用tfoot包圍。表頭和一般單元格要區分開,表頭用th,單元格用td;

表單域要用fieldset標籤包起來,並用legend標籤說明表單的用途;

每個input標籤對應的說明文字都需要使用label標籤,並且通過為input設定id屬性,在lable標籤中設定for來讓說明文字和相對應的input關聯起來。

18. doctype作用?嚴格模式和混雜模式如何區分,他們有何意義?

<!DOCTYPE> 宣告位於文件中的最前面的位置,處於 <html> 標籤之前。此標籤可告知瀏覽器文件使用哪種 HTML 或 XHTML 規範。

嚴格模式:又稱標準模式,是指瀏覽器按照 W3C 標準解析程式碼。
混雜模式:又稱怪異模式或相容模式,是指瀏覽器用自己的方式解析程式碼。
如何區分:瀏覽器解析時到底使用嚴格模式還是混雜模式,與網頁中的 DTD 直接相關。
1、如果文件包含嚴格的 DOCTYPE ,那麼它一般以嚴格模式呈現。

2、包含過渡 DTD 和 URI 的 DOCTYPE ,也以嚴格模式呈現,但有過渡 DTD 而沒有 URI (統一資源識別符號,就是宣告最後的地址)會導致頁面以混雜模式呈現。

3、DOCTYPE 不存在或形式不正確會導致文件以混雜模式呈現。

4、HTML5 沒有 DTD ,因此也就沒有嚴格模式與混雜模式的區別,HTML5 有相對寬鬆的語法,實現時,已經儘可能大的實現了向後相容。( HTML5 沒有嚴格和混雜之分)

19. HTML5為什麼只需要寫<!doctype html>

<!DOCTYPE> 宣告不是 HTML 標籤;它是指示 web 瀏覽器關於頁面使用哪個 HTML 版本進行編寫的指令。

在 HTML 4.01 中,<!DOCTYPE> 宣告引用 DTD,因為 HTML 4.01 基於 SGML。DTD 規定了標記語言的規則,這樣瀏覽器才能正確地呈現內容。

HTML5 不基於 SGML,所以不需要引用 DTD。

20. 行內元素、塊級元素、空(void)元素有哪些

常用的塊狀元素有:
<div>、<p>、<h1>...<h6>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote> 、<form>
常用的內聯元素有:
<a>、<span>、<br>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>
常用的內聯塊狀元素有:
<img>、<input>
知名的空元素: <br/> <hr/> <img/> <input/> <link/> <meta/>
鮮為人知的是: <area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>

21. iframe有哪些缺點?

iframe是一種框架,也是一種很常見的網頁嵌入方式

iframe的優點:
1.iframe能夠原封不動的把嵌入的網頁展現出來。
2.如果有多個網頁引用iframe,那麼你只需要修改iframe的內容,就可以實現呼叫的每一個頁面內容的更改,方便快捷。
3.網頁如果為了統一風格,頭部和版本都是一樣的,就可以寫成一個頁面,用iframe來巢狀,可以增加程式碼的可重用。
4.如果遇到載入緩慢的第三方內容如圖示和廣告,這些問題可以由iframe來解決。
iframe的缺點:
1.會產生很多頁面,不容易管理。
2.iframe框架結構有時會讓人感到迷惑,如果框架個數多的話,可能會出現上下、左右滾動條,會分散訪問者的注意力,使用者體驗度差。
3.程式碼複雜,無法被一些搜尋引擎索引到,這一點很關鍵,現在的搜尋引擎爬蟲還不能很好的處理iframe中的內容,所以使用iframe會不利於搜尋引擎優化。
4.很多的移動裝置(PDA 手機)無法完全顯示框架,裝置相容性差。
5.iframe框架頁面會增加伺服器的http請求,對於大型網站是不可取的。
現在基本上都是用Ajax來代替iframe,所以iframe已經漸漸的退出了前端開發。

22. label的作用是什麼?是怎麼用的?

例子1: 點選" 使用者名稱:" 就可以定位游標到輸入框

<form><label for="myid "> 使用者名稱:</label>
<input type="text" id="myid" /></form>複製程式碼

例子2: 點選" 使用者名稱:" 或按鍵alt+1, 都可以定位游標到輸入框

<form>
    <label for="myid" accesskey="1"> 使用者名稱:</label>
    <input type="text" id="myid" tabindex="1" />
</form>複製程式碼

總結:

FOR 屬性

功能:表示Label 標籤要繫結的HTML 元素,你點選這個標籤的時候,所繫結的元素將獲取焦點。

用法:<Label FOR="InputBox"> 姓名</Label><input ID="InputBox" type="text"/>

ACCESSKEY 屬性

功能:表示訪問Label 標籤所繫結的元素的熱鍵,當您按下熱鍵,所繫結的元素將獲取焦點。

用法:<Label FOR="InputBox" ACCESSKEY="N"> 姓名</Label><input ID="InputBox" tabindex="N" type="text"/>

侷限性:accessKey 屬性所設定的快捷鍵不能與瀏覽器的快捷鍵衝突,否則將優先啟用瀏覽器的快捷鍵。

23. HTML5的form如何關閉自動完成功能?

HTML的輸入框可以擁有自動完成的功能,當你往輸入框輸入內容的時候,瀏覽器會從你以前的同名輸入框的歷史記錄中查詢出類似的內容並列在輸入框下面,這樣就不用全部輸入進去了,直接選擇列表中的專案就可以了。但有時候我們希望關閉輸入框的自動完成功能,例如當使用者輸入內容的時候,我們希望使用AJAX技術從資料庫搜尋並列舉而不是在使用者的歷史記錄中搜尋。

關閉輸入框的自動完成功能有3種方法:

1、在IE的Internet選項選單裡的內容--自動完成裡面設定

2、設定form的autocomplete為"on"或者"off"來開啟或者關閉自動完成功能

3、設定輸入框的autocomplete為"on"或者"off"來開啟或者關閉該輸入框的自動完成功能

24. 實現不用 border 畫出1px高的線

<div style="height:1px;overflow:hidden;background:red"></div>複製程式碼

25. title 與h1 的區別,b 與 strong的區別,i 與 em的區別

1. b和strong的區別

盲人朋友使用閱讀裝置閱讀網路時:<strong>會重讀,<b>不會

兩者雖然在網頁中顯示效果一樣,但實際目的不同。

<b>這個標籤對應 bold,即文字加粗,其目的僅僅是為了加粗顯示文字,是一種樣式/風格需求;

<strong>這個標籤意思是加強字元的語氣,表示該文字比較重要,提醒讀者/終端注意。為了達到這個目的,瀏覽器等終端將其加粗顯示;

總結:<b>為了加粗而加粗,<strong>為了標明重點而加粗,也可以用其它方式來強調,比如下劃線,比如字型加大,比如紅色,等等,可以通過css來改變strong的具體表現。

2. i和em的區別

同樣,I是Italic(斜體),而em是emphasize(強調)。

3. title與h1的聯絡:

從網站角度看,title 更重於網站資訊。title 可以直接告訴搜尋引擎和使用者這個網站是關於什麼主題和內容的。

從文章角度看,h1則是用於概括文章主題。使用者進入內容頁,想看到的當然就是文章的內容,h1文章標題就是最重要的。文章標題最好只有一個,多個h1會導致搜尋引擎不知道這個頁面哪個標題內容最重要,導致淡化這個頁面的標題和關鍵詞,起不到突出主題的效果。

區別:h1突出文章主題,面對使用者,更突出其視覺效果,突出網站標題或關鍵字用title。一篇文章,一個頁面最好只用一個h1,多個h1會稀釋主題。一個網站可以有多個title,最好一個單頁用一個title,以便突出網站頁面主體資訊,從seo看,title權重比h1高,適用性比h1廣。標記了h1的文字頁面給予的權重會比頁面內其他權重高很多。一個好的網站是h1和title並存,既突出h1文章主題,又突出網站主題和關鍵字。達到雙重優化網站的效果。


相關文章