Skip to main content

CSS vs. tailwind

傳統 CSS(也叫原生 CSS 或 Vanilla CSS)是網頁樣式的基礎語言,而 Tailwind CSS 則是一種「公用程式優先」(utility-first)的 CSS 框架,它讓你直接在 HTML 元件中使用預定義的類別(class)來套用樣式,而不用寫一大堆自訂 CSS 規則。

簡單來說,傳統 CSS 是你手寫樣式檔案的經典方式,適合需要高度自訂的專案;Tailwind 則像是一盒樂高積木,讓你快速組合樣式,特別適合快速開發或團隊合作。兩者不是互相取代,而是根據專案需求選擇。

優缺點比較

以下表格總結了兩者的主要差異,基於開發速度、維護性、檔案大小等面向。我會在表格後解釋每個點,讓你更容易理解。

面向傳統 CSSTailwind CSS建議使用情境
開發速度中等:需要手寫規則、選擇器,適合小專案,但大專案容易重複寫碼。快速:直接用類別套用樣式(如 bg-blue-500),原型開發超快。Tailwind 適合快速迭代的專案,如 MVP 或個人部落格。
學習曲線低:基礎語法簡單,但進階如媒體查詢(media queries)需練習。中等:需記住類別名稱(如 p-4 是 padding: 1rem),但有 VS Code 外掛輔助。如果你 CSS 基礎弱,從傳統 CSS 開始;熟悉後試 Tailwind。
樣式組織好:樣式分離在 CSS 檔案,HTML 乾淨,符合「內容與樣式分離」原則。中等:HTML 會多出長長的類別列表,看起來雜亂,但可自訂元件減輕。傳統 CSS 適合大型團隊;Tailwind 適合小組快速建置。
自訂彈性高:完全自由寫任何規則,如自訂動畫或單位(e.g., transition: 2000ms)。高:可透過 tailwind.config.js 自訂顏色、間距,但預設類別有限制。傳統 CSS 適合獨特設計;Tailwind 適合品牌一致性。
檔案大小可控:只寫需要的 CSS,但大專案易膨脹。小:建置時自動移除未用類別(PurgeCSS),通常 <10kB。Tailwind 適合效能敏感的行動端專案。
響應式設計需手寫媒體查詢(@media),步驟多。內建:用 md:bg-red-500 等前綴自動處理斷點。Tailwind 讓新手更容易做出響應式元件。
維護性高:改一處 CSS 影響多處,但需追蹤選擇器衝突。中等:改類別需更新 HTML,但一致性高,不易出錯。傳統 CSS 適合長期維護;Tailwind 適合原型到生產。
缺點易有重複碼、命名衝突(e.g., .button 太多)。HTML 變髒,初學者需適應「原子類別」思維。-

實際範例

為了讓你容易跟著操作,我用 React 來示範一個簡單的按鈕元件(button component)。我們會做一個藍色背景的按鈕,有 hover 效果和響應式(小螢幕變小)。假

完整程式碼(Button.css):

/* Button.css - 傳統 CSS 樣式 */
.custom-button {
background-color: #3b82f6; /* 藍色背景 */
color: white;
padding: 10px 20px;
border-radius: 5px;
border: none;
cursor: pointer;
font-weight: bold;
transition: background-color 0.3s ease; /* 過渡效果 */
}

.custom-button:hover {
background-color: #1d4ed8; /* hover 變深藍 */
}

.custom-button:active {
background-color: #1e40af; /* 按下時更深 */
}

/* 響應式:小螢幕 (平板以下) 變小 padding */
@media (max-width: 768px) {
.custom-button {
padding: 8px 16px;
font-size: 14px;
}
}

完整程式碼(App.js):

// App.js - 傳統 CSS 版本
import React from 'react';
import './Button.css'; // 匯入 CSS

function App() {
return (
<div className="App">
<h1>CSS vs Tailwind 比較</h1>
<p>這是傳統 CSS 的按鈕:</p>
<button className="custom-button">
點我試試!
</button>
</div>
);
}

export default App;
  • 操作:儲存檔案,瀏覽器自動重新載入。你會看到藍色按鈕,hover 會變色,小螢幕(調整瀏覽器大小)會變小。這裡的優點是 HTML 乾淨,但你要切換檔案寫 CSS。

Tailwind CSS 版本

  • 先安裝 Tailwind:終端機輸入 npm install -D tailwindcss postcss autoprefixer,然後 npx tailwindcss init -p(產生 config 檔案)。

  • 在 src/index.css 加入 Tailwind 指令:

    @tailwind base;
    @tailwind components;
    @tailwind utilities;
  • 在 tailwind.config.js 設定內容路徑(預設就好)。

  • 建置 CSS:終端機輸入 npx tailwindcss -i ./src/index.css -o ./src/output.css --watch(監聽變化)。

完整程式碼(App.js - Tailwind 版本):

// App.js - Tailwind 版本
import React from 'react';
import './output.css'; // 匯入 Tailwind 輸出

function App() {
return (
<div className="App">
<h1 className="text-2xl font-bold mb-4">CSS vs Tailwind 比較</h1>
<p className="mb-2">這是 Tailwind 的按鈕:</p>
<button className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded transition-colors duration-300 active:bg-blue-800 md:py-3 md:px-6">
點我試試!
</button>
</div>
);
}

export default App;
  • 操作:儲存後,瀏覽器重新載入。按鈕一樣藍色、hover 變色,小螢幕(md: 前綴)會變大 padding。這裡的優點是全在 HTML 寫,快速,但類別名長了點。

  • 解釋類別:

    • bg-blue-500:藍色背景。

    • hover:bg-blue-700:hover 變深藍。

    • py-2 px-4:上下 0.5rem、左右 1rem 內邊距。

    • md:py-3 md:px-6:中螢幕以上變大內邊距(響應式)。

    • transition-colors duration-300:0.3 秒顏色過渡。

結論:哪個適合你?

如果你是新手或想快速建 UI,選 Tailwind——它減少寫 CSS 的麻煩,讓你專注邏輯。 但傳統 CSS 更基礎,學會它再加 Tailwind 會更好。