Vue--》深入学习Tailwind CSS掌握优雅而高效的前端样式开发

Tailwind CSS是一个非常强大且灵活的CSS框架,适用于开发者希望高度定制化界面样式的项目。今天博主就 Tailwind CSS 做一个简单介绍以及案例讲解,争取读者阅读文章后入门。

仅靠一篇文章博主也不可能将Tailwind CSS所有内容讲解的面面俱到,在阅读之前博主先将相关的官方文档链接打出来,详细了解Tailwind CSS的话还是推荐阅读 官方文档 ,如果英文水平较差的朋友推荐阅读 Tailwind CSS 中文网 。接下来开始正式的Tailwind CSS学习:

目录

上手Tailwind CSS

基于JIT模式的TailwindCSS

TailwindCSS生态和封装组件

自定义主题及样式


上手Tailwind CSS

Tailwind CSS是一种基于原子设计理念的现代CSS框架。它通过提供大量可复用的独立类来构建界面,而不是依赖于预定义的组件。与传统的CSS框架不同,Tailwind CSS不提供封装好的样式组件,而是专注于提供低级的原子类,使开发者能够自由组合和定制样式。

接下来我们借助官网的介绍使用vite框架创建vue项目来使用Tailwind CSS:

以下是使用创建Vue项目的相关命令,关于vite创建项目的介绍可参考我之前的文章:地址 ,注意如果使用下面命令创建最新版本的vite需要node版本在18.0以上,如果版本过低是创建不了的,如果想进行node多版本管理,可以参考我之前的文章:地址 。

使用vite创建完vue工程之后,接下来我们就需要为该项目安装Tailwind CSS依赖:

npm install -D tailwindcss postcss autoprefixer

回到package.json文件中我们可以看到我们已经安装完成了最新的包:

然后我们执行如下命令,使用 tailwindcss 初始化一个项目,并生成默认的配置文件。-p是一个可选参数,表示使用 PostCSS 进行构建和处理样式。如果存在 PostCSS 的配置文件,则会将 tailwindcss 集成到该文件中,以便使用 PostCSS 处理样式。不存在则创建:

npx tailwindcss init -p

接下来我们需要在生成的tailwind.config.js文件中配置如下的初始内容:

/** @type {import('tailwindcss').Config} */
export default {content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],theme: {extend: {},},plugins: [],
}

接下来我们需要在src文件下创建一个输入指令的css文件,这里命名为tailwind.css,在该文件夹下配置如下内容:

@tailwind base;
@tailwind components;
@tailwind utilities;

一开始使用会出现如下状况:Unknown at rule @tailwindcss(unknownAtRules):

可以在项目根目录下的 .vscode 目录中创建 settings.json 文件并添加以下代码:

{"css.lint.unknownAtRules": "ignore"
}

然后启动 Tailwind CLI 构建进程  运行 CLI 工具以扫描模板文件中的类并构建 CSS。 这个命令通常用于在开发过程中实时地将 tailwindcss 的样式应用到项目中,并自动更新生成的 CSS 文件。

npx tailwindcss -i ./src/input.css -o ./src/output.css --watch

接下来需要在src/main.ts 中引入 tailwindcss 编译的输出文件./src/output.css ,这里我将输入文件命名为tailwind.css,输出文件命名为style.css:

import { createApp } from 'vue'
import './tailwind.css'
import './style.css'
import App from './App.vue'createApp(App).mount('#app')

通常来说,在使用 Tailwind CSS 进行开发时,最终需要将 Tailwind CSS 的样式生成具体的 CSS 文件,然后将该 CSS 文件引入到项目中进行部署上线。这样可以确保在生产环境中使用已经处理好的 CSS 样式,避免依赖于实时编译和处理。这里我们通过如下操作,设置同时启动 vite 项目和 tailwindcss 监听的命令:

  "scripts": {"serve": "concurrently \"npm run dev\" \"npm run tail\"","dev": "vite","tail": "tailwindcss -i ./src/tailwind.css -o ./src/style.css --watch","build": "vite build","preview": "vite preview"},

关于 concurrently 是一个 Node.js 包,它允许你在一个命令行中同时运行多个命令,如果没有下载的朋友,这里推荐进行全局安装一下:

npm install -g concurrently

接下面我们在App.vue文件中进行如下的代码测试,这里推荐一下代码的提示插件,在vscode搜索即可:

这里提示一下这个插件可能存在的问题,目前博主安装这个插件遇到的情况是只有在书写类名后空格一下才能出现提示,不空格或者重新书写是没有任何提示的,这是由于VS代码处理字符串上下文的方式,在.vscode/settings.json中添加以下内容应该可以解决这个问题,简单提一嘴:

"editor.quickSuggestions": {"strings": true
}
<template><div><div class="h-screen bg-red-300 flex justify-center items-center">HelloWorld</div></div>
</template>

最终终端执行 npm run serve 得到的画面如下,说明我们操作成功:

基于JIT模式的TailwindCSS

在 Tailwind CSS 中,Just-in-Time (JIT) 编译模式的配置选项。是 Tailwind CSS v2.1.0 版本引入的一项新功能。

使用 JIT 编译模式可以显著提高 Tailwind CSS 的开发体验和编译速度。传统的编译模式需要扫描整个 Tailwind CSS 的源代码,并为每个可能用到的类生成对应的 CSS 样式规则,这样会导致编译时间较长。以下是没有开启JIT模式下的输出文件style.css的代码文件

而 JIT 编译模式是一种按需编译的方式,它只会根据你实际使用的类动态生成相关的样式规则,从而减少了编译时间和生成的 CSS 文件大小。这意味着你可以更快地编译和重载页面,并且无需担心生成大量未使用的 CSS。

要启用 JIT 编译模式,你需要在 Tailwind CSS 配置文件(通常是 tailwind.config.js)中的 mode 选项中设置为 'jit':

module.exports = {mode: 'jit',// 其他配置项...
}

然后我们将原本的设置的输入文件tailwind.css中的第一项代码注释掉:

/* @tailwind base; */
@tailwind components;
@tailwind utilities;

接下来点击输出文件style.css,就可以看到我们的css代码就是说明tailwind原子css生成的代码:

回到页面可以看到我们的代码样式也没有出现变化,大大提高了运行效率:

TailwindCSS生态和封装组件

TailwindCSS 本身并不是一个封装好的 UI 组件库,它更像是一个工具集,提供了大量的实用类来帮助你快速构建自定义的 UI。但结合 Tailwind UI 和其他开源组件库,你可以在项目中快速构建出美观且高效的用户界面。可以参考:地址 ,这里提供了TailwindCSS常用的组件库合集,总会找到适合你的那一款:

这里博主推荐一款好用的吧:地址 ,当然你可以找一下自己喜欢的组件库,都可以。这里就拿这个举例了:

我们拿一下这个 Banner 进行举例:

将代码复制到我们的vue文件当中:

回到我们的页面可以看到样式已经出现到我们的页面当中了:

在 Tailwind CSS 中,可以使用 @apply 指令来提取类并将其应用到自定义的 CSS 规则中。这允许你重复使用和抽象一组类,并将其应用于自定义的样式。接下来我们将上面的UI组件库的某行代码抽离出来制成下面的banner属性:

@tailwind base;
@tailwind components;
@tailwind utilities;@layer components {.banner {@apply relative flex flex-wrap bg-indigo-500 px-4 py-3 sm:flex-nowrap sm:items-center sm:justify-center sm:gap-3 sm:pr-8 md:px-8;}
}

接下来回到App组件中,我们使用我们创建好的banner属性:

回到页面当中,可以看到我们的页面仍然还是有效果的:

关于TailwindCSS官方提供的组件库是收费的这件事,博主这里就不再介绍该组件库的使用了,因为很贵,大部分人还是用不起的,翻阅上面博主提供的组件库集合的github地址,找找其他的组件库使用也可以,类似下面这种也是不错的:

地址:点击跳转

地址:点击跳转

地址:点击跳转

组件库仅是利于大家提高编程效率的途径而已,找到自己需要的资源进行编程即可。

自定义主题及样式

TailwindCSS提供给我们方便自定义主题及样式的方法,让我们定制网站更有代表性,当我们我们想使用某一个颜色的时候,通过tailwind.config.js设置的自定义主题颜色以及其他相关属性,让我们的定制更具有统一性:

/** @type {import('tailwindcss').Config} */
module.exports = {theme: {screens: {sm: '480px',md: '768px',lg: '976px',xl: '1440px',},colors: {'blue': '#1fb6ff','pink': '#ff49db','orange': '#ff7849','green': '#13ce66','gray-dark': '#273444','gray': '#8492a6','gray-light': '#d3dce6',},fontFamily: {sans: ['Graphik', 'sans-serif'],serif: ['Merriweather', 'serif'],},extend: {spacing: {'128': '32rem','144': '36rem',},borderRadius: {'4xl': '2rem',}}}
}

theme 对象包含 screens、colors 和 spacing 的键,以及每个可自定义的 核心插件 的键。有关主题选项的完整列表,请参阅 主题配置参考 或 默认主题。 

screens 键允许你自定义项目中的响应断点。

colors 键允许你为项目自定义全局调色板。

spacing 键允许你为项目自定义全局间距和大小比例。

theme 部分的其余部分用于配置哪些值可用于每个单独的核心插件。

如果你想保留主题选项的默认值,但还想添加新值,请在配置文件中的 theme.extend 键下添加扩展。该键下的值将与现有的 theme 值合并,并自动成为可供你使用的新类。

/** @type {import('tailwindcss').Config} */
module.exports = {theme: {extend: {fontFamily: {display: 'Oswald, ui-serif', // Adds a new `font-display` class}}}
}

将其添加到你的主题后,你可以像任何其他 font-{family} 工具一样使用它:

<h1 class="font-display">This uses the Oswald font
</h1>

要覆盖默认主题中的选项,请直接在 tailwind.config.js 的 theme 部分下添加你的覆盖,这将完全替换 Tailwind 对该键的默认配置,因此在下面的示例中,不会生成任何默认的透明度工具。

/** @type {import('tailwindcss').Config} */
module.exports = {theme: {// Replaces all of the default `opacity` valuesopacity: {'0': '0','20': '0.2','40': '0.4','60': '0.6','80': '0.8','100': '1',}}
}

写在最后

        通过本文我们了解了 Tailwind CSS 的一些基本概念和特点,以及它为开发人员提供的许多优势。Tailwind CSS 提供了一种全新的方式来构建用户界面,通过直接操作实用类来快速构建自定义样式,极大地提高了开发效率和灵活性。与传统的 CSS 框架相比,Tailwind CSS 不仅更加模块化和可扩展,而且具有出色的响应式设计和可访问性支持。学习和掌握 Tailwind CSS 不仅可以帮助我们更快地开发出现代化的用户界面,还能够提高我们对 CSS 的理解和应用能力。

        作为一个备受欢迎且不断发展的工具,学习和了解 Tailwind CSS 的重要性在不断增强。无论是前端开发人员还是设计师,掌握 Tailwind CSS 都将成为我们职业发展中的重要优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/256679.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

购物|电商购物小程序|基于微信小程序的购物系统设计与实现(源码+数据库+文档)

电商购物小程序目录 目录 基于微信小程序的购物系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户前台功能实现 2、管理员后台功能实现 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xff1a; 五、核心代码 六、论文参考 七、最新计算机毕设…

【力扣】5.最长回文子串

这道题我主要是通过动态规划来进行解题&#xff0c;看了我好久&#xff08;解析&#xff09;&#xff0c;生疏了呀。 首先就是判断一个字符串是不是回文&#xff0c;我们可以设置两个指针&#xff0c;从前往后进行判断即可&#xff0c;运用暴力解题法&#xff0c;这里运用的动…

react【四】css

文章目录 1、css1.1 react和vue css的对比1.2 内联样式1.3 普通的css1.4 css modules1.5 在react中使用less1.6 CSS in JS1.6.1 模板字符串的基本使用1.6.2 styled-components的基本使用1.6.3 接受传参1.6.4 使用变量1.6.5 继承样式 避免代码冗余1.6.6 设置主题色 1.7 React中添…

Redis篇之redis是单线程

一、redis是单线程 Redis是单线程的&#xff0c;但是为什么还那么快&#xff1f;主要原因有下面3点原因&#xff1a; 1. Redis是纯内存操作&#xff0c;执行速度非常快。 2. 采用单线程&#xff0c;避免不必要的上下文切换可竞争条件&#xff0c;多线程还要考虑线程安全问题。 …

【电路笔记】-串联电感

串联电感 文章目录 串联电感1、概述2、电感串联示例13、互耦串联电感器4、电感串联示例25、电感串联示例36、总结当电感器以菊花链方式连接在一起并共享公共电流时,它们可以串联连接在一起。 1、概述 这些电感器的互连产生了更复杂的网络,其总电感是各个电感器的组合。 然而…

CSS Selector—选择方法,和html自动——异步社区的爬取(动态网页)——爬虫(get和post的区别)

这里先说一下GET请求和POST请求&#xff1a; post我们平时是要加data的也就是信息&#xff0c;你会发现我们平时百度之类的 搜索都是post请求 get我们带的是params&#xff0c;是发送我们指定的内容。 要注意是get和post请求&#xff01;&#xff01;&#xff01; 先说一下异…

Linux_进程概念

硬件系统 软件系统 进程概念 进程状态 孤儿进程 进程优先级 一.硬件系统 1.1 冯诺依曼体系结构 数学家冯诺依曼提出了计算机制造的三个基本原则&#xff0c;即采用二进制逻辑、程序存储执行以及计算机由五个部分组成&#xff08;运算器、控制器、存储器、输入设备、输出设备&a…

[Doris] Doris的安装和部署 (二)

文章目录 1.安装要求1.1 Linux操作系统要求1.2 软件需求1.3 注意事项1.4 内部端口 2.集群部署2.1 操作系统安装要求2.2 下载安装包2.3 解压2.4 配置FE2.5 配置BE2.6 添加BE2.7 FE 扩容和缩容2.8 Doris 集群群起脚本 3.图形化 1.安装要求 1.1 Linux操作系统要求 1.2 软件需求 1…

用EXCEL从地址(上海)中提取各区(浦东新区等区)信息

背景&#xff1a; 朋友工作需要经常用EXCEL把各上海用户收货地址中的区提取出来&#xff0c;之前一直手动处理&#xff0c;希望我帮忙用EXCEL公式直接提取处理。 数据样式&#xff1a; 中国上海市浦东新区A小区 上海徐汇区B小区 中国&#xff0c;上海&#xff0c;浦东新区&a…

JVM相关-JVM模型、垃圾回收、JVM调优

一、JVM模型 JVM内部体型划分 JVM的内部体系结构分为三部分&#xff0c;分别是&#xff1a;类加载器&#xff08;ClassLoader&#xff09;子系统、运行时数据区&#xff08;内存&#xff09;和执行引擎 1、类加载器 概念 每个JVM都有一个类加载器子系统&#xff08;class l…

CSS之盒模型

盒模型概念 浏览器盒模型&#xff08;Box Model&#xff09;是CSS中的基本概念&#xff0c;它描述了元素在布局过程中如何占据空间。盒模型由内容&#xff08;content&#xff09;、内边距&#xff08;padding&#xff09;、边框&#xff08;border&#xff09;、和外边距&…

Java实现教学资源共享平台 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

MATLAB | 情人节画个花瓣venn图?

之前七夕节情人节各种花&#xff0c;相册&#xff0c;爱心啥的都快画够了&#xff0c;今年画个花瓣韦恩图&#xff1f; 花瓣上的数字是仅属于该类的样本数&#xff0c;而中心的数字是属于每一类的样本数 教程部分 0 数据准备 % 给组起名t1 t2 t3...t15 setName compose(t%d,…

交叉熵损失函数(Cross-Entropy Loss)的基本概念与程序代码

交叉熵损失函数&#xff08;Cross-Entropy Loss&#xff09;是机器学习和深度学习中常用的损失函数之一&#xff0c;用于分类问题。其基本概念如下&#xff1a; 1. 基本解释&#xff1a; 交叉熵损失函数衡量了模型预测的概率分布与真实概率分布之间的差异。在分类问题中&…

【Tauri】(1):使用Tauri1.5版本,进行桌面应用开发,在windows,linux进行桌面GUI应用程序开发,可以打包成功,使用 vite 最方便

1&#xff0c;视频地址&#xff1a; https://www.bilibili.com/video/BV1Pz421d7s4/ 【Tauri】&#xff08;1&#xff09;&#xff1a;使用Tauri1.5版本&#xff0c;进行桌面应用开发&#xff0c;在windows&#xff0c;linux进行桌面GUI应用程序开发&#xff0c;可以打包成功&…

【Qt】qt常用控件之QIcon 以及 qrc机制设置图片路径(QtCreator)

文章目录 1. QIcon / windowIcon2. setIcon() 与 setwindowIcon()2.1 setIcon() 介绍与使用2.2 setWindowIcon 介绍与使用 3. 路径问题 & qrc机制的引入3.1 绝对路径 / 相对路径 的问题3.2 qrc机制3.3 在QtCreator下利用qrc机制引入图片 1. QIcon / windowIcon QIcon QIco…

《SQLi-Labs》05. Less 29~37

title: 《SQLi-Labs》05. Less 29~37 date: 2024-01-17 22:49:10 updated: 2024-02-12 18:09:10 categories: WriteUp&#xff1a;Security-Lab excerpt: HTTP 参数污染&#xff0c;联合注入、宽字节注入。 comments: false tags: top_image: /images/backimg/SunsetClimbing.p…

限制资源使用

限制资源使用 您需要显示对服务器资源的访问来保护Web应用程序和应用程序数据不受未授权用户的访问。在Java EE Web应用程序中,您可以通过在应用服务器中创建用户和用户组来保护资源免受未经授权的访问。您可以为应用程序定义角色并在部署过程中将角色分配给用户。 1. 创建授权…

Zig、C、Rust的Pk1

Zig、C、Rust的Pk1 github.com上看到“A basic comparitive analysis of C, C, Rust, and Zig.”&#xff1a;https://github.com/CoalNova/BasicCompare/tree/main 里边的代码是9个月之前的&#xff0c;用现在的zig 0.11.0 及0.12-dev都无法通过编译(具体为&#xff1a;zig-w…

Decian 12.x基于LNMP安装phpIPAM(IP管理系统)

phpipam是一个开源Web IP地址管理应用程序&#xff08;IPAM&#xff09;。其目标是提供轻便&#xff0c;且有用的IP地址管理系统。它是基于PHP的应用程序&#xff0c;具有MySQL数据库后端&#xff0c;使用jQuery库&#xff0c;ajax和HTML5 / CSS3功能。 在Debian 12中&…