Debug前端HTML/CSS
譯者按: 關於使用Chrome開發者工具非常全面的介紹,值得一讀!
為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用於學習。
我強烈感覺到至少有一半人會這麼想:“HTML/CSS甚至算不上一門程式語言”。不過,前端開發中,HTML/CSS方面Debug技巧不足導致的問題非常多。
並不是每一個開發者都知道他眼前早就有一個非常強大的Debugger,可以幫助他追蹤和消除bug。這個Debugger就是他自己的谷歌瀏覽器。在之前一篇部落格中,我主要介紹了Console。在這篇,我將專注於Elements標籤。
這篇文章將會包含:
- 將你的瀏覽器變為IDE-可動態編輯的HTML/CSS
- HTML斷點
- 改變元素狀態
- 搜尋特定的元素
- 通過例項來練習新的技巧
- 理解元素樣式
好啦,基本介紹的差不多了。接下來給你展示新的技巧。
快速進入Element標籤的兩個方法
- 對著頁面任何元素(Elements)點選右鍵,選擇“檢查”
- 使用Ctrl+Shift+I(Mac:Cmd+Opt+I)開啟開發者面板,選擇元素(Elements)標籤。
元素(Elements)標籤的左側
DOM樹
首先,DOM樹元素可以被進一步檢查(inspected)。點選左側的三角來展開檢視更多的元素。
點選滑鼠右鍵,會有更多的選擇:
- Add attribute - 對選中的元素新增新的屬性
- Edit attribute - 編輯某個屬性,當你滑鼠在某個屬性上方點選右鍵時方才顯示。
- Edit as HTML — 你可以編輯整個HTML;如果你想把元素的一部分拷貝使用,這樣操作也很方便。
Copy:
Copy outerHTML
— 將整個標籤及其內容拷貝。Copy selector
— 拷貝CSS選擇器(div > span > #id)Copy XPath
— 拷貝XPath //*[@id=”answer11208745–20”]/div/div[3]/time, 更多請檢視文末拓展閱讀Cut element
— 剪下元素Copy element
— 拷貝元素Hide element
— 通過新增display:none
來臨時性地隱藏元素;(cmd+H/Ctrl+H)Delete element
Expand all
— 將所有節點展開Collapse all
— 將所有節點摺疊:active
— 將元素設定為active狀態*:hover
— 將元素設定為hover狀態*:focus
— 將元素設定為focus狀態*:visited
— 將元素設定為已訪問狀態*- Scroll into view — 將網頁快速滑動到元素所在位置
Break on:
subtree modification
— 在子節點被修改的時候中斷執行 **attribute modification
— 在屬性被修改的時候中斷執行 **node removal
**
- 在右側的樣式(styles)中檢查效果
** 在右側(DOM breakpoints)可以檢視設定的斷點
斷點實戰
不實戰一下,理解起來可能有點困難,特別是如果你還從未使用過它們。接下來我建立一個簡單的例子交給你來玩。
所有的步驟都在HTML檔案中。如果debugger在jQuery中中斷暫停,你可以將jQuery遮蔽(如下圖所示)。
元素快速定位
點選該圖示,然後在頁面上選中元素,DOM tree就會快速定位到該元素的原始碼位置。
原始碼
If you click on the source file like styles, fonts, js files, there will be some additional options.
如果你點選樣式(style),fonts,js檔案,會有一些額外的選項。
捕獲節點截圖
一個很酷的技巧就是你可以將選中的節點生成一張png圖片。
- 點選滑鼠左鍵選中元素
- 使用 Cmd+Shift+P/Ctrl+Shift+P開啟命令輸入視窗
- 輸入
node screenshot
- 選中
Capture node screenshot
將會生成一張PNG圖片。
通過字串、CSS選擇器、XPath快速查詢
當元素標籤開啟,輸入Cmd/Ctrl+f,將會開啟一個輸入視窗。
直接編輯原始檔
在Chrome開發者面板可以直接編輯原始檔並儲存,不用重新整理頁面。
- 開啟source標籤,選中並開啟你想要編輯的檔案並編輯
- 然後右鍵,如上圖所示
- 在Windows下,你可以點選整個資料夾(左側藍色的圖示),然後選擇
Add folder to workspace
- 在MacOS下,你可以將整個資料夾拖動到你本地的目錄。你也可以右鍵選擇
Add folder to workspace
- 接下來你所有的更改都會自動反應到對應的原生代碼。
Fundebug是可以復現使用者行為的JavaScript錯誤監控平臺,支援各種框架,可以幫助您第一時間發現BUG!
元素(elements)標籤的右側區域
樣式(styles)
當你選中某個元素,對應的樣式以及其他一些屬性會在右側顯示出來。
:hov
- 當你展開:hov
,其提供的選項可以讓你啟用元素的不同狀態,比如hover, focus。在DOM tree上也可以直接對元素進行這樣的操作。.cls
- 對選中的元素新增class+
- 新增新的style到該元素
在Styles標籤,你可以找到對應元素適配的所有的style。
一些標記的含義
黃色的警告標識表面樣式的名字或則值格式不正確。比如上圖widd
是一個錯誤的屬性名。
被劃掉意味著被其它樣式覆蓋,比如另一個樣式使用了important
關鍵字。
灰色背景的樣式檔案是有效但不可編輯。這些樣式檔案來自於瀏覽器。
右側有該樣式所在的檔案,點選即可檢視該檔案。
樣式的計算結果(Computed Styles)
最上方的矩形框視覺化地展示了padding, border和margin的效果以及其值。
對於非靜態定位的元素,top、right、bottom、left屬性會顯示出來。所有的值都可以左鍵雙擊,然後修改。
下面是所有適用的樣式規則。每一條都可以展開檢視,並且右側有對應的原檔案的位置。
所有計算好的樣式不可編輯,不過你可以點選灰色的箭頭進入對應的樣式來進行編輯。
Event Listeners
在該標籤頁可以看到所有的事件監聽函式。
位於左側的重新整理按鈕
— 重新整理所有監聽事件父元素(Ancestors)選擇框
— 顯示/隱藏所有元素的父元素的監聽函式
All/Blocking/Passive下拉選單,你可以選擇一個:
Passive events listeners
— 一個新的web標準,在Chrome51釋出的新特性,可以提升滑動的效能。Chrome Release NotesBlocking
— 典型的那些過時的事件監聽.Framework listeners
— 檢車來自框架的事件監聽。當選中後,我們看到的jQuery不再是一個連線,而是具體函式呼叫的位置。
每天使用
當你在閱讀不熟悉的程式碼的時候,事件監聽標籤非常有用。它幫助你快速定位該函式繫結到哪個元素。”Show function definition”可以跳轉到函式的定義。
如果你使用for
迴圈來新增元素,可能你不小心把多個事件繫結到同一個元素。那麼通過檢視事件監聽可以幫你發現這個bug。
記得選中Framework listeners
來檢視具體的繫結,而不是抽象的jQuery。Fiddle示例
屬性
每一個被選中的HTL元素都是一個DOM物件。它具有相應的屬性。屬性標籤顯示選中的DOM物件的繼承結構。
老實說,我並不怎麼使用這個功能。我主要的使用場景是檢視元素的屬性,而不是使用console.log
以及重新載入和重新整理。如果你有什麼更好地說那個場景,不妨分享一下。
Shapes and $scope
Shapes和$scope是額外的標籤來自Chrome的外掛。在接下來的文章我會詳細介紹。
結束語
如果你想知道更多,可以檢視命令選單(Command Menu),或則拓展閱讀。
拓展閱讀
關於Fundebug
Fundebug專注於JavaScript、微信小程式、微信小遊戲、支付寶小程式、React Native、Node.js和Java實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了8億+錯誤事件,得到了Google、360、金山軟體、百姓網等眾多知名使用者的認可。歡迎免費試用!
您的使用者遇到BUG了嗎?
體驗Demo 免費使用