手寫 div 布局大概要有多快?
12-26
今天去面試web前端,要寫一個 div 的布局,最後用了一個半小時弄好,面試的人直接說這個很難嗎,要用這麼久。因為之前都是在網上搜別人的 css 布局,這次全部用 dw 手寫,所以很多地方都出錯,調試了很久……我之前那個人也有寫,但能看出應該不是自適應的,而是寫了具體的 px 值。想知道一般全手寫這個要多久啊?
div
div
3個div做float: left
div
div float: left
div
div
div margin-left
我估計10分鐘差不多吧,基本的思路是先分行,每一個行里看長啥樣,採用經典的兩列、三列等布局方式就好了
http://jsbin.com/loyuhepaji/edit?html,css,output
不知道這個拿去面試會不會被打……反正要不了幾分鐘……
PS. 因為題目是 div 布局所以全用了 div,不要學我…
題主在檢測智商,大家切莫被釣魚,散了吧
【8月15日更新】【Flex布局 + PS切片 + word代碼】
目錄:
【1】Flex 布局
【2】PhotoShop 切片導出CSS
【3】Word 文檔HTML格式保存
【4】純手寫CSS + HTML
【5】Bootstrap Grid 布局
【6】抖機靈
--------------------------------------------------------------------------------------------------------------------------------------------
還是鼓勵題主自己要多多練習。不管是DW還是什麼,工具始終是幫助你提高生產力的,它不能取代你的能力。題主加油~
# Flex 布局之前有知友提到了flex的布局,那個也是超方便。但是我在flex這方面接觸不多,所以只能是不要臉的自己試一下然後貼上來:
緊接著HTML 代碼:
&
&
&
&&
&
&
&&
&&
&&
&
&
&
&&
&&
&
&&
&
&
&
然後CSS部分:
&
這個方法我和題主一樣,一起努力學習吧~~
# PS 切片
這個也是從知友這裡學習到的,用PS切片工具能導出CSS文件,具體方法還請自行學習啦:
然後每一個塊其實都是一個圖片,PS會記錄下這些圖片的位置屬性並導出成CSS文件:
HTML + CSS代碼如下:
&
&
&未標題-1&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
&
# WORD 大法代碼:
這個和PS切片有點像,也是生成一個有圖片的文件夾:
HTML + CSS 代碼:
&
&
&
&
&
&
&
&
&
&
&
&
& |
&
& |
&
& |
&
& |
&
& |
&
& |
&
& |
&
& |
&
& |
&
&
&
& |
&
&& |
&
&
&
& |
&
&
&
& |
&
& |
&
&& |
&& |
&
&& |
&
&
&
& |
&
&& |
&
&
&
& |
&
&
&
& |
&
&
&
& |
&
&& |
&
&
&
& |
&& |
&
&& |
&
&
&
& |
&
&
nbsp;&
&
&
&
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
自己寫CSS很重要啊,畢竟別人的東西不能滿足你自己的每一個需求嘛。這個布局其實不難,因為元素不多,而且不用考慮平板手機那種響應式布局。
先上圖一張:
HTML 代碼如下:
&
&&
&&
&&
&&
&
&&
&&
&
&&
&
CSS 代碼如下:
&
-----------------------------------------------------
一般自己熟練了後就可以用一些開源的css,用bootstrap的網格布局寫這個也就是分分鐘的事情。
如果是用bootstrap
HTML代碼如下:
&
&
&
&&&&
&
&
&
&&&&
&&&&
&&&&
&
&
&
&
&
&
&&&&
&&&&
&
&
&
&&&&
&
&
&
CSS 代碼如下:
&
-----------------------------------------------------
什麼你還不滿意,好吧只好祭出我壓箱底的絕技!
少年你word會用嗎?
會畫一張這樣式的文檔嗎?
畫完了嗎?
點擊保存後下拉「保存類型」
少年你是不是驚奇的看到了 *.html *.htm的類型呢?
一共費時:2分鐘。
--------------------------------------------------------------------
總之少年加油吧,大牛處處有,只要你堅持。
「搜」 可能是說你需要再多學習一些知識,「DW」 幾乎沒有專職的前端在用了吧,它本身效率就比文本編輯器低一些。
這個布局應該在 10 分鐘內寫完比較好。
如何寫出這樣一個布局呢?
首先需要對整個布局結構進行拆分。
[wp_ad_camp_2]
題主並未指定具體的數值,給的示意圖又略顯粗糙,因此在拆分時我做了一些簡單的補充:
- 整個頁面分為三行,高度分別為100像素,150像素和400像素;
- 一共包含9個方塊,在圖中用數字標出;
- 所有方塊的邊寬度均為5像素;
- 除藍色點代表部分有10像素間隔外,其餘部分無間隔;
- 根據容器的寬度自適應。2,3,4,5均為三分之一寬,6為三分之二寬,7,8寬度相同;
- 不做響應式支持
有了這些設定,我們就可以開始實現了,接下來需要考慮:
選用何種布局方案?
針對題主的具體情況,我的第一個建議是:
1. 把div塞進表格中
對,你沒有看錯,就是表格布局。既然需要1個半小時才能弄好,那題主對於CSS的掌握應該還有所欠缺,再加上面試時的緊張狀態,那麼表格布局的兩個優勢就顯得特別突出:
- 直觀,5秒鐘就能想明白
- 只需要極少的CSS(想想只需要寫HTML就有點小激動呢……)
(此處暫時不討論table布局是否合理。另外,table布局也是可以只使用div的,具體請移步CSS display 屬性)
好的,讓我們來分配一下表格元素吧^_^
哈哈,結構很清晰有木有,就像下面這樣:
table
tr
td(colspan=3) &> block1
tr
td &> block2
td &> block3
td &> block4
tr
td &> block5
table
tr
td &> block7
tr
td &> block8
td(colspan=2) &> block6
再加上一點點CSS來控制高度,邊和間距,輕鬆搞定!
[wp_ad_camp_3]
完整預覽:http://codepen.io/adcentury/pen/LVqdOo雖然使用表格布局很好地解決了這個問題,但看到上面鏈接代碼中的 id="t1-r3-d1-t1-r2-d2" 是否感到一陣噁心?(沒錯,這就是我的目的)
看到這,你一定已經開始無法忍受表格布局的種種 缺點 了(就如絕大多數前端工程師一樣)。
網格系統(Grid System)應運而生。
2. 使用float布局的網格系統完成
怎麼依靠CSS實現網格系統呢,推薦查看 Don"t Overthink It Grids 。
我們不妨採用12列的網格系統,於是,我們的結構應該是這樣:
我相信題主一定能根據這張圖設計出整個結構,並通過CSS實現布局。完整預覽:http://codepen.io/adcentury/pen/bdzMbY
學會了網格系統,已經可以搞定Web端的絕大部分布局需求了(移動端是另一片天地哦= =|||)。
然而,使用float將元素浮動起來並使用clear:both來清除浮動這樣真的好嗎?是不是用起來總有種怪怪的,不得已而為之的感覺?
[wp_ad_camp_4]
對了,因為它不夠優雅!因此,你還需要知道:
3. Flexbox,更優雅的布局
關於Flexbox可以看看這篇文章:A Complete Guide to Flexbox,或者這篇:Flexbox——快速布局神器。
運用Flexbox實現題主這個布局,CSS可以簡單成這樣:
.flex-box {
display: flex;
}
.flex-item {
flex: 1 1;
}
.flex-item-grow-2 {
flex-grow: 2;
}
瞬間擁有了文藝范,有木有!
關於手寫時間
由於電腦中沒有DW,所以我使用 Sublime Text 2 和 Emmet 編寫,時間大概如下:
- 表格布局:15分鐘左右
- 網格系統:10分鐘左右
- Flexbox:8分鐘左右
考慮到面試時無法使用工具,並且可能會先緊張個幾分鐘,現場應該能在上述時間的兩倍內完成。
=========================== 補充 ==========================
個人不太贊同「在網上搜別人的 css 布局」直接使用。網頁布局有些時候很像畫畫,套用別人的布局就如同填色,能感受到繪畫的美麗卻學不會它。
如果題主特別喜歡某個布局,可以嘗試臨摹一下。
flex 大法大概 90 秒,不算按 alt-tab 看圖的時間
使用Sublime Text + Emmet,大概十分鐘
效果預覽:Document
HTML代碼
&
&
&
&
&Document&
&
&
&
&&
&
&&
&&
&&
&
&
&&
&&
&
&&
&
&
&
CSS
div { box-sizing:border-box; }
.wrap { width: 960px; margin: 0 auto}
.header {height: 100px;margin-bottom: 10px;border: 1px solid #000;}
.middle { overflow: hidden; margin-bottom: 10px;}
.middle div {float: left; margin-right: 10px; width: 300px; height: 100px;border: 1px solid #000; }
.sidebar {float: left; width: 200px; height: 500px;border: 1px solid #000; }
.sidebar div { margin: 20px; height: 60px;border: 1px solid #000;}
.content {margin-left: 220px; height: 500px;border: 1px solid #000; }
用記事本都能在10分鐘左右寫完的,建議你還是在紮實一下前端基礎吧,不要搜別人的代碼,要多些多思考。搜的東西不是自己的知識。。。
---------------------------------剛剛試了一下 用記事本真的用不了10分鐘就能寫完的------
我覺得公司考這題可能不僅僅是看div+css布局吧,可能會有一些對HTML5中新標籤進行考察的意義吧。
&
&
&
&
&&
&&
&
&&
&
本以為5分鐘,突發奇想實測一下就掐了秒錶,結果是14分鐘。代碼如下(記事本原生手工,未看瀏覽器,細節肯定有出入就不調了,想來這道題也只是看看思路的,圖中那些沒沖齊的方框應該不是美工狗的癖好。。)【後來為了教學更直觀,寫後面補充部分時又優化了幾分鐘】
&
&
&
&
&
&
&
&
&頭部&
&
&盒子&
&盒子&
&盒子&
&
&
&
&菜單項&
&菜單項&
&
&內容&
&
&
&
&
&
——補充線——
由於各路大神除了我這種方案以外,也提供了各種抖機靈方案供娛樂,我也補充一下生產環境下之所以不推薦使用其它方案的理由,如有紕漏歡迎指正。
[wp_ad_camp_5]
一、可視化工具自動生成:(如dreamwaver、frontpage等可視化工具乃至photoshop、word導出)
代碼極其極其極其冗餘,並且完全不可精細控制效果、不可模塊化、不可手工維護。
二、第三方框架:(如bootstrap)
除了比較冗餘,一切侵入呈現層的框架都對業務和設計有束縛性,而不入侵呈現層的框架例如ember.js的呈現層都需要手工原生。即便剛好適合眼前的任務,也是別人原生手工的結果,其代碼也已然是手工原生中的某一種,是一種做事的方案,而不是代碼方案。
三、手工原生:
(一)css-position:
完全不顧父子兄弟元素變化的方案。
(二)css-float:
center/middle/bottom對齊無力,並有波及父子兄弟元素、在頁面拓展時誘發故障的風險。
僅在需要插圖而非頁面布局時是不二之選。
通過float固定寬度、並給適配寬度的元素添加單側固定寬度margin,可實現與table僅有的布局優點相同的效果,在這種情況下選用float還是table可斟酌定奪。——2015.11.25補充
(三)css-flexbox:
這是最先進的方案,不過現在兼容性還不好,需要js做優雅降級。
【如果需要自適應屏幕尺寸等比例縮放多列,只能如此。】
(四)table:
這是最古老的方案,布局的可修改性級差,雖然可以某列自適應寬度模擬flexbox,但多列就不行了,仍然需要flexbox+js優雅降級。
在需要表格展示數據而非頁面布局時是不二之選。
【而我判斷題主的設計稿的實際業務情景非但不需要等比例縮放,而且不需要縮放,即最低寬度+更寬居中即可。(這也是為什麼有一些尺寸是直接指定的原因)】【如果這個條件不滿足果斷方案(三)】
(五)css-inlineblock:
在無需等比列縮放、內容高度自適應、完全不波及限制父子兄弟元素的情況下,這是最優的方案,也是最簡潔的,並且兼容IE6+、Chrome、Safari、Firefox、Opera。(需要設置上對齊,並一定要留意對行間距、塊間空白的處理,這也是不如float上手快的原因)
【我採用的方案】
註:由於代碼進行了高度考量優化,如果從合理性的角度大家覺得有哪怕一個字母的可商榷部分也歡迎提出來討論,相互提高。
計時開始,稍後更新
================ 更新線=============
http://codepen.io/jacktianer/pen/YXRRaG
花費15分鐘,速度不算太快。
這麼一個頁面,如果用sublime text我大概十多分鐘吧。。。最多十多分鐘。。。。。
如果用dw。。。。我覺得我可能用的時間比題主還長。。
結構很清晰了,比我一般看完設計稿後腦內生成的結構框圖還要簡單(腦內可是酷炫的彩色呢)……
5分鐘足夠了吧_(:3」∠)_
一個半小時確實很久。。。。建議在今後的學習中放棄可視化工具 手寫效率其實會比可視化工具做東西要快的,特別是有webstorm sublimetext 之類的編輯器,這個大概也就是十幾分鐘的事,如果事先有準備會更快。
布局就不要去抄別人的代碼了,這是最基本的,這個都不自己搞明白那真心不要做這行了
&
&
&
&
&Document&
&
&
&
&
&& &
& & &
&
&& && & && & &&
&
半小時
純手寫應該10分鐘左右
定義幾個柵格化的 class 不就行了
但凡有點經驗的五分鐘就能寫好。
但是如果他看的是你對於整個頁面對於寬度自適應的理解的話,那就另說了。
而一般我基本都會和UI把後一種情況討論清楚。
平時都是網上搜別人的CSS,題主你確定你是在面試前端開發?我們廠PHP程序員都能熟練手寫CSS,所以不要怪那人鄙視你啦,基礎打牢一點吧。
有IDE用emmet還能鏈個bootstrap的話,想3分鐘寫2分鐘吧
啥都沒硬手寫 估計10分鐘
之前有段時間做了不少newsletter,被逼著練 順便吐槽在gmail app里搞響應布局有多操蛋。
推薦閱讀:
※近來國內外有哪些用戶界面、交互體驗設計優秀的產品?優秀在哪裡?
※Web 前端怎樣入門?
TAG:前端開發 | CSS | DivCSS | 前端入門 | CSS布局 |