整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          前端面試題:瀏覽器如何解析HTML文件?

          覽器解析HTML文件的過程是網頁呈現的關鍵步驟之一。具體介紹如下:


          HTML文檔的接收和預處理

          1. 網絡請求處理:當用戶輸入URL或點擊鏈接時,瀏覽器發起HTTP請求,服務器響應并返回HTML文件。此過程中,瀏覽器需要處理DNS查詢、建立TCP連接等底層網絡通信操作。
          2. 預解析優化:為了提高性能,現代瀏覽器在主線程解析HTML之前會啟動一個預解析線程,提前下載HTML中鏈接的外部CSS和JS文件。這一步驟確保了后續渲染過程的順暢進行。

          解析為DOM樹

          1. 詞法分析和句法分析:瀏覽器的HTML解析器通過詞法分析將HTML文本標記轉化為符號序列,然后通過句法分析器按照HTML規范構建出DOM樹。每個節點代表一個HTML元素,形成了多層次的樹狀結構。
          2. 生成對象接口:生成的DOM樹是頁面元素的結構化表示,提供了操作頁面元素的接口,如JavaScript可以通過DOM API來動態修改頁面內容和結構。

          CSS解析與CSSOM樹構建

          1. CSS文件加載與解析:瀏覽器解析HTML文件中的<link>標簽引入的外部CSS文件和<style>標簽中的內聯CSS,生成CSSOM樹。CSSOM樹反映了CSS樣式的層級和繼承關系。
          2. CSS屬性計算:包括層疊、繼承等,確保每個元素對應的樣式能夠被準確計算。這些計算過程為后續的布局提供必要的樣式信息。

          JavaScript加載與執行

          1. 阻塞式加載:當解析器遇到<script>標簽時,它會停止HTML的解析,轉而先加載并執行JavaScript代碼。這是因為JS可能會修改DOM結構或CSSOM樹,從而影響已解析的部分。
          2. 異步和延遲加載:為了不影響頁面的初步渲染,可以采用async或defer屬性來異步加載JS文件,這樣可以在后臺進行JS的加載和執行,而不阻塞HTML解析。

          渲染樹的構建

          1. 合并DOM樹和CSSOM樹:有了DOM樹和CSSOM樹后,瀏覽器將它們組合成渲染樹,這個樹只包含顯示界面所需的DOM節點及對應的樣式信息。
          2. 不可見元素的排除:渲染樹會忽略例如<head>、<meta>等不可見元素,只關注<body>內的可視化內容。

          布局計算(Layout)

          1. 元素位置和尺寸確定:瀏覽器從渲染樹根節點開始,遞歸地計算每個節點的精確位置和尺寸,這個過程也被稱為“回流”或“重排”,是后續繪制的基礎。
          2. 布局過程的優化:現代瀏覽器會盡量優化布局過程,例如通過流式布局的方式減少重復計算,確保高效地完成布局任務。

          繪制(Paint)

          1. 像素級繪制:繪制是一個將布局計算后的各元素繪制成像素點的過程。這包括文本、顏色、邊框、陰影以及替換元素的繪制。
          2. 層次化的繪制:為了高效地更新局部內容,瀏覽器會將頁面分成若干層次(Layer),對每一層分別進行繪制,這樣只需更新變化的部分。

          因此,我們開發中要注意以下幾點:

          • 避免過度使用全局腳本:盡量減少使用全局腳本或者將它們放在文檔底部,以減少對HTML解析的阻塞。
          • 合理組織CSS和使用CSS預處理器:合理組織CSS文件的結構和覆蓋規則,利用CSS預處理器進行模塊化管理。
          • 利用瀏覽器緩存機制:通過設置合理的緩存策略,減少重復加載相同資源,提升二次訪問的體驗。
          • 優化圖片和多媒體資源:適當壓縮圖片和優化多媒體資源的加載,減少網絡傳輸時間和渲染負擔。

          綜上所述,瀏覽器解析HTML文件是一個復雜而高度優化的過程,涉及從網絡獲取HTML文檔到最終將其渲染到屏幕上的多個步驟。開發者需要深入理解這些步驟,以優化網頁性能和用戶體驗。通過合理組織HTML結構、優化資源加載順序、減少不必要的DOM操作和合理安排CSS和JavaScript的加載與執行,可以顯著提升頁面加載速度和運行效率。

          tml指超文本標記語言,通過標簽來控制文字和圖片的顯示方式,以.html結尾的文件是Html文檔,學習網站W3school。

          Html文檔結構


          title標簽是標題標簽,body內部存放能夠看到的所有內容,包含文字,圖片,視屏等。

          常見的基本標簽

          p標簽是段落標簽,h1標簽是頭部標簽多用于文章標題或副標題,共有六個,img圖片標簽引入圖片,div是最常見的塊級標簽,可以將網頁中的內容劃分出若干個矩形區域,用于存放不一樣的內容。標簽可以分為單標簽和雙標簽。


          無序列表

          網頁中間有一些內容相似,結構相仿,布局接近的區域,像這一類區域我們就使用無序列表來進行區域劃分。

          有序列表

          網頁中間還有一些內容相似,結構相仿,布局接近但是每個區域的內容是有先后關系的區域,像這一類區域我們就使用有序列表來進行區域劃分。

          編輯軟件vscode

          最近本人在準備面試中與CSS相關的內容,為自己后面的面試及復習知識做準備。對于知識而言,有著一個記錄也是十分重要的,也方便自己對自己所了解的技能做總結。大家都知道,在前端面試中CSS也是一個面試的重要考點,下面是本人整理的部分CSS面試考點。

          題目一:請你說說你對css盒模型的理解

          這個問題是面試中CSS極其重要的考點,幾乎經常被問到。對于CSS 盒模型來說,它前端開發中非常基礎而重要的概念之一。它描述了網頁上的每個元素都是一個矩形的盒子,這個盒子由元素的內容(content)、內邊距(padding)、邊框(border)和外邊距(margin)組成。

          具體的講,CSS 盒模型包含以下幾個部分:

          1. 內容區域(Content) :指元素內部實際包含內容的區域,例如文字、圖片等。
          2. 內邊距(Padding) :內容區域與邊框之間的空白區域,用來控制內容與邊框的距離。
          3. 邊框(Border) :內邊距外部的邊框,用來圍繞內容和內邊距的區域。
          4. 外邊距(Margin) :邊框外部的空白區域,用來控制元素與其他元素之間的距離。

          盒模型的分類:

          在 CSS 中,有兩種盒模型:標準盒模型(content-box)和 IE 盒模型(border-box)。

          標準盒模型(content-box) 在標準盒模型中,元素的寬度和高度僅包括內容區域的尺寸,不包括內邊距(padding)、邊框(border)和外邊距(margin)。這意味著,當你設置一個元素的寬度為 200px 時,這個寬度值僅包括元素的內容區域,而不包括內邊距、邊框和外邊距的寬度。如下面的示例:

          <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> body { margin: 0; padding: 0; } .box { width: 300px; height: 300px; padding: 10px; margin: 20px; border: 5px solid blue; /* box-sizing: border-box; 要求瀏覽器以IE盒子模型來加載盒子 */ box-sizing: content-box; /*要求瀏覽器以標準盒子模型來加載盒子*/ } </style> </head> <body> <div class="box">盒子模型</div> </body> </html>

          從這個示例中,我們可以看出在標準盒模型中,元素的總寬度計算方式為:內容寬度(width) + 左右內邊距(padding-left + padding-right) + 左右邊框寬度(border-left-width + border-right-width) + 左右外邊距(margin-left + margin-right)。這個總寬度值就是元素所占據的實際空間。也就是說盒子總寬度:width + padding + border + margin = 330

          怪異盒模型(IE盒模型) 在 IE 盒模型中,元素的寬度和高度包括了內容區域、內邊距和邊框的尺寸,但不包括外邊距。換句話說,當你設置一個元素的寬度為 300px 時,這個寬度值包括了內容區域、內邊距和邊框的寬度。還是上面的那個例子,但是我們需要在style中加上box-sizing: border-box要求瀏覽器以IE盒子模型來加載盒子。

          上面的圖我們可以從中看出,在 IE 盒模型中,元素的總寬度計算方式為:內容寬度(width)(包括內邊距和邊框) + 左右外邊距(margin-left + margin-right)。這個總寬度值同樣是元素所占據的實際空間。也就是是說,盒子總寬度:width + margin,盒子總高度:height + margin。

          總的來說,標準盒模型和 IE 盒模型的主要區別在于它們計算元素寬度和高度的方式不同。

          題目二:css中的選擇器有哪些?說說優先級?

          CSS選擇器是CSS規則的第一部分,它是元素和其他部分組合起來告訴瀏覽器哪個HTML元素應當是被選為應用規則中的CSS屬性值的方式,選擇器所選擇的元素,叫做“選擇器的對象”。

          選擇器的分類: 在css中,選擇器共有如下幾種,這些選擇器可以單獨使用,也可以組合使用。

          ID 選擇器:使用元素的 ID 屬性進行選擇,以 # 開頭。例如,#header { color: red; } 會選擇所有具有 id="header" 的元素。 類選擇器:使用元素的類名進行選擇,以 . 開頭。例如,.btn { background-color: blue; } 會選擇所有具有 class="btn" 的元素。 標簽選擇器:根據元素的標簽名稱進行選擇。例如,div { font-size: 16px; } 會選擇所有 <div> 元素。 后代選擇器:選擇指定元素內的后代元素。例如,div p { color: green; } 會選擇所有 <div> 元素內部的 <p> 元素。 子元素選擇器:選擇指定元素的直接子元素。例如,ul > li { list-style-type: none; } 會選擇所有 <ul> 下的直接子元素 <li>。 相鄰兄弟選擇器:選擇指定元素之后緊跟的相鄰兄弟元素。例如,h2 + p { font-weight: bold; } 會選擇所有 <h2> 元素后面緊跟的 <p> 元素。 群組選擇器:將多個選擇器組合在一起,以逗號分隔,同時選擇它們匹配的元素。例如,h1, h2, h3 { color: blue; } 會選擇所有 <h1>、<h2> 和 <h3> 元素,并將它們的顏色設為藍色。 屬性選擇器:根據元素的屬性進行選擇。例如,input[type="text"] { width: 200px; } 會選擇所有 type 屬性為 "text" 的 <input> 元素。 偽類選擇器:根據元素的特定狀態選擇元素,例如鼠標懸停、訪問狀態等。例如,a:hover { text-decoration: underline; } 會選擇鼠標懸停在 <a> 元素上時應用下劃線樣式。 偽元素選擇器:向元素的特定部分添加樣式,例如元素的前面或后面添加內容。例如,p::first-line { font-weight: bold; } 會將 <p> 元素的第一行文本加粗。

          優先級: 相信大家對CSS選擇器的優先級都不陌生:內聯選擇器 > ID選擇器 > 類選擇器 > 標簽選擇器。

          到具體的計算層?,優先級是由 A 、B、C、D 的值來決定的,其中它們的值計算規則如下:

          如果存在內聯樣式,那么 A = 1, 否則 A = 0 B的值等于 ID選擇器出現的次數 C的值等于 類選擇器 和 屬性選擇器 和 偽類 出現的總次數 D 的值等于 標簽選擇器 和 偽元素 出現的總次數

          題目三:請你說說css中的單位有哪些?

          相信大家都知道,在css中單位的使用是十分重要的,因此無論是從適配性還是觀賞性方面來講,了解css的單位對于我們來說也是很有必要的。下面我來為大家介紹一下css中的單位有哪些:

          在 CSS 中,常見的單位包括:

          1. 像素(px):相對長度單位,代表屏幕上的一個像素點。像素在網頁設計中應用非常廣泛,它的值是固定的,不受屏幕分辨率影響。
          2. 百分比(%):相對長度單位,相對于父元素的百分比。例如,width: 50%; 表示元素的寬度為父元素寬度的一半。
          3. EMS(em):相對長度單位,相對于元素的字體大小。例如,如果元素的字體大小為 16px,font-size: 1.5em; 將會使元素的字體大小為 24px(1.5 倍的 16px)。
          4. REM(rem):相對長度單位,相對于根元素(<html>)的字體大小。與 em 不同的是,rem 單位始終是相對于根元素的字體大小,這樣可以更方便地控制整個頁面的比例關系。
          5. Viewport 百分比單位(vw、vh、vmin、vmax):相對長度單位,相對于視口大小的百分比。
          6. vw(視口寬度):1vw 等于視口寬度的 1%。
          7. vh(視口高度):1vh 等于視口高度的 1%。
          8. vmin(視口寬度和高度中較小的那個):1vmin 等于視口寬度和高度中較小值的 1%。
          9. vmax(視口寬度和高度中較大的那個):1vmax 等于視口寬度和高度中較大值的 1%。
          10. 像素密度單位(dpi、dpcm、dppx) :用于描述輸出設備的像素密度。
          • dpi(每英寸像素數):1dpi 表示每英寸有 1 個像素。
          • dpcm(每厘米像素數):1dpcm 表示每厘米有 1 個像素。
          • dppx(每像素點數):1dppx 表示每像素點數為 1。
          @media print and (min-resolution: 300dpi) { /* 在打印時,當分辨率大于 300dpi 時應用的樣式 */ }

          這些單位可以根據具體的需求選擇使用,能夠靈活控制元素在不同設備上的大小和比例。

          題目四:說說設備像素,css像素,設備獨立像素,dpr,ppi的區別?

          當談論設備像素、CSS 像素、設備獨立像素(DIP)、設備像素比(DPR)和像素每英寸(PPI)時,通常是在討論屏幕分辨率、響應式設計和圖像質量等相關概念。下面我來分別解釋它們的含義和區別:

          1. 設備像素(Device Pixel) :也稱物理像素,是顯示設備(如手機屏幕、電腦顯示器)實際的物理像素點。它們是構成屏幕圖像的最小單位。通常以屏幕的分辨率來描述,比如 1920x1080 表示寬度為 1920 個像素、高度為 1080 個像素。
          2. CSS 像素(CSS Pixel) :是網頁中使用的像素單位,通常在 CSS 中使用。它是一個抽象的單位,與設備無關,用于定義網頁上的元素大小、間距等。在大多數情況下,1 個 CSS 像素對應于 1 個設備像素,但在高分辨率屏幕(如 Retina 屏幕)上,1 個 CSS 像素可能對應多個設備像素。
          3. 設備獨立像素(Device Independent Pixel,DIP) :也稱密度無關像素(Density Independent Pixel,DP)。它是一種與設備無關的邏輯像素單位,用于測量元素的尺寸和位置。在 Android 開發中,1 個 DIP 相當于屏幕上的 1 個物理像素,而在 iOS 開發中,1 個 DIP 可能對應于多個物理像素。
          4. 設備像素比(Device Pixel Ratio,DPR) :是設備像素和 CSS 像素之間的比率。它表示了在同樣的物理尺寸下,設備像素的數量與 CSS 像素的數量之間的關系。例如,DPR 為 2 表示每個 CSS 像素由 2 個設備像素組成。
          5. 像素每英寸(Pixels Per Inch,PPI) :是用于描述顯示器或打印機分辨率的單位,表示每英寸長度上的像素數量。PPI 越高,屏幕顯示的圖像就越清晰,因為像素更加密集。

          下面我用iPhone SE手機的尺寸作為示例:

          <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pixel Example</title> <style> .box { width: 100px; /* 使用 CSS 像素定義寬度 */ height: 100px; /* 使用 CSS 像素定義高度 */ background-color: red; margin: 10px; /* 使用 CSS 像素定義外邊距 */ } </style> </head> <body> <div class="box" id="box"></div> <script> // 獲取元素 var box = document.getElementById('box'); // 獲取設備像素比 var dpr = window.devicePixelRatio || 1; // 輸出設備像素比 console.log('dpr:', dpr); // 輸出設備分辨率 console.log('設備分辨率:', screen.width, 'x', screen.height); // 輸出 CSS 像素大小 console.log('CSS px:', box.offsetWidth, 'x', box.offsetHeight); </script> </body> </html>

          我們可以在瀏覽器的控制臺看到以下的輸出:

          綜上所述,設備像素是屏幕上實際的物理像素,CSS 像素是網頁中使用的抽象單位,而設備獨立像素是一個與設備無關的邏輯像素單位。DPR 表示設備像素和 CSS 像素之間的比率,而 PPI 則是描述屏幕或打印機分辨率的單位。在高分辨率屏幕上,DPR 可能會影響 CSS 像素與設備像素之間的關系,從而影響到頁面的顯示效果。

          總的來說:

          PC端 1px = 1物理像素:在大多數情況下,PC 端的瀏覽器會將 CSS 像素(1px)直接映射到屏幕的物理像素,即 1px 對應于 1 個物理像素。 頁面縮放比為1:1時,1px = 1物理像素:當頁面的縮放比例為 1:1 時,CSS 像素與物理像素的對應關系是一一對應的,即 1px 對應于 1 個物理像素。 設備像素 == 物理像素:在大多數情況下,設備像素和物理像素是同一個概念,都指的是屏幕上的實際像素點。 CSS像素==1px:在絕大多數情況下,1 個 CSS 像素等于 1px(像素單位),但在高分辨率屏幕上,1 個 CSS 像素可能會對應多個物理像素。 設備獨立像素 ==分辨率:設備獨立像素(Device Independent Pixels,DIP)是一個與設備無關的邏輯像素單位,它與屏幕的分辨率無關,而是表示屏幕上的一個虛擬像素。通常情況下,設備獨立像素等于屏幕的分辨率。 dpr(設備像素比) = 設備像素/設備獨立像素:設備像素比(Device Pixel Ratio,DPR)是設備像素和設備獨立像素之間的比率。它表示了在同樣的物理尺寸下,設備像素的數量與設備獨立像素的數量之間的關系。 ppi(像素密度) = 設備像素/屏幕尺寸:像素密度(Pixels Per Inch,PPI)是用于描述屏幕分辨率的單位,表示每英寸長度上的像素數量。通常情況下,PPI 越高,屏幕顯示的圖像就越清晰,因為像素更加密集。

          結語

          以上就是本次筆者所整理的有關css面試的內容,后面本人還將繼續完善css的面試考點。如有不足之處歡迎大家在評論區進行完善一下,大家一起為了進大廠而努力,一起加油吧!!!

          假如您也和我一樣,在準備春招。歡迎加微信shunwuyu,這里有幾十位一心去大廠的友友可以相互鼓勵,分享信息,模擬面試,共讀源碼,齊刷算法,手撕面經。來吧,友友們!


          作者:沐渃清澄
          鏈接:https://juejin.cn/post/7338717224436793394
          來源:稀土掘金
          著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


          主站蜘蛛池模板: 国产无吗一区二区三区在线欢| 中文无码AV一区二区三区 | 国产麻豆精品一区二区三区| 亚洲熟妇av一区| 精品一区二区三区免费毛片 | 一区视频在线播放| 亚洲一区二区三区播放在线| 国产精品免费视频一区| 精品无码一区二区三区爱欲九九| 无码国产精品一区二区免费16| 国产福利一区二区| 国模私拍福利一区二区| 色一乱一伦一图一区二区精品| 一区二区免费在线观看| 中文字幕无码不卡一区二区三区 | 精品国产鲁一鲁一区二区| 国偷自产一区二区免费视频| 成人区人妻精品一区二区三区| 国产在线精品一区二区不卡| 一区二区三区观看免费中文视频在线播放| 性色av一区二区三区夜夜嗨| 国产一区二区免费| 寂寞一区在线观看| 久久精品一区二区三区不卡| 国产一区二区免费| 亚洲日韩国产一区二区三区在线 | 国产人妖视频一区二区破除| 国产女人乱人伦精品一区二区 | 精品一区二区三区在线观看l| 国产精品男男视频一区二区三区 | AV鲁丝一区鲁丝二区鲁丝三区| 久久久av波多野一区二区| 精品一区高潮喷吹在线播放| 国产大秀视频一区二区三区| 青青青国产精品一区二区| 武侠古典一区二区三区中文| 亚洲一区在线免费观看| 一区二区三区国模大胆| 亚洲一区二区三区高清不卡| 国产一区二区视频在线播放| 国产精品熟女视频一区二区|