Vite+Tailwind CSS

2,608 阅读4分钟

使用Vite安装Tailwind CSS

Tailwind 不是一个组件库,而是一个样式集合 Tailwind 的使用,就是写出对应的类名,这样样式就会被渲染上去 Tailwind 就有点类似 将css代码写成 盒子的类名【网上称这个为 CSS 原子化】 Tailwind 工作原理就是 扫描文件中的 类名,生成对应的样式,写入CSS文件中

网上说Tailwind是postcss的一个插件

用vscode编辑器的时候,可以下载一个插件,这样会有提示

6.png

比如我希望我的字体大小为20px,颜色为绿色; 当我鼠标覆盖上去之后,颜色变为黑色;

  • 正常情况下,我的代码
<div className='box'>
   Hello World!
</div>
.box{
   font-size:20px;
   color:#16a34a;
}
.box:hover{
   color:#000;
}
  • Tailwind的代码
<div text-[20px] text-[#16a34a] hover:text-black>
   Hello World!
</div>
  • Tailwind CSS 官网
https://tailwindcss.com/docs/installation/framework-guides
  • Tailwind CSS 中文网
https://tailwind.org.cn/docs/installation
  • Tailwind Vite框架使用教程
https://tailwindcss.com/docs/guides/vite

以下内容有一部分【借鉴的】网上的

1、安装Tailwind CSS

npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

如果 生成 tailwind.config.ts 文件

npx tailwindcss init --ts

安装完之后 项目 会生成文件

tailwind.config.jspostcss.config.js

1.png

2、配置文件

  • 配置tailwind.config.js文件
/** @type {import('tailwindcss').Config} */
export default {
  //定义 Tailwindcss 需要扫描哪些文件 用以 生成CSS类
  content: [
    "./index.html",
    /*扫描src目录下的.js、.ts、.jsx、.tsx 文件;
    如果你用的vue框架,在.{js,ts,jsx,tsx,vue}里面加上vue就行了;
    注意:不要直接 ./,否则会 走到其他路径下 如nodo_modules文件里面*/
    "./src/**/*.{js,ts,jsx,tsx}",
  ],
  //配置 Tailwind 的 主题
  theme: {
    extend: {},//如果需要自定义主题 在里面添加配置
  },
  plugins: [],//需要配置 哪些 插件
}
  • postcss.config.js 文件内容
export default {
  plugins: {  //指定需要使用的 插件、及其配置
    tailwindcss: {},
    //CSS插件 会在CSS属性添加适当的 前缀(`-webkit-`,`-moz-`等),确保 不同浏览器的 兼容性
    autoprefixer: {},
  },
}
  • 配置全局样式文件

两个都行,我试了一下,不过第一个会有三个warming,但是应该没有什么影响,能用就行

@tailwind base;      /*tailwind 的基础样式*/
@tailwind components;/*tailwind 的组件样式*/
@tailwind utilities; /*tailwind 的工具样式*/
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';

最后发现配置了tailwind.config.js文件可以生效,但是配置ts不能

  • 在main.tsx中引入你的全局样式文件
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.tsx'
//引入全局样式文件
import './index.css'
//引入tailwind.css【这段代码写不写都没有影响诶?】
import 'tailwindcss/tailwind.css'ReactDOM.createRoot(document.getElementById('root')!).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
)

3、第一个Hello World

  • App.tsx
import './App.css'function App() {
  return (
    <>
      <h1 className="text-3xl font-bold underline">
        <div className="w-50 h-10 bg-yellow-200">Hello world!</div>
      </h1>
    </>
  )
}
​
export default App
  • 运行结果【页面展示】

2.png

4、浏览器解析出来的代码

可以看见 浏览器将代码解析出来后 相应的属性 会有相应的样式【我没有在css文件中写,就写了个居中】

3.png

让我们来看看div盒子里面的类名解析出来的代码【我没有找到w-50 T_T】

但是我们可以看见 h-10 的样式代码中 hight:2.5rem

然后我将 h-10 改为了 h-1 盒子的高度变成了hight:0.25rem

那么就可以得出结论【默认情况!】:h为高度,-1为高度是 0.25rem 【4px】

w为宽度,-1应该也是 宽度为 0.25rem

bg应该是背景颜色的意思

其实官网上也有,仔细去找找,还是可以找到!!!【加油!!!】

在Tailwind 官网上有一个自定义颜色【颜色color】,里面 yellow-200 的确就是 页面背景展示的黄色哦

4.png

然后我去看看盒子的高度,不难发现 高度为40

5.png

  • 任意值 【更多请见 官网 ;慢慢找,会找到的】

手动书写 任意值 那么怎么写呢,请见下文案例

<div className="w-[200px] h-[40px] bg-yellow-200">Hello world!</div>

那么请看页面解析的 css代码【我就不截图了,截图没有 复制粘贴来得快】 清楚明了的可以看见,盒子宽度为200px 高度为40px

.w-[200px] {
    width: 200px;
}
​
.h-[40px] {
    height: 40px;
}

5、Tailwind 和我的类名冲突 解决 办法

7.png

可以发现,在上面代码中,我的类名为border,而在Tailwind里面 也有个类名为border 那么遇到这种问题应该怎么解决呢?【网上问呗!】

那么以下就是我查到的解决方案

  • 第一步:在 tailwind.config.js 配置文件中加入 prefix 属性【如下图】

8.png

  • 第二步:在你需要用到 Tailwind 的地方 加上你prefix 里面的内容【如下图】 这样你的 类名 就不会和 Tailwind 的类名冲突了【只要你别在你的类名前面也加上prefix 里面的内容】

9.png

6、展示一下一天的学习成果

  • 代码
import "./App.css";
​
function App() {
  return (
    <>
      <h1>
        <button
          className="
            tw-text-[#16a34a] 
            tw-text-[30px] 
            tw-font-bold 
            tw-underline
            hover:tw-text-[#3b82f6] 
            tw-w-[200px]
            tw-h-[45px]
            tw-bg-yellow-200 
            hover:tw-w-[400px]
            hover:tw-h-[90px] 
            tw-ease-in-out 
            tw-duration-1000
            tw-rounded-[15px]
            "
        >
          Hello world!
        </button>
      </h1>
    </>
  );
}
​
export default App;
  • 页面

0.gif

【声明:以上笔记仅仅只是我上班摸鱼进行一天学习到的知识,我还在继续学习,所有的只是我自己的理解,只是为了方便自己看的;如果有不足,请一定指出!!!】