Vue3 Tailwind CSS

Vue3 + Tailwind CSS 知识汇总

Vue3 与 Tailwind CSS 入门指南

专为编程小白设计的Vue3和Tailwind CSS知识汇总,用最简单的方式理解现代前端开发

为什么选择 Vue3 + Tailwind CSS?

  • Vue3 – 简单易学,性能强大,适合初学者
  • Tailwind CSS – 无需编写CSS,快速构建漂亮界面
  • 完美组合 – 一起使用提高开发效率10倍以上

Vue3 核心知识点

组合式API (Composition API)

Vue3 最大的变化,让你像写普通函数一样组织代码。

  • setup() – 组件的入口函数
  • ref() – 创建响应式数据(基本类型)
  • reactive() – 创建响应式对象
  • computed() – 创建计算属性
  • watch() – 监听数据变化

响应式系统

Vue3 使用 Proxy 重写了响应式系统,性能更好。

  • ref – 用于基本类型(字符串、数字等)
  • reactive – 用于对象和数组
  • toRefs – 将 reactive 对象转换为多个 ref
  • watchEffect – 自动追踪依赖并执行
  • 无需.value – 在模板中直接使用,无需.value

组件与模板

组件是Vue的核心概念,模板是写HTML的地方。

  • 单文件组件(.vue) – 包含 template, script, style
  • 模板语法 – {{ 双大括号 }} 插值
  • 指令 – v-if, v-for, v-bind, v-on 等
  • 组件通信 – props 和 emit
  • 插槽(Slot) – 内容分发

生命周期

组件从创建到销毁的过程,Vue3有这些生命周期钩子:

  • setup() – 最先执行,组件创建前
  • onBeforeMount – 挂载前
  • onMounted – 挂载完成
  • onBeforeUpdate – 更新前
  • onUpdated – 更新完成
  • onBeforeUnmount – 卸载前
  • onUnmounted – 卸载完成

Vue Router

官方路由管理器,用于构建单页面应用。

  • 路由配置 – 定义路径和组件的映射
  • 路由跳转 – router-link 或 router.push()
  • 动态路由 – /user/:id 形式
  • 路由守卫 – 控制导航行为
  • 嵌套路由 – 子路由配置

Vuex/Pinia

状态管理,用于跨组件共享数据。

  • Vuex – Vue2的官方状态管理
  • Pinia – Vue3推荐的状态管理库
  • State – 存储数据的地方
  • Getters – 相当于计算属性
  • Actions – 处理异步操作
  • Mutations – 修改state的唯一方式(Vuex)

Tailwind CSS 核心知识点

什么是Tailwind CSS?

一个实用优先(Utility-First)的CSS框架,通过类名实现样式。

  • 无需自己写CSS,使用预定义的类
  • 高度可定制化
  • 响应式设计内置
  • 不会有无用的CSS,生产环境很小
  • 与任何框架兼容

核心概念

理解这些概念,Tailwind就掌握了80%

  • 实用类(Utility Classes) – 每个类只做一件事
  • 响应式设计 – 使用前缀如 md:, lg:
  • 悬停、聚焦状态 – 使用 hover:, focus:
  • 暗黑模式 – dark: 前缀
  • 自定义配置 – tailwind.config.js

常用工具类

日常开发最常用的Tailwind类

  • 布局 – flex, grid, block, hidden
  • 间距 – m-4, p-4, space-x-4
  • 尺寸 – w-16, h-16, min-w-full
  • 颜色 – bg-blue-500, text-white
  • 边框 – border, rounded-lg

响应式设计

Tailwind 让响应式设计变得简单

  • 断点前缀 – sm:, md:, lg:, xl:, 2xl:
  • 例如: md:text-center
  • 移动优先: 不加前缀是手机,md是平板,lg是桌面
  • 可以组合使用: md:hover:bg-blue-500

自定义与配置

Tailwind 非常灵活,可以完全自定义

  • 修改 tailwind.config.js 文件
  • 可以自定义颜色、字体、间距等
  • 可以添加自己的实用类
  • 可以启用禁用某些功能
  • 支持插件扩展功能

Tailwind 最佳实践

高效使用Tailwind的技巧

  • 不要过度使用 @apply
  • 使用编辑器插件提高效率
  • 组合使用类,而不是写新类
  • 使用组件思维构建UI
  • 定期清理未使用的样式

在 Vue3 中使用 Tailwind CSS

安装与配置

在Vue3项目中安装Tailwind CSS的步骤:

# 使用 npm 安装 Tailwind 及其依赖
npm install -D tailwindcss@latest postcss@latest autoprefixer@latest

# 生成配置文件
npx tailwindcss init -p

# 创建 tailwind.config.js 并配置
module.exports = {
  content: [
    "./index.html",
    "./src/**/*.{vue,js,ts,jsx,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

# 在 src 目录下创建样式文件,如 src/tailwind.css
@tailwind base;
@tailwind components;
@tailwind utilities;

然后在 main.js 中引入 tailwind.css 文件

使用示例

在Vue组件中使用Tailwind的简单示例:

<template>
  <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:shrink-0">
        <img class="h-48 w-full object-cover md:h-full md:w-48" 
             src="/img/store.jpg" alt="商店图片">
      </div>
      <div class="p-8">
        <div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">
          特惠活动
        </div>
        <a href="#" class="block mt-1 text-lg leading-tight font-medium text-black hover:underline">
          全场商品5折起
        </a>
        <p class="mt-2 text-gray-500">
          活动时间:即日起至本月底,所有商品参与折扣活动,部分商品低至5折。
        </p>
        <button class="mt-4 px-4 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700">
          立即购买
        </button>
      </div>
    </div>
  </div>
</template>

最佳实践

组件化思维

在Vue单文件组件中:

  • 使用 @apply 提取重复的类组合
  • 为复杂组件创建子组件
  • 使用 props 控制样式变化

动态类名

Vue3 中动态绑定类名:

<div :class="[
  'p-4 rounded-lg',
  isActive 
    ? 'bg-blue-500 text-white' 
    : 'bg-gray-200 text-gray-800'
]">
  动态样式示例
</div>

Vue3 + Tailwind 综合示例

计数器组件

一个简单的计数器,演示Vue3响应式与Tailwind样式

{{ count }}
<script setup>
import { ref, computed } from 'vue'

const count = ref(0)
const darkMode = ref(false)

const increment = () => count.value++
const decrement = () => count.value--
const reset = () => count.value = 0
</script>

<template>
  <div :class="{ 'bg-gray-800 text-white': darkMode, 'bg-white': !darkMode }" class="p-8 rounded-xl">
    <div class="text-6xl font-bold mb-8">{{ count }}</div>
    <div class="flex space-x-4">
      <button @click="decrement" class="px-6 py-3 bg-red-500 text-white rounded-lg hover:bg-red-600">
        减少
      </button>
      <button @click="increment" class="px-6 py-3 bg-green-500 text-white rounded-lg hover:bg-green-600">
        增加
      </button>
      <button @click="reset" class="px-6 py-3 bg-gray-500 text-white rounded-lg hover:bg-gray-600">
        重置
      </button>
    </div>
  </div>
</template>

待办事项列表

演示Vue3响应式数组操作与Tailwind样式

  • {{ todo.text }}
共 {{ todos.length }} 项 已完成 {{ completedCount }} 项
<script setup>
import { ref, computed } from 'vue'

const newTodo = ref('')
const todos = ref([
  { text: '学习 Vue3', completed: true },
  { text: '掌握 Tailwind', completed: false },
  { text: '构建一个项目', completed: false }
])

const completedCount = computed(() => {
  return todos.value.filter(todo => todo.completed).length
})

const addTodo = () => {
  if (newTodo.value.trim() === '') return
  todos.value.push({ text: newTodo.value, completed: false })
  newTodo.value = ''
}

const removeTodo = (index) => {
  todos.value.splice(index, 1)
}
</script>

学习资源推荐

© 2023 Vue3 + Tailwind CSS 学习指南 | 编程小白也能看懂的前端教程

本教程仅用于学习目的,实际项目请参考官方文档

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部