成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

客觀評價增長趨勢比 Vite 還猛的 TailwindCSS

開發 前端
導入 TailwindCSS 在 Developer Experience 上是頗受團隊好評的,近年 TailwindCSS 的竄起,如果它沒有解決一些痛點,又何來這麼多人吹捧?

前端社群常見的宗教戰爭文:TailwindCSS根本邪魔歪道, Class根本不是這樣用的, 看了真他媽一肚子火 —— 硬派本格 CSS/SCSS支持者。

會有這樣的言論,也許是你日常的工作流程中,不適合用這樣的框架,又或許是你沒有客觀的理解過 TailwindCSS 的優點所以體會不到它的魅力。

先說結論:如果你是一個團隊做 SAAS 產品,需要在統一的產品風格主題上面展開,并且使用 React 之類可以模塊化x組件的前端框架,那麼 TailwindCSS 會是很值得導入的樣式解決方案。

命名

我發現對我來說,打斷心流狀態的往往是幫組件取名這件事,在傳統使用 CSS/SCSS 上,我需要停下來花時間想一組組件還有其子組件的 class name 命名,檢查會不會跟已存在的元件衝突,多這一個步驟其實對開發效率上來講是拖累的。

誠然,你可以透過 Nested classes / BEM 之類的一些命名策略來讓這樣的步驟有一致性并減少命名碰撞,但在寫 JS 部分的組件時候已經要命名組件/命名變量,命名東命名西了,很多時候你 CSS 也只是把 JS 定義的名字改改文字格式複制貼上。

例如這邊有個組件 AwesomeCard。

AwesomeCard -> .awesomecard
AwesomeCardIcon -> .awesomecard__icon
AwesomeCardBody -> .awesomecard__body
AwesomeCardButton -> .awesomecard__button

說穿了其實是浪費生命的重複動作。

下面還有一種情境的命名我也常常“頓爹”打斷我思路。

<div class="flex items-center justify-between px-3">
<div class="flex items-center">
<Icon/>
<span class="ml-1">Label</span>
</div>
<Caret />
</div>

有時候你會需要一些額外的 div 搭配 flex 來做佈局,例如上面的代碼中,我想要 Icon 跟 Label 兩者垂直置中,這一組組件要跟 Caret 垂直置中并分別對齊左右邊界,轉成 CSS 你可能就需要用上好幾個 classes。

<div class="btn__container">
<div class="btn__leftgroup">
<div class="btn__icon" />
<span class="btn__label">Label</span>
</div>
<div class="btn__caret"/>
</div>

要額外命名 btn__container btn__leftgroup 會讓我很煩躁,這些步驟如果能省起來個人是覺得能大幅提升開發效率。

文件之間的切換

另外一個影響工作心流的是分開的 HTML/JS/CSS 文件 ,雖然說 separation of concern 是軟件工作中很重要的一個概念,但前端實務上,三種文件的耦合度極高,通常改一者就必須改另外兩者,頻繁的切換文件其實很沒有效率。

以 React 框架來說,已經讓 Html 整合到 JSX 當中,當你習慣了這樣的工作模式,你會想更進一步的把樣式定義也納進來,這也是為什麼會有各種 css-in-js 的解決方案,TailwindCSS 在某種程度上也算是 css-in-js 的一種,各種組件狀態邏輯,例如說點選之后改變文字/背景顏色,可以透過 JSX 直接切換 className 來實現 (搭配 classnames 這樣的 npm module 更是如虎添翼)。

統一的風格樣式

如果是 SAAS 產品,你會希望整個團隊有一致的調色盤, 而字體大小,間隔,常用寬高等維持有限度的選擇,讓你在組件佈局上能更好的對齊,TailwindCSS 這點已經幫你把最常見的 text/bg color、font-size、spacing 都提取出來,框架初始自帶的設定已經十分夠用,通常只需針對產品品牌色定義色盤,其他參數要客制修改擴充透過設定檔也十分方便。

你可能會說,SCSS裡面我也可以定義各種變量啊,的確,但變成你要自己設立一套參數規則或是參考某個框架范本 (MUI/AntD/Bootstrap) 來實作。

然后又回到一個懶人想省打字的問題上了,究竟是:

<div class="bg-gray-100">...</div>

還是:

<div class="card"></div>
.card {
background-color: $gray100
}

對我來說,差別其實蠻明顯的。

冗長的 class name

<div class="w-96 bg-white shadow rounded flex items-center">...</div>

通常反對 TailwindCSS 的正統硬派 CSS 使用者,最常攻擊的就是 Atomic utility classes 冗長的 class name,但這個透過 React 的組件封裝,其實根本不會是問題,通常你會把這些複雜度藏在可重複使用的組件中,實際上在開發的時候,代碼往往是很清爽好讀的。

例如底下一個 navigation 的組件,在 DOM tree 裡面長這樣。

<ul class="flex">
<li class="mr-6"><a class="text-blue-500 hover:text-blue-800" href="#">Link</a></li>
<li class="mr-6"><a class="text-blue-500 hover:text-blue-800" href="#">Link</a></li>
<li class="mr-6"><a class="text-blue-500 hover:text-blue-800" href="#">Link</a></li>
</ul>

可以把 li 給抽出來寫成獨立的組件。

const NavItem = ({ href, children }) => <li class="mr-6"><a className="text-blue-500 hover:text-blue-800" href={href}>{children}</a></li>

如此一來,你的JSX源碼就能整理成以下比較好讀的格式。

<ul className="flex">
<NavItem href="#">Link</NavItem>
<NavItem href="#">Link</NavItem>
<NavItem href="#">Link</NavItem>
</ul>

當然,前提是搭配 React 這樣可以輕易封裝組合組件的框架才能發揮最大功效,如果沒有用上類似框架,我也不能否認 atomic css 的 class 是真的很冗長難讀。

文件更小的 Stylesheet

這點其實毋庸置疑,因為有很大部分的 Utility class 都是共用,沒有多馀命名,TailwindCSS 又自帶 Tree Shaking,不會產生沒用到的 class,整體的 CSS stylesheet 文件可以壓到很小,瀏覽器載入超快速。

總結

老話一句,工具沒有好壞,只有適不適合,就我個人開發經驗,導入 TailwindCSS 在 Developer Experience 上是頗受團隊好評的,近年 TailwindCSS 的竄起,如果它沒有解決一些痛點,又何來這麼多人吹捧?

如果只是心理過不去,還抱持著寫傳統 CSS 方法的驕傲與矜持,沒有客觀的去理解新工具以及其適用的場景,我是覺得蠻可惜的,畢竟用得好的話,它真的能為你帶來更好的生產力以及效率,團隊協作上面也因為有共同的標準而能夠和諧的運作,何樂而不為?

責任編輯:姜華 來源: 大遷世界
相關推薦

2022-10-20 10:16:12

敏捷開發DevOps研發效能

2009-03-02 15:37:12

2017-02-08 10:56:32

光纖產能技術

2021-07-02 05:31:53

ReactSolidJS前端

2013-08-19 16:51:05

iPhone 耗電

2009-08-03 13:33:53

Ubuntu操作系統

2011-09-22 13:34:03

3G

2011-07-12 08:48:27

FacebookMySQL

2022-12-26 14:12:28

數字趨勢人工智能

2011-02-28 13:51:19

移動設備蘋果

2012-11-28 18:26:29

社交網站CDN網絡調查

2022-02-24 10:42:32

JavaScript開發報告

2021-10-27 07:47:21

Vite 工具項目

2018-05-28 21:17:57

大數據分析軟件

2019-04-29 08:06:26

物聯網惡意軟件攻擊

2012-12-07 15:27:51

安全趨勢IT安全Gartner

2012-12-10 09:23:15

云計算安全趨勢邊緣防火墻

2025-04-08 07:20:00

const 聲明變量數組

2021-01-27 09:56:07

Rust編程語言O'Reilly

2022-10-24 07:54:36

磁盤磁帶電磁感應
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本一二三区电影 | 一本一道久久a久久精品综合 | 久久久久9999 | 亚洲视频手机在线 | 欧美一级在线观看 | 欧洲视频一区二区 | 久久夜视频 | 亚洲综合区 | 手机在线一区二区三区 | 中文成人在线 | 狠狠的干| 中文视频在线 | 亚洲毛片网站 | 国产成人久久av免费高清密臂 | 羞羞视频在线观看 | 曰韩三级 | 国产亚洲一区二区三区 | 超碰在线播 | 久久久国产网站 | 97精品国产97久久久久久免费 | 精品久久久久久久久久久 | 一区二区三区中文 | 日本大片在线播放 | 亚洲精品久久久久久久久久久 | 天天干天天草 | 午夜影院在线视频 | 欧美男男videos | 天天操精品视频 | 成人毛片一区二区三区 | 色噜噜亚洲男人的天堂 | 色橹橹欧美在线观看视频高清 | 亚洲精品福利在线 | 在线区| 在线观看特色大片免费网站 | 免费观看国产视频在线 | 日韩精品在线播放 | 黄色小视频大全 | 亚洲国产成人在线 | 美国黄色毛片 | 97国产一区二区精品久久呦 | 天天插天天舔 |