博客:https://www.mintimate.cn Mintimate’s Blog,只为与你分享
页面前端框架,真的是发展的很快。在前后端未分离的时代,我们经常提及的是 MVC 架构。然而,在纯前端领域,HTML、CSS 和 JavaScript 也可以被看作是一种类似的分层结构,它们构成了结构层、样式层和交互层。类比如下:
“三剑客”共同搭建起来页面前端的大hosue:
当然,如果每个项目都从头开始写CSS、JavaScript,显然是不太现实的,并且不利于样式和系统风格的统一,后期维护也会“跑断腿”。
所以,我们一般会封装样式为样式库,方便我们直接后续调用。比如,使用
当然,现在以及2023年了,我推荐可以尝试使用:
首先,需要注意⚠️:Tailwind CSS不采用传统的CSS规则书写,而是采用基于类的Utility-first方法。
基于类的Utility-first方法,是指通过组合大量低级实用类,来构建出高级组件和页面结构,而不是通过选择器等方法直接写入样式规则。类似于我们需要一个果篮,而这个果篮有多种不同水果🍅组成。
将CSS看作一套可重用的样式“工具”或模块,每个类只对应一个特定的样式效果,同时可以自定义,比如:我定义当前页面的bg-blue-500
对应的颜色定制为 yellow
,类似于送人时候,送两个果篮,一个果篮想放青苹果🍏,另外一个想放红苹果🍎。
正因为如此,TailwindCSS是需要编译的:
这就保证了Tailwind CSS可以实现高度定制化,同时输出效率也较高。
TailwindCSS自发布出,就支持原子化操作,当然TailwindCSS也在不断发展。其中:V2.0、V3.0和现在的V3.3算是比较大的版本。
参考更新日志发布的地址:https://tailwindcss.com/blog/tailwindcss-v2
重点是:
@apply
引入其他原子样式来构建自己的CSS样式;其实最重要的是支持@apply
来构建自己的CSS样式:
// 语义化创建一个Button样式
.btn {
@apply bg-indigo-500 hover:bg-indigo-600 focus:ring-2 focus:ring-indigo-200 focus:ring-opacity-50;
}
还有就是支持暗色标签:
<div class="bg-white dark:bg-black">
<h1 class="text-gray-900 dark:text-white">Dark mode</h1>
<p class="text-gray-500 dark:text-gray-300">
这样可以根据顶级HTML是否含有我们的Dark标识,切换样式
</p>
</div>
参考更新日志发布的地址:https://tailwindcss.com/blog/tailwindcss-v3
3.0,最重要的功能:
启动后,项目的启动速度大大提高。
其实优势和特点,上文就已经提及,这里做一个小的总结:
前文说过,TailwindCSS是典型的原子化CSS(Atomic),对比传统的语义化CSS(Semantic)还是有一些特点和区别。
举个官网的例子,开发一个消息提示:
如果使用的是语义化的开发,那么代码可能长这样:
<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>
但是,如果使用的是TailwindCSS,应该是这样的:
<div class="p-6 max-w-sm mx-auto bg-white rounded-xl shadow-lg flex items-center space-x-4">
<div class="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-slate-500">You have a new message!</p>
</div>
</div>
使用语义化的 CSS 类名有以下几个主要优势:
p-6、max-w-sm
等一目了然地表达了样式效果,甚至可以联想到最终的效果🤔。刚刚举得都是官网的例子,这里我举个我开发的例子,比如:我最近写了一个提示框,是这样的:
当然,要符合页面的设计,也做了亮色模式处理:
这个时候,我们使用TailWindCSS原子化处理,应该怎么设计?
通过上述的分析,我们可以很轻松地联想到关键词:bg-white dark:bg-gray-800 rounded-3xl shadow-md
,以及list-disc
、text-sky-500 dark:text-sky-300 decoration-indigo-400 underline underline-offset-4
;当然,这些都是在参考和学习了TailwindCSS文档后,才知道:
不要说什么学习TailwindCSS,从语义化CSS转换到原子化CSS,需要读官方文档、需要学习设计系统的知识。这年头主流的前端框架组件库,那个是一点都不需要学习?
之后,再进行分析: 需要放在一个容器布局上,所以我们需要使用gird
进行布局:
最后的代码:
<div class="md:flex">
<div class="p-5">
<div
class="uppercase tracking-wide text-2xl text-indigo-500 dark:text-indigo-200 font-semibold"
>
额外操作
</div>
<div
class="mt-2 text-slate-500 dark:text-slate-400 w-100">
<p class="text-lg font-medium">
<ul class="list-disc">
<li>你可以安装一个User-Agent切换插件,并将它设置为Edge Android,以此测试移动端的搜索;</li>
<li>浏览器会限制页面打开多页面,你<span
class="decoration-sky-400 text-pink-500 dark:text-pink-300">需要运行本网站打开多个标签页</span>;
</li>
<li>本网站可能存在广告,你可以<span
class="text-sky-500 dark:text-sky-300 decoration-indigo-400"
>点击广告测试浏览器的额外性能『滑稽😁』</span>ヾ(≧≦)〃
</li>
</ul>
</p>
</div>
</div>
</div>
效果也不错,看看移动端的效果:
其实TailwindCSS也广泛运用在各个UI库。
这里我再介绍一个组件UI库,方便直接开箱即用TailwindCSS。很早之前,个人项目就开始使用Vue3,但是目前Vue3的组件,大部分还是Alpha阶段。
比如:Vue2阶段很火的Element UI,目前我认为Element Plus还没发展到像2.0时候那样好用。而且我很不适应的地方:label
会被用来作为值,但label
这个单词本身并没有值的含义!
后来使用了Arco Design: https://arco.design/:
很不错的UI库和设计规范,不过我最近用的Nuxt3;Arco Desgin还在适配,所以其实这次还是推荐之前就推荐过的:NuxtUI: https://ui.nuxt.com/
基本上,组件就是基于TailwindCSS开发的,比如设置主题颜色:
export default defineAppConfig({
ui: {
primary: 'green',
gray: 'cool'
}
})
如果想从组件UI上直接上手TailwindCSS,那么使用NuxtUI是一个不错的选择。
Tailwind CSS通过提供大量预设样式类,极大简化了样式的编写。
开发者可以快速组合出自定义界面,提高开发效率。相比语义化CSS,原子化CSS类名方式更具扩展性,是未来CSS编写的发展趋势。
本文系统概述了从语义化到原子化的演进,以及如何上手使用Tailwind CSS。对于想采用新的CSS编写范式的开发者具有很强的参考价值。当然,更多的内容,还等这大家探索,或者有机会,出其他教程给大家。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。