CSS調試

CSS調試

CSS調試就是為什么我寫的CSS規則沒有生效的事情。

對于后端程序員來說,沒有什么比調試更重要的事!我之前做openjdk7移植那會,主要就是使用gdb去調試各種各種的bug。當我看到我所寫的CSS沒有達到預期的效果,這個時候就要進行調試了!

嗯,我不得不說的是,前端的CSS調試和后端的調試是不同的。后端web調試,主要依靠手指,因為需要一步一步點擊鼠標嘛!當然,也不完全,如果調試復雜的后端程序時,還是首先需要使用腦子的,此時的邏輯分析是第一位的;前端的CSS調試不一樣,需要腦子!

調試原則

此處列出的原則,取之于《調試九法——軟硬件的調試之道》。此本書適合所有需要邏輯思考的軟硬件調試的地方。

  • 理解系統

系統的基本運行機理是什么。CSS層疊規則、浮動、定位、字體、文本屬性等需要有一個基本了解,否則出了問題,都不知道是CSS那一方面的。

  • 精簡代碼,制造失敗

制造失敗,這個原則在后端調試中,就是要讓問題復現!有些問題是偶然發生的,這類問題在后端調試中比較難的問題,解決此類問題的首要任務,就是讓這個問題重復出現,起碼出現的幾率要變大,這樣可以降低調試的難度。

在前端調試中,也一樣,我們需要簡化,然后讓其失敗!只留足夠的htmlcss代碼,然后讓問題出現。

調試工具

調試工具一般是PC端的chrome瀏覽器的chrome-dev,以及fireboxfirebug工具。有時我們也需要看代碼在手機端到底發生了什么,尤其是現在微信圈這么火爆,免不了需要在真機上運行代碼,分析原因。首先介紹一些PC端使用這些工具的場景。

  1. 如果考慮某一CSS屬性是否有效果,或者在原有的基礎上,添加一條、兩條CSS規則,使用chrome-dev最方便,因為只要鼠標點擊一下,而且還有CSS規則的提示功能,好用。如下圖所示:

    css-debug-webdev-addclass.png

  2. 如果需要實時讓CSS規則是否生效,在chrome和firefox中都很方便,下圖給出在chrome的截圖:


    css-debug-webdev-editclass.png
  1. 如果需要大規模的書寫CSS規則,并且實時看到效果,我推薦Web DevelopmentToggle Web Development Toolbar,真心好用。在CSS菜單下面有編輯CSS菜單,在里面編寫的CSS規則,你可以實時看到效果。

    css-debug-webdev.png

  2. 有時,需要分離問題,去除其它影響因素,此時需要復制一段html代碼進行單獨分析,這個功能在firefoxchrome中都有,下圖是chrome的使用截圖。

    css-debug-webdev-copyhtml.png

  1. 調試的時候,可能會通過設置DOM元素的border、background-color、outline,此處推薦使用outline,因為使用border可能會影響布局。下面是一個簡單的事例代碼:

     .css-debug{outline:1px dashed red;}
    
  2. 使用javascript代碼,為頁面的所有DOM元素添加不同顏色的框來進行調試。此種方法比較暴力,最終顯示效果比較混亂,這種功能在web development中存在,就是給某類型的元素添加特殊的標識。但這種功能也可能有其使用場景,比如沒有web development,或者可以限制選擇元素,讓其給一部分DOM元素添加標識,而且此種功能的代碼長度很短,來看一下:github CSS Layout Debugger

     //可以直接在chrome-dev的console里執行
     [].forEach.call(document.querySelectorAll("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})
    

微信端的手機調試,有兩種方案:

使用真機調試,我測試了小米的手機。首先和調試android應用一樣,你要使用usb連接手機,打開usb調試功能;其次使用chrome瀏覽器的more tools > remote device,進行連接,如下圖的截圖所示:
css-debug-webdev-wechat-debug1.png

另一種方案,使用微信團隊開源的針對手機端的github vConsole

常見CSS案例

案例篇就是常見的CSS陷阱,這種問題的最大可能是什么。特別是新手如我等之輩,沒有經驗,只能按個排除。我會不斷收集整理這節內容。

  1. 是否是CSS語法問題

    使用CSS Lint 或者W3C CSS validator檢查一下吧!

  2. 是否是CSS屬性過新,瀏覽器不支持

    先到Can I Use?去檢測一下瀏覽器是否支持此屬性,然后考慮是否需要使用瀏覽器前綴或者css3的膩子腳本(Modernizr)去解決。

  3. 在各個瀏覽器上的顯示樣子不同

    使用重置樣式。各個瀏覽器對默認的DOM元素的CSS樣式是不一樣的,你可以借鑒CSS框架的重置樣式,比如Bootstrap的。

  4. 圖片周邊存在有趣的空白

    設置 display: block(圖片默認是內聯的,因此會有空白)

  5. 元素不顯示、位置錯誤或者被遮擋

    是否是定位的問題?如果是定位問題,需要考慮距其最近的,設置position屬性的父元素。解決此類問題你需要明白絕對定位、相對定位、固定定位、靜態定位的知識。

    display屬性是什么?是inline還是block屬性?改變此屬性看看。對于占位的span元素,可以添加一些內容進去看看是否可以顯示。完整的display屬性列表看這里(MDN docs display page

    transform 及 opacity 屬性是什么? z-index值呢?

  6. 偽元素不顯示

    設置 ‘content’的值?

  7. 圖片大小問題不能控制

    設置圖片的寬度為:width:100%,這樣圖片的大小便受控于其父空間的大小

  8. 元素排列不正確

    有浮動的元素?浮動的寬度有做過設置?大小是多少?padding和margin呢?可否用box-sizing屬性去解決?

  9. 沒有結束...

他山之石

Debugging CSS中文翻譯

《調試九法——軟硬件的調試之道》

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容

  • 現在到處都是JavaScript,每天都能知道點新東西。一旦你入了門,你總能從這里或是那里領悟到很多知識。 一旦我...
    恩德_b0c2閱讀 149評論 0 0
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,774評論 1 92
  • CSS Layout Debugger https://gist.github.com/addyosmani/fd...
    藍淺藍深閱讀 270評論 0 0
  • 看過這樣一個故事:一個媽媽是大學教授,爸爸是政府官員的孩子,從小各種搗亂,每次被幼兒園遣送回家后,爸爸都會打他,而...
    若水希言閱讀 578評論 4 5
  • 我有明亮的眼睛 卻看不到風景 存于何處 我有健全的雙手 卻觸不到溫暖 藏于何方 我有行走的雙腳 卻走不到前方 通于...
    瘋人只愿閱讀 218評論 0 1