整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          HTML&css面試題

          .Doctype作用?標準模式與兼容模式各有什么區(qū)別

          <!DOCTYPE>聲明位于位于HTML文檔中的第一行,處于 <html>標簽之前。告知瀏覽器的解析器,用什么文檔標準解析這個文檔。DOCTYPE不存在或格式不正確會導致文檔以兼容模式呈現(xiàn)。
          標準模式的排版 和JS運作模式都是以該瀏覽器支持的最高標準運行。在兼容模式中,頁面以寬松的向后兼容的方式顯示,模擬老式瀏覽器的行為以防止站點無法工作。

          2.HTML5 為什么只需要寫 <!DOCTYPE HTML>?

          HTML5 不基于 SGML,因此不需要對DTD進行引用,但是需要doctype來規(guī)范瀏覽器的行為(讓瀏覽器按照它們應(yīng)該的方式來運行);
          而HTML4.01基于SGML,所以需要對DTD進行引用,才能告知瀏覽器文檔所使用的文檔類型。**

          3.行內(nèi)元素有哪些?塊級元素有哪些? 空(void)元素有那些?

          首先:CSS規(guī)范規(guī)定,每個元素都有display屬性,確定該元素的類型,每個元素都有默認的display值,如div的display默認值為“block”,則為“塊級”元素;span默認display屬性值為“inline”,是“行內(nèi)”元素
          (1)行內(nèi)元素有:a b span img input select strong(強調(diào)的語氣)
          (2)塊級元素有: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>
          4.頁面導入樣式時,使用link和@import有什么區(qū)別?
          link屬于XHTML標簽,除了加載CSS外,還能用于定義RSS, 定義rel連接屬性等作用;而@import是CSS提供的,只能用于加載CSS;
          頁面被加載的時,link會同時被加載,而@import引用的CSS會等到頁面被加載完再加載;
          import是CSS2.1 提出的,只在IE5以上才能被識別,而link是XHTML標簽,無兼容問題;

          5.介紹一下你對瀏覽器內(nèi)核的理解?

          主要分成兩部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。
          渲染引擎:負責取得網(wǎng)頁的內(nèi)容(HTML、XML、圖像等等)、整理訊息(例如加入CSS等),以及計算網(wǎng)頁的顯示方式,然后會輸出至顯示器或打印機。瀏覽器的內(nèi)核的不同對于網(wǎng)頁的語法解釋會有不同,所以渲染的效果也不相同。所有網(wǎng)頁瀏覽器、電子郵件客戶端以及其它需要編輯、顯示網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核。
          JS引擎則:解析和執(zhí)行javascript來實現(xiàn)網(wǎng)頁的動態(tài)效果。
          最開始渲染引擎和JS引擎并沒有區(qū)分的很明確,后來JS引擎越來越獨立,內(nèi)核就傾向于只指渲染引擎。

          6.常見的瀏覽器內(nèi)核有哪些?

          Trident內(nèi)核:IE,MaxThon,TT,The World,360,搜狗瀏覽器等。[又稱MSHTML]
          Gecko內(nèi)核:Netscape6及以上版本,F(xiàn)F,MozillaSuite/SeaMonkey等
          Presto內(nèi)核:Opera7及以上。 [Opera內(nèi)核原為:Presto,現(xiàn)為:Blink;]
          Webkit內(nèi)核:Safari,Chrome等。 [ Chrome的:Blink(WebKit的分支)]

          7.html5有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區(qū)分 HTML 和 HTML5?

          • HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置,存儲,多任務(wù)等功能的增加。繪畫 canvas;
            用于媒介回放的 video 和 audio 元素;
            本地離線存儲 localStorage 長期存儲數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失;
            sessionStorage 的數(shù)據(jù)在瀏覽器關(guān)閉后自動刪除;
            語意化更好的內(nèi)容元素,比如 article、footer、header、nav、section;
            表單控件,calendar、date、time、email、url、search;
            新的技術(shù)webworker, websocket, Geolocation;


          移除的元素:
          純表現(xiàn)的元素:basefont,big,center,font, s,strike,tt,u;
          對可用性產(chǎn)生負面影響的元素:frame,frameset,noframes;

          • 支持HTML5新標簽:IE8/IE7/IE6支持通過document.createElement方法產(chǎn)生的標簽,
            可以利用這一特性讓這些瀏覽器支持HTML5新標簽,
            瀏覽器支持新標簽后,還需要添加標簽默認的樣式。
            當然也可以直接使用成熟的框架、比如html5shim;
            <!--[if lt IE 9]>
            <scriptsrc="http://html5shim.googlecode.com/svn/trunk/html5.js"> </script>
            <![endif]-->
          • 如何區(qū)分HTML5: DOCTYPE聲明新增的結(jié)構(gòu)元素功能元素
            H5新特性
            表單 畫布 音視頻 地理定位 媒體查詢 css新特性 離線緩存 本地存儲 拖拽

          8.簡述一下你對HTML語義化的理解?

          用正確的標簽做正確的事情。
          html語義化讓頁面的內(nèi)容結(jié)構(gòu)化,結(jié)構(gòu)更清晰,便于對瀏覽器、搜索引擎解析;
          即使在沒有樣式CSS情況下也以一種文檔格式顯示,并且是容易閱讀的;
          搜索引擎的爬蟲也依賴于HTML標記來確定上下文和各個關(guān)鍵字的權(quán)重,利于SEO;
          使閱讀源代碼的人對網(wǎng)站更容易將網(wǎng)站分塊,便于閱讀維護理解。

          9.HTML5的離線儲存怎么使用,工作原理能不能解釋一下?

          在用戶沒有連網(wǎng)時,可以正常訪問站點或應(yīng)用,在用戶與網(wǎng)絡(luò)連接時更新用戶機器上的緩存文件。
          原理:HTML5的離線存儲是基于一個新建的.appcache文件的緩存機制(不是存儲技術(shù)),通過這個文件上的解析清單離線存儲資源,這些資源就會像cookie一樣被存儲了下來。之后當網(wǎng)絡(luò)在處于離線狀態(tài)下時,瀏覽器會通過被離線存儲的數(shù)據(jù)進行頁面展示。
          如何使用
          頁面頭部像下面一樣加入一個manifest的屬性;
          在cache.manifest文件的編寫離線存儲的資源;
          CACHE MANIFEST
          #v0.11
          CACHE:
          js/app.js
          css/style.css
          NETWORK:
          resourse/logo.png
          FALLBACK:
          / /offline.html
          在離線狀態(tài)時,操作window.applicationCache進行需求實現(xiàn)。

          10.瀏覽器是怎么對HTML5的離線儲存資源進行管理和加載的呢?

          在線的情況下,瀏覽器發(fā)現(xiàn)html頭部有manifest屬性,它會請求manifest文件,如果是第一次訪問app,那么瀏覽器就會根據(jù)manifest文件的內(nèi)容下載相應(yīng)的資源并且進行離線存儲。如果已經(jīng)訪問過app并且資源已經(jīng)離線存儲了,那么瀏覽器就會使用離線的資源加載頁面,然后瀏覽器會對比新的manifest文件與舊的manifest文件,如果文件沒有發(fā)生改變,就不做任何操作,如果文件改變了,那么就會重新下載文件中的資源并進行離線存儲。
          離線的情況下,瀏覽器就直接使用離線存儲的資源。

          11.iframe有那些缺點?

          iframe會阻塞主頁面的Onload事件;
          搜索引擎的檢索程序無法解讀這種頁面,不利于SEO;
          iframe和主頁面共享連接池,而瀏覽器對相同域的連接有限制,所以會影響頁面的并行加載。
          使用iframe之前需要考慮這兩個缺點。如果需要使用iframe,最好是通過javascript
          動態(tài)給iframe添加src屬性值,這樣可以繞開以上兩個問題。

          12.Label的作用是什么?是怎么用的?

          label標簽來定義表單控制間的關(guān)系,當用戶選擇該標簽時,瀏覽器會自動將焦點轉(zhuǎn)到和標簽相關(guān)的表單控件上。

          <label for="Name">Number:</label>
          <input type=“text“name="Name" id="Name"/>
          <label>Date:<input type="text" name="B"/></label>

          13.如何實現(xiàn)瀏覽器內(nèi)多個標簽頁之間的通信?

          WebSocket、也可以調(diào)用localstorge、cookies等本地存儲方式,還可以使用頁面的路有參數(shù)傳遞
          localstorge另一個瀏覽上下文里被添加、修改或刪除時,它都會觸發(fā)一個事件,
          我們通過監(jiān)聽事件,控制它的值來進行頁面信息通信;
          14.如何在頁面上實現(xiàn)一個圓形的可點擊區(qū)域?
          map+area或者svg
          border-radius
          純js實現(xiàn) 需要求一個點在不在圓上簡單算法、獲取鼠標坐標等等

          15.title與h1的區(qū)別、b與strong的區(qū)別、i與em的區(qū)別?

          title屬性沒有明確意義只表示是個標題,H1則表示層次明確的標題,對頁面信息的抓取也有很大的影響;
          strong是標明重點內(nèi)容,有語氣加強的含義,使用閱讀設(shè)備閱讀網(wǎng)絡(luò)時:會重讀,而是展示強調(diào)內(nèi)容。
          i內(nèi)容展示為斜體,em表示強調(diào)的文本;

          16.data-屬性的作用是什么?

          h5新增的屬性
          可以通過ele.dataset獲取到標簽上的data-x的屬性
          返回一個對象

          17.常見兼容性問題?

          問題:png24位的圖片在iE6瀏覽器上出現(xiàn)背景,

          解決:解決方案是做成PNG8.

          問題:瀏覽器默認的margin和padding不同。

          解決:方案是加一個全局的*{margin:0;padding:0;}來統(tǒng)一。

          問題:IE6雙邊距bug:塊屬性標簽float后,又有橫行的margin情況下,在ie6顯示margin比設(shè)置的大。浮動ie產(chǎn)生的雙倍距離 #box{ float:left; width:10px; margin:0 0 0 100px;}這種情況之下IE會產(chǎn)生20px的距離**

          解決:解決方案是在float的標簽樣式控制中加入 ——_display:inline;將其轉(zhuǎn)化為行內(nèi)屬性。(_這個符號只有ie6會識別)
          漸進識別的方式,從總體中逐漸排除局部。
          首先,巧妙的使用“9”這一標記,將IE游覽器從所有情況中分離出來。 接著,再次使用“+”將IE8和IE7、IE6分離開來,這樣IE8已經(jīng)獨立識別。
          css

          .bb{ 
             background-color:#f1ee18;/*所有識別*/ 
            .background-color:#00deff\9; /*IE6、7、8識別*/ 
            +background-color:#a200ff;/*IE6、7識別*/ 
            _background-color:#1e0bd1;/*IE6識別*/ 
            } 
          

          問題:IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性,F(xiàn)irefox下,只能使用getAttribute()獲取自定義屬性.

          解決:解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性.

          問題:IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性,F(xiàn)irefox下,event對象有pageX,pageY屬性,但是沒有x,y屬性.

          解決方法:(條件注釋)缺點是在IE瀏覽器下可能會增加額外的HTTP請求數(shù)。

          問題:Chrome 中文界面下默認會將小于 12px 的文本強制按照 12px 顯示,

          解決:可通過加入 CSS 屬性 -webkit-text-size-adjust: none; 解決.

          問題:超鏈接訪問過后hover樣式就不出現(xiàn)了 被點擊訪問過的超鏈接樣式不在具有hover和active了

          解決:方法是改變CSS屬性的排列順序:L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}

          18.你知道多少種Doctype文檔類型?

          該標簽可聲明三種 DTD 類型,分別表示嚴格版本、過渡版本以及基于框架的 HTML 文檔。
          HTML 4.01 規(guī)定了三種文檔類型:Strict、Transitional 以及 Frameset。
          XHTML 1.0 規(guī)定了三種 XML 文檔類型:Strict、Transitional 以及 Frameset。
          Standards (標準)模式(也就是嚴格呈現(xiàn)模式)用于呈現(xiàn)遵循最新標準的網(wǎng)頁,而 Quirks(包容)模式(也就是松散呈現(xiàn)模式或者兼容模式)用于呈現(xiàn)為傳統(tǒng)瀏覽器而設(shè)計的網(wǎng)頁。

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

          1)所有的標記都必須要有一個相應(yīng)的結(jié)束標記
          2)所有標簽的元素和屬性的名字都必須使用小寫
          3)所有的XML標記都必須合理嵌套
          4)所有的屬性必須用引號""括起來
          5)把所有<和&特殊符號用編碼表示
          6)給所有屬性賦一個值
          7)不要在注釋內(nèi)容中使“--”
          8)圖片必須有說明文字

          20.<img>的title和alt有什么區(qū)別?

          title是global attributes之一,用于為元素提供附加的advisory information。通常當鼠標滑動到元素上的時候顯示。
          alt是<img>的特有屬性,是圖片內(nèi)容的等價描述,用于圖片無法加載時顯示、讀屏器閱讀圖片。可提圖片高可訪問性,除了純裝飾圖片外都必須設(shè)置有意義的值,搜索引擎會重點分析。

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

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

          22.CSS都有哪些選擇器?

          派生選擇器(用HTML標簽申明)
          id選擇器(用DOM的ID申明)
          類選擇器(用一個樣式類名申明)
          屬性選擇器(用DOM的屬性申明,屬于CSS2,IE6不支持,不常用,不知道就算了)
          除了前3種基本選擇器,還有一些擴展選擇器,包括
          后代選擇器(利用空格間隔,比如div .a{ })
          群組選擇器(利用逗號間隔,比如p,div,#a{ })
          那么問題來了,CSS選擇器的優(yōu)先級是怎么樣定義的?

          基本原則:

          一般而言,選擇器越特殊,它的優(yōu)先級越高。也就是選擇器指向的越準確,它的優(yōu)先級就越高。
          復雜的計算方法:
          用1表示派生選擇器的優(yōu)先級
          用10表示類選擇器的優(yōu)先級
          用100標示ID選擇器的優(yōu)先級
          div.test1 .span var 優(yōu)先級 1+10 +10 +1
          span#xxx .songs li 優(yōu)先級1+100 + 10 + 1
          xxx li 優(yōu)先級 100 +1
          那么問題來了,看下列代碼,<p>標簽內(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)。

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

          塊級元素(block)特性:
          總是獨占一行,表現(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è)置的),就是里面文字或圖片的大小。
          那么問題來了,瀏覽器還有默認的天生inline-block元素(擁有內(nèi)在尺寸,可設(shè)置高寬,但不會自動換行),有哪些?
          答案:<input> 、<img> 、<button> 、<texterea> 、<label>。

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

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

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

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

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

          *   1.id選擇器( # myid)
              2.類選擇器(.myclassname)
              3.標簽選擇器(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)先級就近原則,樣式定義最近者為準;
          *   載入樣式以最后載入的定位為準;

          優(yōu)先級為:

             !important >  id > class > tag  
             important 比 內(nèi)聯(lián)優(yōu)先級高

          CSS3新增偽類舉例:

          p:first-of-type 選擇屬于其父元素的首個 <p> 元素的每個 <p> 元素。
          p:last-of-type  選擇屬于其父元素的最后 <p> 元素的每個 <p> 元素。
          p:only-of-type  選擇屬于其父元素唯一的 <p> 元素的每個 <p> 元素。
          p:only-child    選擇屬于其父元素的唯一子元素的每個 <p> 元素。
          p:nth-child(2)  選擇屬于其父元素的第二個子元素的每個 <p> 元素。
          :enabled、:disabled 控制表單控件的禁用狀態(tài)。
          :checked,單選框或復選框被選中。

          27.如何居中div,如何居中一個浮動元素?

          給div設(shè)置一個寬度,然后添加margin:0 auto屬性

          div{

          width:200px;
          margin:0 auto;

          }

          居中一個浮動元素

            確定容器的寬高 寬500 高 300 的層
            設(shè)置層的外邊距
          
          

          .div {
          Width:500px ; height:300px;//高度可以不設(shè)
          Margin: -150px 0 0 -250px;
          position:relative;相對定位
          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.
          *  瀏覽器默認的margin和padding不同。解決方案是加一個全局的*{margin:0;padding:0;}來統(tǒng)一。
          *  IE6雙邊距bug:塊屬性標簽float后,又有橫行的margin情況下,在ie6顯示margin比設(shè)置的大。 
            浮動ie產(chǎn)生的雙倍距離 #box{ float:left; width:10px; margin:0 0 0 100px;} 
           這種情況之下IE會產(chǎn)生20px的距離,解決方案是在float的標簽樣式控制中加入 ——_display:inline;將其轉(zhuǎn)化為行內(nèi)屬性。(_這個符號只有ie6會識別)
            漸進識別的方式,從總體中逐漸排除局部。 
            首先,巧妙的使用“\9”這一標記,將IE游覽器從所有情況中分離出來。 
            接著,再次使用“+”將IE8和IE7、IE6分離開來,這樣IE8已經(jīng)獨立識別。
          
          

          css

            .bb{
             background-color:#f1ee18;/*所有識別*/
            .background-color:#00deff\9; /*IE6、7、8識別*/
            +background-color:#a200ff;/*IE6、7識別*/
            _background-color:#1e0bd1;/*IE6識別*/
            }
          
          
          *  IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性,
             也可以使用getAttribute()獲取自定義屬性;
             Firefox下,只能使用getAttribute()獲取自定義屬性. 
             解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性.
          *  IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性; 
            Firefox下,event對象有pageX,pageY屬性,但是沒有x,y屬性.
          * (條件注釋)缺點是在IE瀏覽器下可能會增加額外的HTTP請求數(shù)。
          *  Chrome 中文界面下默認會將小于 12px 的文本強制按照 12px 顯示, 可通過加入 CSS 屬性 -webkit-text-size-adjust: none; 解決.
          超鏈接訪問過后hover樣式就不出現(xiàn)了 被點擊訪問過的超鏈接樣式不在具有hover和active了解決方法是改變CSS屬性的排列順序:
          L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}
          

          29.css優(yōu)先級算法如何計算?

          !important > id > class > 標簽
          !important 比 內(nèi)聯(lián)優(yōu)先級高

          • 優(yōu)先級就近原則,樣式定義最近者為準;
          • 以最后載入的樣式為準;

          30.哪些css屬性可以繼承?

          可繼承: font-size font-family color, ul li dl dd dt;
          不可繼承 :border padding margin width height ;

          DOM

          講 DOM 先從 HTML 講起,講 HTML 先從 XML 講起。XML 是一種可擴展的標記語言,所謂可擴展就是它可以描述任何結(jié)構(gòu)化的數(shù)據(jù),它是一棵樹!

          1.documen.write和 innerHTML的區(qū)別

          document.write只能重繪整個頁面
          innerHTML可以重繪頁面的一部分

          2.DOM操作——怎樣添加、移除、移動、復制、創(chuàng)建和查找節(jié)點?

          1)創(chuàng)建新節(jié)點

          createDocumentFragment() //創(chuàng)建一個DOM片段
          createElement() //創(chuàng)建一個具體的元素
          createTextNode() //創(chuàng)建一個文本節(jié)點

          2)添加、移除、替換、插入

          appendChild()
          removeChild()
          replaceChild()
          insertBefore() //在已有的子節(jié)點前插入一個新的子節(jié)點

          3)查找

          getElementsByTagName() //通過標簽名稱
          getElementsByName() //通過元素的Name屬性的值(IE容錯能力較強,會得到一個數(shù)組,其中包括id等于name值的)
          getElementById() //通過元素Id,唯一性

          3.attribute和property的區(qū)別是什么?

          attribute是dom元素在文檔中作為html標簽擁有的屬性;
          property就是dom元素在js中作為對象擁有的屬性。
          所以:
          對于html的標準屬性來說,attribute和property是同步的,是會自動更新的,
          但是對于自定義的屬性來說,他們是不同步的,

          4.src和href的區(qū)別

          src用于替換當前元素,href用于在當前文檔和引用資源之間確立聯(lián)系。
          src是source的縮寫,指向外部資源的位置,指向的內(nèi)容將會嵌入到文檔中當前標簽所在位置;在請求src資源時會將其指向的資源下載并應(yīng)用到文檔內(nèi),當瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源加載、編譯、執(zhí)行完畢,圖片和框架等元素也如此,類似于將所指向資源嵌入當前標簽內(nèi)。這也是為什么將js腳本放在底部而不是頭部。
          Src source,指向外部資源的位置,如果我們添加<script src ="js.js"></script>瀏覽器會暫停其他資源的下載和處理,直到該資源加載,編譯,執(zhí)行完畢(圖片和框架也是如此),這也就是為什么js腳本要放在底部。
          src用于替換當前元素,href用于在當前文檔和引入資源之間建立聯(lián)系。

          存儲

          cookie

          cookie 本身不是用來做服務(wù)器端存儲的(計算機領(lǐng)域有很多這種“狗拿耗子”的例子,例如 CSS 中的 float),它是設(shè)計用來在服務(wù)器和客戶端進行信息傳遞的,因此我們的每個 HTTP 請求都帶著 cookie。但是 cookie 也具備瀏覽器端存儲的能力(例如記住用戶名和密碼),因此就被開發(fā)者用上了。
          使用起來也非常簡單,document.cookie = ....即可。
          但是 cookie 有它致命的缺點:
          存儲量太小,只有 4KB
          所有 HTTP 請求都帶著,會影響獲取資源的效率
          API 簡單,需要封裝才能用

          locationStorage 和 sessionStorage

          后來,HTML5 標準就帶來了sessionStorage和localStorage,先拿localStorage來說,它是專門為了瀏覽器端緩存而設(shè)計的。

          其優(yōu)點有:

          存儲量增大到 5MB
          不會帶到 HTTP 請求中
          API 適用于數(shù)據(jù)存儲 localStorage.setItem(key, value) localStorage.getItem(key)
          sessionStorage的區(qū)別就在于它是根據(jù) session 過去時間而實現(xiàn),而localStorage會永久有效,應(yīng)用場景不同。例如,一些需要及時失效的重要信息放在sessionStorage中,一些不重要但是不經(jīng)常設(shè)置的信息,放在localStorage中。

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

          標簽閉合、標簽小寫、不亂嵌套、提高搜索機器人搜索幾率、使用外 鏈css和js腳本、結(jié)構(gòu)行為表現(xiàn)的分離、文件下載與頁面速度更快、內(nèi)容能被更多的用戶所訪問、內(nèi)容能被更廣泛的設(shè)備所訪問、更少的代碼和組件,容易維 護、改版方便,不需要變動頁面內(nèi)容、提供打印版本而不需要復制內(nèi)容、提高網(wǎng)站易用性;

          TML稱為超文本標記語言,是一種標識性的語言。在前端開發(fā)中離不開HTML,支持不同數(shù)據(jù)格式的文件鑲?cè)搿G岸斯こ處熢诿嬖囘^程中涉及到一些基礎(chǔ)知識,常見的前端HTML面試題有哪些呢?本文,千鋒武漢Web前端培訓小編分享12道經(jīng)典的HTML面試題給大家!

          1、<image>標簽上title屬性與alt屬性的區(qū)別是什么?

          alt屬性是為了給那些不能看到你文檔中圖像的瀏覽者提供文字說明的。且長度必須少于100個英文字符或者用戶必須保證替換文字盡可能的短。

          這包括那些使用本來就不支持圖像顯示或者圖像顯示被關(guān)閉的瀏覽器的用戶,視覺障礙的用戶和使用屏幕閱讀器的用戶等。

          title屬性為設(shè)置該屬性的元素提供建議性的信息。使用title屬性提供非本質(zhì)的額外信息。參考《alt和title屬性的區(qū)別及應(yīng)用》

          2、分別寫出以下幾個HTML標簽:文字加粗、下標、居中、字體

          加粗:<b>、<strong>

          下標:<sub>

          居中:<center>

          字體:<font>、<basefont>、參考《HTML標簽列表》

          3、請寫出至少5個html5新增的標簽,并說明其語義和應(yīng)用場景

          section:定義文檔中的一個章節(jié)

          nav:定義只包含導航鏈接的章節(jié)

          header:定義頁面或章節(jié)的頭部。它經(jīng)常包含 logo、頁面標題和導航性的目錄。

          footer:定義頁面或章節(jié)的尾部。它經(jīng)常包含版權(quán)信息、法律信息鏈接和反饋建議用的地址。

          aside:定義和頁面內(nèi)容關(guān)聯(lián)度較低的內(nèi)容——如果被刪除,剩下的內(nèi)容仍然很合理。

          參考《HTML5 標簽列表》

          4、請說說你對標簽語義化的理解?

          a. 去掉或者丟失樣式的時候能夠讓頁面呈現(xiàn)出清晰的結(jié)構(gòu)

          b. 有利于SEO:和搜索引擎建立良好溝通,有助于爬蟲抓取更多的有效信息:爬蟲依賴于標簽來確定上下文和各個關(guān)鍵字的權(quán)重;

          c. 方便其他設(shè)備解析(如屏幕閱讀器、盲人閱讀器、移動設(shè)備)以意義的方式來渲染網(wǎng)頁;

          d. 便于團隊開發(fā)和維護,語義化更具可讀性,遵循W3C標準的團隊都遵循這個標準,可以減少差異化。

          5、Doctype作用? 嚴格模式與混雜模式如何區(qū)分?它們有何意義?

          聲明位于文檔中的最前面,處于 標簽之前。告知瀏覽器以何種模式來渲染文檔。

          嚴格模式的排版和 JS 運作模式是,以該瀏覽器支持的最高標準運行。

          在混雜模式中,頁面以寬松的向后兼容的方式顯示。模擬老式瀏覽器的行為以防止站點無法工作。

          DOCTYPE不存在或格式不正確會導致文檔以混雜模式呈現(xiàn)。

          6、你知道多少種Doctype文檔類型?

          標簽可聲明三種 DTD 類型,分別表示嚴格版本、過渡版本以及基于框架的 HTML 文檔。

          HTML 4.01 規(guī)定了三種文檔類型:Strict、Transitional 以及 Frameset。

          XHTML 1.0 規(guī)定了三種 XML 文檔類型:Strict、Transitional 以及 Frameset。

          Standards (標準)模式(也就是嚴格呈現(xiàn)模式)用于呈現(xiàn)遵循最新標準的網(wǎng)頁,

          Quirks(包容)模式(也就是松散呈現(xiàn)模式或者兼容模式)用于呈現(xiàn)為傳統(tǒng)瀏覽器而設(shè)計的網(wǎng)頁。

          7、HTML與XHTML——二者有什么區(qū)別

          a. XHTML 元素必須被正確地嵌套。

          b. XHTML 元素必須被關(guān)閉。

          c. 標簽名必須用小寫字母。

          d. XHTML 文檔必須擁有根元素。

          參考《XHTML 與 HTML 之間的差異》

          8、html5有哪些新特性、移除了那些元素?

          a. HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置,存儲,多任務(wù)等功能的增加。

          b. 拖拽釋放(Drag and drop) API

          c. 語義化更好的內(nèi)容標簽(header,nav,footer,aside,article,section)

          d. 音頻、視頻API(audio,video)

          e. 畫布(Canvas) API

          f. 地理(Geolocation) API

          g. 本地離線存儲 localStorage 長期存儲數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失

          h. sessionStorage 的數(shù)據(jù)在頁面會話結(jié)束時會被清除

          i. 表單控件,calendar、date、time、email、url、search

          j. 新的技術(shù)webworker, websocket等

          移除的元素:

          a. 純表現(xiàn)的元素:basefont,big,center, s,strike,tt,u;

          b. 對可用性產(chǎn)生負面影響的元素:frame,frameset,noframes;

          9、iframe的優(yōu)缺點?

          優(yōu)點:

          a. 解決加載緩慢的第三方內(nèi)容如圖標和廣告等的加載問題

          b. iframe無刷新文件上傳

          c. iframe跨域通信

          缺點:

          a. iframe會阻塞主頁面的Onload事件

          b. 無法被一些搜索引擎索引到

          c. 頁面會增加服務(wù)器的http請求

          d. 會產(chǎn)生很多頁面,不容易管理。

          參考《iframe的一些記錄》

          10、Quirks模式是什么?它和Standards模式有什么區(qū)別?

          在寫程序時我們也會經(jīng)常遇到這樣的問題,如何保證原來的接口不變,又提供更強大的功能,尤其是新功能不兼容舊功能時。IE6以前的頁面大家都不會去寫DTD,所以IE6就假定 如果寫了DTD,就意味著這個頁面將采用對CSS支持更好的布局,而如果沒有,則采用兼容之前的布局方式。這就是Quirks模式(怪癖模式,詭異模式,怪異模式)。

          區(qū)別:總體會有布局、樣式解析和腳本執(zhí)行三個方面的區(qū)別。

          a. 盒模型:在W3C標準中,如果設(shè)置一個元素的寬度和高度,指的是元素內(nèi)容的寬度和高度,而在Quirks 模式下,IE的寬度和高度還包含了padding和border。

          b. 設(shè)置行內(nèi)元素的高寬:在Standards模式下,給等行內(nèi)元素設(shè)置wdith和height都不會生效,而在quirks模式下,則會生效。

          c. 設(shè)置百分比的高度:在standards模式下,一個元素的高度是由其包含的內(nèi)容來決定的,如果父元素沒有設(shè)置百分比的高度,子元素設(shè)置一個百分比的高度是無效的用

          d. 設(shè)置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下卻會失效。

          11、請闡述table的缺點

          a. 太深的嵌套,比如table>tr>td>h3,會導致搜索引擎讀取困難,而且,最直接的損失就是大大增加了冗余代碼量。

          b. 靈活性差,比如要將tr設(shè)置border等屬性,是不行的,得通過td

          c. 代碼臃腫,當在table中套用table的時候,閱讀代碼會顯得異常混亂

          d. 混亂的colspan與rowspan,用來布局時,頻繁使用他們會造成整個文檔順序混亂。

          e. 不夠語義

          參考《為什么說table表格布局不好?》

          12、簡述一下src與href的區(qū)別

          src用于替換當前元素;href用于在當前文檔和引用資源之間確立聯(lián)系。

          src是source的縮寫,指向外部資源的位置,指向的內(nèi)容將會嵌入到文檔中當前標簽所在位置

          href是Hypertext Reference的縮寫,指向網(wǎng)絡(luò)資源所在位置,建立和當前元素(錨點)或當前文檔(鏈接)之間的鏈接

          以上千鋒武漢Web前端培訓小編僅介紹了部分HTML面試題及答案。如果想要在眾多競爭者中脫穎而出,除了專業(yè)技能還需要掌握一些求職面試的技巧,在面試過程中爭取更多的主動權(quán)。了解更多Web前端工程師求職面試技巧,你可以關(guān)注“武漢千鋒”微信公眾號,定期發(fā)布技術(shù)熱點文章和求職指南。你也可以來千鋒武漢Web前端培訓班免費試聽兩周,親身感受教學效果,滿意后進行系統(tǒng)深入的學習進階!

          千鋒武漢Web前端培訓課程結(jié)合時下流行技術(shù),以實戰(zhàn)項目驅(qū)動教學,除了培養(yǎng)學員的開發(fā)技術(shù),覆蓋熱門大數(shù)據(jù)可視化內(nèi)容,深度貫穿前端后端開發(fā),緊貼主流企業(yè)一線需求。這里有專業(yè)老師帶你,最多半年的時間讓你完美蛻變。進名企、拿高薪不再是問題,命運掌握在自己的手里,想要什么樣的人生就看你自己的選擇了!

          . 說一下JavaScript的數(shù)據(jù)類型有哪些

          答: stringnumberbooleanundefinednullundefined symbolobject

          JavaScript里面 number 默認是雙精度浮點數(shù),不能夠表示太大的數(shù)字。于是有了 bigInt 。需要注意的是 bigInt 只能表示任意大的 整數(shù)。

          2. 原型鏈是什么

          1. 先講一下原型。

          首先定義一個對象 obj 。對象 obj 有一個隱藏屬性,這里我先記作為 `__xxx__` (大部分的瀏覽器定義為 __proto__ )。這個屬性會指向 Object.prototype

          const obj = {}
          obj.__xxx___ = Object.prototype  

          因此可以得出結(jié)論: 對象 obj 的原型是 Object.prototype 。也可以說 Object.prototype 是對象 obj 的原型。

          對象通過隱藏屬性 __xxx__ 就能找到自己的原型,這是該隱藏屬性的唯一作用

          2.接下來解釋下原型鏈

          這里定義一個數(shù)組 array ,可以得到如下結(jié)論:

          const array = []
          array.__xxx__ = Array.prototype // Array.prototype 也是對象。所以也有隱藏屬性__xx__
          Array.prototype.__xxx__ = Object.prototype

          因此這里的 array 就有兩層原型,形成了原型鏈。

          3.代碼實現(xiàn)

          const p = {
              a:1,
              b:2,
             }
          const obj = Object.create(p) // 指定 obj 的原型是 p 
          const obj = new Obj() // new 會將 obj 的隱藏屬性__xx__ 指向 Obj.prototype

          4.解決什么問題

          在沒有 class 的情況下可以實現(xiàn)繼承。原型鏈上面可以掛在公共的屬性,這樣做可以實現(xiàn)復用,比如定義的數(shù)組 array 上面可以使用 valueOf 方法,該方法就是存在 Object.prototype 上面的。

          5.優(yōu)缺點

          • 優(yōu)點:實現(xiàn)起來很簡單,清楚明了
          • 缺點:跟class相比不支持私有屬性

          3. JavaScript中的new關(guān)鍵字做了啥

          答: new關(guān)鍵字做了如下幾點

          1. 創(chuàng)建了一個臨時對象
          1. 綁定原型
          1. 將this 指向 這個臨時對象
          1. 執(zhí)行構(gòu)造函數(shù)
          1. 返回這個臨時對象

          new 后面不可接箭頭函數(shù)。箭頭函數(shù)沒有this指向,也沒有 proptotype

          function Person(name){
              this.name = name
          }
          const p = new Person("vino")
          //1. 創(chuàng)建臨時對象
          temp = {}
          //2.綁定原型
          temp.__proto__ = Person.prototype
          //3.將this指向這個臨時對象
          this = temp
          //4. 執(zhí)行構(gòu)造函數(shù)
          this.name = "vino"
          //返回 臨時對象 
          p = temp

          4. JavaScript中的立即執(zhí)行函數(shù)是什么

          答: 聲明了一個匿名函數(shù),然后立即執(zhí)行該匿名函數(shù),這就是立即執(zhí)行函數(shù)。具體做法如下

          (function (){console.log('a')}())
          //或者前面使用 感嘆號,加號,減號都是可以的

          1.解決了什么問題

          ES6 之前,只能通過立即執(zhí)行函數(shù)的方式來創(chuàng)建 局部作用域

          !function f(){
             var a = 1
          }()

          2.優(yōu)缺點

          • 優(yōu)點: 兼容性好
          • 缺點: 語法太丑,為了創(chuàng)建一個局部變量,害得執(zhí)行一個函數(shù)

          3. 代替方案

          ES6 里面的局部作用域

          {
              lat a = 1
          }

          5. JavaScript里面什么是閉包

          閉包是JavaScript的一種 語法特性

          函數(shù) + 自由變量 = 閉包 (變量分為:全局變量,自由變量,本地變量)

          const add = function(){
              let a
              function add(){
                  a +=1
              }
              return add
          }()
          // 重構(gòu)
          const add = function(){
              let a
              return function add(){
                  a +=1
              }
          }()

          上面代碼實現(xiàn)了通過調(diào)用 API 的方式來修改某個變量的值,這樣做不會將變量直接暴露出去,而是暴露出操作對象的方法。

          1.解決的問題

          • 通過閉包可以提供對局部變量的間接訪問
          • 避免了污染全部環(huán)境(因為是局部變量)
          • 維持了變量不會被垃圾回收(牽強)

          2.優(yōu)缺點

          • 優(yōu)點: 簡單好用
          • 缺點: 閉包**使用不當** 可能會造成內(nèi)存泄漏(準確來說是舊版IE的bug)

          6. JavaScript實現(xiàn)類

          1. ES5

          function Cat(name){
              this.name = name
          }
          Cat.prototype.kind = "cat"
          Cat.prototype.say = function(){console.log(this.name)}
          const c = new Cat("橙子")

          2. ES6

          class Cat {
              constructor(name){
                  this.name = name 
              }
              say(){
                  console.log(this.name)
              }
          }
          const c = new Cat("橙子")

          7. JavaScript 如何實現(xiàn)繼承

          1.ES5

          function Animal(kind){
              this.kind = kind
          }
          function Dog(name){
              Animal.call(this,'dog') //繼承自身屬性
              this.name = name
          }
          // 面試官不想要的結(jié)果(__proto__ 不是所有的瀏覽器都叫這玩意)
          Dog.prototype.__proto__ = Animal.prototype  //共有屬性繼承
          //面試官想要的答案
          var temp = function(){} // 臨時變量的目的,就是為了在new 的時候,不要添加額外的屬性(kind)到原型上面
          temp.prototype = Animal.prototype
          Dog.prototype = new temp()

          2. ES6

          class Animal {
              constructor(kind){
                  this.kind = kind
              }
          }
          class Dog extends Animal {
              constructor(name){
                  super('dog')
                  this.name  = name
              }
          }


          主站蜘蛛池模板: 亚洲A∨精品一区二区三区下载| 97久久精品午夜一区二区| 久久精品无码一区二区三区日韩| 精品国产鲁一鲁一区二区| 国产成人无码一区二区在线播放| AV天堂午夜精品一区二区三区| 又硬又粗又大一区二区三区视频| 在线播放国产一区二区三区 | 一区二区视频在线播放| 日本国产一区二区三区在线观看| 国产成人一区二区动漫精品| 精品亚洲综合在线第一区| 亚洲一区二区三区乱码在线欧洲| 日韩A无码AV一区二区三区| 色婷婷综合久久久久中文一区二区| 国产精品视频无圣光一区| 亚洲国产成人一区二区精品区| 日本无码一区二区三区白峰美| 精品国产AⅤ一区二区三区4区 | 人妻夜夜爽天天爽一区| 一区二区三区四区在线播放| 中文字幕一区二区三区有限公司| 无码人妻一区二区三区免费手机| 久久无码一区二区三区少妇| 亚洲中文字幕一区精品自拍| 99精品国产高清一区二区三区| 怡红院一区二区在线观看| 水蜜桃av无码一区二区| 日本精品一区二区三区在线视频| 亚洲高清美女一区二区三区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 天堂成人一区二区三区| 国产精品特级毛片一区二区三区| 国产精品无码一区二区三区在| 亚洲制服中文字幕第一区| 国产日韩高清一区二区三区 | 免费高清av一区二区三区| 日本一区二区在线播放| 久久精品国产一区二区三区| 国产成人一区二区动漫精品| 在线观看日本亚洲一区|