做爲前端UI組件庫,從樣式角度去看,應當知足兩方面要求:一致性和可定製[1]。css
其實這兩點也很是好理解,一致性保證了組件庫視覺上保持一致,而不是東拼西湊,並且說得高大上一點可能還有規範可循。而可定製就須要組件庫暴露接口,供開發者配置造成本身風格的組件庫。前端
可是具體一致表如今哪些方面呢?對於設計師而言,會很清楚,可是對於咱們前端開發人員而言,具體指的是哪些東西呢?咱們又如何把這些東西轉化爲代碼呢?這部分具體見設計規範部分。react
根據可定製的粒度大小,能夠分爲組件層面的可定製和整套組件庫的主題定製。有組件使用經驗的同窗都知道,使用具體組件時咱們能夠傳入某些參數或主題參數,組件就能夠呈現不一樣的表現。另外,一些有名的組件庫也都提供了主題定製的相關方法,如 antd-mobile 、Vant 和 Element ,尤爲是 Element ,提供了多種主題定製的方法。webpack
前面提到的一致性是由「設計規範」來保證的,其實這一塊涉及到的內容很是多。可能在咱們眼裏就是組件庫裏的那套看似雜亂無序
的通用變量(設計規範 ≠ 通用變量),可是其實裏面仍是有一些套路的,也建議多多和設計師溝通,產生思惟碰撞,你會發現一些平時寫代碼過程當中不同的思惟。在我和設計師溝通的過程當中,這點體驗很是深。git
那和組件庫密切相關的設計規範體如今哪些方面呢?前幾天餓了麼前端架構師 林溪 在《Vue組件庫建設實踐》分享裏提到有如下內容:github
其實上面有一個關鍵詞: 統一 。 咱們如何保證樣式統一?沒錯,就是剛纔提到的通用變量(但我仍然不會認同「設計規範 = 通用變量」,很難表達出這種感受),以 antd-mobile 爲例,具體包含如下內容[2]:web
其實理解了設計規範,咱們再來反過來理解組件庫裏面的通用變量就會感受其實變量之間其實也是存在某種內在體系的,在寫具體組件的樣式時就更會或者更能遵照這套規範,而不是胡亂定義了。gulp
相關擴展資料:數組
主題定製是大多數組件庫都會提供的一個核心樣式相關的功能。可是具體解決方案有許多,但無非有兩種解決方式:bash
具體可參照知名組件庫作法:
不過,對於企業內部組件庫而言,這一塊其實要求並不強,相反對於一套組件庫提供多套 配色 需求更高一點。這裏指的配色和主題定製仍是有區別的,由於配色要求不一樣「皮膚」的樣式須要同時存在,而主題定製至關於就只有一套配色。
而若是採用多種配色的話,增長一套配色文件也能夠達到「主題定製」的功能。
除了設計規範裏的相關樣式外,其實還包含但不限於以下通用/複用樣式:
這裏不只僅組件庫,通常項目中也會有這方面的通用樣式,相信你們都明白,這裏就不展開介紹了。可是這也很重要,是組件庫樣式基礎的一部分!
下面是借鑑知名組件庫後設計的一個樣式代碼結構,供參考,供拍磚。
style
├── core
| ├── animation.scss
| ├── color-card.scss
| ├── hairline.scss
| ├── mixins.scss
| └── normalize.scss
├── themes
| ├── skin
| | ├── _brown.scss
| | ├── _green.scss
| | ├── _pink.scss
| | ├── ……
| | └── _white.scss
| └── default.scss
├── core.scss
└── index.scss
複製代碼
另外,爲了開發方便,組件相關樣式變量都放在了組件代碼目錄,雖然會給後期維護(增長「配色」時須要更新每一個組件樣式特定代碼),可是這種狀況甚少。不過通用型組件庫會將其寫在通用變量中以方便主題定製粒度到組件層面。
還須要考慮的一些樣式相關的問題:
另外,其實組件庫有通用型組件庫和業務型組件庫區分,通常有名的組件庫都屬於前者,不少解決方案不必定適合企業內部的業務型組件庫,所以在設計時也須要充分考慮業務須要,找到適合本身的最/較優解。