likes
comments
collection
share

CSS框架Tailwind CSS上手初体验

作者站长头像
站长
· 阅读数 51

CSS框架Tailwind CSS上手初体验

Tailwindcss是什么

Tailwindcss 是一个功能类优先的 CSS 框架,它集成了诸如 flex, pt-4, text-center 和 rotate-90 这样的的类,它们能直接在脚本标记语言中组合起来,构建出任何设计。

先来看个官网示例,写一个下图的卡片样式

使用传统方式,定制的设计需要定制的css,这也是我们目前的开发方式

CSS框架Tailwind CSS上手初体验

<div class="chat-notification">
  <div class="chat-notification-logo-wrapper">
    <img class="chat-notification-logo" src="/img/logo.svg" alt="ChitChat Logo">
  </div>
  <div class="chat-notification-content">
    <h4 class="chat-notification-title">ChitChat</h4>
    <p class="chat-notification-message">You have a new message!</p>
  </div>
</div>

<style>
  .chat-notification {
    display: flex;
    max-width: 24rem;
    margin: 0 auto;
    padding: 1.5rem;
    border-radius: 0.5rem;
    background-color: #fff;
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
  }
  .chat-notification-logo-wrapper {
    flex-shrink: 0;
  }
  .chat-notification-logo {
    height: 3rem;
    width: 3rem;
  }
  .chat-notification-content {
    margin-left: 1.5rem;
    padding-top: 0.25rem;
  }
  .chat-notification-title {
    color: #1a202c;
    font-size: 1.25rem;
    line-height: 1.25;
  }
  .chat-notification-message {
    color: #718096;
    font-size: 1rem;
    line-height: 1.5;
  }
</style>

要完成一个名片的样式开发,我们通常会这样写:在html或jsx结构中添加赋有语义化的class类名,随后在css中写入对应类的样式。

这是最常见、最常规的写法,被称作Semantic CSS(语义化CSS)规范。在这种规范下,我们追求关注点分离,让结构与样式各司其职,使结构更具语义化。但这样一来,在很多场景下也面临着许多问题,比如:

  • 每一个标签都有一个专有的class,但就算是给标签添加一个小小的样式时,我们都得绞尽脑汁想出一个类名,既要求有语义化、符合代码规范,还要和与它作用相似的标签类名有区分;

  • 每个类中往往会有很多个样式规则,在结构的语义、样式完全相同时才能做到真正的复用,若存在一点差异,就难以实现样式复用;

  • 可以通过在html或jsx中删除类名的方式去掉相应的样式,但此时我们无法轻易的删除该类下的css样式,因为我们无法保证该类在别处也使用过,而在修改某个类中的样式时也存在同样的问题;

  • 如果将html或jsx结构做迁移,我们还要将相应css同时迁移,即使这样,迁移后的样式也可能会根据上下文环境变得错乱;

Tailwind CSS,用法与Bootstrap类似,都是通过类名来引用样式。但最大的区别,也是Tailwind CSS的核心,即它是一套以Atomic/Utility-First CSS为基础CSS框架。同样是名片的样式开发,Tailwind CSS 这样做:通过直接在 HTML 中应用预先存在的类来设置元素的样式。

CSS框架Tailwind CSS上手初体验

<div class="p-6 max-w-sm mx-auto bg-white rounded-xl shadow-md flex items-center space-x-4">
  <div class="flex-shrink-0">
    <img class="h-12 w-12" src="/img/logo.svg" alt="ChitChat Logo">
  </div>
  <div>
    <div class="text-xl font-medium text-black">ChitChat</div>
    <p class="text-gray-500">You have a new message!</p>
  </div>
</div>

在上面的示例中,我们使用了:

  • 使用 Tailwind 的 flexbox 和 padding 功能类 (flex, flex-shrink-0, 和 p-6) 来控制整体的卡片布局

  • 使用 max-width 和 margin 功能类 (max-w-sm 和 mx-auto) 来设置卡片的宽度和水平居中

  • 使用 background color, border radius, 和 box-shadow 功能类 (bg-white, rounded-xl, 和 shadow-md) 设置卡片的外观样式

  • 使用 width 和 height 功能类 (w-12 and h-12) 来设置 logo 图片的大小

  • 使用 space-between 功能类 (space-x-4) 来处理 logo 和文本之间的间距

  • 使用 font size,text color,和 font-weight 功能类 (text-xl,text-black,font-medium 等等) 给卡片文字设置样式

这种方法使我们无需编写一行自定义的 CSS 即可实现一个完全定制的组件设计。这样一对比,就可以明显看出Tailwindcss 的优点

  • 不用花时间想类名

  • 结构与样式紧密耦合,不用来回切换html与css,更专注于html

  • 修改某个样式,不影响其他结构样式,保证全局样式统一,不存在全局样式污染问题

  • 丰富的功能类,覆盖大多数的开发场景

  • 功能越简单的类,复用率越高

Tailwindcss 核心概念

功能类优先

在一组受约束的原始功能类的基础上构建复杂的组件。

通过上面的示例,可以看出使用Tailwindcss内置的功能类,可以快速的构建我们的卡片。

响应式设计

使用响应式功能变体构建自适应的用户界面。

Tailwind 中的每个功能类都可以有条件的应用于不同的断点,这使得您可以轻松的构建复杂的响应式界面而不用离开 HTML。

根据常用的设备分辨率方案,默认内置了 5 个断点:

断点前缀最小宽度CSS
sm640px@media (min-width: 640px) { ... }
md768px@media (min-width: 768px) { ... }
lg1024px@media (min-width: 1024px) { ... }
xl1280px@media (min-width: 1280px) { ... }
2xl1536px@media (min-width: 1536px) { ... }

要添加一个仅在特定断点生效的功能类,只需要在该功能类前加上断点名称,后面跟 : 字符。

<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-2xl">
  <div class="md:flex">
    <div class="md:flex-shrink-0">
      <img class="h-48 w-full object-cover md:h-full md:w-48" src="/store.jpeg" alt="Man looking at item at a store" />
    </div>
    <div class="p-8">
      <div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">Case study</div>
      <a href="#" class="block mt-1 text-lg leading-tight font-medium text-black hover:underline">Finding customers for your new business</a>
      <p class="mt-2 text-gray-500">Getting a new business off the ground is a lot of hard work. Here are five ideas you can use to find your first customers.</p>
    </div>
  </div>
</div>

CSS框架Tailwind CSS上手初体验CSS框架Tailwind CSS上手初体验

悬停、焦点和其它状态

使用功能类为处于悬停、焦点和其它状态的元素设置样式。

深色模式

使用 Tailwind CSS 在深色模式下为您的网站设置样式。

添加基础样式

可以在 Tailwind 的基础上添加自己的全局基础样式。

提取组件

处理复用并且保持功能优先项目的可维护性。

添加新的功能类

使用您的自定义功能类来扩展 Tailwind。

函数与指令

Tailwind 向您的 CSS 的暴露的函数和指令。

兼容性

框架兼容性,vue、React 等均支持,或者使用 PostCSS 插件形式安装

CSS框架Tailwind CSS上手初体验

浏览器兼容性

从 v2.0 开始,Tailwind CSS 专为 Chrome,Firefox,Edge 和 Safari 的最新稳定版本设计并在其上经过了测试。 Tailwind CSS v2.0 不支持任何版本的 IE,包括 IE 11。

总结

一开始使用 TailwindCSS 确实会有一些别扭,但是当我们在开发一些无法使用 UI 库的项目是就不得不面临编写大量 css 文件,还得考虑响应式布局,黑暗模式等等,但是这些对于 TailwindCSS 来说将是简单的。 结合vscode 插件,开发起来更方便

更多内容,可参考官网,提供的示例以及配置比较全面

转载自:https://juejin.cn/post/7232600368751067194
评论
请登录