後端工程師入門前端頁面重構(一):口訣

ScalaCool發表於2017-12-19

本文由 KnewHow 發表在 ScalaCool 團隊部落格。

大家好,我是 KnewHow,一名前 Java 開發工程師。為什麼要說是「前」呢?這要從兩週前我加入一家新公司說起。

入職第一天,實習導師告訴我會有一個月的新人引導計劃,當時心裡還是美滋滋的,覺得這個公司比較人性化,沒有把工程師當勞動力使。

但隨後,我就被震撼到了。因為面試時就得知公司崇尚的是全棧文化,在部署完一切辦公環境之後,實習導師告訴我開始學習的第一個技能竟然是:「前端頁面重構」!!!

當時我的內心是這樣子的。

後端工程師入門前端頁面重構(一):口訣

要知道,我對於前端,除了幾個基本的標籤外,可是一無所知。然而,我很快調整了狀態,不就是前端開發麼,應該難不倒機智的我。

—————————— 以下開始嚴肅臉 —————————
後端工程師入門前端頁面重構(一):口訣

什麼是頁面重構

好,第一個問題:所謂的「頁面重構」到底是幹嘛的?

實習導師提出了要求,一定要有自己深刻的見解,好吧。。。。。

於是,我的視線離開了電腦螢幕,開始尋求不一樣的答案。很快,我注意到了我的辦公桌面,是這樣子滴。

後端工程師入門前端頁面重構(一):口訣

在我看來,前端頁面重構,本質不就是處理空間佈局的關係嗎?

於是,機智如我,很快得出了自己的見解和答案。

上面的這張圖片是日常生活一個場景,「 一張辦公桌上面擺放著一些物品。桌面是背景,書和鍵盤並排的放著,白色書和紫色書交疊著,紫色書上面放著一個滑鼠」。

其實這就是一個佈局,也類似一張網頁。

然後我看了看旁邊同事的桌子,也看了看整個公司的辦公環境。

然後我發現在一個佈局中,存在三種關係:組成、包含和交疊

後端工程師入門前端頁面重構(一):口訣

於是,我把這個結論告訴了實習導師。實習導師聽後思考許久,但還是表達了讚賞。之後,他又提出了第二個問題:

那麼,你說說看什麼是「盒子模型」?

這一次,我馬上 Google 了這個概念。機智如我,基於我以上的結論,很快我又得出了以下的解讀。

盒子模型

在我看來,「盒子模型」,本質就是去處理佈局中,元素大小、位置和距離的關係。

後端工程師入門前端頁面重構(一):口訣

在上面的場景中,鍵盤和紫色書是有尺寸、邊框的,它們是並排放置的,彼此之間的距離可以使用盒子模型中的「外邊距(margin)」來表示。

滑鼠被紫色書包含著(如果按照完全 2D 的視角),它們的距離可以使用「內邊距(padding)」來表示。

白色書和紫色書交疊在一起的,這個如何表示呢?

哈哈,它們其實同樣可以使用某一方的「外邊距(margin)」來處理,只不過值要是負數而已。

後端工程師入門前端頁面重構(一):口訣

我找到了實習導師,把我剛剛總結的答案告訴了他,他微微一笑:「這個回答還算不錯」,接著又問道:

那麼在網頁佈局中,「盒子模型」是怎麼被使用的呢?

當時我的內心是這樣的:

後端工程師入門前端頁面重構(一):口訣

你怎麼這麼多問題,你特麼還有完沒完!!!

理智的我壓制了自己的小情緒,不就是怎麼使用「盒子模型」嗎?

絕對定位佈局

機智的我思考片刻,很快就有了答案,這也太簡單了!

直覺上我們只要把網頁劃分成一個個小塊,然後調整它們的位置就行了。

拿豆瓣的首頁來說,我們可以把第一行分為三塊,分別為豆瓣的 logo、搜尋框以及後面的熱搜主題。

然後我們只需要使用「外邊距(margin)」來設定他們和瀏覽器左邊界之間的距離,就 OK 了。

後端工程師入門前端頁面重構(一):口訣

哈哈,我簡直就是個天才。

我把我的答案告訴了實習導師。心裡美滋滋的:「我聰明吧」。

實習導師輕瞟了一眼我的答案,預料中的讚美和肯定並沒有出現。

他目光轉向我,說:「你的這種方案是可行的,但是至少犯了兩個錯誤。」

在絕對定位中,不會使用 margin 來表示位置偏移,我們應該使用 top 和 left 。(可參見:position

只有入門級別的小白才會使用「絕對定位佈局」來作為一個網頁的主要佈局方式,這種方案是十分低效的!

絕對定位佈局 - 低效分析

「啊,低效的?為什麼是低效的?」

在網頁中,會有成百上千的元素,如果每個元素你都去量一下它的邊距,這個效率是不是很低!

「iOS 端佈局有一個更清晰的描述:絕對定位本質就是通過幀來定位一個檢視的起點,高度和寬度。」

「這個就要求你需要去計算每個檢視的位置和大小。」

更可怕的是,如果有一天有一個元素的位置或者大小發生改變,那麼其它的元素也可能需要更改,這個更是低效的!

「簡單來說 就是牽一髮而動全身!」

後端工程師入門前端頁面重構(一):口訣

「現在的頁面佈局都使用浮動佈局,你去調研一下吧。」

浮動佈局

我用 Google 搜尋了浮動佈局和絕對定位佈局。機智的我發現了它們最本質的一個區別:

絕對定位佈局使用瀏覽器的視窗的邊界作為參考,一個元素的位置是針對瀏覽器的邊界來設定的。

然而在絕對定位佈局中,元素和元素之間視對方為不存在,這意味著當一個元素位置和大小發生了變化,不會對其它元素產生影響

後端工程師入門前端頁面重構(一):口訣

而在浮動佈局中,它的位置通常採用 「 float 」 來處理,一個元素的位置受到其它的元素的影響。

如果有一天被參考的元素位置或者大小發生了變化,那麼當前元素的位置也會發生相應的變化。這樣就比較高效了。

後端工程師入門前端頁面重構(一):口訣

我興奮的把調研結果告訴了實習導師,實習導師看了後,說:「還可以吧。」

接著他又問道,「如果現在給你一個網頁,你知道怎麼佈局嗎?」

「這個。。。」

後端工程師入門前端頁面重構(一):口訣

頁面重構之口訣

「看你這個猶猶豫豫的樣子,我直接告訴你好了。」

我們在網頁的左上方放一塊磁鐵,那麼所有元素都會被磁鐵所吸引,那麼磁力相反的方向,就是我們佈局的方向。

後端工程師入門前端頁面重構(一):口訣

「所以我們佈局的方向就是先從左到右,再從上到下,從整體到區域性,化整為零!」

「明白了嗎?」

「還不是很明白。」

「那我們來做個練習吧。」

「看這個豆瓣的首頁,先從整體來看,按照從左到右可以分成幾個部分。」

後端工程師入門前端頁面重構(一):口訣

「一個部分吧。」

「對的。」

「因為整個頁面就只有中間的那個部分。」

後端工程師入門前端頁面重構(一):口訣

「從上到下,你看看這個頁面可以分成幾個部分。」

「這個好像有點多了,每一行都可以分成一個部分吧。」

後端工程師入門前端頁面重構(一):口訣

「不錯嘛,看你你已經掌握了規律,看看下面的可以分成幾個部分。」

後端工程師入門前端頁面重構(一):口訣

「這個。。。」

「不要捉急,按照我的口訣,先看從左到右分成幾個部分,再看從上到下分成幾個部分。」

「從左到右可以分成三個部分。」

後端工程師入門前端頁面重構(一):口訣

「從上到下就一個部分吧,感覺沒有其它東西了。」

後端工程師入門前端頁面重構(一):口訣

「不錯不錯,我們再來一個難一點的,看看這個可以分成幾個部分。」

後端工程師入門前端頁面重構(一):口訣

「從左到右可以分成三個部分。」

後端工程師入門前端頁面重構(一):口訣

「從上到下可以分成一個部分。」

「那這個呢?」

後端工程師入門前端頁面重構(一):口訣

「從左到右一個部分,從上到下也是一個部分。」

「這個呢?」

後端工程師入門前端頁面重構(一):口訣

「從左到右一個部分,從上到下三個部分。」

後端工程師入門前端頁面重構(一):口訣

「這個呢?」

後端工程師入門前端頁面重構(一):口訣

「從左到右一個部分,從上到下四個部分,然後再對更小的模組進行劃分。」

後端工程師入門前端頁面重構(一):口訣

「有沒有發現什麼規律?」

「就是按從左到右,從上到下的順序,先把網頁的進行整體的劃分,然後在依次對小模組進行劃分,然後再對更小的模組進行劃分,一直這麼遞迴劃分下去。」

「好的!你已經學會了!」

「啊!這麼簡單的?那個可以問你一個問題?能不能先從上到下,在從左到右?」

不能,因為人看網頁的習慣就是先從左到右,在從上到下,這樣的設計會有更好的視覺效果。」

總結

好了,通過本篇文章,我們領悟了前端頁面重構的口訣,再來重複一遍:「從左到右,從上到下,化整為零」。

那麼,在後續的文章裡,我們將進一步介紹所謂的心法和招式。

後端工程師入門前端頁面重構(一):口訣

相關文章