当前位置: 首页 > 科技观察

为什么使用TailwindCss框架

时间:2023-03-14 09:05:28 科技观察

简单总结:发现问题:项目中css代码痛点.mock{margin:auto;字体大小:16px;//...mock

上面的代码只是一个例子。在大多数情况下,您应该编写一个类,然后放入一堆样式。这样写多了,你会感觉到一些痛点,例如:1)取名难。如果节点结构太多,真的很难取名。当然,我们可以使用一些规范或者选择器来避免一些命名问题。2)当需要用JS控制样式时,需要另外写一个类,尤其是交互比较多的场景。3)组件复用大家都懂,但是样式复用很少见,导致代码冗余较多。4)全球污染。其实很多工具都可以帮我们自动解决这个问题。5)死码问题。JS我们使用treeshaking来移除无用代码以减小文件大小,但是如何移除CSS?尤其是当项目变大的时候,无用的CSS代码总会出现。6)插入样式表的顺序会影响CSS的实际应用方式。一、TailwindCSS简介Tailwind可以快速地为HTML元素添加样式,并提供大量开箱即用的设计样式。tailwindcss是一个基于比组件更小、更灵活的工具思想的CSS框架。简单的说,就是用类来保证灵活性和方便自定义组件,而不是基于组件进行个性化。官网:https://www.tailwindcss.cn/如果你没见过Tailwind的实际应用,可以看看这个:HelloWorld
这里的类名体现了Tailwind的定义:一个包含多个预定义类(所谓的工具类)的集合。您无需编写基本的CSS样式规则,只需在HTML中直接应用预定义的类名即可。有很多这样的类名。以下列表显示了一些类别和相应的示例:1)背景(bg-gray-200,bg-gradient-to-bl)2)灵活布局(flex-1,flex-row)3)网格布局(grid-cols-1,col-span-4)4)Padding(p-0,p-1)5)Size(w-1,h-1)在开发大型应用时,每个HTML元素都充满了一堆Tailwind工具类名.helloworld
问题:我们如何组织这些类名?也许我们需要创建并遵循排序规则。解决方案:一些HTML元素使用了很多样式。在这种情况下,您应该考虑将样式与HTML标记分开,并将它们放在一个单独的文件中。这样,我们就可以组织样式并增强它们的可读性。您不能将CSS的所有功能“打包”到一个名为class的HTML标记属性中,Tailwind也不能。这样做只会使HTML结构膨胀。@apply对于上面提到的问题,Tailwind允许我们在单个CSS文件中使用它们的类名:.header{@applybg-red-200w-4text-gray-400rounded-smborder-2;}比如据说项目中的按钮都有常用的圆角、内边距、字体等,这样我们就可以封装这么一个类:.btn{@applyp-8rounded-xlfont-semibold;}二、使用Tailwind使用CSS的原因1.超小的文件大小=令人难以置信的性能在开发模式下,Tailwind的输出大小非常大。这是设计使然:在此阶段生成每个可能的类,因此当您想要使用某些东西时,您不必等待进程完成构建。但是,一旦TailwindCSS进入生产模式,所有未使用PurgeCSS工具的类都会被清除。这是通过在项目文件中搜索类名来实现的,只保留那些被使用的类名。您可以在清除数组中的tailwind.config.js中配置将搜索哪些文件路径。//tailwind.config.jsmodule.exports={purge:["./src/**/*.html","./src/**/*.vue",'./src/**/*.js'],theme:{},variants:{},plugins:[],}2.原型设计和快速构建使用常规SCSS,您需要为页面上的每个元素编写自定义类。虽然这提供了更好的控制,但编写自定义类会花费很多时间:您必须在HTML中添加类,在CSS中创建它,然后以长格式写出每个属性。您必须等待CSS构建才能看到结果-而且,如果您需要进行更多更改,则每次都需要重新构建,这可能会花费几秒钟并打断您的流程。TailwindCSS消除了这些额外的步骤,并在设置元素样式时提供了一种简单、快速的开发体验。您可以看到要设置样式的元素,使用速记添加所需的属性,无需等待CSS文件包即可快速更改。所以只要专注于一个地方,不需要频繁切换不同的文件,整个过程感觉非常流畅。Foobar世界,您好!

3.消除作用域泄漏人们之所以喜欢BEM以及它在今天如此流行的原因是命名系统类被构建来表示组件的结构。在使其易于阅读和理解的同时,开发人员也受益于这种结构:由于布局易于理解,因此可以在不使用CSS选择器的情况下编写类。如下://this.block{&__element{...}&__element--modifier{...}}//notthis.block{&>.element{&.modifier{...}}}CSS选择器问题是它们给CSS带来了复杂性:组件变得非常依赖于特定的HTML结构。由于常见的CSS类(例如.container)可以重复多次,使用这些名称可能会导致重叠,因此更改一个类会影响许多其他类。这是我们使用BEM的主要原因之一,因为它使结构清晰并将每个类扁平化到顶级范围,因此它们不相互依赖。如果没有这样的CSS方法,开发可能会很头疼,它的简单性意味着其他人可以更容易地理解它。3.为什么Tailwindcss这么受欢迎?NPM.DEVTOOL中的TailwindCSStailwind标签完整地址:https://npm.devtool.tech/tailwindcssTailwindCSS现在用于项目开发。在这里说说我的感受吧。TailwindCSS是因为一个类代表一个CSS属性。原子CSS(AtomicCSS),一种细粒度的CSS解决方案,是有争议的。1、四粒度点击点击点击越往下封装,粒度越大,越抽象,灵活性越低,但灵活性往往与开发工作量成反比是的,更高的灵活性意味着更多的工作需要由开发者自己处理。如何平衡开发工作量和灵活性之间的关系就显得尤为重要。因为涉及到css库的选择,其中BootStrap库提供了更细粒度的3种形式。给定一个固定的样式,开发者如果需要自定义样式就必须重写样式,而tailwind提供粒度2-formatomicstyle更多的是提供一个规范,然后留给开发者更多的自由度,由开发者组装风格。2.一些问题的解答Tailwindcss为什么流行,无非是更好的原子化CSS。在国外如火如荼,但在国内论坛上争议很大。前几天在看前端大佬的博客上看到一篇关于Tailwindcss的文章,但是下面评论很多。CSS有什么区别,你不就是少写几句吗?大部分人的想法应该是这样的:只针对text-center,虽然提供了一些便利,但不足以拉开差距。如果只是一个简单的原子CSS,好用但不引人注目。但它并不止于此。1.方便:text-center,grid-cols-3也许一个text-center不足以让你觉得它提供了很多便利,但是对于一个三等分的grid属性来说,一个grid-cols-3和shadow是绝对方便。.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr));}2.语义:text-lg,text-white,ring,animate-spin`text-lg,oneFor比较大的字体,如果设置内联样式,肯定很麻烦:我要设计比较大的字体,那么设计什么字号,用什么单位。还有:text-white:白色的颜色值是多少?ring:我想给这个按钮加一个圆圈?animate-spin:如何制作动画?3.响应式:工作中会遇到的响应式布局问题,也是上次头条面试问到的问题。响应式布局,大量子元素,大屏一分为三,中屏一分为二,小屏一分为二?通过网格布局很容易实现,但是很麻烦@media(min-width:1024px){.container{grid-template-columns:repeat(3,minmax(0,1fr));}}@media(min-width:768px){.container{grid-template-columns:repeat(2,minmax(0,1fr));}}.conainer{display:grid;gap:1rem;}用tailwind呢?只要只有一行,就会问你效率高不高.4.修饰符各种伪类、深色模式、响应式设计等修饰符作为前缀的设计真的深得我心Q2:既然TailwindCSS这么好用,难道就不能摆脱手写的CSS吗?很遗憾,不能。但是虽然你不能摆脱手写的CSS,基本上写不了几行,一个d以下是很常见的情况。1.复杂选择器当鼠标悬停在父元素上时,子元素的样式控件.container:hover.item{}2.CSSfunction.body{height:calc(100vh-6rem)}3.多属性复杂使用.item{@applyp-2border-bflexjustify-betweenfont-mono;}Q3:创建新的内存负担问题见仁见智,Vue的模板中经常出现这种问题句法。很多人自然会排斥一些命名约定,尤其是自己不喜欢的约定,这是可以理解的。早期确实会边看文档GlobalSearch:TailwindCSSpropertysearch边开发网页。现在借助浏览器插件,熟能生巧的体验,再也不用翻文档了。1.TailwindCSSIntelliSense(vscode)智能补全代码提示前期经常花时间翻文档,而不是手写CSS。原因有二:1、多写几个字母确实有点麻烦。我这回还是看文档比较好,全局搜索也不嫌麻烦;2.自己设置一个fontSize,padding,margin真的不知道设置多少,tailwindcss的约束比较大;过了一会儿,你会觉得:嗯,真香。4.Tailwindcss项目实践原来传统的写法是定义一个类,然后写需要的样式:.class1{font-size:18px;边距:10px;}.class2{字体大小:16px;红色;margin:10px;}这种写法有一些重复的样式,用AtomCSS代替可以减少部分代码冗余。将CSS编写为组件。乍一看tailwindcss的官网,大家肯定会觉得我用html写一个需要这么多类的样式不好。
“TailwindCSS是我在大型团队中看到的唯一框架。它易于定制,适用于任何设计,而且构建尺寸很小。”

SarahDayan高级工程师,Algolia其实我们可以利用AtomCSS的特性一次只做一件事,而这些类自由组合成我们想要的类,所以可以提供更高级别的通用样式以供重用。tailwind.confing.js配置文件/***自定义配置*默认配置参考https://unpkg.com/browse/tailwindcss@2.2.6/stubs/defaultConfig.stub.js*/module.exports={清除:["./src/**/*.html","./src/**/*.vue",'./src/**/*.jsx'],主题:{扩展:{fontFamily:{sans:["Inter","Roboto",'"SegoeUI"'],dincond:["DINCond-Black"]},fontSize:{'2.5':'0.625rem',//10px'3':'0.375rem',//12px'5.5xl':'3.25rem',//52px'4.5xl':'2.5rem',//40px},width:{'4.5':'1.125rem',//18px'10.5':'2.65rem',//42px'15':'3.75rem',//60px'18':'4.5rem',//74px'18.5':'4.625rem',//74px'23':'5.75rem'//92px},lineHeight:{'12':'3rem',//48px'15':'3.875rem',//62px'16':'4rem',//64px'14':'3.5rem',//56px"18":"4.625rem"//74px},padding:{'0.5':'0.125rem',//2px'5.5':'1.375rem',//22px'4.5':'1.125rem',//18px'0.75':'0.1875rem',//3px'7.5':'1.875rem'//30px},paddingBottom:{'4.5':'1.375rem'//22px},margin:{'4.5':'1.125rem',//18px'15':'3.75rem',//60px'21.25':'5.3125rem',//85px'11.5':'2.875rem',//46px'19':'4.75rem',//76px},marginTop:{'6.5':'1.625rem',//26px},spacing:{'3.5':'0.875rem',//14px'7.5':'1.875rem',//30px'9.5':'2.375rem',//38px//'15':'3.375rem',//54px'11.5':'2.875rem',//46px'23':'5.75rem',//92px'28':'7rem',//112px'98':'39rem',//624px},height:{'0.25':'0.0625rem',//1px'0.75':'0.1875rem',//3px'14':'3.5rem',//56px'10.5':'2.65rem'//42px},backgroundColor:{'primary-a100':'rgba(43,121,255,0.1)',},borderRadius:{'5.5':'1.375rem'},//22pxzIndex:{'6':6//z-index:6},screens:{'3xl':'1664px','4xl':'1792px'},scale:{'85':'.85',//0.85rem}}},plugins:[require("tailwindcss-theming")({variants:{light:true}})]};至此,我们了解了什么是TailwindCSS?如何使用TailwindCSS?TailwindCSS自定义和插件的使用。相信大家对TailwindCSS有了全面的了解