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

客觀評(píng)價(jià)增長(zhǎng)趨勢(shì)比 Vite 還猛的 TailwindCSS

開(kāi)發(fā) 前端
導(dǎo)入 TailwindCSS 在 Developer Experience 上是頗受團(tuán)隊(duì)好評(píng)的,近年 TailwindCSS 的竄起,如果它沒(méi)有解決一些痛點(diǎn),又何來(lái)這麼多人吹捧?

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

會(huì)有這樣的言論,也許是你日常的工作流程中,不適合用這樣的框架,又或許是你沒(méi)有客觀的理解過(guò) TailwindCSS 的優(yōu)點(diǎn)所以體會(huì)不到它的魅力。

先說(shuō)結(jié)論:如果你是一個(gè)團(tuán)隊(duì)做 SAAS 產(chǎn)品,需要在統(tǒng)一的產(chǎn)品風(fēng)格主題上面展開(kāi),并且使用 React 之類(lèi)可以模塊化x組件的前端框架,那麼 TailwindCSS 會(huì)是很值得導(dǎo)入的樣式解決方案。

命名

我發(fā)現(xiàn)對(duì)我來(lái)說(shuō),打斷心流狀態(tài)的往往是幫組件取名這件事,在傳統(tǒng)使用 CSS/SCSS 上,我需要停下來(lái)花時(shí)間想一組組件還有其子組件的 class name 命名,檢查會(huì)不會(huì)跟已存在的元件衝突,多這一個(gè)步驟其實(shí)對(duì)開(kāi)發(fā)效率上來(lái)講是拖累的。

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

例如這邊有個(gè)組件 AwesomeCard。

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

說(shuō)穿了其實(shí)是浪費(fèi)生命的重複動(dòng)作。

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

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

有時(shí)候你會(huì)需要一些額外的 div 搭配 flex 來(lái)做佈局,例如上面的代碼中,我想要 Icon 跟 Label 兩者垂直置中,這一組組件要跟 Caret 垂直置中并分別對(duì)齊左右邊界,轉(zhuǎn)成 CSS 你可能就需要用上好幾個(gè) 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 會(huì)讓我很煩躁,這些步驟如果能省起來(lái)個(gè)人是覺(jué)得能大幅提升開(kāi)發(fā)效率。

文件之間的切換

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

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

統(tǒng)一的風(fēng)格樣式

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

你可能會(huì)說(shuō),SCSS裡面我也可以定義各種變量啊,的確,但變成你要自己設(shè)立一套參數(shù)規(guī)則或是參考某個(gè)框架范本 (MUI/AntD/Bootstrap) 來(lái)實(shí)作。

然后又回到一個(gè)懶人想省打字的問(wèn)題上了,究竟是:

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

還是:

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

對(duì)我來(lái)說(shuō),差別其實(shí)蠻明顯的。

冗長(zhǎng)的 class name

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

通常反對(duì) TailwindCSS 的正統(tǒng)硬派 CSS 使用者,最常攻擊的就是 Atomic utility classes 冗長(zhǎng)的 class name,但這個(gè)透過(guò) React 的組件封裝,其實(shí)根本不會(huì)是問(wèn)題,通常你會(huì)把這些複雜度藏在可重複使用的組件中,實(shí)際上在開(kāi)發(fā)的時(shí)候,代碼往往是很清爽好讀的。

例如底下一個(gè) navigation 的組件,在 DOM tree 裡面長(zhǎng)這樣。

<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 給抽出來(lái)寫(xiě)成獨(dú)立的組件。

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

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

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

當(dāng)然,前提是搭配 React 這樣可以輕易封裝組合組件的框架才能發(fā)揮最大功效,如果沒(méi)有用上類(lèi)似框架,我也不能否認(rèn) atomic css 的 class 是真的很冗長(zhǎng)難讀。

文件更小的 Stylesheet

這點(diǎn)其實(shí)毋庸置疑,因?yàn)橛泻艽蟛糠值?Utility class 都是共用,沒(méi)有多馀命名,TailwindCSS 又自帶 Tree Shaking,不會(huì)產(chǎn)生沒(méi)用到的 class,整體的 CSS stylesheet 文件可以壓到很小,瀏覽器載入超快速。

總結(jié)

老話一句,工具沒(méi)有好壞,只有適不適合,就我個(gè)人開(kāi)發(fā)經(jīng)驗(yàn),導(dǎo)入 TailwindCSS 在 Developer Experience 上是頗受團(tuán)隊(duì)好評(píng)的,近年 TailwindCSS 的竄起,如果它沒(méi)有解決一些痛點(diǎn),又何來(lái)這麼多人吹捧?

如果只是心理過(guò)不去,還抱持著寫(xiě)傳統(tǒng) CSS 方法的驕傲與矜持,沒(méi)有客觀的去理解新工具以及其適用的場(chǎng)景,我是覺(jué)得蠻可惜的,畢竟用得好的話,它真的能為你帶來(lái)更好的生產(chǎn)力以及效率,團(tuán)隊(duì)協(xié)作上面也因?yàn)橛泄餐臉?biāo)準(zhǔn)而能夠和諧的運(yùn)作,何樂(lè)而不為?

責(zé)任編輯:姜華 來(lái)源: 大遷世界
相關(guān)推薦

2022-10-20 10:16:12

敏捷開(kāi)發(fā)DevOps研發(fā)效能

2009-03-02 15:37:12

2017-02-08 10:56:32

光纖產(chǎn)能技術(shù)

2011-09-22 13:34:03

3G

2021-07-02 05:31:53

ReactSolidJS前端

2013-08-19 16:51:05

iPhone 耗電

2009-08-03 13:33:53

Ubuntu操作系統(tǒng)

2025-04-08 07:20:00

const 聲明變量數(shù)組

2022-12-26 14:12:28

數(shù)字趨勢(shì)人工智能

2011-07-12 08:48:27

FacebookMySQL

2011-02-28 13:51:19

移動(dòng)設(shè)備蘋(píng)果

2012-11-28 18:26:29

社交網(wǎng)站CDN網(wǎng)絡(luò)調(diào)查

2022-02-24 10:42:32

JavaScript開(kāi)發(fā)報(bào)告

2021-10-27 07:47:21

Vite 工具項(xiàng)目

2018-05-28 21:17:57

大數(shù)據(jù)分析軟件

2012-12-07 15:27:51

安全趨勢(shì)IT安全Gartner

2012-12-10 09:23:15

云計(jì)算安全趨勢(shì)邊緣防火墻

2019-04-29 08:06:26

物聯(lián)網(wǎng)惡意軟件攻擊

2022-10-24 07:54:36

磁盤(pán)磁帶電磁感應(yīng)

2021-01-27 09:56:07

Rust編程語(yǔ)言O'Reilly
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品一区二区观看 | 成人在线观看免费视频 | 国产免费自拍 | 一级h片 | 91免费在线看| 亚洲国产欧美一区二区三区久久 | 亚洲国产精品日韩av不卡在线 | 综合色播| 91色综合 | 精产国产伦理一二三区 | 国产欧美日韩精品一区二区三区 | 欧美va大片 | 成人午夜在线观看 | 日韩精品成人 | 国产精品视频999 | 少妇淫片aaaaa毛片叫床爽 | 成人精品鲁一区一区二区 | 奇米久久 | 91av亚洲 | 99久久免费精品视频 | 99久久精品一区二区成人 | 亚洲视频欧美视频 | 中文字幕一区二区三区四区不卡 | 亚洲a在线视频 | 精品亚洲一区二区 | 麻豆精品一区二区三区在线观看 | 成人在线国产 | 午夜视频在线观看一区二区 | 欧美福利网站 | 欧美激情综合 | 在线观看涩涩视频 | 国产精品大片在线观看 | 99tv | 激情欧美日韩一区二区 | 欧美vide | 国产精品特级片 | 一级免费毛片 | 免费成人高清在线视频 | 日韩精品视频中文字幕 | 四季久久免费一区二区三区四区 | 日本污视频 |