前端样式库推广——TailwindCss

06-01 1841阅读

官方网址: https://tailwindcss.com/docs/installation/using-vite

中文官方文档:https://www.tailwindcss.cn/

github地址:tailwindcss

正在使用tailwindcss的网站:https://tailwindcss.com/showcase

一看github,竟然有高达86.5+stars,这库不简单

它就是近几年很流行的 “原子化CSS框架” ——TailwindCss!

前端样式库推广——TailwindCss

tailwindcss

  • 一、TailwindCss功能展示
  • 二、有什么优势?
    • 1. 原子化css+高度定制化
    • 2. 支持伪类写法
    • 3. 强大的响应式
    • 三、相关辅助插件推荐
      • 1. Tailwind CSS IntelliSense 补全+提示
      • 2. 加强可读性-headwind (vscode)
      • 3. clsx的额外拓展
      • 4. tailwind-merge
      • 四、实战可能的问题
        • 1. Design tokens 与 Tailwindcss 结合使用
        • 2. 动态样式
        • 3. 公共样式的复用问题
        • 总结

          一、TailwindCss功能展示

          相信看了上图+以下效果之后,就了解这个库了,实质就是对于css写法进行优化的库,让开发重点关注html页面编写,不必将关注点切到css文件。

          前端样式库推广——TailwindCss

          二、有什么优势?

          1. 原子化css+高度定制化

          原子化即指单一原则,针对最小单位的css,它只对应一条具体的样式。

          而TailwindCSS其实就是一个聚合了很多个原子类的库,提供了大量系统预设类名。

          前端样式库推广——TailwindCss

          2. 支持伪类写法

          例如hover:、focus:等,效果如下:前端样式库推广——TailwindCss

          而平常使用的内联Style中无法支持 ,也就是 hover: 等状态下的样式,必须在另外的css文件中编写。

          3. 强大的响应式

          TailwindCSS 提供响应式处理,例如sm:,md:,lg:,实现在不同宽度屏幕下的样式

          产物单位会自动转换成rem,当然也可以是其它比如em或者px等。

          tailwindcss vs 手写媒体查询

          同样是实现多列布局对各个屏幕尺寸大小的适配,左右对比一下,可见优劣

          • display: grid: 使用grid布局
          • grid-cols-x:表示每行有x个

            前端样式库推广——TailwindCss

            是不是少写很多行代码,懒癌党狂喜~~

            对于需要特定数值的样式如宽高、字体大小和边距等,TailwindCSS提供的工具类默认为响应式,如 p-4 实际上是padding: 1rem。而对于特定值可以这样用:p-[12px],bg-[#fff]。

            也可以在配置文件手动预设一些值。

            三、相关辅助插件推荐

            1. Tailwind CSS IntelliSense 补全+提示

            官方给用户贴心地提供了对应的vscode插件,可以快速选择并提示css原用法:

            前端样式库推广——TailwindCss

            2. 加强可读性-headwind (vscode)

            • 竖着写
            • headwind自动排序className

              前端样式库推广——TailwindCss

              3. clsx的额外拓展

              • 基本拼接:将多个类名直接拼接
                import clsx from 'clsx';
                const MyComponent = () => {
                    const classes = clsx('class1', 'class2');
                    return classes}{'这是一个带有组合类名的元素'};
                };
                export default MyComponent;
                
                • 条件拼接:可根据特定条件动态拼接,默认为true时拼接false时不做拼接
                  import clsx from 'clsx';
                  const MyButtonComponent = ({ isActive }) => {
                      const classes = clsx('button', { 'active': isActive });
                      return classes}{'这是一个按钮'};
                  };
                  export default MyButtonComponent;
                  
                  • 多条件拼接:支持同时拼接多个条件的类名,原理同上
                    import clsx from 'clsx';
                    const MyButtonComponent = ({ isActive, isLarge }) => {
                        const classes = clsx('button', {
                            'active': isActive,
                            'large': isLarge
                        });
                        return classes}{'这是一个按钮'};
                    };
                    export default MyButtonComponent;
                    

                    4. tailwind-merge

                    解决多个原子CSS结合时的冲突,可以清除冗余的类名,只保留最后生效的。

                    import clsx from 'clsx';
                    import { twMerge } from 'tailwind-merge'
                    const MyComponent = () => {
                        const classes = twMerge('px-2 py-1 bg-red hover:bg-green', 'p-3 bg-[#ffffff]');
                        
                        return classes}{'组合类'};
                        /*'hover:bg-green p-3 bg-[#ffffff]'*/
                    };
                    export default MyComponent;
                    

                    可与clsx结合使用:twMerge(clsx( ))

                    四、实战可能的问题

                    1. Design tokens 与 Tailwindcss 结合使用

                    design-tokens.json:

                    {
                        "color": {
                            "primary": "#4f46e5",
                            "secondary": "#ec4899"
                        },
                        "spacing": {
                            "small": "8px",
                            "medium": "16px",
                            "large": "24px"
                        }
                    }
                    

                    配置文件tailwindcss.config.js

                    const designTokens = require('./design-tokens.json');
                    module.exports = {
                      theme: {
                        colors: {
                          primary: designTokens.color.primary,
                          secondary: designTokens.color.secondary
                        },
                        spacing: {
                          sm: designTokens.spacing.small,
                          md: designTokens.spacing.medium,
                          lg: designTokens.spacing.large
                        }
                      }
                    };
                    

                    2. 动态样式

                    • 控制单条样式

                      例如用isTrue控制border和py

                      const Button = ({ isTrue }) => {
                          return (
                              `
                                      ${isTrue ? 'border-[1px]' : 'border-2'}
                                      ${isTrue ? 'py-1' : 'py-3'}
                                  `}
                              
                                 label
                              
                          )
                      }
                      
                      • 失效写法

                        此时使用变量来控制盒子宽度和字体颜色就会失效了:

                        const Div = ({ width, color }) => {
                            return `w-[${width}px] text-${color}`}
                        }
                        

                        以上写法暂不支持,样式会失效,是因为TailwindCSS是在构建时按需生成类名以及相应的样式,这种运行时生成的无法被检测到。

                        正确写法:

                        const Div = ({ width, color }) => {
                            return { width, color }}
                        }
                        

                        3. 公共样式的复用问题

                        设计初衷:不要过早抽象,相对独立维护

                        官方的推荐做法

                        重复多使用jsx+循环,也可以利用代码编辑器快速同时编辑多个className

                        前端样式库推广——TailwindCss

                        总结

                        tailwindcss:

                        1. 关注当前页面,不必关注类名
                        2. 高效处理响应式和伪类
                        3. 与内联style类似,各样式独立,不必担心复用问题,维护性强

                        tip:

                        常用工具类普遍好记,如grid就是 display: gird , relative就是 position: relative , 但是有一些css和tailwindcss写法出入比较大的,比如width,写法 w-[100px]

                        可以边写边在官方文档ctrl+k查找,基本两遍也就记住了~

                        前端样式库推广——TailwindCss

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码