」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Tailwindcss 不是 Bootstrap 也不是 Materialize

Tailwindcss 不是 Bootstrap 也不是 Materialize

發佈於2024-11-07
瀏覽:834

Tailwindcss is not Bootstrap nor Materialize

Tailwind CSS 席卷了 Web 开发世界?️,但对其本质的误解仍然存在。在最近的一次设计系统规划讨论中,当一位同事随意将 Tailwind CSS 与 Bootstrap 和 Materialise 进行比较时,我差点没喝茶☕(对不起,我不喝咖啡)。这个令人震惊的发现就像发现我的猫认为自己是狗一样! ??

那么,拿起你的爆米花吗?当我澄清事实并揭开 Tailwind CSS 的真实身份时!

小介绍

在本文中,我们将深入了解 Tailwind CSS 的真正含义,探索其独特的样式方法以及它与传统 CSS 框架的区别。最后,您将了解为什么将 Tailwind CSS 与 Bootstrap 或其他基于组件的框架进行比较就像将苹果与橙子进行比较??

Tailwind CSS 不是什么 ❌

在我们探索 Tailwind 的真实本质之前,让我们先澄清一些误解:

  • 不是组件库:与 Bootstrap 或 Materialize 不同,Tailwind CSS 不提供开箱即用的预构建组件?
  • 非设计导向:它不会对您的项目强加特定的视觉风格?
  • 不仅仅是另一个 CSS 框架:虽然它在技术上是一个 CSS 框架,但其实用性优先的方法使其有别于传统框架?

以下是一些常见的误解:

  • ? “Tailwind CSS 就像内联样式”:不,不是。与内联样式不同,Tailwind 允许您使用高级功能,例如 伪类、媒体查询和动画 。它提供了一种实用程序优先的方法,与内联样式相比,可以减少 CSS 类的数量
  • ? “您不需要了解 CSS 即可使用 Tailwind”:这是 false。对 CSS 的深入理解对于有效使用 Tailwind CSS4 至关重要。虽然它简化了样式的许多方面,但了解 CSS 基础知识有助于理解实用程序类如何工作以及如何在需要时自定义它们
  • ? “Tailwind CSS 无法自定义”:这与事实相差甚远。事实上,它被设计为高度可扩展和可定制

现在我们已经消除了一些误解,接下来让我们探讨一下 Tailwind CSS 的真正独特之处以及它为何彻底改变开发人员处理 Web 样式的方式。

实用优先的 CSS 框架

Tailwind CSS 的核心是一个实用性优先 CSS 框架。这意味着它提供了一组低级实用程序类,您可以使用它们直接在 HTML 中构建自定义设计。您无需为每个元素编写自定义 CSS,而是应用处理特定样式属性的预定义类。就像拥有一把瑞士军刀?为你的CSS!

例如,不要写:

.button {
  padding: 0.5rem 1rem;
  background-color: blue;
  color: white;
  border-radius: 0.25rem;
}

您将在 HTML 中使用 Tailwind 类:


变相的设计系统

虽然 Tailwind 不提供预构建组件,但它提供了全面的设计系统。它带有一组精心设计的默认值颜色、间距、排版等等。这些默认设置是可自定义的,允许您根据项目的特定设计需求定制 Tailwind。

看看这个自定义配置:

// tailwind.config.js

module.exports = {
  theme: {
    extend: {
      colors: {
        primary: {
          light: '#4da6ff',
          DEFAULT: '#0066cc',
          dark: '#004080',
        },
        secondary: {
          light: '#ffb366',
          DEFAULT: '#ff8000',
          dark: '#cc6600',
        },
      },
      spacing: {
        '72': '18rem',
        '84': '21rem',
        '96': '24rem',
      },
      fontFamily: {
        sans: ['Roboto', 'Arial', 'sans-serif'],
        serif: ['Merriweather', 'Georgia', 'serif'],
      },
      fontSize: {
        'xs': '.75rem',
        'sm': '.875rem',
        'base': '1rem',
        'lg': '1.125rem',
        'xl': '1.25rem',
        '2xl': '1.5rem',
        '3xl': '1.875rem',
        '4xl': '2.25rem',
        '5xl': '3rem',
      },
      borderRadius: {
        'sm': '0.125rem',
        DEFAULT: '0.25rem',
        'md': '0.375rem',
        'lg': '0.5rem',
        'full': '9999px',
      },
    },
  },
  variants: {
    extend: {
      backgroundColor: ['active'],
      textColor: ['visited'],
    },
  },
}

为什么 Tailwind CSS 脱颖而出

灵活性和定制化

与 Bootstrap 或 Materialise 提供一组固执己见的组件不同,Tailwind 为您提供构建块来创建您自己的独特设计。这种灵活性允许更多的创作自由,并有助于避免许多网站陷入的“引导程序外观”

性能优势

其实用程序优先的方法可以减少 CSS 文件大小,特别是与内置的清除功能结合使用时。此功能删除了生产中未使用的样式,从而产生更精简、性能更高的样式表。您的网站会感觉就像打了类固醇一样! ?

开发者体验增强器

它通过以下方式显着改善了开发者体验:

  • 减少上下文切换:您可以在不离开 HTML 的情况下设置元素的样式。不再需要处理多个文件! ?‍♂️
  • 促进一致性:预定义的类鼓励在整个项目中保持一致的间距、颜色和其他设计元素。您的设计将像一支调音良好的管弦乐队一样和谐?
  • 加速开发:通过触手可及的实用程序类,您可以快速制作原型并迭代设计。你会感觉自己拥有超能力!⚡ 通过 Tailwindcss Intellisense vscode 扩展,你可以获得 自动完成和 linting 的类以及添加的自定义类

那是一个包裹?

Tailwind CSS 不仅仅是另一个 CSS 框架。通过提供一组低级实用程序类,它使开发人员能够创建独特、高效且可维护的设计,而不受传统 CSS 框架的限制。

因此,下次有人将 Tailwind 与 Bootstrap 进行比较时,您将有能力解释为什么这种比较没有达到目标,以及为什么 Tailwind 可能正是您的项目所需的游戏规则改变者。快乐编码! ??‍?

版本聲明 本文轉載於:https://dev.to/lynxgsm/tailwindcss-is-not-bootstrap-nor-materialize-663?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8表中將latin1字符轉換為utf8 ,您遇到了一個問題,其中含義的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致電。為了解決此問題,您正在嘗試使用“ mb_convert_encoding”和“ iconv”轉換受...
    程式設計 發佈於2025-07-13
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示 僅通過Python的MlStripper 來簡化剝離過程,Python Standard庫提供了一個專門的功能,MLSTREPERE,MLSTREPERIPLE,MLSTREPERE,MLSTREPERIPE,MLSTREPERCE,MLST...
    程式設計 發佈於2025-07-13
  • C++中如何將獨占指針作為函數或構造函數參數傳遞?
    C++中如何將獨占指針作為函數或構造函數參數傳遞?
    在構造函數和函數中將唯一的指數管理為參數 unique pointers( unique_ptr [2啟示。通過值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法將唯一指針的所有權轉移到函數/對象。指針的內容被移至功能中,在操作...
    程式設計 發佈於2025-07-13
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-07-13
  • 如何使用node-mysql在單個查詢中執行多個SQL語句?
    如何使用node-mysql在單個查詢中執行多個SQL語句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    程式設計 發佈於2025-07-13
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-07-13
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-07-13
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe ,將常數列添加到Spark DataFrame,該列具有適用於所有行的任意值的Spark DataFrame,可以通過多種方式實現。使用文字值(SPARK 1.3)在嘗試提供直接值時,用於此問題時,旨在為此目的的column方法可能會導致錯誤。 df.withCo...
    程式設計 發佈於2025-07-13
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-07-13
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-07-13
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-07-13
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-07-13
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-07-13
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    在使用GO MOD時,在GO MOD 中克服模塊路徑差異時,可能會遇到衝突,其中可能會遇到一個衝突,其中3派對軟件包將另一個帶有導入套件的path package the Imptioned package the Imptioned package the Imported tocted pac...
    程式設計 發佈於2025-07-13
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-07-13

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3