UI設(shè)計師必看:詳解最全面的組件化開發(fā)與設(shè)計指南

一、提取產(chǎn)品中的共用部分;
首先要提取產(chǎn)品中的共用部分。我列舉了一些,這些都是極為常見的組件。
1. 導(dǎo)航
2. 按鈕
3. 表單
4. Tab
5. 翻頁
這個翻頁其實是有點問題的,少了個當(dāng)前選中狀態(tài),不知道現(xiàn)在是第幾頁啊。所以說組件的提取要考慮周全,所有可能的狀態(tài)都要設(shè)計。
6. 表格
7. 進(jìn)度條
8. 彈窗、列表、錯誤提示……等等,還有很多。這些都是我前面說的經(jīng)過實踐驗證的設(shè)計模式,是久經(jīng)考驗的展現(xiàn)與交互方式,完全有理由統(tǒng)一設(shè)計,提取成組件。
二、制作成通用組件
找到了這些共用元素,下面到具體制作環(huán)節(jié),關(guān)于工具的使用我不會講太多,也沒有必要講,主要是思路與觀念。我用Sketch錄了3段操作演示,有利于幫助大家理解。
下面這段視頻主要是講,我是如何在實際設(shè)計過程中進(jìn)行組件化的操作。
1. Sketch Symbol;我們把這個列表項提取為一個組件,現(xiàn)在看其實沒什么變化。我們先復(fù)制幾個出來,讓它成為一個列表。然后我們到組件頁面去,發(fā)現(xiàn)剛才提取的組件就在這里。我們嘗試把圓形的頭像改成方形,嗯,去掉邊框?;氐搅斜斫缑鎭?,發(fā)現(xiàn)整個列表的頭像都變成方形了,但我們只在組件里做了一次修改,就達(dá)到這樣的效果。這也就是前面所說的,組件化便于修改設(shè)計。
Sketch symbol—在線播放—優(yōu)酷網(wǎng)
2. Sketch Overrides;下面這段視頻是講如何把組件的樣式與內(nèi)容分離開。
還是剛才的組件,不過我把頭像右邊代表兩行文字的矩形換成了真正的文字,我要把它當(dāng)作通訊錄界面來設(shè)計?,F(xiàn)在我們回到列表界面,發(fā)現(xiàn)列表里每一項都變成了姓名+電話號碼。然后我們在每一項的Overrides選項中輸入數(shù)據(jù),因為這是在組件之外輸入的信息,它只會影響那一條內(nèi)容。用這種方式把每個列表項都填上數(shù)據(jù)?,F(xiàn)在我們再進(jìn)到組件里,做點樣式修改,比如把電話號碼顏色改成灰色?;氐搅斜恚须娫捥柎a都變灰了,內(nèi)容保持不變。這樣就實現(xiàn)了樣式與內(nèi)容的分離,降低耦合度對設(shè)計同樣適用。
Sketch Overrides—在線播放—優(yōu)酷網(wǎng)
3. Sketch Symbol 的嵌套;下面這段視頻是講組件的嵌套。
組件小的可以只有一個按鈕,大的可以是一個交互極其復(fù)雜的多步篩選項。所以復(fù)雜組件內(nèi)再嵌入簡單組件,這是很常見的事情。
我給剛才的組件又增加了一個按鈕,我們把這個按鈕也提取成組件,可以看到它出現(xiàn)在了列表項組件的右側(cè)?;氐搅斜斫缑?,每個列表項都有了按鈕,我們選中所有列表項,把按鈕文字成呼叫。然后右邊還有另一個界面,這里也需要一個按鈕。我們在此插入之前提取的按鈕組件,把按鈕文字改為訂閱。如此一來,按鈕組件就既存在于界面中,也存在于其他組件中。這時候如果想對按鈕的樣式做點調(diào)整,我們再進(jìn)入按鈕組件,改成灰底白字?;氐浇缑嬷?,發(fā)現(xiàn)各處按鈕都一起變了。
組件化的思想不限于設(shè)計工具,雖然Sketch很先進(jìn),很利于實現(xiàn)這種工作方式。但PS也有相應(yīng)的功能,能夠以另一種形式實現(xiàn)組件化。所以可以說設(shè)計從來都不會被工具所局限。
Sketch Symbol嵌套—在線播放—優(yōu)酷網(wǎng)
一個組件就是一個完整的產(chǎn)品
設(shè)計組件不是把它搬到另一個地方,然后各處集中引用這么簡單。開頭我們就說過,組件化思維的精髓是獨立、完整、自由組合。剛才我們做到了獨立,同時也需要做到完整。
把每個組件當(dāng)做一個獨立產(chǎn)品來設(shè)計,考慮空狀態(tài)、極端情況、尺寸變化,盡可能靈活適應(yīng)各使用場景。
就拿下圖按鈕來說,我們必須考慮它的各種狀態(tài)、極端情況、尺寸變化,還有所有附帶的交互效果。這才能稱之為一個獨立完整的組件,滿足其他組件對一個按鈕的所有要求。除了最標(biāo)準(zhǔn)的默認(rèn)、按下、禁用狀態(tài),還要考慮按鈕的尺寸變化,發(fā)生服務(wù)器交互時每個狀態(tài)的樣式,還有特殊按鈕內(nèi)容的展示效果。
思考組件相互間的組合方式
組件內(nèi)部完整了,接下來就是自由組合了。但并不是真的那么自由,我們要確定一些常用的組合方式。
1. 統(tǒng)一組件與組件、組件與散件之間的組合方式;
如下圖,像這樣一個后臺管理界面,頁面的整體背景色,主菜單與右側(cè)導(dǎo)航的距離,輸入框之間的距離……這些也都要有章法,而不是各個頁面這些間距都是隨心所欲的。
形成規(guī)范文檔
以上這些工作,沉淀下來,就成了設(shè)計規(guī)范。這套文檔對項目中的其他設(shè)計師是莫大的幫助,也是開發(fā)人員重要的資料,組件化的規(guī)范文檔是可以協(xié)助開發(fā)組件化開發(fā)的。
組件化設(shè)計是一切的源頭,如果我們設(shè)計部分的組件化工作做得不到位,自己定的規(guī)范自己不遵守,開發(fā)同學(xué)的組件化工作是無法進(jìn)行的。
開發(fā)組件化
講完設(shè)計組件化,現(xiàn)在我們來講一下開發(fā)的組件化,主要講的是前端如何運(yùn)用組件化思維。
1. 按組件,而不是頁面來開發(fā);最重要的一點,是需要轉(zhuǎn)變一個觀念。我們應(yīng)該以組件為單位,而不是以頁面為單位進(jìn)行開發(fā)。
2. 輕度組件化;
組件化開發(fā)有兩種不同程度的做法。先講講輕度組件化。它的主要思想是同一個組件使用相同的html結(jié)構(gòu)和特定的class名,并且用同一段css代碼定義樣式,用同一個js函數(shù)來定義交互。
如下圖,我們來看看下面這個登錄框,下面3個代碼塊是它大致的代碼結(jié)構(gòu)。輸入框在其他頁面肯定也會用到,那么只需要與左邊框里的html結(jié)構(gòu)保持一致。各處頁面代碼中引用同一個css和js文件,至少做到了在一處集中管理樣式與交互。但如果組件的html結(jié)構(gòu)發(fā)生變化,修改的工作量還是會比較大。
3. 重度組件化;重度組件化的方式可以解決上述說的,如果組件的html結(jié)構(gòu)發(fā)生變化,修改的工作量會比較大這個問題。不過這就不僅僅停留在思想層面,對項目的代碼結(jié)構(gòu)都有一定的要求。每個組件的html結(jié)構(gòu)、css樣式、js交互都獨立封裝管理,定義好框架和加載方式,內(nèi)容在加載時從外部填充。
在重度組件化的項目中,每個組件都做到了徹底的獨立封裝。比如下圖,這個頁頭組件,它的代碼存在于獨立的目錄下,這個目錄包含了它的html結(jié)構(gòu)、css樣式、js交互、資源圖、甚至自測試模塊。那么各處頁面中要加載頁頭組件,往往只是一條語句,將數(shù)據(jù)傳入這個已存在的結(jié)構(gòu)中就行了。組件如果要與外部進(jìn)行數(shù)據(jù)傳遞,也應(yīng)該以接口形式對外開放。組件內(nèi)部是個黑盒,外部只需要了解數(shù)據(jù)的輸入與返回,不必關(guān)心組件內(nèi)的工作原理。
組件化思維管理開發(fā)項目
用這種思路管理項目,也會改變開發(fā)的協(xié)作方式。大家不再是按頁面分工,而是按組件來分工。如下圖,頁頭和tab由一人負(fù)責(zé),列表和頁腳由另一個人負(fù)責(zé),弱化了相互間的依賴關(guān)系。直到將組件拼裝成頁面,才需要處理組件之間相互作用的部分,但這時候工作量已經(jīng)被大大消化了。
我們可以來感受一下組件化管理的項目,應(yīng)該是個什么樣的結(jié)構(gòu)。
一個應(yīng)用由大量頁面組成,一個頁面的絕大部分都是組件。組件內(nèi)部已經(jīng)定義好了完整的結(jié)構(gòu),可以獨立運(yùn)行。縱觀整個項目,可能就會是這樣一個結(jié)構(gòu)。組件的代碼占了大多數(shù),能共用的都盡量共用,各個頁面的特殊代碼則會變得非常輕。各功能模塊的劃分清晰明確,一目了然。
重在維護(hù)
雖然前面說了這么多好處,但組件化不是一件輕松的工作。在項目初期的準(zhǔn)備工作會增加一定工作量,但隨著時間推移會發(fā)揮出巨大的優(yōu)勢。
想象一下,像windows操作系統(tǒng)這種航母級的開發(fā)項目,如果不用組件化的方式來管理,它有可能成為現(xiàn)實嗎?
我們設(shè)計師要做的,就是要有專人負(fù)責(zé)維護(hù)設(shè)計組件庫。組件發(fā)生了任何設(shè)計修改,或者加入了新組件,都要及時反映在設(shè)計規(guī)范上。
開發(fā)同學(xué)也需要指定人員來負(fù)責(zé)維護(hù)具體的組件。他們要做的,我就不好多說了,畢竟我不是專業(yè)的。
但可以舉個例子,像Google Ara項目的這款模塊化手機(jī)一樣:攝像頭模塊只負(fù)責(zé)拍照,處理照片得交給運(yùn)算模塊;而GPS模塊只負(fù)責(zé)定位相關(guān)功能,導(dǎo)航語音播報則需要發(fā)聲模塊來處理。任何模塊的拆換,對其余模塊的運(yùn)轉(zhuǎn)毫無影響。
及時溝通反饋
雙方的維護(hù)工作固然重要,更重要的是溝通交換信息。有任何變化都要及時告知對方,組件的高度同步,是這種工作方式得以長期延續(xù)的關(guān)鍵。
組件化思維
其實組件化思維不僅僅適用于UI設(shè)計中,它可以貫穿到所有的設(shè)計中,甚至于生活中。
如下圖,元旦刷紅包html5頁面,用的也是組件化思維,把單個元素獨立出來,當(dāng)做一個整體設(shè)計,所有的獨立組件設(shè)計完成后,再像搭積木一樣,將其拼接為一個完整的頁面。
組件化思維不僅可用于設(shè)計中,還有生活中。它的精髓其實就這么3點:獨立、完整、自由組合。而我們生活中見到的絕大多數(shù)工業(yè)產(chǎn)品,就是這么造出來的,比如汽車工業(yè),比如富士康的iPhone生產(chǎn)線。甚至部隊的編制也是遵循這個原理。
最后,我想給大家看一段1分鐘的視頻。這是宜家廚房的宣傳片,宜家是一家高度推崇組件化的公司。不僅僅是用在生產(chǎn)流程中,也把組件化思維從幕后推向了臺前,成為了自己品牌的一種語言。我們來直觀感受一下,讓組件化的思想在你腦海中留下一個具象的畫面:宜家廚房—在線播放—優(yōu)酷網(wǎng)
最后,謝謝看完文章的各位,希望能對各位有所幫助。
相關(guān)文章
全畫幅不是半畫幅的兩倍有什么區(qū)別? 聊聊相機(jī)的傳感器尺寸
說到相機(jī)畫幅,估計平時聽到最多的可能就是全畫幅與半畫幅了,以至于不少人認(rèn)為中畫幅比全畫幅要小,為了避免這種常識性錯誤,這篇文章就來和大家說說相機(jī)的不同畫幅,所謂2025-04-07- 4紙和A5紙因其尺寸適中,使用尤為廣泛,但你知道它們之間有何區(qū)別嗎?今天,就讓我們一起來探討這個話題2025-02-01
各類商務(wù)印刷品的尺寸怎么選? 印刷設(shè)計常用的尺寸紙張/克重都在這里了
日常經(jīng)常印刷各種東西,哪些尺寸,紙張更合適呢?本文為大家整理了常用印刷尺寸,方便圖文廣告店、印企在日常接單生產(chǎn)中能夠快速掌握客戶關(guān)鍵性信息,詳細(xì)請看下文介紹2024-02-10- 現(xiàn)如今,證件照已成為我們生活中不可或缺的一部分,無論是求職應(yīng)聘,還是入學(xué)注冊,亦或是辦理各種證件,都需要提交符合規(guī)定格式和要求的證件照,那么,這些證件照的尺寸和2024-02-10
- 平面設(shè)計是一個注重視覺效果的設(shè)計,簡單的排版方式有時候不能滿足視覺突出的效果,業(yè)務(wù)很難達(dá)到吸引用戶的眼球,下面我們就來看看8個平面設(shè)計技巧分享2023-10-08
如何選擇平面設(shè)計工具? 這10款軟件應(yīng)該收入囊中
每個設(shè)計師都有自己最喜歡的設(shè)計軟件,并把軟件作為自己的第二語言,今天我們來推薦10款UI設(shè)計不可或缺的工具,詳細(xì)請看下文介紹2023-10-08夏日電影風(fēng)怎么調(diào)色調(diào)色? 適合夏季的柔和綠色調(diào)調(diào)色分享
夏日電影風(fēng)怎么調(diào)色調(diào)色?夏天快到了,想要調(diào)節(jié)夏季電影風(fēng)的畫面,該怎么操作呢?下面我們就來看看適合夏季的柔和綠色調(diào)調(diào)色分享2023-04-02什么是真RAW 什么是偽RAW? 簡單說說真 RAW 和 偽RAW
隨著索尼α7RV(ILCE-7RM5)正式發(fā)售,近期有不少網(wǎng)友跟我咨詢索尼相機(jī)“無損壓縮(M)”和“無損壓縮(S)”RAW的問題,今天做一個統(tǒng)一答復(fù)2022-12-24手機(jī)UI設(shè)計尺寸有哪些? 超全面的UI元素尺寸設(shè)置指南
手機(jī)UI設(shè)計尺寸有哪些?作為新手在設(shè)計手機(jī)ui的頁面的時候,發(fā)現(xiàn)自己設(shè)計的尺寸都很奇怪,如果能有元素尺寸介紹就好了,下面就來看看我們匯總的超全面的UI元素尺寸設(shè)置指南2021-08-06常用照片尺寸有哪幾個? 照片標(biāo)準(zhǔn)尺寸/像素對照表匯總
常用照片尺寸有哪幾個?我們經(jīng)常說一寸照片,二寸照片,這些照片的尺寸是怎么計算的?下面我們就來看看照片標(biāo)準(zhǔn)尺寸/像素對照表匯總2021-08-06