Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TSCSS: Component CSS Parameterization
Search
Simon Pai
January 11, 2015
Technology
9
2.9k
TSCSS: Component CSS Parameterization
Simon Pai
January 11, 2015
Tweet
Share
More Decks by Simon Pai
See All by Simon Pai
React Hooks
simonpai
0
300
On Scraper
simonpai
0
120
Concrete Programming
simonpai
1
110
Other Decks in Technology
See All in Technology
自社 200 記事を元に整理した読みやすいテックブログを書くための Tips 集
masakihirose
2
330
Visual StudioとかIDE関連小ネタ話
kosmosebi
1
370
メールヘッダーを見てみよう
hinono
0
110
三菱電機で社内コミュニティを立ち上げた話
kurebayashi
1
360
完全自律型AIエージェントとAgentic Workflow〜ワークフロー構築という現実解
pharma_x_tech
0
350
EMConf JP の楽しみ方 / How to enjoy EMConf JP
pauli
2
150
あなたの知らないクラフトビールの世界
miura55
0
130
AIアプリケーション開発でAzure AI Searchを使いこなすためには
isidaitc
0
110
デジタルアイデンティティ人材育成推進ワーキンググループ 翻訳サブワーキンググループ 活動報告 / 20250114-OIDF-J-EduWG-TranslationSWG
oidfj
0
540
駆け出しリーダーとしての第一歩〜開発チームとの新しい関わり方〜 / Beginning Journey as Team Leader
kaonavi
0
120
iPadOS18でフローティングタブバーを解除してみた
sansantech
PRO
1
140
AWSマルチアカウント統制環境のすゝめ / 20250115 Mitsutoshi Matsuo
shift_evolve
0
110
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
44
13k
Why Our Code Smells
bkeepers
PRO
335
57k
A better future with KSS
kneath
238
17k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Being A Developer After 40
akosma
89
590k
Designing for humans not robots
tammielis
250
25k
Rails Girls Zürich Keynote
gr2m
94
13k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Music & Morning Musume
bryan
46
6.3k
Making Projects Easy
brettharned
116
6k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7.1k
Transcript
元件 CSS 參數化 TSCSS / Simon Pai
平常在做什 • 前端 程師 @ 奇科 – ZK: Java servlet
based web UI framework – Quire.io: 樹狀的 task manager
平常在做什 • 共 創辦人 @ Bookshow 說書會 – 知識影音化 Open
Meeting – 訪談錄影 活動直播
為什 要 CSS 參數化 • 統一設計 – 外觀一致性 • 統一實作
– DRY Do ’t Repeat Yourself 好維護
如何 CSS 參數化 • 統一設計 – Design guildline • 統一實作
– 良好的 CSS class 命 策略 – CSS library / pre-processor:LESS Scss/Sass 等
如果你是元件集的創作者 • 統一設計 – 外觀一致性... 但無法預測使用者會如何排列你 的元件 – 客戶會希望能客製整套外觀 (佈
/Theme) • 統一實作 – DRY Do ’t Repeat Yourself 好維護 – 大幅降 客製佈 的 本 • 這是 ZK 尋求 CSS 參數化的最大動機
元件與佈 的乘法效應 • ZK 7 有 50+ 個元件與 4 個官方佈
– (以及一堆客戶客製的佈 ) • 每多一個佈 ,要多刻 50+ 個元件的 CSS • 每多一個元件,要多刻 4 個佈 的 CSS
從 ZK 這個產品說起 • ZK 是個元件集 (component set) • 2006
(ZK 1) - 現在 (ZK 7) • Panel, Tabbox, ... 等 50+ 個元件
ZK 3 長這樣
ZK 5 長這樣 • 看不 去, 到了一 設計師
但是並沒有解決客製 本問題 • 掃一遍 CSS 中的色 碼,看起來那 單 純的孩子,裡面居 然有
50+ 種顏色 • 客製一套佈 還是 需要重做一套設計 + 重刻一遍 CSS
問題在於硬幹的設計流程 元件 外觀 憑感覺維持一致性
如何為元件集打造統一外觀 • 統一設計 – 因為無法掌握使用者如何排列你的元件,必需 思考外觀背後的理由 • 統一實作 – 根據理由而不是根據外觀來抽變數
統一實作前,必先統一設計
硬幹的設計流程 元件 外觀
富有哲學氣息的設計流程 元件 外觀 元件語義 元素外觀
Separator (分隔線) • 分隔線的意義是什 ?
Separator (分隔線) • 分隔線的意義:區分 或
Groupbox • ZK 有一個元件叫 Groupbox,大家覺得它的 意義是什 ?
Groupbox • Groupbox 的意義:區分 外
元件中的語義 • 區隔 (grouping) • 操作 (operation) • 狀態 (state)
• 部 (parts) 等
元件中的語義 • 區隔 (grouping) – 容器 (container) 與分隔線 (separator)
元件中的語義 • 操作 (operation) – 文字輸入 (text input) – 可以按的
(clickable) – 可以拖的 (draggable) 等 • 在各種 design guildline 都有探討
元件中的語義 • 狀態 (state) – 商業邏輯 (business logic) • Selected
• Error 等 – 互動 (interactive) • Clicked • Hovered • Focused • Disabled 等
元件中的語義 • 部 (parts) prpr -icon -background -border -text
元件中的語義 • 部 (parts) -body (-head) (-foot)
元件中的語義 • 部 (parts) -item -item -item -item -item Collection
別鑽牛角尖 (一) • 並不是符合某項語義就一定要根據它來設 計 – 而是你 可以 根據它來設計 –
遇到衝突依然要靠 人智慧取捨
別鑽牛角尖 (一) • Tabbox (摺疊式) 的 head 部 時也是 clickable
– 要做的像其他元件的 head 還是像 button? – 取捨:ZK 覺得像 head 比較 重要,clickable 用 cursor 表達就好 – jQuery UI 的 ThemeRoller 就把 樣的部分做 button 的顏色,見人見智
別鑽牛角尖 (二) • 語義元素無法窮盡所有外觀要素 – 並非所有外觀細節背後都可以 到乾淨的理由 – 狀況好的 大約可以涵蓋
70-80% – 剩 的細節硬幹無妨
統一設計後,必須統一實作
建立 demo • ZK Theme Demo – 所有外觀都盡量展示出來,因為元件是活的 有很多狀態,非常容易掉芝 –
把設計 認定應 外觀一致的元件排在一起 – 客製佈 的時候也方便直接展示給設計師或客 戶看
DRY CSS • 去除 CSS 中重覆資訊的方法 – 抽出 CSS class
– 將 樣的 CSS 值抽 變數或 mixin (LESS/Scss/etc) • 決定 CSS class 規劃 – ZK 礙於其 CSS 規劃無法抽 class,歷 共業 – 請參考 Bootstrap 3 或 Semantic UI 等套件的實作
CSS class 命 策略 • 表意 – z-pa el ,
z-panel- ody 元件) – sele ted 商業邏輯) • 表象 – gree , s all , light
CSS 變數命 策略 • 表意 – @z-panel-border-color: @border-color; – @border-color
: @light-green; • 表象 – @light-green: #7EA656; – @large-font-size: 32px;
CSS Class • CSS class 是 DOM 與外觀之間的合約 Class DOM
Element DOM Element Style Value Style Value
表意與表象 • CSS 最終都是將象 (外觀值) 賦予到意的身 – 變數之間都是把表象的 assign 給表意的
• @text-color: @gray; • @gray: @text-color; (?) – 表象的 class 裡也不會放表意的變數 • .gray { color: @text-color; } (?)
CSS 參數化前 表意 表象 Class Class 值
CSS 參數化後 表意 表象 Class Class 值 變數 變數 變數
別鑽牛角尖 表意 表象 Class Class 值 變數 變數 變數
表意與表象 • CSS 最終都是將象 (外觀值) 賦予到意的身 元件 外觀 元件語義 元素外觀
表意 表象
ZK 7 長這樣 • 套從 ZK 5 繼 來,參數化後的佈
第四套佈 • 依靠參數 + 微調做出 微軟系的佈 Atlantic
ZK 7 Theme Rolling • 關鍵字: ZK ThemeRoller
總結一
統一實作前,必先統一設計 統一設計後,必須統一實作
設計流程的秘訣 元件 外觀 元件語義 元素外觀 表意 表象
參數化 CSS 的秘訣 表意 表象 Class Class 值 變數 變數
變數
商服務 • 奇科 – 徵 職 UI/UX 設計師 前端 程師
– jobs @ potix.com • Bookshow – 合作的網站設計師 影片視覺設計師 – 請來 或 hello @ bookshow.tw