2023-2-16 資深UI設(shè)計(jì)者
這是一篇醞釀了比較久的內(nèi)容了,來講解 B 端設(shè)計(jì)規(guī)范和組件庫的分享。這幾年網(wǎng)上出了不少類似的分享,雖然都寫得很全,都還是覺得不夠滿意,缺了一點(diǎn)點(diǎn)細(xì)節(jié)。
所以我自己出一版,希望能幫助你們一次性解決這些問題。
B 端項(xiàng)目設(shè)計(jì)中,設(shè)計(jì)規(guī)范和組件庫是一個(gè)繞不過去的檻。作為專業(yè)的 B 端設(shè)計(jì)師,必須有自己完成設(shè)計(jì)規(guī)范和組件庫的能力。
所以,首先我們要先理清楚什么是設(shè)計(jì)規(guī)范和組件庫。
設(shè)計(jì)規(guī)范是項(xiàng)目設(shè)計(jì)中要遵守的要求、細(xì)節(jié)、準(zhǔn)則,規(guī)定了諸如色彩、字體、柵格、間距、圓角等要素的規(guī)則,這些內(nèi)容都是可以在大量設(shè)計(jì)元素中應(yīng)用的細(xì)節(jié)。
換句話說,設(shè)計(jì)規(guī)范就是提取在項(xiàng)目中會(huì)廣泛使用的要素,并進(jìn)行統(tǒng)一制定的過程,防止設(shè)計(jì)師在設(shè)計(jì)過程中隨意發(fā)揮,導(dǎo)致項(xiàng)目統(tǒng)一性的崩壞。
組件庫,是通過梳理項(xiàng)目中應(yīng)用到的按鈕、開關(guān)、滑塊、日歷、下拉菜單等控件、組件的設(shè)計(jì)樣式、狀態(tài)、交互規(guī)則,再將它們統(tǒng)一復(fù)用到項(xiàng)目的不同頁面中去。
嚴(yán)格意義上來說也是設(shè)計(jì)規(guī)范的一部分,是基礎(chǔ)規(guī)范的進(jìn)一步延伸,但還是單拎出來講。因?yàn)榻M件庫的應(yīng)用不僅僅是設(shè)計(jì)統(tǒng)一性的問題,還融合了 ”組件化“ 的編程思路在里面。
組件化:將復(fù)雜系統(tǒng)拆分成不同功能獨(dú)立的模塊并重組的過程,且每個(gè)模塊包含對應(yīng)的狀態(tài)和屬性。
對于程序員來說,一個(gè)項(xiàng)目就是若干功能模塊的合集,往往是先開發(fā)這些功能模塊,再搭建對應(yīng)的完整頁面,而不是看一個(gè)頁面開發(fā)一個(gè)頁面。
所以制定完善的組件庫,除了提升設(shè)計(jì)質(zhì)量外,還可以很好的提升開發(fā)效率,推進(jìn)項(xiàng)目進(jìn)度。
設(shè)計(jì)規(guī)范和組件庫的搭建,就是一個(gè)由下至上的設(shè)計(jì)鏈路,通過對細(xì)節(jié)的制定來實(shí)現(xiàn)最終的項(xiàng)目表現(xiàn)層??梢越柚鷱V為流傳的分子原理來理解:
任何成熟的 B 端項(xiàng)目都應(yīng)該具備自己的設(shè)計(jì)規(guī)范和組件庫,雖然有很多小團(tuán)隊(duì)在前期推進(jìn)項(xiàng)目時(shí),因?yàn)楦鞣N問題沒有搭建或落地設(shè)計(jì)規(guī)范,但并不代表他們在招人的時(shí)候沒有要求。
在今天搭建 B 端項(xiàng)目規(guī)范時(shí),新手還有一個(gè)普遍的問題:
項(xiàng)目規(guī)范和開源框架的規(guī)范有什么區(qū)別,如果選了一套開源框架做設(shè)計(jì),設(shè)計(jì)師不就不用做規(guī)范了?
初級設(shè)計(jì)師會(huì)這么想并不奇怪,因?yàn)橐?AntDesign 為首的開源框架做的實(shí)在是太完善了,不僅囊括了整套的 Web 色彩系統(tǒng),還有各類常用的、不常用的交互組件。
它們不僅僅提供了相關(guān)的設(shè)計(jì)源文件,也給開發(fā)提供了對應(yīng)的代碼和接口,方便程序員應(yīng)用??雌饋砦覀冎灰雌唇M件就可以和開發(fā)無縫銜接了……
這顯然是不可能的,正是因?yàn)殚_源框架太全面,可以產(chǎn)生無數(shù)種可能,我們才更應(yīng)該整理自己的項(xiàng)目規(guī)范。就像我前面已經(jīng)提到過的,設(shè)計(jì)規(guī)范是種 ”限制“,而不僅僅是設(shè)計(jì)風(fēng)格的簡單沉淀。
比如,不管你選了哪套開源框架,它提供了多少種色彩,你的項(xiàng)目都應(yīng)該有自己的項(xiàng)目主色,適當(dāng)?shù)妮o助色彩,而不可能把它的整套配色都應(yīng)用進(jìn)去。所以,即使顏色沒有跳出原有色彩系統(tǒng),也要篩選出你用到的顏色進(jìn)行記錄。
再比如,開源框架的很多控件,都提供了好幾種樣式和方案,并不是讓你全部都用進(jìn)去,而是選擇自己覺得合適的。所以你每個(gè)控件中選擇的方案,也需要做記錄,統(tǒng)一后續(xù)的頁面設(shè)計(jì)。
前面只是記錄選擇,都還比較簡單,而最關(guān)鍵的問題在于,開源框架的組件不可能完美符合項(xiàng)目的全部需求。必然要在原有的基礎(chǔ)上作出大量細(xì)節(jié)的優(yōu)化,或者創(chuàng)建出新的業(yè)務(wù)組件出來,所以設(shè)計(jì)師還是要把這些內(nèi)容整理出來。
開源框架,就是給我們提供了一個(gè)比較全面的設(shè)計(jì)范圍,讓我們站在別人的肩膀上做選擇,提高設(shè)計(jì)規(guī)范的制作效率,而并不是讓我們直接躺平,復(fù)制黏貼就可以了。
同時(shí),設(shè)計(jì)規(guī)范和組件需要在軟件中進(jìn)行運(yùn)用,我們也同樣不能直接使用官方提供給我們的組件庫展開自己的項(xiàng)目設(shè)計(jì),要根據(jù)自己項(xiàng)目的規(guī)范獨(dú)立進(jìn)行搭建和使用。
下面,我們就要根據(jù)設(shè)計(jì)規(guī)范的內(nèi)容,來講解如何結(jié)合并使用即時(shí)設(shè)計(jì)、Figma 的相關(guān)功能。
之所以 UI 設(shè)計(jì)軟件能取代 PS 獨(dú)立發(fā)展,就是因?yàn)?UI 設(shè)計(jì)中包含大量需要復(fù)用和批量修改的功能。而這些功能和設(shè)計(jì)規(guī)范有非常大的聯(lián)系,也是 UI 設(shè)計(jì)中項(xiàng)目規(guī)范能被落地實(shí)踐的重要保障。
但因?yàn)?Figam 和即時(shí)等次時(shí)代 UI 設(shè)計(jì)軟件提供了越來越多的功能,用來支持設(shè)計(jì)規(guī)范的實(shí)踐,且這些功能可以相互交叉、重疊、組合,導(dǎo)致很多人在前期學(xué)習(xí)中會(huì)被軟件功能繞暈,導(dǎo)致很多人沒有理解這些功能意義和價(jià)值,更不知道如何在項(xiàng)目中具體實(shí)踐。
所以,我們先將這些功能整體理解一遍,再逐一來對它們的使用規(guī)則和應(yīng)用場景進(jìn)行拓展。
樣式功能是用來記錄圖層樣式設(shè)置的功能。簡單點(diǎn)理解,就是記錄圖層右側(cè)的屬性設(shè)置的功能。正常我們選擇一個(gè)基礎(chǔ)圖層,軟件右側(cè)的屬性面板會(huì)將圖層樣式拆解成若干的類別,包括填充、描邊、字體、陰影、模糊。
而樣式功能,就是幫助設(shè)計(jì)師對不同的樣式類別進(jìn)行記錄和復(fù)用的過程,它會(huì)直接將該分類內(nèi)的相關(guān)參數(shù)值記錄下來,并進(jìn)行命名,方便后續(xù)的調(diào)用。
響應(yīng)式功能是讓圖層隨上級編組尺寸變動(dòng)而自適應(yīng)的功能,方便我們在修改組件的大小時(shí)不用重新調(diào)節(jié)里面的元素細(xì)節(jié)。
例如設(shè)計(jì)一個(gè)卡片,可以通過響應(yīng)式的設(shè)置,讓頭部的元素左右對齊,下方的文本區(qū)域自動(dòng)拓展,保持卡片的內(nèi)間距不變。
或者頁面右下角懸浮按鈕,也可以通過響應(yīng)式設(shè)置始終處于頁面底部,這樣我們在增加頁面高度的時(shí)候不用重新設(shè)置該元素的 Y 軸位置。
自動(dòng)布局功能,是通過前端布局思路來設(shè)置元素布局方法自動(dòng)排版功能,是 Figma 開發(fā)的最重要的功能,也是讓 Sketch 不再成為 B 端設(shè)計(jì)首選的核心因素。
它的主要功能如根據(jù)內(nèi)容自動(dòng)完成尺寸變更,并列排版和順序的變更等。
自動(dòng)布局可以極大的提升設(shè)計(jì)效率,正因?yàn)樽詣?dòng)布局的出現(xiàn),才讓項(xiàng)目組件庫可以真正被運(yùn)用和落地實(shí)踐起來。
組件功能在不同軟件有不同的叫法,如 Symbol、Component、Kits 等,主要是將指定的圖層或編組生成一個(gè)新的編組單位(類似智能對象),在后續(xù)設(shè)計(jì)中進(jìn)行復(fù)用。
例如設(shè)計(jì)一個(gè)按鈕、開關(guān),我們只要將它們生成為組件,就可以在后續(xù)設(shè)計(jì)中快速從組件庫里拖拽到設(shè)計(jì)頁面中,不用重新畫一遍,并且支持批量修改。
在組件應(yīng)用中,生成的第一個(gè)組件也叫父級組件,其它調(diào)用它的組件都是它的子組件,這是一個(gè)非常清晰的從屬關(guān)系。如果我們修改父級組件的內(nèi)容,所有子組件都會(huì)被統(tǒng)一修改。
組件的應(yīng)用除了這種最基礎(chǔ)的應(yīng)用以外,還包含了很多特殊的功能,如將低級組件合并成一個(gè)高級組件的嵌套,或者 Figma 前兩年發(fā)布的變體(Vriants),可以將一個(gè)組件的不同狀態(tài)聚合到一起,通過屬性面板來切換相關(guān)的狀態(tài)。
組件功能是 UI 類軟件最復(fù)雜的功能,它不僅本身設(shè)置很豐富,同時(shí)也可以結(jié)合樣式、響應(yīng)、自動(dòng)布局,讓本來死板的組件變得更靈活可控,應(yīng)對復(fù)雜的設(shè)計(jì)環(huán)境。
在軟件中,記錄樣式就是在對應(yīng)的屬性面板上 “創(chuàng)建” 并 “命名”,就將對應(yīng)設(shè)置數(shù)據(jù)轉(zhuǎn)化成一個(gè)指定名稱的記錄,方便我們記憶和調(diào)用。
比如,填充色中使用了兩種色彩相近的色彩和不同透明度,我們就可以使用中文命名來區(qū)分,其中 #2B6DCF 80% 叫 輔助色,#2B93CF 90% 叫 主色。
創(chuàng)建完成的填充色記錄,就會(huì)在對應(yīng)的屬性樣式列表中出現(xiàn),之后就可以在對應(yīng)圖層的屬性中關(guān)聯(lián)該記錄了。
之后,所有關(guān)聯(lián)到該記錄的圖層屬性,都可以快速應(yīng)用該記錄內(nèi)的參數(shù)。如果我們在樣式的列表中修改該記錄的數(shù)值,那么所有關(guān)聯(lián)到該記錄的圖層就會(huì)一起被修改。
一定要牢記,目前的主流 UI 工具中,樣式是根據(jù)不同屬性類型記錄的。比如一個(gè)字體圖層,它的填充、字體、描邊、投影,是可以創(chuàng)建不同的樣式記錄的,各不影響。
而軟件 Sketch 的樣式邏輯,則是根據(jù)圖層類型來記錄的,比如矩形和字體,會(huì)記錄該圖層下所有樣式屬性的參數(shù),且該記錄只能應(yīng)用在同類的圖層上(而 XD 只能記錄色彩和字體樣式…)。
這種做法雖然理解起來容易,但是會(huì)導(dǎo)致樣式數(shù)量大幅度增加。尤其是在字體上,變動(dòng)填充、描邊都要設(shè)置一個(gè)新的樣式,這在實(shí)際項(xiàng)目中的靈活性是非常差的。
而即時(shí)設(shè)計(jì)、Figma 則不考慮圖層類型,只關(guān)注屬性類型。類似前端的樣式表中 “類(Class)” 的應(yīng)用,每個(gè)類有不同的樣式參數(shù),只要定義了類的命名和屬性、參數(shù),那么不同 Div (即圖層)就可以自由組合這些樣式記錄了。
比如色彩 color、陰影 shadow、描邊 board 各定義了1、2、3 三種樣式類,那么就可以像下方案例中自由組合:
<Div Class = “ color2 shadow1 board3 ”> </div>
<Div Class = “ color1 shadow3 board2 ”> </div>
所以,樣式功能可以幫助我們在前期快速搭建基礎(chǔ)視覺規(guī)范內(nèi)容,將規(guī)范中的配色、字體、投影、模糊等參數(shù)整理進(jìn)樣式表中,方便我們后續(xù)的快速調(diào)用和統(tǒng)一修改。
響應(yīng)式是我們前面做過很多期分享的課題了,基于 BootStrap 的完整響應(yīng)式功能確實(shí)非常強(qiáng)大,可以通過柵格布局來實(shí)現(xiàn)豐富的響應(yīng)方式。
雖然 UI 軟件中也提供了 ”響應(yīng)式“ 這樣的功能,但它可以實(shí)現(xiàn)的效果非常有限。用一句話概括就是:
“圖層基于父級畫板 Frame 的匹配邏輯”
比如我們先創(chuàng)建一個(gè)畫板,然后再置入相關(guān)的圖層,那么這些圖層就可以啟用響應(yīng)式規(guī)則。包含間距固定、居中對齊、等比縮放這三種響應(yīng)規(guī)則。
間距固定的意思,就是圖層基于父級畫板的某間距數(shù)值是固定的,不管畫布尺寸怎么變動(dòng),圖層和畫布的對應(yīng)間距都是保持一致的。比如常規(guī)的某一方向間距固定。
比如在模塊上的標(biāo)題欄,就可以將欄目設(shè)置成一個(gè) Frame,然后標(biāo)題相關(guān)元素左間距對齊,更多圖標(biāo)右間距對齊,之后變更標(biāo)題欄的寬,圖層的對齊關(guān)系就是不變的。
而設(shè)置左右、上下間距同時(shí)對齊,則是圖層會(huì)隨畫布的尺寸變動(dòng)修改自身的寬高來滿足。
居中模式則是圖層根據(jù)畫布的大小進(jìn)垂直、水平方向的對齊,忽略間距數(shù)值。
最后一個(gè)縮放的設(shè)置,用起來和兩側(cè)間距對齊很接近,也是放大縮小畫布圖層會(huì)跟著一起變動(dòng),但它響應(yīng)的邏輯是依據(jù)比例,而不是間距。這個(gè)設(shè)置在實(shí)際項(xiàng)目中很難派上用場。
過往的設(shè)計(jì)軟件中,父集尺寸變更,下級元素只能機(jī)械的執(zhí)行縮放效果。而響應(yīng)式設(shè)置就是避免這種僵硬的效果,向真實(shí)的網(wǎng)頁適配方式看齊。
同時(shí),這種父集對齊的邏輯是可以進(jìn)行嵌套使用的,比如剛才的標(biāo)題欄,可以將這個(gè)畫板再置入到整個(gè)卡片畫板之下,并對 “標(biāo)題欄畫板” 創(chuàng)建頂部對齊,左右間距對齊,那么該畫板本身的尺寸不管怎么變動(dòng),頭部標(biāo)題欄頂部位置固定,寬度間距和父集統(tǒng)一,標(biāo)題欄下方的元素也會(huì)左右對齊。
所以,將一個(gè)畫板中的元素響應(yīng)方式設(shè)置好,可以節(jié)省我們很多時(shí)間,不用再因?yàn)楦讣爻叽缧薷亩粋€(gè)圖層一個(gè)圖層修改下級元素的尺寸和位置。
在后續(xù)生成組件前,我們就要優(yōu)先完成畫板下方的響應(yīng)設(shè)置,這樣就能確保該組件支持靈活的調(diào)節(jié)和布局。比如用上方的卡片,就可以快速搭建一個(gè)表盤頁面的基本框架,我們要做的就是拖拽畫板到一個(gè)合適的尺寸即可,無需調(diào)節(jié)下級圖層。
但需要注意的事,即時(shí)設(shè)計(jì)和 Figma 觸發(fā)響應(yīng)式的設(shè)置是元素需要處于畫板 Frame 之下,而不是編組 Group 中, Sketch、XD 因?yàn)闆]有 Frame 的概念,所以使用編組就可以應(yīng)用響應(yīng)式設(shè)置,這個(gè)區(qū)別一定要牢記。 同時(shí),響應(yīng)式雖然可以完成很多高效的適配,但是它的局限性是無法打破的,例如無法實(shí)現(xiàn) 3 列以上的卡片列表等間距放大,或者隨寬度增加生成新列下方卡片補(bǔ)位。
自動(dòng)布局 Autolayout 作為一個(gè)自動(dòng)排版功能,使用場景包含兩類,父子級響應(yīng)和依序排列。它們有各自的生成條件。
首先需要一個(gè)矩形圖層作為背景,并將其它下級圖層置入到矩形背景中去,全選后點(diǎn)擊 “自動(dòng)布局“ 按鈕即可生成父子級響應(yīng)。如果圖層沒有完全置入矩形中或沒有相交,那么就會(huì)生成一個(gè)依序排列的自動(dòng)布局出來。
創(chuàng)建自動(dòng)布局會(huì)生成一個(gè)新的 “特殊編組”,用來收納下級圖層,它在圖層列表中會(huì)有新的圖標(biāo)。
父子級響應(yīng)布局中,背景的矩形圖層會(huì)被自動(dòng)移除,樣式被繼承到自動(dòng)布局的編組上,針對該編組層的屬性設(shè)置,就等同于原先的背景矩形設(shè)置(和畫板 Frame 圖層邏輯一樣)。
這類布局最常應(yīng)用于按鈕控件上,可以讓按鈕的寬度隨文本寬度變化。
但光靠創(chuàng)建這個(gè)效果顯然是無法完整解釋自動(dòng)布局的,我們就必須從前端的邏輯,來理解這種包含父子層級的元素如何實(shí)現(xiàn)自動(dòng)布局。
首先就是前端環(huán)境中,很多控件、組件本身的尺寸是無法直接寫死的,它們是隨內(nèi)容自動(dòng)調(diào)節(jié)的。而自動(dòng)布局右側(cè)的設(shè)置面板中的田字格一欄,旁邊會(huì)有寬度和高度設(shè)置,默認(rèn)都是 “自動(dòng) Auto”,這就是說它們會(huì)隨內(nèi)容寬高進(jìn)行響應(yīng)。
比如上方的按鈕,它實(shí)現(xiàn)的邏輯就是:
按鈕寬 = 元素內(nèi)容寬 + 左右間距
按鈕高 = 元素內(nèi)容高 + 上下間距
這種情況是父層級基于子層級的響應(yīng),應(yīng)用于無法確定父級圖形尺寸的場景,如按鈕、標(biāo)簽、單元格、瀑布卡片等。
但前端中的不確定性并不是只有這一種,還可以反過來,子圖層大小不確定,需要它們?nèi)ロ憫?yīng)父級圖層的尺寸變更。
比如一些文本卡片,會(huì)應(yīng)用在不同的頁面中,且根據(jù)應(yīng)用的場景會(huì)有寬高的調(diào)節(jié),所以需要下級的文本區(qū)域可以跟隨上級尺寸響應(yīng)。
我們就需要把父級布局設(shè)置成 “固定寬/高”。還要選中子圖層,在它的自動(dòng)布局選項(xiàng)中選擇 “自適應(yīng)”,來滿足這個(gè)相反的需求。
如果子圖層沒有設(shè)置自適應(yīng),那么它就不會(huì)直接隨著父級圖層變更自己的尺寸。但還是有針對子元素的響應(yīng)設(shè)置 —— 對齊模式。
在父級布局設(shè)置中,有一個(gè)網(wǎng)點(diǎn)模塊,可以設(shè)置下級圖層的對齊模式。當(dāng)下級圖層不處于自適應(yīng)模式時(shí),則對齊可以修改下級元素的對齊方向,即前面響應(yīng)式設(shè)置中的 “間距固定”。
前面我們演示的案例都只有一個(gè)子圖層,如果出現(xiàn)多個(gè)子圖層的話,自動(dòng)布局也可以幫我們進(jìn)行調(diào)節(jié),除對齊外還包含子圖層排列方式、分布方式,而這就是依序排列的布局模式。
排列方式就是多個(gè)子圖層橫排還是豎排的設(shè)置。
分布方式,則是這些子圖層布局的位置怎么定,默認(rèn)包含固定間距和自適應(yīng)兩種。
固定間距即子元素排列的間距保持一致,在右側(cè)的輸入框中可以設(shè)置間距數(shù)值,也可以結(jié)合對齊模式來設(shè)置整體的對齊方向。
而自適應(yīng),則是在父級區(qū)域內(nèi)進(jìn)行等分,這個(gè)等分的邏輯比較特別,需要左右各有一個(gè)子圖層靠到頭,新增的圖層在這個(gè)基礎(chǔ)上進(jìn)行 “等間距分布”。
依序排列的優(yōu)勢,除了把現(xiàn)有的子圖層快速布局以外,還可以用拖拽、鍵盤調(diào)整元素順序?;蛘邚耐獠客蟿?dòng)某個(gè)圖層到該區(qū)域中,就可以插入序列,成為下級圖層之一。
前面兩種布局模式,可以解決各種 UI 設(shè)計(jì)中的細(xì)節(jié)設(shè)置問題,理解起來也并不難,只要自己去操作一下就能學(xué)會(huì)。而真正讓人頭疼的,是自動(dòng)布局可以相互嵌套,并混合這兩種模式,在復(fù)雜的頁面設(shè)計(jì)場景和組件模塊中靈活應(yīng)用。
下面我們通過一個(gè)模態(tài)對話框 Modal Dialog 案例來進(jìn)行說明。這個(gè)對話框會(huì)包含3種不同的寬度規(guī)格,且對話內(nèi)容不確定,可能會(huì)字?jǐn)?shù)很多包含很多行的高度。
想要用自動(dòng)布局實(shí)現(xiàn)一個(gè)滿足需求的對話框,我的建議是先學(xué)會(huì)拆分里面的下級模塊,通過完成下級模塊的設(shè)置后再進(jìn)行最終的合并調(diào)節(jié)。
在這個(gè)對話框中, 包含三個(gè)模塊,頂部標(biāo)題欄、中間內(nèi)容區(qū)域,底部操作欄。
首先從頂部標(biāo)題欄開始,我們隨意創(chuàng)建個(gè) 280px * 44px 的矩形,然后再置入標(biāo)題和圖標(biāo)到矩形中。之后全選它們創(chuàng)建成自動(dòng)布局,然后設(shè)置父層級內(nèi)間距,且改成寬度固定、分布自適應(yīng),就可以獲得一個(gè)可以隨意修改寬度的標(biāo)題欄了。
然后就是內(nèi)容區(qū)域,本質(zhì)上就是一個(gè)文本區(qū)域,所以我們拖拽一個(gè)文本區(qū)域出來,設(shè)置好對應(yīng)的參數(shù)和填充一點(diǎn)文本即可。
而底部操作欄,則在一開始做好兩個(gè)按鈕(可以使用自動(dòng)布局做)和背景以后,就可以進(jìn)行合并,只是父級元素上的設(shè)置要改成固定寬度和右對齊,并設(shè)置布局間距(按鈕間距)。
這三個(gè)模塊完成以后,我們再選中它們進(jìn)行自動(dòng)布局合并,把它們設(shè)置成豎排模式,再添加背景色和排列間距,就可以實(shí)現(xiàn)出一個(gè)正常的對話框效果。
到這一步,如果我們修改對話框整體的寬度,或者輸入多行的文本,都無法達(dá)到預(yù)期的效果,所以還要在這個(gè)基礎(chǔ)上進(jìn)一步的調(diào)整。
首先是寬度適應(yīng),我們要先將最上級的自動(dòng)布局改成 “固定寬度”,然后將下級圖層都改為 “自適應(yīng)”,這樣我們增加組件的寬,下方布局就會(huì)立即響應(yīng),且推導(dǎo)到更下級的圖層中。
為了滿足文字寬度隨父級響應(yīng),高度影響父級高度,就要將頂部的自動(dòng)布局改成 “高度適配”,再將下級的文本改成 “寬度自適應(yīng)”、“自動(dòng)高度”,然后,我們就可以隨意拖動(dòng)這個(gè)自動(dòng)布局的寬,和添加任意的文本內(nèi)容了。
完成這個(gè)基本的版本以后,我們再根據(jù)項(xiàng)目需要的三個(gè)寬度,直接將它復(fù)制成 3 份,每份直接設(shè)置對應(yīng)的寬度出來,就可以作為后續(xù)的 “原始組件” 在項(xiàng)目中進(jìn)行快速引用了。
在這個(gè)案例中,我們前后嵌套了若干層的自動(dòng)布局,每層自動(dòng)布局的上下級會(huì)有各自的響應(yīng)關(guān)系,需要我們逐一進(jìn)行確認(rèn)。并且,細(xì)心的同學(xué)應(yīng)該也發(fā)現(xiàn),這里面有很多設(shè)置似乎和前面的響應(yīng)式設(shè)置非常類似,那把一些下級布局從一開始就做成響應(yīng)式的編組行不行?
答案是可以的…… 響應(yīng)式設(shè)置和自動(dòng)布局,本質(zhì)上都是為了節(jié)省我們操作時(shí)間而設(shè)計(jì)的功能,我們要從實(shí)際設(shè)計(jì)的對象出發(fā),選擇合理的功能來實(shí)現(xiàn)最終的效果。而不是只能使用自動(dòng)布局,或者只能使用響應(yīng)式。
也不要因?yàn)榱私饬隧憫?yīng)式包含了非常強(qiáng)大的自適應(yīng)功能,而認(rèn)為項(xiàng)目中任何組件、頁面,都要全由它們組成。在需要頻繁優(yōu)化頁面內(nèi)容、調(diào)整設(shè)計(jì)需求的項(xiàng)目里,過度嵌套的自動(dòng)布局會(huì)讓設(shè)計(jì)文件的 “熵” 值無限增加,會(huì)產(chǎn)生更多復(fù)雜的、沒有效率的問題。
相信引用過 Ant、TDesign 等組件庫文件進(jìn)行設(shè)計(jì)的同學(xué)應(yīng)該都深有體會(huì)……
至于怎么用才好,沒有標(biāo)準(zhǔn)的答案,就需要未來大家自己去積累相關(guān)經(jīng)驗(yàn)了。
有了前面響應(yīng)式和自動(dòng)布局的認(rèn)識,我們就要進(jìn)入到組件功能的具體應(yīng)用上了。
組件的創(chuàng)建,首先要選中對應(yīng)的設(shè)計(jì)元素,可以是單個(gè)圖層,也可以是編組、自動(dòng)布局層,然后點(diǎn)擊生成組件按鈕就可以創(chuàng)建出一個(gè) “原始” 組件。
在即時(shí)設(shè)計(jì)中,這個(gè)組件叫 “引用組件”,從該組件復(fù)制、引用出來的副本叫做 “實(shí)例組件”。它們具有明確的從屬關(guān)系。
在這個(gè)關(guān)系中,引用組件是完全可編輯修改的,只要修改它就可以統(tǒng)一修改關(guān)聯(lián)的所有副本樣式。
但由引用組件創(chuàng)建出來的副本,卻不能任意編輯,我們不能修改它下級圖層的尺寸、位置、順序。但是,副本的編組大小、圖層色彩、文字內(nèi)容往往會(huì)有很多特殊的調(diào)節(jié)需求,所以目前主流的 UI 軟件都支持了副本組件的尺寸修改、色彩編輯和文本內(nèi)容編輯,讓組件的使用更靈活。
以上就是組件使用的最基本邏輯,更進(jìn)一步,組件作為一個(gè)編組,所包含的下級圖層的邏輯都會(huì)被保留下來,例如樣式設(shè)置、響應(yīng)式設(shè)置、自動(dòng)布局邏輯。如果一個(gè)編組原本就已經(jīng)創(chuàng)建好了這些規(guī)則,那么當(dāng)它被創(chuàng)建成組件,不管是引用組件還是副本,都會(huì)繼承這些設(shè)置。
比如上一小節(jié)中的通知彈窗案例,設(shè)置好自動(dòng)布局再創(chuàng)建成引用組件以后,生成的副本就可以靈活的進(jìn)行調(diào)整和修改文本內(nèi)容。
除了樣式、響應(yīng)、自動(dòng)布局外,組件也可以包含組件。我們前面說過,按原子核的結(jié)構(gòu)來講,一個(gè)復(fù)雜的組件是由若干基礎(chǔ)元素和控件組合而成。比如上方這個(gè)案例,就由多個(gè)模塊、文本區(qū)域和按鈕組成。
如果我們提前將按鈕、圖標(biāo)等創(chuàng)建成引用組件,那么最終整個(gè)大的編組再創(chuàng)建成引用組件也是沒有問題的,原來的組件格式并沒有被抹消。
但有個(gè)細(xì)節(jié)值得注意,就是一個(gè)引用組件下方包含的組件只能是 —— 副本。如果剛才我們將按鈕創(chuàng)建成引用組件,那么上級編組再創(chuàng)建的引用組件就會(huì)自動(dòng)將這些按鈕轉(zhuǎn)換成副本,并在畫布周圍生成新的引用組件。
所以這個(gè)順序也預(yù)示了,組件的嵌套是由下而上的,我們需要先創(chuàng)建低級的引用組件,再用它的副本逐步去組合更復(fù)雜的引用組件。這在后面的章節(jié)會(huì)進(jìn)一步做出說明。
創(chuàng)建引用組件,除了在畫布中它的描邊色彩不一樣,圖層中的圖標(biāo)改變了以外,還會(huì)出現(xiàn)在一個(gè)新的位置中 —— 組件管理面板。
任何創(chuàng)建的組件都會(huì)被生成到左側(cè)的組件欄目面板中,只要從那里拖拽就可以置入當(dāng)前畫布中,方便我們調(diào)用和查看。
看起來雖然很簡單,但是需要我們管理的細(xì)節(jié)卻很多。首先就是這個(gè)列表是一個(gè)包含層級關(guān)系的樹樁結(jié)構(gòu)目錄,是允許我們對組件的層級進(jìn)行結(jié)構(gòu)自定義的。
當(dāng)我們創(chuàng)建一個(gè)引用組件的時(shí)候,如果它處于一個(gè)畫板中,那么創(chuàng)建后它會(huì)在組件面板中保留該組件的默認(rèn)文件路徑:
頁面 Page / 畫板 Frame / 組件 Compoent
如果我們在不同頁面和不同畫板中創(chuàng)建引用組件,那么該面板的目錄一定是特別混亂無序的。所以為了創(chuàng)建出符合正常分類使用習(xí)慣的組件目錄,就要做出調(diào)整。
首先就是建議在項(xiàng)目文件中創(chuàng)建一個(gè)獨(dú)立的頁面 Page 用來存放引用組件,任何新增的引用組件我們都需要將它置入到該頁面中。且不要將引用組件直接置入到畫板中,這樣它就不會(huì)生產(chǎn)包含畫板的層級出來。
然后,我們就可以在文件命名中,使用正斜杠 Slash 符號 “/” 作為層級劃分依據(jù)。比如下面的案例,包含相同上級結(jié)構(gòu)的組件會(huì)被聚合到一個(gè)目錄層級中:
這種命名結(jié)構(gòu)帶來的另一個(gè)好處,就是處于同一個(gè)目錄層級下的組件,在屬性面板中可以進(jìn)行快速的切換。尤其是一些相近的組件要做替換不用再在樹樁列表中重新找一遍,直接通過下拉菜單替換即可。
使用命名方式來梳理組件列表,完成有邏輯性、清晰的組件目錄,可以極大地提升組件的利用率和效率。但命名必然不是一邊創(chuàng)建組件一邊憑感覺命名的,而是一開始就要在外部完成的,例如通過思維導(dǎo)圖的方式制定出結(jié)構(gòu)大綱,才能保證最終效果符合預(yù)期。
組件的應(yīng)用中,除了不同組件的引用外,過去最讓我們頭痛的就是同一個(gè)組件的不同狀態(tài)。比如一個(gè)簡單的按鈕,就包含非常多的類型,默認(rèn)、懸浮、按壓、點(diǎn)過、禁用、讀取等等。
為了在項(xiàng)目中可以使用組件的不同狀態(tài),就需要我們在命名上下功夫,比如:
就是用前面提到的右側(cè)下拉菜單,來完成同一組件的不同狀態(tài)切換。理論上這么實(shí)現(xiàn)是沒有問題的,但在實(shí)踐過程中,不僅組件列表的數(shù)量要大大增加,且下拉菜單第一步只改狀態(tài)顯得非常局促……
所以,從 Figma 開始推出了變體 Variants 功能,來更好地應(yīng)對同一組件不同狀態(tài)的高效應(yīng)用。目前該功能已經(jīng)在線上 UI 設(shè)計(jì)軟件中普及。
在即時(shí)設(shè)計(jì)中,只要?jiǎng)?chuàng)建了引用組件,那么選中它后右側(cè)就會(huì)有 “變體” 一欄,點(diǎn)擊它就可以針對該組件創(chuàng)建出變體效果。
變體中原來的組件一分為二,并不是完全生成出一個(gè)全新的組件,而是在這個(gè)組件的概念下創(chuàng)建了一個(gè)新的狀態(tài)出來,在組件列表面板中沒有生成任何新的內(nèi)容。
但是當(dāng)我們再添加一個(gè)該組件的副本以后,就會(huì)發(fā)現(xiàn)它的右側(cè)多了一個(gè)條目和下拉菜單,通過這個(gè)下拉菜單就可以切換剛才變體內(nèi)的不同組件。
比如我們在變體內(nèi)選中兩個(gè)組件,在右側(cè)變體的下拉菜單中可以點(diǎn)擊修改命名,將它們分別改成 “默認(rèn)” 和 “選中”,再修改對應(yīng)的樣式。然后再應(yīng)用同一個(gè)副本,就可以看見下拉菜單的內(nèi)容也替換成了“默認(rèn)” 和 “選中”,通過選擇不同的文字,就可以切換成對應(yīng)的組件樣式。
這個(gè)功能可以很方便的切換組件的不同狀態(tài),但如果它僅僅支持到這一步,那確實(shí)和使用命名編組的方法沒有本質(zhì)區(qū)別。真正讓變體產(chǎn)生價(jià)值的,就在于同一組件的多屬性、多狀態(tài)支持。
還用按鈕舉例,比如一個(gè)按鈕包含 3 種樣式:純文字、純圖標(biāo)和文字加圖標(biāo),再包含 3 種狀態(tài):默認(rèn)、懸浮、點(diǎn)擊,還有淺色和深色模式……
也就意味著,按鈕包含樣式、狀態(tài)、色彩三種屬性,每個(gè)屬性中的值可以相互結(jié)合,那么總共就要設(shè)計(jì)出 18 個(gè)對應(yīng)的按鈕出來。
如果我們使用變體每個(gè)樣式命名一個(gè)名字,那么下拉菜單有12個(gè)選項(xiàng)選起來也是很頭疼的。所以,變體允許我們自定義組件屬性和值,幫助我們更好的歸類和選擇組件樣式。
所以,在變體面板中,我們可以在更多選項(xiàng)中選擇添加分類就添加對應(yīng)的屬性內(nèi)容,添加出 3 個(gè)分類后,通過雙擊修改它們的名字為 ”樣式“、”狀態(tài)“、”色彩“。
有了屬性,變體下方的組件命名就會(huì)根本變更。如下圖所示,默認(rèn)一次顯示屬性值,雙擊則可以查看對應(yīng)的屬性名和值。
即變體的基本命名語法為 —— 屬性1 = 對應(yīng)類型, 屬性2 = 對應(yīng)類型, 屬性3 = 對應(yīng)類型。
我們就可以通過這種語法方式完成對上方按鈕的統(tǒng)一命名,如:
然后,將這些組件統(tǒng)一添加到同一個(gè)變體下,之后創(chuàng)建的副本,就可以在右側(cè)變體面板中進(jìn)行多維度的選項(xiàng)操作了。
具體的變體設(shè)置,分類、值的設(shè)置,可以自己在軟件中摸索,我就不演示了。這里再額外提一個(gè)功能,就是對值的設(shè)置上,還可以應(yīng)用 “布爾” 的規(guī)則,即選項(xiàng)中只包含 “是” 或 ’否“。
如果我們在色彩的值中只使用 ”是,否“、”yes,no“、”開,關(guān)“ 等反義詞,那么副本變體選項(xiàng)中就會(huì)啟用開關(guān)按鈕,來替代原本的下拉菜單,提升操作的效率。
變體的使用可以很好的減少組件面板中組件的數(shù)量,提升組件狀態(tài)切換的效率。如果一個(gè)組件創(chuàng)建變態(tài)后被嵌套在另一個(gè)組件之下,那么這個(gè)復(fù)合組件也可以快速修改下級組件的變體類型。
雖然變體功能看起來非常強(qiáng)大,但它并不能適用所有場景,因?yàn)樾薷钠饋碛绊懙囊剡^多。它更適用于基礎(chǔ)的控件和組件類型。如果針對復(fù)雜組件,尤其是包含多層組件嵌套的場景,往往使用命名的方式會(huì)比使用變體更有效率,這就需要大家自己在項(xiàng)目中積累經(jīng)驗(yàn)做判斷。
通過前面的功能,就可以完成組件庫的對應(yīng)設(shè)置了,你可以在這個(gè)項(xiàng)目文件中調(diào)用這些組件完成項(xiàng)目。
但實(shí)際項(xiàng)目中,組件庫的使用可不能被局限在一個(gè)項(xiàng)目文件里,我們往往會(huì)創(chuàng)建很多個(gè)項(xiàng)目文件,來設(shè)計(jì)不同的流程、版本、模塊。于是,這些不同的文件都需要調(diào)用同一個(gè)樣式和組件庫。
所以,要讓包含規(guī)范的文件能被其它文件引用,就需要我們在組件面板中,點(diǎn)擊設(shè)計(jì)庫按鈕,在彈窗中點(diǎn)擊 ”發(fā)布“,將它創(chuàng)建成一個(gè)設(shè)計(jì)資源庫。這樣,我們在別的文件中再次打開這個(gè)面板,就可以看到這個(gè)資源的開關(guān),點(diǎn)擊開關(guān)后,該文件就能調(diào)用里面的樣式和組件了。
在項(xiàng)目中,需要先新建團(tuán)隊(duì)并邀請相關(guān)成員,然后再創(chuàng)建設(shè)計(jì)資源庫,那么其他設(shè)計(jì)師才可以引用該資源來完成相關(guān)頁面的設(shè)計(jì)。
至于每次原文件更新并落實(shí)到引用的其它文件這些細(xì)節(jié)操作,就需要大家自己去實(shí)踐了。
藍(lán)藍(lán)設(shè)計(jì)( m.bouu.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)、UI設(shè)計(jì)公司、界面設(shè)計(jì)公司、UI設(shè)計(jì)服務(wù)公司、數(shù)據(jù)可視化設(shè)計(jì)公司、UI交互設(shè)計(jì)公司、高端網(wǎng)站設(shè)計(jì)公司、UI咨詢、用戶體驗(yàn)公司、軟件界面設(shè)計(jì)公司
藍(lán)藍(lán)設(shè)計(jì)的小編 http://m.bouu.cn