面試題

?
前端面試題匯總

一、HTML和CSS 21

  1. 你做的頁(yè)面在哪些流覽器測(cè)試過?這些瀏覽器的內(nèi)核分別是什么? 21
  2. 每個(gè)HTML文件里開頭都有個(gè)很重要的東西,Doctype,知道這是干什么的嗎? 21
  3. Quirks模式是什么?它和Standards模式有什么區(qū)別 21
  4. div+css的布局較table布局有什么優(yōu)點(diǎn)? 22
  5. img的alt與title有何異同? strong與em的異同? 22
  6. 你能描述一下漸進(jìn)增強(qiáng)和優(yōu)雅降級(jí)之間的不同嗎? 23
  7. 為什么利用多個(gè)域名來存儲(chǔ)網(wǎng)站資源會(huì)更有效? 23
  8. 請(qǐng)談一下你對(duì)網(wǎng)頁(yè)標(biāo)準(zhǔn)和標(biāo)準(zhǔn)制定機(jī)構(gòu)重要性的理解。 24
  9. 請(qǐng)描述一下cookies,sessionStorage和localStorage的區(qū)別? 24
  10. 簡(jiǎn)述一下src與href的區(qū)別。 24
  11. 知道的網(wǎng)頁(yè)制作會(huì)用到的圖片格式有哪些? 25
  12. 知道什么是微格式嗎?談?wù)劺斫狻T谇岸藰?gòu)建中應(yīng)該考慮微格式嗎? 25
  13. 在css/js代碼上線之后開發(fā)人員經(jīng)常會(huì)優(yōu)化性能,從用戶刷新網(wǎng)頁(yè)開始,一次js請(qǐng)求一般情況下有哪些地方會(huì)有緩存處理? 25
  14. 一個(gè)頁(yè)面上有大量的圖片(大型電商網(wǎng)站),加載很慢,你有哪些方法優(yōu)化這些圖片的加載,給用戶更好的體驗(yàn)。 25
  15. 你如何理解HTML結(jié)構(gòu)的語義化? 26
  16. 談?wù)勔郧岸私嵌瘸霭l(fā)做好SEO需要考慮什么? 27
  17. 有哪項(xiàng)方式可以對(duì)一個(gè)DOM設(shè)置它的CSS樣式? 28
  18. CSS都有哪些選擇器? 28
  19. CSS中可以通過哪些屬性定義,使得一個(gè)DOM元素不顯示在瀏覽器可視范圍內(nèi)? 29
  20. 超鏈接訪問過后hover樣式就不出現(xiàn)的問題是什么?如何解決? 29
  21. 什么是Css Hack?ie6,7,8的hack分別是什么? 30
  22. 行內(nèi)元素和塊級(jí)元素的具體區(qū)別是什么?行內(nèi)元素的padding和margin可設(shè)置嗎? 30
  23. 什么是外邊距重疊?重疊的結(jié)果是什么? 31
  24. rgba()和opacity的透明效果有什么不同? 31
  25. css中可以讓文字在垂直和水平方向上重疊的兩個(gè)屬性是什么? 31
  26. 如何垂直居中一個(gè)浮動(dòng)元素? 31
  27. px和em的區(qū)別。 32
  28. 描述一個(gè)”reset”的CSS文件并如何使用它。知道normalize.css嗎?你了解他們的不同之處? 33
  29. Sass、LESS是什么?大家為什么要使用他們? 33
  30. display:none與visibility:hidden的區(qū)別是什么? 33
  31. CSS中l(wèi)ink和@import的區(qū)別是: 34
  32. 簡(jiǎn)介盒子模型: 34
  33. 為什么要初始化樣式? 34
  34. BFC是什么? 35
  35. html語義化是什么? 35
  36. Doctype的作用?嚴(yán)格模式與混雜模式的區(qū)別? 35
  37. IE的雙邊距BUG:塊級(jí)元素float后設(shè)置橫向margin,ie6顯示的margin比設(shè)置的較大。 35
  38. HTML與XHTML——二者有什么區(qū)別? 35
  39. html常見兼容性問題? 36
  40. 對(duì)WEB標(biāo)準(zhǔn)以及W3C的理解與認(rèn)識(shí) 36
  41. 行內(nèi)元素有哪些?塊級(jí)元素有哪些?CSS的盒模型? 36
  42. 前端頁(yè)面有哪三層構(gòu)成,分別是什么?作用是什么? 37
  43. Doctype作用? 嚴(yán)格模式與混雜模式-如何觸發(fā)這兩種模式,區(qū)分它們有何意義? 37
  44. 行內(nèi)元素有哪些?塊級(jí)元素有哪些? 空(void)元素有那些? 37
  45. CSS的盒子模型? 37
  46. CSS 選擇符有哪些?哪些屬性可以繼承??jī)?yōu)先級(jí)算法如何計(jì)算? CSS3新增偽類有那些? 37
  47. 如何居中div,如何居中一個(gè)浮動(dòng)元素? 38
  48. 瀏覽器的內(nèi)核分別是什么?經(jīng)常遇到的瀏覽器的兼容性有哪些?原因,解決方法是什么,常用hack的技巧 ? 39
  49. 列出display的值,說明他們的作用。position的值, relative和absolute定位原點(diǎn)是? 40
  50. absolute的containing block計(jì)算方式跟正常流有什么不同? 40
  51. 對(duì)WEB標(biāo)準(zhǔn)以及W3C的理解與認(rèn)識(shí) 41
  52. css的基本語句構(gòu)成是? 41
  53. 瀏覽器標(biāo)準(zhǔn)模式和怪異模式之間的區(qū)別是什么? 41
  54. CSS中可以通過哪些屬性定義,使得一個(gè)DOM元素不顯示在瀏覽器可視范圍內(nèi)? 41
  55. 行內(nèi)元素和塊級(jí)元素的具體區(qū)別是什么?行內(nèi)元素的padding和margin可設(shè)置嗎? 42
  56. 什么是外邊距重疊?重疊的結(jié)果是什么? 42
    58、描述一個(gè)"reset"的CSS文件并如何使用它。知道normalize.css嗎?你了解他們的不同之處? 42
  57. 說display屬性有哪些?可以做什么? 43
  58. 哪些css屬性可以繼承? 43
  59. css優(yōu)先級(jí)算法如何計(jì)算? 43
  60. b標(biāo)簽和strong標(biāo)簽,i標(biāo)簽和em標(biāo)簽的區(qū)別? 43
  61. 有那些行內(nèi)元素、有哪些塊級(jí)元素、盒模型? 43
  62. 有哪些選擇符,優(yōu)先級(jí)的計(jì)算公式是什么?行內(nèi)樣式和!important哪個(gè)優(yōu)先級(jí)高? 45
  63. 我想讓行內(nèi)元素跟上面的元素距離10px,加margin-top和padding-top可以嗎? 45
  64. CSS的盒模型由什么組成? 45
  65. 說說display屬性有哪些?可以做什么? 46
  66. 哪些css屬性可以繼承? 46
  67. css優(yōu)先級(jí)算法如何計(jì)算? 46

一、HTML和CSS

1. 你做的頁(yè)面在哪些流覽器測(cè)試過?這些瀏覽器的內(nèi)核分別是什么?

IE: trident內(nèi)核
Firefox:gecko內(nèi)核
Safari:webkit內(nèi)核
Opera:以前是presto內(nèi)核,Opera現(xiàn)已改用Google Chrome的Blink內(nèi)核
Chrome:Blink(基于webkit,Google與Opera Software共同開發(fā))

2. 每個(gè)HTML文件里開頭都有個(gè)很重要的東西,Doctype,知道這是干什么的嗎?

<!DOCTYPE> 聲明位于文檔中的最前面的位置,處于 <html> 標(biāo)簽之前。此標(biāo)簽可告知瀏覽器文檔使用哪種 HTML 或 XHTML 規(guī)范。(重點(diǎn):告訴瀏覽器按照何種規(guī)范解析頁(yè)面)

3. Quirks(怪癖)模式是什么?它和Standards(標(biāo)準(zhǔn))模式有什么區(qū)別

從IE6開始,引入了Standards模式,標(biāo)準(zhǔn)模式中,瀏覽器嘗試給符合標(biāo)準(zhǔn)的文檔在規(guī)范上的正確處理達(dá)到在指定瀏覽器中的程度。
在IE6之前CSS還不夠成熟,所以IE5等之前的瀏覽器對(duì)CSS的支持很差, IE6將對(duì)CSS提供更好的支持,然而這時(shí)的問題就來了,因?yàn)橛泻芏囗?yè)面是基于舊的布局方式寫的,而如果IE6 支持CSS則將令這些頁(yè)面顯示不正常,如何在即保證不破壞現(xiàn)有頁(yè)面,又提供新的渲染機(jī)制呢?
在寫程序時(shí)我們也會(huì)經(jīng)常遇到這樣的問題,如何保證原來的接口不變,又提供更強(qiáng)大的功能,尤其是新功能不兼容舊功能時(shí)。遇到這種問題時(shí)的一個(gè)常見做法是增加參數(shù)和分支,即當(dāng)某個(gè)參數(shù)為真時(shí),我們就使用新功能,而如果這個(gè)參數(shù) 不為真時(shí),就使用舊功能,這樣就能不破壞原有的程序,又提供新功能。IE6也是類似這樣做的,它將DTD(文檔類型定義)當(dāng)成了這個(gè)“參數(shù)”,因?yàn)橐郧暗捻?yè)面大家都不會(huì)去寫DTD,所以IE6就假定 如果寫了DTD,就意味著這個(gè)頁(yè)面將采用對(duì)CSS支持更好的布局,而如果沒有,則采用兼容之前的布局方式。這就是Quirks模式(怪癖模式,詭異模式,怪異模式)。
區(qū)別:
總體會(huì)有布局、樣式解析和腳本執(zhí)行三個(gè)方面的區(qū)別。
盒模型:在W3C標(biāo)準(zhǔn)中,如果設(shè)置一個(gè)元素的寬度和高度,指的是元素內(nèi)容的寬度和高度,而在Quirks 模式下,IE的寬度和高度還包含了padding和border。

設(shè)置行內(nèi)元素的高寬:在Standards模式下,給<span>等行內(nèi)元素設(shè)置wdith和height都不會(huì)生效,而在quirks模式下,則會(huì)生效。
設(shè)置百分比的高度:在standards模式下,一個(gè)元素的高度是由其包含的內(nèi)容來決定的,如果父元素沒有設(shè)置百分比的高度,子元素設(shè)置一個(gè)百分比的高度是無效的
用margin:0 auto設(shè)置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下卻會(huì)失效。
(還有很多,答出什么不重要,關(guān)鍵是看他答出的這些是不是自己經(jīng)驗(yàn)遇到的,還是說都是看文章看的,甚至完全不知道。)

4. div+css的布局較table布局有什么優(yōu)點(diǎn)?

改版的時(shí)候更方便 只要改css文件。
頁(yè)面加載速度更快、結(jié)構(gòu)化清晰、頁(yè)面顯示簡(jiǎn)潔。
表現(xiàn)與結(jié)構(gòu)相分離。
易于優(yōu)化(seo)搜索引擎更友好,排名更容易靠前。

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

a:alt(alt text):為不能顯示圖像、窗體或applets的用戶代理(UA),alt屬性用來指定替換文字。替換文字的語言由lang屬性指定。(在IE瀏覽器下會(huì)在沒有title時(shí)把a(bǔ)lt當(dāng)成 tool tip顯示)
title(tool tip):該屬性為設(shè)置該屬性的元素提供建議性的信息。
strong:粗體強(qiáng)調(diào)標(biāo)簽,強(qiáng)調(diào),表示內(nèi)容的重要性
em:斜體強(qiáng)調(diào)標(biāo)簽,更強(qiáng)烈強(qiáng)調(diào),表示內(nèi)容的強(qiáng)調(diào)點(diǎn)

6. 你能描述一下漸進(jìn)增強(qiáng)和優(yōu)雅降級(jí)之間的不同嗎?

漸進(jìn)增強(qiáng) progressive enhancement:針對(duì)低版本瀏覽器進(jìn)行構(gòu)建頁(yè)面,保證最基本的功能,然后再針對(duì)高級(jí)瀏覽器進(jìn)行效果、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗(yàn)。
優(yōu)雅降級(jí) graceful degradation:一開始就構(gòu)建完整的功能,然后再針對(duì)低版本瀏覽器進(jìn)行兼容。
區(qū)別:優(yōu)雅降級(jí)是從復(fù)雜的現(xiàn)狀開始,并試圖減少用戶體驗(yàn)的供給,而漸進(jìn)增強(qiáng)則是從一個(gè)非?;A(chǔ)的,能夠起作用的版本開始,并不斷擴(kuò)充,以適應(yīng)未來環(huán)境的需要。降級(jí)(功能衰減)意味著往回看;而漸進(jìn)增強(qiáng)則意味著朝前看,同時(shí)保證其根基處于安全地帶。
“優(yōu)雅降級(jí)”觀點(diǎn)
“優(yōu)雅降級(jí)”觀點(diǎn)認(rèn)為應(yīng)該針對(duì)那些最高級(jí)、最完善的瀏覽器來設(shè)計(jì)網(wǎng)站。而將那些被認(rèn)為“過時(shí)”或有功能缺失的瀏覽器下的測(cè)試工作安排在開發(fā)周期的最后階段,并把測(cè)試對(duì)象限定為主流瀏覽器(如 IE、Mozilla 等)的前一個(gè)版本。
在這種設(shè)計(jì)范例下,舊版的瀏覽器被認(rèn)為僅能提供“簡(jiǎn)陋卻無妨 (poor, but passable)” 的瀏覽體驗(yàn)。你可以做一些小的調(diào)整來適應(yīng)某個(gè)特定的瀏覽器。但由于它們并非我們所關(guān)注的焦點(diǎn),因此除了修復(fù)較大的錯(cuò)誤之外,其它的差異將被直接忽略。
“漸進(jìn)增強(qiáng)”觀點(diǎn)
“漸進(jìn)增強(qiáng)”觀點(diǎn)則認(rèn)為應(yīng)關(guān)注于內(nèi)容本身。
內(nèi)容是我們建立網(wǎng)站的誘因。有的網(wǎng)站展示它,有的則收集它,有的尋求,有的操作,還有的網(wǎng)站甚至?xí)陨系姆N種,但相同點(diǎn)是它們?nèi)忌婕暗絻?nèi)容。這使得“漸進(jìn)增強(qiáng)”成為一種更為合理的設(shè)計(jì)范例。這也是它立即被 Yahoo! 所采納并用以構(gòu)建其“分級(jí)式瀏覽器支持 (Graded Browser Support)”策略的原因所在。
那么問題來了?,F(xiàn)在產(chǎn)品經(jīng)理看到IE6,7,8網(wǎng)頁(yè)效果相對(duì)高版本現(xiàn)代瀏覽器少了很多圓角,陰影(CSS3),要求兼容(使用圖片背景,放棄CSS3),你會(huì)如何說服他?

7. 為什么利用多個(gè)域名來存儲(chǔ)網(wǎng)站資源會(huì)更有效?

CDN緩存更方便
突破瀏覽器并發(fā)限制
節(jié)約cookie帶寬
節(jié)約主域名的連接數(shù),優(yōu)化頁(yè)面響應(yīng)速度
防止不必要的安全問題

8. 請(qǐng)談一下你對(duì)網(wǎng)頁(yè)標(biāo)準(zhǔn)和標(biāo)準(zhǔn)制定機(jī)構(gòu)重要性的理解。

網(wǎng)頁(yè)標(biāo)準(zhǔn)和標(biāo)準(zhǔn)制定機(jī)構(gòu)都是為了能讓web發(fā)展的更‘健康’,開發(fā)者遵循統(tǒng)一的標(biāo)準(zhǔn),降低開發(fā)難度,開發(fā)成本,SEO也會(huì)更好做,也不會(huì)因?yàn)闉E用代碼導(dǎo)致各種BUG、安全問題,最終提高網(wǎng)站易用性。

9. 請(qǐng)描述一下cookies,sessionStorage和localStorage的區(qū)別?

sessionStorage用于本地存儲(chǔ)一個(gè)會(huì)話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個(gè)會(huì)話中的頁(yè)面才能訪問并且當(dāng)會(huì)話結(jié)束后數(shù)據(jù)也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲(chǔ),僅僅是會(huì)話級(jí)別的存儲(chǔ)。而localStorage用于持久化的本地存儲(chǔ),除非主動(dòng)刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會(huì)過期的。
web storage和cookie的區(qū)別
Web Storage的概念和cookie相似,區(qū)別是它是為了更大容量存儲(chǔ)設(shè)計(jì)的。Cookie的大小是受限的,并且每次你請(qǐng)求一個(gè)新的頁(yè)面的時(shí)候Cookie都會(huì)被發(fā)送過去,這樣無形中浪費(fèi)了帶寬,另外cookie還需要指定作用域,不可以跨域調(diào)用。
除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發(fā)者自己封裝setCookie,getCookie。但是Cookie也是不可以或缺的:Cookie的作用是與服務(wù)器進(jìn)行交互,作為HTTP規(guī)范的一部分而存在 ,而Web Storage僅僅是為了在本地“存儲(chǔ)”數(shù)據(jù)而生。

10. 簡(jiǎn)述一下src與href的區(qū)別。

src用于替換當(dāng)前元素,href用于在當(dāng)前文檔和引用資源之間確立聯(lián)系。
src是source的縮寫,指向外部資源的位置,指向的內(nèi)容將會(huì)嵌入到文檔中當(dāng)前標(biāo)簽所在位置;在請(qǐng)求src資源時(shí)會(huì)將其指向的資源下載并應(yīng)用到文檔內(nèi),例如js腳本,img圖片和frame等元素。
<script src =”js.js”></script>
當(dāng)瀏覽器解析到該元素時(shí),會(huì)暫停其他資源的下載和處理,直到將該資源加載、編譯、執(zhí)行完畢,圖片和框架等元素也如此,類似于將所指向資源嵌入當(dāng)前標(biāo)簽內(nèi)。這也是為什么將js腳本放在底部而不是頭部。
href是Hypertext Reference的縮寫,指向網(wǎng)絡(luò)資源所在位置,建立和當(dāng)前元素(錨點(diǎn))或當(dāng)前文檔(鏈接)之間的鏈接,如果我們?cè)谖臋n中添加
<link href=”common.css” rel=”stylesheet”/>
那么瀏覽器會(huì)識(shí)別該文檔為css文件,就會(huì)并行下載資源并且不會(huì)停止對(duì)當(dāng)前文檔的處理。這也是為什么建議使用link方式來加載css,而不是使用@import方式。

11. 知道的網(wǎng)頁(yè)制作會(huì)用到的圖片格式有哪些?

png-8,png-24,jpeg,gif,svg。
但是上面的那些都不是面試官想要的最后答案。面試官希望聽到是Webp。(是否有關(guān)注新技術(shù),新鮮事物)
科普一下Webp:WebP格式,谷歌(google)開發(fā)的一種旨在加快圖片加載速度的圖片格式。圖片壓縮體積大約只有JPEG的2/3,并能節(jié)省大量的服務(wù)器帶寬資源和數(shù)據(jù)空間。Facebook Ebay等知名網(wǎng)站已經(jīng)開始測(cè)試并使用WebP格式。
在質(zhì)量相同的情況下,WebP格式圖像的體積要比JPEG格式圖像小40%

12. 知道什么是微格式嗎?談?wù)劺斫?。在前端?gòu)建中應(yīng)該考慮微格式嗎?

微格式(Microformats)是一種讓機(jī)器可讀的語義化XHTML詞匯的集合,是結(jié)構(gòu)化數(shù)據(jù)的開放標(biāo)準(zhǔn)。是為特殊應(yīng)用而制定的特殊格式。
優(yōu)點(diǎn):將智能數(shù)據(jù)添加到網(wǎng)頁(yè)上,讓網(wǎng)站內(nèi)容在搜索引擎結(jié)果界面可以顯示額外的提示。(應(yīng)用范例:豆瓣,有興趣自行g(shù)oogle)

13. 在css/js代碼上線之后開發(fā)人員經(jīng)常會(huì)優(yōu)化性能,從用戶刷新網(wǎng)頁(yè)開始,一次js請(qǐng)求一般情況下有哪些地方會(huì)有緩存處理?

答案:dns(域名服務(wù)器)緩存,cdn()緩存,瀏覽器緩存,服務(wù)器緩存。

14. 一個(gè)頁(yè)面上有大量的圖片(大型電商網(wǎng)站),加載很慢,你有哪些方法優(yōu)化這些圖片的加載,給用戶更好的體驗(yàn)。

圖片懶加載,在頁(yè)面上的未可視區(qū)域可以添加一個(gè)滾動(dòng)條事件,判斷圖片位置與瀏覽器頂端的距離與頁(yè)面的距離,如果前者小于后者,優(yōu)先加載。
如果為幻燈片、相冊(cè)等,可以使用圖片預(yù)加載技術(shù),將當(dāng)前展示圖片的前一張和后一張優(yōu)先下載。
如果圖片為css圖片,可以使用CSSsprite,SVGsprite,Iconfont、Base64等技術(shù)。
如果圖片過大,可以使用特殊編碼的圖片,加載時(shí)會(huì)先加載一張壓縮的特別厲害的縮略圖,以提高用戶體驗(yàn)。
如果圖片展示區(qū)域小于圖片的真實(shí)大小,則因在服務(wù)器端根據(jù)業(yè)務(wù)需要先行進(jìn)行圖片壓縮,圖片壓縮后大小與展示一致。

15. 你如何理解HTML結(jié)構(gòu)的語義化?

去掉或樣式丟失的時(shí)候能讓頁(yè)面呈現(xiàn)清晰的結(jié)構(gòu):
html本身是沒有表現(xiàn)的,我們看到例如 < h1 >是粗體,字體大小2em,加粗;< strong >是加粗的,不要認(rèn)為這是html的表現(xiàn),這些其實(shí)html默認(rèn)的css樣式在起作用,所以去掉或樣式丟失的時(shí)候能讓頁(yè)面呈現(xiàn)清晰的結(jié)構(gòu)不是語義化的HTML結(jié)構(gòu)的優(yōu)點(diǎn),但是瀏覽器都有有默認(rèn)樣式,默認(rèn)樣式的目的也是為了更好的表達(dá)html的語義,可以說瀏覽器的默認(rèn)樣式和語義化的HTML結(jié)構(gòu)是不可分割的。
屏幕閱讀器(如果訪客有視障)會(huì)完全根據(jù)你的標(biāo)記來“讀”你的網(wǎng)頁(yè).
例如,如果你使用的含語義的標(biāo)記,屏幕閱讀器就會(huì)“逐個(gè)拼出”你的單詞,而不是試著去對(duì)它完整發(fā)音.
PDA、手機(jī)等設(shè)備可能無法像普通電腦的瀏覽器一樣來渲染網(wǎng)頁(yè)(通常是因?yàn)檫@些設(shè)備對(duì)CSS的支持較弱)
使用語義標(biāo)記可以確保這些設(shè)備以一種有意義的方式來渲染網(wǎng)頁(yè).理想情況下,觀看設(shè)備的任務(wù)是符合設(shè)備本身的條件來渲染網(wǎng)頁(yè).
語義標(biāo)記為設(shè)備提供了所需的相關(guān)信息,就省去了你自己去考慮所有可能的顯示情況(包括現(xiàn)有的或者將來新的設(shè)備).例如,一部手機(jī)可以選擇使一段標(biāo)記了標(biāo)題的文字以粗體顯示.而掌上電腦可能會(huì)以比較大的字體來顯示.無論哪種方式一旦你對(duì)文本標(biāo)記為標(biāo)題,您就可以確信讀取設(shè)備將根據(jù)其自身的條件來合適地顯示頁(yè)面.
搜索引擎的爬蟲也依賴于標(biāo)記來確定上下文和各個(gè)關(guān)鍵字的權(quán)重
過去你可能還沒有考慮搜索引擎的爬蟲也是網(wǎng)站的“訪客”,但現(xiàn)在它們他們實(shí)際上是極其寶貴的用戶.沒有他們的話,搜索引擎將無法索引你的網(wǎng)站,然后一般用戶將很難過來訪問.
你的頁(yè)面是否對(duì)爬蟲容易理解非常重要,因?yàn)榕老x很大程度上會(huì)忽略用于表現(xiàn)的標(biāo)記,而只注重語義標(biāo)記.
因此,如果頁(yè)面文件的標(biāo)題被標(biāo)記,而不是,那么這個(gè)頁(yè)面在搜索結(jié)果的位置可能會(huì)比較靠后.除了提升易用性外,語義標(biāo)記有利于正確使用CSS和JavaScript,因?yàn)槠浔旧硖峁┝嗽S多“鉤鉤”來應(yīng)用頁(yè)面的樣式與行為.
SEO主要還是靠你網(wǎng)站的內(nèi)容和外部鏈接的。
便于團(tuán)隊(duì)開發(fā)和維護(hù)
W3C給我們定了一個(gè)很好的標(biāo)準(zhǔn),在團(tuán)隊(duì)中大家都遵循這個(gè)標(biāo)準(zhǔn),可以減少很多差異化的東西,方便開發(fā)和維護(hù),提高開發(fā)效率,甚至實(shí)現(xiàn)模塊化開發(fā)。

16. 談?wù)勔郧岸私嵌瘸霭l(fā)做好SEO需要考慮什么?

了解搜索引擎如何抓取網(wǎng)頁(yè)和如何索引網(wǎng)頁(yè)
你需要知道一些搜索引擎的基本工作原理,各個(gè)搜索引擎之間的區(qū)別,搜索機(jī)器人(SE robot 或叫 web crawler)如何進(jìn)行工作,搜索引擎如何對(duì)搜索結(jié)果進(jìn)行排序等等。
Meta標(biāo)簽優(yōu)化
主要包括主題(Title),網(wǎng)站描述(Description),和關(guān)鍵詞(Keywords)。還有一些其它的隱藏文字比如Author(作者),Category(目錄),Language(編碼語種)等。
如何選取關(guān)鍵詞并在網(wǎng)頁(yè)中放置關(guān)鍵詞
搜索就得用關(guān)鍵詞。關(guān)鍵詞分析和選擇是SEO最重要的工作之一。首先要給網(wǎng)站確定主關(guān)鍵詞(一般在5個(gè)上下),然后針對(duì)這些關(guān)鍵詞進(jìn)行優(yōu)化,包括關(guān)鍵詞密度(Density),相關(guān)度(Relavancy),突出性(Prominency)等等。
了解主要的搜索引擎
雖然搜索引擎有很多,但是對(duì)網(wǎng)站流量起決定作用的就那么幾個(gè)。比如英文的主要有Google,Yahoo,Bing等;中文的有百度,搜狗,有道等。不同的搜索引擎對(duì)頁(yè)面的抓取和索引、排序的規(guī)則都不一樣。還要了解各搜索門戶和搜索引擎之間的關(guān)系,比如AOL網(wǎng)頁(yè)搜索用的是Google的搜索技術(shù),MSN用的是Bing的技術(shù)。
主要的互聯(lián)網(wǎng)目錄
Open Directory自身不是搜索引擎,而是一個(gè)大型的網(wǎng)站目錄,他和搜索引擎的主要區(qū)別是網(wǎng)站內(nèi)容的收集方式不同。目錄是人工編輯的,主要收錄網(wǎng)站主頁(yè);搜索引擎是自動(dòng)收集的,除了主頁(yè)外還抓取大量的內(nèi)容頁(yè)面。
按點(diǎn)擊付費(fèi)的搜索引擎
搜索引擎也需要生存,隨著互聯(lián)網(wǎng)商務(wù)的越來越成熟,收費(fèi)的搜索引擎也開始大行其道。最典型的有Overture和百度,當(dāng)然也包括Google的廣告項(xiàng)目Google Adwords。越來越多的人通過搜索引擎的點(diǎn)擊廣告來定位商業(yè)網(wǎng)站,這里面也大有優(yōu)化和排名的學(xué)問,你得學(xué)會(huì)用最少的廣告投入獲得最多的點(diǎn)擊。
搜索引擎登錄
網(wǎng)站做完了以后,別躺在那里等著客人從天而降。要讓別人找到你,最簡(jiǎn)單的辦法就是將網(wǎng)站提交(submit)到搜索引擎。如果你的是商業(yè)網(wǎng)站,主要的搜索引擎和目錄都會(huì)要求你付費(fèi)來獲得收錄(比如Yahoo要299美元),但是好消息是(至少到目前為止)最大的搜索引擎Google目前還是免費(fèi),而且它主宰著60%以上的搜索市場(chǎng)。
鏈接交換和鏈接廣泛度(Link Popularity)
網(wǎng)頁(yè)內(nèi)容都是以超文本(Hypertext)的方式來互相鏈接的,網(wǎng)站之間也是如此。除了搜索引擎以外,人們也每天通過不同網(wǎng)站之間的鏈接來Surfing(“沖浪”)。其它網(wǎng)站到你的網(wǎng)站的鏈接越多,你也就會(huì)獲得更多的訪問量。更重要的是,你的網(wǎng)站的外部鏈接數(shù)越多,會(huì)被搜索引擎認(rèn)為它的重要性越大,從而給你更高的排名。
合理的標(biāo)簽使用

17. 有哪項(xiàng)方式可以對(duì)一個(gè)DOM設(shè)置它的CSS樣式?

外部樣式表,引入一個(gè)外部css文件
內(nèi)部樣式表,將css代碼放在 <head> 標(biāo)簽內(nèi)部
內(nèi)聯(lián)樣式,將css樣式直接定義在 HTML 元素內(nèi)部

18. CSS都有哪些選擇器?

派生選擇器(用HTML標(biāo)簽申明)
id選擇器(用DOM的ID申明)
類選擇器(用一個(gè)樣式類名申明)
屬性選擇器(用DOM的屬性申明,屬于CSS2,IE6不支持,不常用,不知道就算了)
除了前3種基本選擇器,還有一些擴(kuò)展選擇器,包括
后代選擇器(利用空格間隔,比如div .a{ })
群組選擇器(利用逗號(hào)間隔,比如p,div,#a{ })
那么問題來了,CSS選擇器的優(yōu)先級(jí)是怎么樣定義的?
基本原則:
一般而言,選擇器越特殊,它的優(yōu)先級(jí)越高。也就是選擇器指向的越準(zhǔn)確,它的優(yōu)先級(jí)就越高。
復(fù)雜的計(jì)算方法:
用1表示派生選擇器的優(yōu)先級(jí)
用10表示類選擇器的優(yōu)先級(jí)
用100標(biāo)示ID選擇器的優(yōu)先級(jí)
div.test1 .span var 優(yōu)先級(jí) 1+10 +10 +1
span#xxx .songs li 優(yōu)先級(jí)1+100 + 10 + 1
警號(hào)#xx li 優(yōu)先級(jí) 100 +1
那么問題來了,看下列代碼,<p>標(biāo)簽內(nèi)的文字是什么顏色的?
<style>
.classA{ color:blue;}
.classB{ color:red;}
</style>
<body>
<p class='classB classA'> 123 </p>
</body>
答案:red。與樣式定義在文件中的先后順序有關(guān),即是后面的覆蓋前面的,與在<p class=’classB classA’>中的先后關(guān)系無關(guān)。

19. CSS中可以通過哪些屬性定義,使得一個(gè)DOM元素不顯示在瀏覽器可視范圍內(nèi)?

最基本的:
設(shè)置display屬性為none,或者設(shè)置visibility屬性為hidden
技巧性:
設(shè)置寬高為0,設(shè)置透明度為0,設(shè)置z-index位置在-1000em

20. 超鏈接訪問過后hover樣式就不出現(xiàn)的問題是什么?如何解決?

答案:被點(diǎn)擊訪問過的超鏈接樣式不在具有hover和active了,解決方法是改變CSS屬性的排列順序: L-V-H-A(link,visited,hover,active)

21. 什么是Css Hack?ie6,7,8的hack分別是什么?

答案:針對(duì)不同的瀏覽器寫不同的CSS code的過程,就是CSS hack。
示例如下:
警號(hào)#test{
width:300px;
height:300px;
background-color:blue; /firefox/
background-color:red\9; /all ie/
background-color:yellow; /ie8/
+background-color:pink; /ie7/
_background-color:orange; /ie6/ }
:root #test { background-color:purple\9; } /ie9/
@media all and (min-width:0px)
{ #test {background-color:black;} } /opera/
@media screen and (-webkit-min-device-pixel-ratio:0)
{ #test {background-color:gray;} } /chrome and safari/

22. 行內(nèi)元素和塊級(jí)元素的具體區(qū)別是什么?行內(nèi)元素的padding和margin可設(shè)置嗎?

塊級(jí)元素(block)特性:
總是獨(dú)占一行,表現(xiàn)為另起一行開始,而且其后的元素也必須另起一行顯示;
寬度(width)、高度(height)、內(nèi)邊距(padding)和外邊距(margin)都可控制;
內(nèi)聯(lián)元素(inline)特性:
和相鄰的內(nèi)聯(lián)元素在同一行;
寬度(width)、高度(height)、內(nèi)邊距的top/bottom(padding-top/padding-bottom)和外邊距的top/bottom(margin-top/margin-bottom)都不可改變(也就是padding和margin的left和right是可以設(shè)置的),就是里面文字或圖片的大小。
那么問題來了,瀏覽器還有默認(rèn)的天生inline-block元素(擁有內(nèi)在尺寸,可設(shè)置高寬,但不會(huì)自動(dòng)換行),有哪些?
答案:<input> 、< img> 、<button> 、<texterea> 、<label>。

23. 什么是外邊距重疊?重疊的結(jié)果是什么?

外邊距重疊就是margin-collapse。
在CSS當(dāng)中,相鄰的兩個(gè)盒子(可能是兄弟關(guān)系也可能是祖先關(guān)系)的外邊距可以結(jié)合成一個(gè)單獨(dú)的外邊距。這種合并外邊距的方式被稱為折疊,并且因而所結(jié)合成的外邊距稱為折疊外邊距。
折疊結(jié)果遵循下列計(jì)算規(guī)則:
兩個(gè)相鄰的外邊距都是正數(shù)時(shí),折疊結(jié)果是它們兩者之間較大的值。
兩個(gè)相鄰的外邊距都是負(fù)數(shù)時(shí),折疊結(jié)果是兩者絕對(duì)值的較大值。
兩個(gè)外邊距一正一負(fù)時(shí),折疊結(jié)果是兩者的相加的和。

24. rgba()和opacity的透明效果有什么不同?

rgba()和opacity都能實(shí)現(xiàn)透明效果,但最大的不同是opacity作用于元素,以及元素內(nèi)的所有內(nèi)容的透明度,
而rgba()只作用于元素的顏色或其背景色。(設(shè)置rgba透明的元素的子元素不會(huì)繼承透明效果!)

25. css中可以讓文字在垂直和水平方向上重疊的兩個(gè)屬性是什么?

垂直方向:line-height
水平方向:letter-spacing
那么問題來了,關(guān)于letter-spacing的妙用知道有哪些么?
答案:可以用于消除inline-block元素間的換行符空格間隙問題。

26. 如何垂直居中一個(gè)浮動(dòng)元素?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 // 方法一:已知元素的高寬

div1{

background-color:#6699FF;
width:200px;
height:200px;
position: absolute;        //父元素需要相對(duì)定位
top: 50%;
left: 50%;
margin-top:-100px ;   //二分之一的height,width
margin-left: -100px;
}

//方法二:未知元素的高寬

div1{

width: 200px;
height: 200px;
background-color: #6699FF;

margin:auto;
position: absolute;        //父元素需要相對(duì)定位
left: 0;
top: 0;
right: 0;
bottom: 0;
}

那么問題來了,如何垂直居中一個(gè)< img>?(用更簡(jiǎn)便的方法。)
1
2
3
4
5
6 #container //< img>的容器設(shè)置如下
{
display:table-cell;
text-align:center;
vertical-align:middle;
}

27.px和em的區(qū)別。

px和em都是長(zhǎng)度單位,區(qū)別是,px的值是固定的,指定是多少就是多少,計(jì)算比較容易。em得值不是固定的,并且em會(huì)繼承父級(jí)元素的字體大小。
瀏覽器的默認(rèn)字體高都是16px。所以未經(jīng)調(diào)整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。

28、描述一個(gè)”reset”的CSS文件并如何使用它。知道normalize.css嗎?你了解他們的不同之處?

重置樣式非常多,凡是一個(gè)前端開發(fā)人員肯定有一個(gè)常用的重置CSS文件并知道如何使用它們。他們是盲目的在做還是知道為什么這么做呢?原因是不同的瀏覽器對(duì)一些元素有不同的默認(rèn)樣式,如果你不處理,在不同的瀏覽器下會(huì)存在必要的風(fēng)險(xiǎn),或者更有戲劇性的性發(fā)生。
你可能會(huì)用Normalize來代替你的重置樣式文件。它沒有重置所有的樣式風(fēng)格,但僅提供了一套合理的默認(rèn)樣式值。既能讓眾多瀏覽器達(dá)到一致和合理,但又不擾亂其他的東西(如粗體的標(biāo)題)。
在這一方面,無法做每一個(gè)復(fù)位重置。它也確實(shí)有些超過一個(gè)重置,它處理了你永遠(yuǎn)都不用考慮的怪癖,像HTML的audio元素不一致或line-height不一致。

29、Sass、LESS是什么?大家為什么要使用他們?

他們是CSS預(yù)處理器。他是CSS上的一種抽象層。他們是一種特殊的語法/語言編譯成CSS。
例如Less是一種動(dòng)態(tài)樣式語言. 將CSS賦予了動(dòng)態(tài)語言的特性,如變量,繼承,運(yùn)算, 函數(shù). LESS 既可以在客戶端上運(yùn)行 (支持IE 6+, Webkit, Firefox),也可一在服務(wù)端運(yùn)行 (借助 Node.js)。
為什么要使用它們?
結(jié)構(gòu)清晰,便于擴(kuò)展。
可以方便地屏蔽瀏覽器私有語法差異。這個(gè)不用多說,封裝對(duì)瀏覽器語法差異的重復(fù)處理,減少無意義的機(jī)械勞動(dòng)。
可以輕松實(shí)現(xiàn)多重繼承。
完全兼容 CSS 代碼,可以方便地應(yīng)用到老項(xiàng)目中。LESS 只是在 CSS 語法上做了擴(kuò)展,所以老的 CSS 代碼也可以與 LESS 代碼一同編譯。

  1. display:none與visibility:hidden的區(qū)別是什么?
    display : 隱藏對(duì)應(yīng)的元素但不擠占該元素原來的空間。
    visibility: 隱藏對(duì)應(yīng)的元素并且擠占該元素原來的空間。
    即是,使用CSS display:none屬性后,HTML元素(對(duì)象)的寬度、高度等各種屬性值都將“丟失”;而使用visibility:hidden屬性后,HTML元素(對(duì)象)僅僅是在視覺上看不見(完全透明),而它所占據(jù)的空間位置仍然存在。

  2. CSS中l(wèi)ink和@import的區(qū)別是:
    Link屬于html標(biāo)簽,而@import是CSS中提供的
    在頁(yè)面加載的時(shí)候,link會(huì)同時(shí)被加載,而@import引用的CSS會(huì)在頁(yè)面加載完成后才會(huì)加載引用的CSS
    @import只有在ie5以上才可以被識(shí)別,而link是html標(biāo)簽,不存在瀏覽器兼容性問題
    Link引入樣式的權(quán)重大于@import的引用(@import是將引用的樣式導(dǎo)入到當(dāng)前的頁(yè)面中)

  3. 簡(jiǎn)介盒子模型:
    CSS的盒子模型有兩種:IE盒子模型、標(biāo)準(zhǔn)的W3C盒子模型模型
    盒模型:內(nèi)容、內(nèi)邊距、外邊距(一般不計(jì)入盒子實(shí)際寬度)、邊框

  4. 為什么要初始化樣式?
    由于瀏覽器兼容的問題,不同的瀏覽器對(duì)標(biāo)簽的默認(rèn)樣式值不同,若不初始化會(huì)造成不同瀏覽器之間的顯示差異
    但是初始化CSS會(huì)對(duì)搜索引擎優(yōu)化造成小影響

  5. BFC是什么?
    BFC(塊級(jí)格式化上下文),一個(gè)創(chuàng)建了新的BFC的盒子是獨(dú)立布局的,盒子內(nèi)元素的布局不會(huì)影響盒子外面的元素。在同一個(gè)BFC中的兩個(gè)相鄰的盒子在垂直方向發(fā)生margin重疊的問題
    BFC是指瀏覽器中創(chuàng)建了一個(gè)獨(dú)立的渲染區(qū)域,該區(qū)域內(nèi)所有元素的布局不會(huì)影響到區(qū)域外元素的布局,這個(gè)渲染區(qū)域只對(duì)塊級(jí)元素起作用

  6. html語義化是什么?
    當(dāng)頁(yè)面樣式加載失敗的時(shí)候能夠讓頁(yè)面呈現(xiàn)出清晰的結(jié)構(gòu)
    有利于seo優(yōu)化,利于被搜索引擎收錄(更便于搜索引擎的爬蟲程序來識(shí)別)
    便于項(xiàng)目的開發(fā)及維護(hù),使html代碼更具有可讀性,便于其他設(shè)備解析。

  7. Doctype的作用?嚴(yán)格模式與混雜模式的區(qū)別?
    <!DOCTYPE>用于告知瀏覽器該以何種模式來渲染文檔
    嚴(yán)格模式下:頁(yè)面排版及JS解析是以該瀏覽器支持的最高標(biāo)準(zhǔn)來執(zhí)行
    混雜模式:不嚴(yán)格按照標(biāo)準(zhǔn)執(zhí)行,主要用來兼容舊的瀏覽器,向后兼容

  8. IE的雙邊距BUG:塊級(jí)元素float后設(shè)置橫向margin,ie6顯示的margin比設(shè)置的較大。

    解決:加入_display:inline

  9. HTML與XHTML——二者有什么區(qū)別?

  10. 所有的標(biāo)記都必須要有一個(gè)相應(yīng)的結(jié)束標(biāo)記

  11. 所有標(biāo)簽的元素和屬性的名字都必須使用小寫

  12. 所有的 XML 標(biāo)記都必須合理嵌套

  13. 所有的屬性必須用引號(hào) "" 括起來

  14. 把所有 < 和 & 特殊符號(hào)用編碼表示

  15. 給所有屬性賦一個(gè)值

  16. 不要在注釋內(nèi)容中使用 "--"

  17. 圖片必須有說明文字

  18. html常見兼容性問題?
    1.雙邊距BUG float引起的 使用display
    2.3像素問題 使用float引起的 使用dislpay:inline -3px
    3.超鏈接hover 點(diǎn)擊后失效 使用正確的書寫順序 link visited hover active
    4.Ie z-index問題 給父級(jí)添加position:relative
    5.Png 透明 使用js代碼 改
    6.Min-height 最小高度 !Important 解決’
    7.select 在ie6下遮蓋 使用iframe嵌套
    8.為什么沒有辦法定義1px左右的寬度容器(IE6默認(rèn)的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)
    9.IE5-8不支持opacity,解決辦法:
    .opacity {
    opacity: 0.4
    filter: alpha(opacity=60); /* for IE5-7 /
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; /
    for IE 8*/
    }

  19. IE6不支持PNG透明背景,解決辦法: IE6下使用gif圖片

  20. 對(duì)WEB標(biāo)準(zhǔn)以及W3C的理解與認(rèn)識(shí)
    答:標(biāo)簽閉合、標(biāo)簽小寫、不亂嵌套、提高搜索機(jī)器人搜索幾率、使用外 鏈css和js腳本、結(jié)構(gòu)行為表現(xiàn)的分離、文件下載與頁(yè)面速度更快、內(nèi)容能被更多的用戶所訪問、內(nèi)容能被更廣泛的設(shè)備所訪問、更少的代碼和組件,容易維 護(hù)、改版方便,不需要變動(dòng)頁(yè)面內(nèi)容、提供打印版本而不需要復(fù)制內(nèi)容、提高網(wǎng)站易用性。

  21. 行內(nèi)元素有哪些?塊級(jí)元素有哪些?CSS的盒模型?
    答:塊級(jí)元素:div p h1 h2 h3 h4 form ul
    行內(nèi)元素: a b br i span input select
    Css盒模型:內(nèi)容,border ,margin,padding

  22. 前端頁(yè)面有哪三層構(gòu)成,分別是什么?作用是什么?
    答:結(jié)構(gòu)層 Html 表示層 CSS 行為層 js。

  23. Doctype作用? 嚴(yán)格模式與混雜模式-如何觸發(fā)這兩種模式,區(qū)分它們有何意義?
    (1)、<!DOCTYPE> 聲明位于文檔中的最前面,處于 <html> 標(biāo)簽之前。告知瀏覽器的解析器,用什么文檔類型 規(guī)范來解析這個(gè)文檔。
    (2)、嚴(yán)格模式的排版和 JS 運(yùn)作模式是 以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行。
    (3)、在混雜模式中,頁(yè)面以寬松的向后兼容的方式顯示。模擬老式瀏覽器的行為以防止站點(diǎn)無法工作。
    (4)、DOCTYPE不存在或格式不正確會(huì)導(dǎo)致文檔以混雜模式呈現(xiàn)。

  24. 行內(nèi)元素有哪些?塊級(jí)元素有哪些? 空(void)元素有那些?
    (1)CSS規(guī)范規(guī)定,每個(gè)元素都有display屬性,確定該元素的類型,每個(gè)元素都有默認(rèn)的display值,比如div默認(rèn)display屬性值為“block”,成為“塊級(jí)”元素;span默認(rèn)display屬性值為“inline”,是“行內(nèi)”元素。
    (2)行內(nèi)元素有:a b span img input select strong(強(qiáng)調(diào)的語氣) 塊級(jí)元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
    (3)知名的空元素:


    <img><input><link><meta>鮮為人知的是: <area><base><col><command>
    <embed><keygen><param><source><track><wbr>

  25. CSS的盒子模型?
    (1)兩種, IE 盒子模型、標(biāo)準(zhǔn) W3C 盒子模型;IE 的content部分包含了 border 和 pading;
    (2)盒模型: 內(nèi)容(content)、填充(padding)、邊界(margin)、 邊框(border).

  26. CSS 選擇符有哪些?哪些屬性可以繼承??jī)?yōu)先級(jí)算法如何計(jì)算? CSS3新增偽類有那些?

    • 1.id選擇器( # myid)
      2.類選擇器(.myclassname)
      3.標(biāo)簽選擇器(div, h1, p)
      4.相鄰選擇器(h1 + p)
      5.子選擇器(ul < li)
      6.后代選擇器(li a)
      7.通配符選擇器( * )
      8.屬性選擇器(a[rel = "external"])
      9.偽類選擇器(a: hover, li: nth - child)
    • 可繼承: font-size font-family color, UL LI DL DD DT;
    • 不可繼承 :border padding margin width height ;
    • 優(yōu)先級(jí)就近原則,樣式定義最近者為準(zhǔn);
    • 載入樣式以最后載入的定位為準(zhǔn);
      優(yōu)先級(jí)為:
      !important > id > class > tag
      important 比 內(nèi)聯(lián)優(yōu)先級(jí)高
      CSS3新增偽類舉例:
      p:first-of-type 選擇屬于其父元素的首個(gè) <p> 元素的每個(gè) <p> 元素。
      p:last-of-type 選擇屬于其父元素的最后 <p> 元素的每個(gè) <p> 元素。
      p:only-of-type 選擇屬于其父元素唯一的 <p> 元素的每個(gè) <p> 元素。
      p:only-child 選擇屬于其父元素的唯一子元素的每個(gè) <p> 元素。
      p:nth-child(2) 選擇屬于其父元素的第二個(gè)子元素的每個(gè) <p> 元素。
      :enabled、:disabled 控制表單控件的禁用狀態(tài)。
      :checked,單選框或復(fù)選框被選中。
  27. 如何居中div,如何居中一個(gè)浮動(dòng)元素?
    給div設(shè)置一個(gè)寬度,然后添加margin:0 auto屬性
    div{
    width:200px;
    margin:0 auto;
    }
    居中一個(gè)浮動(dòng)元素
    確定容器的寬高 寬500 高 300 的層
    設(shè)置層的外邊距
    .div {
    Width:500px ; height:300px;//高度可以不設(shè)
    Margin: -150px 0 0 -250px;
    position:relative;相對(duì)定位
    background-color:pink;//方便看效果
    left:50%;
    top:50%;
    }

  28. 瀏覽器的內(nèi)核分別是什么?經(jīng)常遇到的瀏覽器的兼容性有哪些?原因,解決方法是什么,常用hack的技巧 ?

    • IE瀏覽器的內(nèi)核Trident、 Mozilla的Gecko、google的WebKit、Opera內(nèi)核Presto;
    • png24為的圖片在iE6瀏覽器上出現(xiàn)背景,解決方案是做成PNG8.
    • 瀏覽器默認(rèn)的margin和padding不同。解決方案是加一個(gè)全局的*{margin:0;padding:0;}來統(tǒng)一。
    • IE6雙邊距bug:塊屬性標(biāo)簽float后,又有橫行的margin情況下,在ie6顯示margin比設(shè)置的大。
      浮動(dòng)ie產(chǎn)生的雙倍距離 #box{ float:left; width:10px; margin:0 0 0 100px;}
      這種情況之下IE會(huì)產(chǎn)生20px的距離,解決方案是在float的標(biāo)簽樣式控制中加入 ——display:inline;將其轉(zhuǎn)化為行內(nèi)屬性。(這個(gè)符號(hào)只有ie6會(huì)識(shí)別)
      漸進(jìn)識(shí)別的方式,從總體中逐漸排除局部。
      首先,巧妙的使用“\9”這一標(biāo)記,將IE游覽器從所有情況中分離出來。
      接著,再次使用“+”將IE8和IE7、IE6分離開來,這樣IE8已經(jīng)獨(dú)立識(shí)別。
      css
      .bb{
      background-color:#f1ee18;/所有識(shí)別/
      .background-color:#00deff\9; /IE6、7、8識(shí)別/
      +background-color:#a200ff;/IE6、7識(shí)別/
      _background-color:#1e0bd1;/IE6識(shí)別/
      }
    • IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性,
      也可以使用getAttribute()獲取自定義屬性;
      Firefox下,只能使用getAttribute()獲取自定義屬性.
      解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性.
    • IE下,even對(duì)象有x,y屬性,但是沒有pageX,pageY屬性;
      Firefox下,event對(duì)象有pageX,pageY屬性,但是沒有x,y屬性.
    • (條件注釋)缺點(diǎn)是在IE瀏覽器下可能會(huì)增加額外的HTTP請(qǐng)求數(shù)。
    • Chrome 中文界面下默認(rèn)會(huì)將小于 12px 的文本強(qiáng)制按照 12px 顯示, 可通過加入 CSS 屬性 -webkit-text-size-adjust: none; 解決.
      超鏈接訪問過后hover樣式就不出現(xiàn)了 被點(diǎn)擊訪問過的超鏈接樣式不在具有hover和active了解決方法是改變CSS屬性的排列順序:
      L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
  29. 列出display的值,說明他們的作用。position的值, relative和absolute定位原點(diǎn)是?

  30. block 象塊類型元素一樣顯示。
    none 缺省值。向行內(nèi)元素類型一樣顯示。
    inline-block 象行內(nèi)元素一樣顯示,但其內(nèi)容象塊類型元素一樣顯示。
    list-item 象塊類型元素一樣顯示,并添加樣式列表標(biāo)記。

  31. position的值
    *absolute
    生成絕對(duì)定位的元素,相對(duì)于 static 定位以外的第一個(gè)父元素進(jìn)行定位。
    *fixed (老IE不支持)
    生成絕對(duì)定位的元素,相對(duì)于瀏覽器窗口進(jìn)行定位。

  • relative
    生成相對(duì)定位的元素,相對(duì)于其正常位置進(jìn)行定位。
  • static 默認(rèn)值。沒有定位,元素出現(xiàn)在正常的流中
    *(忽略 top, bottom, left, right z-index 聲明)。
  • inherit 規(guī)定從父元素繼承 position 屬性的值。
  1. absolute的containing block計(jì)算方式跟正常流有什么不同?
    lock-level boxes
    一個(gè) block-level element ('display' 屬性值為 'block', 'list-item' 或是 ‘table’) 會(huì)生成一個(gè) block-level box,這樣的盒子會(huì)參與到 block-formatting context (一種布局的方式) 中。
    block formatting context
    在這種布局方式下,盒子們自所在的 containing block 頂部起一個(gè)接一個(gè)垂直排列,水平方向上撐滿整個(gè)寬度 (除非內(nèi)部的盒子自己內(nèi)部建立了新的 BFC)。
    containing block
    一般來說,盒子本身就為其子孫建立了 containing block,用來計(jì)算內(nèi)部盒子的位置、大小,而對(duì)內(nèi)部的盒子,具體采用哪個(gè) containing block 來計(jì)算,需要分情況來討論:

若此元素為 inline 元素,則 containing block 為能夠包含這個(gè)元素生成的第一個(gè)和最后一個(gè) inline box 的 padding box (除 margin, border 外的區(qū)域) 的最小矩形;
否則則由這個(gè)祖先元素的 padding box 構(gòu)成。
根元素所在的 containing block 被稱為 initial containing block,在我們常用的瀏覽器環(huán)境下,指的是原點(diǎn)與 canvas 重合,大小和 viewport 相同的矩形;
對(duì)于 position 為 static 或 relative 的元素,其 containing block 為祖先元素中最近的 block container box 的 content box (除 margin, border, padding 外的區(qū)域);
對(duì)于 position:fixed 的元素,其 containing block 由 viewport 建立;
對(duì)于 position:absolute 的元素,則是先找到其祖先元素中最近的 position 屬性非 static 的元素,然后判斷:
如果都找不到,則為 initial containing block。

  1. 對(duì)WEB標(biāo)準(zhǔn)以及W3C的理解與認(rèn)識(shí)
    標(biāo)簽閉合、標(biāo)簽小寫、不亂嵌套、提高搜索機(jī)器人搜索幾率、使用外 鏈css和js腳本、結(jié)構(gòu)行為表現(xiàn)的分離、文件下載與頁(yè)面速度更快、內(nèi)容能被更多的用戶所訪問、內(nèi)容能被更廣泛的設(shè)備所訪問、更少的代碼和組件,容易維 護(hù)、改版方便,不需要變動(dòng)頁(yè)面內(nèi)容、提供打印版本而不需要復(fù)制內(nèi)容、提高網(wǎng)站易用性;
  2. css的基本語句構(gòu)成是?
    選擇器{屬性1:值1;屬性2:值2;……}
  3. 瀏覽器標(biāo)準(zhǔn)模式和怪異模式之間的區(qū)別是什么?
    盒子模型 渲染模式的不同
    使用 window.top.document.compatMode 可顯示為什么模式
  4. CSS中可以通過哪些屬性定義,使得一個(gè)DOM元素不顯示在瀏覽器可視范圍內(nèi)?  
      最基本的:
      設(shè)置display屬性為none,或者設(shè)置visibility屬性為hidden
      技巧性:
      設(shè)置寬高為0,設(shè)置透明度為0,設(shè)置z-index位置在-1000
  5. 行內(nèi)元素和塊級(jí)元素的具體區(qū)別是什么?行內(nèi)元素的padding和margin可設(shè)置嗎?
      塊級(jí)元素(block)特性:
    總是獨(dú)占一行,表現(xiàn)為另起一行開始,而且其后的元素也必須另起一行顯示;
    寬度(width)、高度(height)、內(nèi)邊距(padding)和外邊距(margin)都可控制;
      內(nèi)聯(lián)元素(inline)特性:
    和相鄰的內(nèi)聯(lián)元素在同一行;
    寬度(width)、高度(height)、內(nèi)邊距的top/bottom(padding-top/padding-bottom)和外邊距的top/bottom(margin-top/margin-bottom)都不可改變(也就是padding和margin的left和right是可以設(shè)置的),就是里面文字或圖片的大小。
      那么問題來了,瀏覽器還有默認(rèn)的天生inline-block元素(擁有內(nèi)在尺寸,可設(shè)置高寬,但不會(huì)自動(dòng)換行),有哪些?
      答案:<input> 、<img> 、<button> 、<textarea> 、<label>
  6. 什么是外邊距重疊?重疊的結(jié)果是什么?
      答案:
      外邊距重疊就是margin-collapse。
      在CSS當(dāng)中,相鄰的兩個(gè)盒子(可能是兄弟關(guān)系也可能是祖先關(guān)系)的外邊距可以結(jié)合成一個(gè)單獨(dú)的外邊距。這種合并外邊距的方式被稱為折疊,并且因而所結(jié)合成的外邊距稱為折疊外邊距。
      折疊結(jié)果遵循下列計(jì)算規(guī)則:
  7. 兩個(gè)相鄰的外邊距都是正數(shù)時(shí),折疊結(jié)果是它們兩者之間較大的值。
  8. 兩個(gè)相鄰的外邊距都是負(fù)數(shù)時(shí),折疊結(jié)果是兩者絕對(duì)值的較大值。
  9. 兩個(gè)外邊距一正一負(fù)時(shí),折疊結(jié)果是兩者的相加的和。
      
    58、描述一個(gè)"reset"的CSS文件并如何使用它。知道normalize.css嗎?你了解他們的不同之處? 
      重置樣式非常多,凡是一個(gè)前端開發(fā)人員肯定有一個(gè)常用的重置CSS文件并知道如何使用它們。他們是盲目的在做還是知道為什么這么做呢?原因是不同的瀏覽器對(duì)一些元素有不同的默認(rèn)樣式,如果你不處理,在不同的瀏覽器下會(huì)存在必要的風(fēng)險(xiǎn),或者更有戲劇性的性發(fā)生。
      你可能會(huì)用Normalize來代替你的重置樣式文件。它沒有重置所有的樣式風(fēng)格,但僅提供了一套合理的默認(rèn)樣式值。既能讓眾多瀏覽器達(dá)到一致和合理,但又不擾亂其他的東西(如粗體的標(biāo)題)。
      在這一方面,無法做每一個(gè)復(fù)位重置。它也確實(shí)有些超過一個(gè)重置,它處理了你永遠(yuǎn)都不用考慮的怪癖,像HTML的audio元素不一致或line-height不一致。
  10. 說display屬性有哪些?可以做什么?
    display:block行內(nèi)元素轉(zhuǎn)換為塊級(jí)元素
    display:inline塊級(jí)元素轉(zhuǎn)換為行內(nèi)元素
    display:inline-block轉(zhuǎn)為內(nèi)聯(lián)元素
  11. 哪些css屬性可以繼承?
    可繼承: font-size font-family color, ul li dl dd dt;
    不可繼承 :border padding margin width height ;
  12. css優(yōu)先級(jí)算法如何計(jì)算?
    !important > id > class > 標(biāo)簽
    !important 比 內(nèi)聯(lián)優(yōu)先級(jí)高
    *優(yōu)先級(jí)就近原則,樣式定義最近者為準(zhǔn);
    *以最后載入的樣式為準(zhǔn);
  13. b標(biāo)簽和strong標(biāo)簽,i標(biāo)簽和em標(biāo)簽的區(qū)別?
    后者有語義,前者則無。
  14. 有那些行內(nèi)元素、有哪些塊級(jí)元素、盒模型?
    1.內(nèi)聯(lián)元素(inline element)
    a – 錨點(diǎn)
    abbr – 縮寫
    acronym – 首字
    b – 粗體(不推薦)
    big – 大字體
    br – 換行
    em – 強(qiáng)調(diào)
    font – 字體設(shè)定(不推薦)
    i – 斜體
    img – 圖片
    input – 輸入框
    label – 表格標(biāo)簽
    s – 中劃線(不推薦)
    select – 項(xiàng)目選擇
    small – 小字體文本
    span – 常用內(nèi)聯(lián)容器,定義文本內(nèi)區(qū)塊
    strike – 中劃線
    strong – 粗體強(qiáng)調(diào)
    sub – 下標(biāo)
    sup – 上標(biāo)
    textarea – 多行文本輸入框
    tt – 電傳文本
    u – 下劃線
    var – 定義變量
    2、塊級(jí)元素
    address – 地址
    blockquote – 塊引用
    center – 舉中對(duì)齊塊
    dir – 目錄列表
    div – 常用塊級(jí)容易,也是css layout的主要標(biāo)簽
    dl – 定義列表
    fieldset – form控制組
    form – 交互表單
    h1 – 大標(biāo)題
    h2 – 副標(biāo)題
    h3 – 3級(jí)標(biāo)題
    h4 – 4級(jí)標(biāo)題
    h5 – 5級(jí)標(biāo)題
    h6 – 6級(jí)標(biāo)題
    hr – 水平分隔線
    isindex – input prompt
    menu – 菜單列表
    noframes – frames可選內(nèi)容,(對(duì)于不支持frame的瀏覽器顯示此區(qū)塊內(nèi)容)
    noscript – )可選腳本內(nèi)容(對(duì)于不支持script的瀏覽器顯示此內(nèi)容)
    ol – 排序表單
    p – 段落
    pre – 格式化文本
    table – 表格
    ul – 非排序列表
    3.CSS盒子模型包含四個(gè)部分組成:
    內(nèi)容、填充(padding)、邊框(border)、外邊界(margin)。
  15. 有哪些選擇符,優(yōu)先級(jí)的計(jì)算公式是什么?行內(nèi)樣式和!important哪個(gè)優(yōu)先級(jí)高?

    ID > .class > 標(biāo)簽選擇符 !important優(yōu)先級(jí)高

  16. 我想讓行內(nèi)元素跟上面的元素距離10px,加margin-top和padding-top可以嗎?
    margin-top,padding-top無效
  17. CSS的盒模型由什么組成?
    內(nèi)容,border ,margin,padding
  18. 說說display屬性有哪些?可以做什么?
    display:block行內(nèi)元素轉(zhuǎn)換為塊級(jí)元素
    display:inline塊級(jí)元素轉(zhuǎn)換為行內(nèi)元素
    display:inline-block轉(zhuǎn)為內(nèi)聯(lián)元素
  19. 哪些css屬性可以繼承?
    可繼承: font-size font-family color, ul li dl dd dt;
    不可繼承 :border padding margin width height ;
  20. css優(yōu)先級(jí)算法如何計(jì)算?
    !important > id > class > 標(biāo)簽
    !important 比 內(nèi)聯(lián)優(yōu)先級(jí)高
  • 優(yōu)先級(jí)就近原則,樣式定義最近者為準(zhǔn);
  • 以最后載入的樣式為準(zhǔn);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,189評(píng)論 1 92
  • <a name='html'>HTML</a> Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,852評(píng)論 1 19
  • 1.行內(nèi)元素和塊級(jí)元素?img算什么?行內(nèi)元素怎么轉(zhuǎn)化為塊級(jí)元素? 行內(nèi)元素:和有他元素都在一行上,高度、行高及外...
    極樂君閱讀 2,605評(píng)論 0 20
  • "江南可采蓮,蓮葉何田田。”是否你總幻想著乘一葉小楫輕舟,在半人高的荷葉中穿行。讓雙手優(yōu)雅地?fù)徇^帶著露珠的蓮蓬,深...
    紫幽水仙f1d9閱讀 383評(píng)論 0 0
  • 抓周之前的記憶基本上是丟失的,沒有人會(huì)去記得一兩歲的事,說的比較可笑,如果有機(jī)會(huì),我不會(huì)重返20歲或者18歲,...
    嘿一起吧閱讀 539評(píng)論 0 0

友情鏈接更多精彩內(nèi)容