iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >daisyUI解决TailwindCSS堆砌class问题详解
  • 312
分享到

daisyUI解决TailwindCSS堆砌class问题详解

2024-04-02 19:04:59 312人浏览 八月长安
摘要

目录? 写在前面?daisyUI概述? 丰富的资源? 对比TailwindCSS? 顽强的适用性? 快速上手? 自定义主题? 封装一个button组件? 写在最后? 写在前面 关于T

? 写在前面

关于TailwindCSS是什么这里就不多叭叭了,这里简要的说下TainwindCSS的一些问题,这就是一些缺点吧

  • 颗粒度太细,使html结构过于复杂,或者说实现某个效果需要使用的类名太多,不易读。
  • 对于未接触过TailwindCSS的同学来说,学习成本有些高。

daisyUI是一个CSS的组件库,可以说是TailwindCSS的插件,这个组件库避免了堆砌class名。

阅读这篇文章你可以收获如下内容:

  • daisyUI是什么?有什么用?
  • daisyUI如何自定义主题
  • 基于daisyUI封装一个button组件

?daisyUI概述

daisyUI是一个可定制的TailwindCSS的组件库,目前(发文日期)在GitHub中已经有12.8k的star数量。

它与现在常用的ElementUI或者AntDesign不同,它提供了一些类名,类似于Bootstrap,想要拿来即用的组件需要自己进行封装。

daisyUI官网中介绍了daisyUI的5个特点:

  • Tailwind CSS 的插件
  • 快速开发
  • 更纯净的 HTML
  • 深度自定义、可定制主题
  • 纯净 CSS、支持任意框架

官网截图如下

? 丰富的资源

daisyUI内置了29款主题,开发出的网站可以直接使用这些主题

除了这内置的29款主题,还支持自定义,可以参考。

daisyUI目前一共内置了47个组件,如下图:

? 对比TailwindCSS

daisyUI虽然是TailwindCSS插件,但是却有一点“反”TailwindCSS的意思,如果我们想要实现一个按钮,使用TailwindCSS的写法如下:

<a class="inline-block px-4 py-3
    text-sm font-semibold text-center
    text-white uppercase transition
    duration-200 ease-in-out bg-indiGo-600 
    rounded-md cursor-pointer
    hover:bg-indigo-700">Button</a>

而使用daisyUI的代码如下:

<a class="btn btn-primary">Button</a>

上面的代码实现了了一个按钮,可以明显看后者比前者更节省代码。

? 顽强的适用性

daisy是一个纯净的CSS组件,它几乎适用于所有的前端开发场景,我在官网截了个图

可以看到目前已经支持全部的前端开发场景。

? 快速上手

现在我们使用vue3+TS+Vite3创建要给项目,并在项目中应用daisyUI,首先就是通过Vite创建一个Vu3+TS的项目,创建过程如下:

这里我使用pnpm作为包管理工具,项目安装过程如下:

pnpm create vite
# project name -> daisyui-demo
# select a framework -> Vue
# select a variant -> vue+ts
cd daisyui-demo
pnpm install
code . # 使用vscode打开项目

安装完成之后我们在项目中安装一下TailwindCSS,daisyUI的使用需要TailwindCSS;过程如下:

pnpm install -D tailwindcss postcss autoprefixer
# 生成配置文件
pnpm tailwindcss init -p

修改一下tailwind.config配置文件,修改成下面这样的。

// tailwind.config.cjs

module.exports = {
  content: ['./index.html', './src*.{vue,js,ts,jsx,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [],
}

然后创建一个css文件,引入TailwindCSS的内容

// src/index.css
@tailwind base;
@tailwind components;
@tailwind utilities;

然后在main.ts中引入这个css:

import { createApp } from 'vue'
import './style.css'
// 引入前面添加的css
import './index.css'
import App from './App.vue'
createApp(App).mount('#app')

到这为止我们就安装好了我们TailwindCSS,现在来安装下daisyUI,过程如下:

pnpm i daisyui 

然后在修改一下tailwind.config配置文件,修改成下面这样的。


module.exports = {
  content: ['./index.html', './src*.{vue,js,ts,jsx,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [require('daisyui')],
}

就是把刚安装的daisyUI引入一下呀

现在这个就写完了,我们去App.vue中简单的使用一下这个UI组件。实例代码如下:

<script setup lang="ts">
const handleChangeTheme = () => {
  const html = document.getElementsByTagName('html')[0]
  const darkTheme = html.dataset.theme
  if (darkTheme === 'dark') {
    html.dataset.theme = 'light'
  } else {
    html.dataset.theme = 'dark'
  }
}
</script>
<template>
  <div class="button-container flex justify-center my-10">
    <button class="btn">Button</button>
    <button class="btn btn-primary">Button</button>
    <button class="btn btn-secondary">Button</button>
    <button class="btn btn-accent">Button</button>
    <button class="btn btn-ghost">Button</button>
    <button class="btn btn-link">Button</button>
  </div>
  <div class="flex justify-center my-10">
    <label class="swap swap-rotate">
      <!-- this hidden checkbox controls the state -->
      <input type="checkbox" @click="handleChangeTheme" />
      <!-- sun icon -->
      <svg
        class="swap-on fill-current w-10 h-10"
        xmlns="Http://www.w3.org/2000/svg"
        viewBox="0 0 24 24"
      >
        <path
          d="M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z"
        />
      </svg>
      <!-- moon icon -->
      <svg
        class="swap-off fill-current w-10 h-10"
        xmlns="http://www.w3.org/2000/svg"
        viewBox="0 0 24 24"
      >
        <path
          d="M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z"
        />
      </svg>
    </label>
  </div>
  <div class="flex justify-center">
    <div class="alert alert-success shadow-lg w-96">
      <div>
        <svg
          xmlns="http://www.w3.org/2000/svg"
          class="stroke-current flex-shrink-0 h-6 w-6"
          fill="none"
          viewBox="0 0 24 24"
        >
          <path
            stroke-linecap="round"
            stroke-linejoin="round"
            stroke-width="2"
            d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
          />
        </svg>
        <span>Your purchase has been confirmed!</span>
      </div>
    </div>
  </div>
</template>
<style scoped></style>

代码的运行效果如下:

这里我仅仅展示了暗色和亮色两个主题,其余主题也可以进行更换。

? 自定义主题

daisyUI有一个好玩的特性就是允许自定义主题,而且非常简单,只需要在tailwind.config.js中添加一个daisyui的配置项,增加一个themes数组即可,实例代码如下:


module.exports = {
  content: ['./index.html', './src*.{vue,js,ts,jsx,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [require('daisyui')],
  daisyui: {
    themes: [
      {
        // key为自定义主题名称
        'ywz-theme': {
          primary: '#fcaec1',
          secondary: '#64c619',
          accent: '#6fedac',
          neutral: '#281E29',
          info: '#83C2E2',
          success: '#1BC55F',
          warning: '#F0AA28',
          error: '#E24B4B',
          'base-100': '#EFEEF2',
          '--rounded-box': '1rem', // border radius rounded-box utility class, used in card and other large boxes
          '--rounded-btn': '0.5rem', // border radius rounded-btn utility class, used in buttons and similar element
          '--rounded-badge': '1.9rem', // border radius rounded-badge utility class, used in badges and similar
          '--animation-btn': '0.25s', // duration of animation when you click on button
          '--animation-input': '0.2s', // duration of animation for inputs like checkbox, toggle, radio, etc
          '--btn-text-case': 'uppercase', // set default text transfORM for buttons
          '--btn-focus-scale': '0.95', // scale transform of button when you focus on it
          '--border-btn': '1px', // border width of buttons
          '--tab-border': '1px', // border width of tabs
          '--tab-radius': '0.5rem', // border radius of tabs
        },
      },
    ],
  },
}

可以配置daisyUI提供的主题生成器,可以轻松实现自定义主题,自定义主题实用如下:

? 封装一个button组件

daisyUI是基于原始的CSS实现的,基本上所有的组件只有样式没有功能,现在就简单的封装一个button组件再来学习一下daisyUI。

首先定义一下目录结构,如下所示:

monorepo-demo
├── src
│   ├── components
│   │   ├── button
│   │   │   ├── index.ts
│   │   │   ├── src
│   │   │   │   └── YwzButton.vue
├── pnpm-lock.yaml
└── package.JSON

其中src/components/button/index.ts的内容如下:

import YwzButton from './src/YwzButton.vue'
export { YwzButton }

这里就执行了导入导出操作

主要代码如下:

src/components/button/src/YwzButton.vue

<script setup lang="ts">
import { computed } from 'vue'
interface Props {
  disabled?: boolean
  type?:'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'ghost' | 'link'
  outline?: boolean
  size?: 'lg' | 'md' | 'sm' | 'sx'
}
const props = defineProps<Props>()
const classComputed = computed(() => {
  const classList = []
  props.disabled && classList.push('btn-disabled')
  props.type && classList.push('btn-' + props.type)
  props.outline && classList.push('btn-outline')
  props.size && classList.push('btn-' + props.size)
  return classList
})
</script>
<template>
  <button class="btn" :class="classComputed">
    <!-- 默认插槽 -->
    <slot></slot>
  </button>
</template>
<style scoped></style>

使用这个组件也很简单,代码如下:

<script setup lang="ts">
import YwzButton from './components/button/src/YwzButton.vue'
</script>
<template>
  <div class="button-container flex justify-center my-10">
    <YwzButton type="error" outline size="lg">按钮</YwzButton>
  </div>
</template>
<style scoped></style>

? 写在最后

文章到这就结束了,daisyUI特别使用个人建站使用,尤其是对于没有设计来说,内置了很多的主题非常的方便。而且它的官方文档默认就支持中文,这一点对于英文不好的人来说非常的舒服了。

以上就是daisyUI解决TailwindCSS堆砌class问题详解的详细内容,更多关于daisyUI TailwindCSS堆砌class的资料请关注编程网其它相关文章!

--结束END--

本文标题: daisyUI解决TailwindCSS堆砌class问题详解

本文链接: https://www.lsjlt.com/news/164685.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • daisyUI解决TailwindCSS堆砌class问题详解
    目录 写在前面daisyUI概述 丰富的资源 对比TailwindCSS 顽强的适用性 快速上手 自定义主题 封装一个button组件 写在最后 写在前面 关于TailwindCSS...
    99+
    2024-04-02
  • reactjs学习解决unknownatrule@tailwindcss问题
    目录解决unknown at rule @tailwind cssReact配置Tailwindcss问题 步骤测试总结解决unknown at rule @tailwin...
    99+
    2023-02-12
    reactjs学习 unknown at rule @tailwind css
  • Java 详细讲解用堆解决Top-k问题
    目录1、什么是堆?堆结构大根堆 VS 小根堆大根堆(最大堆)小根堆(最小堆)优先级队列(PriorityQueue)2、top-k问题解决思路总结:要解决 top-k 问题,我们应该...
    99+
    2024-04-02
  • rabbitmq堆积问题怎么解决
    RabbitMQ堆积问题可以通过以下几种方式来解决: 增加消费者:可以通过增加消费者来提高消费速度,减少消息堆积。可以通过启动多个...
    99+
    2023-10-26
    rabbitmq
  • 堆排序怎么解决TopK问题
    本篇内容主要讲解“堆排序怎么解决TopK问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“堆排序怎么解决TopK问题”吧!在未排序的数组中找到第 k 个最大的元...
    99+
    2024-04-02
  • C语言解决堆栈括号匹配问题示例详解
    目录首先构建栈调用匹配函数代码调用1.括号匹配问题就是当遇到{( [这些左括号的时 将括号字符入栈 2.当遇到右括号时判断栈顶元素是不是与左括号匹配如果匹配就出栈 如果不匹配就直接结...
    99+
    2024-04-02
  • 解决问题:Class path contains multiple SLF4J bindings.
    最近在整合SpringBoot项目于Dubbo的时候,遇到Class path contains multiple SLF4J bindings的错误,具体报错如下所示: 读取报错信息可以知道,问题...
    99+
    2023-09-13
    java spring boot intellij-idea
  • windows堆栈平衡问题怎么解决
    解决Windows堆栈平衡问题的方法取决于具体的情况和根因。以下是一些可能的解决方法:1. 检查代码中的递归调用:如果代码中存在递归...
    99+
    2023-10-18
    windows
  • log4net堆栈溢出问题怎么解决
    Log4net的堆栈溢出问题可能是由于日志消息的递归输出或无限循环造成的。以下是一些可能的解决方案:1. 确保日志消息中没有无限循环...
    99+
    2023-09-16
    log4net
  • kafka怎么解决数据堆积问题
    Kafka是一种分布式的流处理平台,可以高效地处理大量的数据流。解决数据堆积问题,可以通过以下几种方式:1. 增加消费者数量:可以通...
    99+
    2023-10-21
    kafka
  • Java怎么用堆解决Top-k问题
    本篇内容介绍了“Java怎么用堆解决Top-k问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、什么是堆?堆结构堆其实就是一种二叉树,但...
    99+
    2023-06-30
  • C++中的堆和栈问题详细解析
    C++中的堆和栈问题详细解析在C++中,堆(Heap)和栈(Stack)是两个重要的概念,用于管理内存的分配和释放。本文将详细解析堆和栈的概念、区别以及使用时需要注意的问题,并提供具体的代码示例。堆和栈的定义堆和栈均属于计算机内存中的一部分...
    99+
    2023-10-22
    ) C++堆 ) C++栈 ) 堆和栈区别
  • C语言如何解决二叉堆问题
    这篇文章给大家分享的是有关C语言如何解决二叉堆问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、堆的概念1、概述堆是计算机科学中一类特殊的数据结构的统称。实现有很多,例如:大顶堆,小顶堆,斐波那契堆,左偏堆,...
    99+
    2023-06-26
  • C语言怎么用堆解决Topk问题
    这篇文章给大家分享的是有关C语言怎么用堆解决Topk问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言将详细讲解如何利用小根堆的方法解决TopK问题,这么多数据要处理,该算法时间复度居然只需TopK问题Top...
    99+
    2023-06-21
  • C语言 如何用堆解决Topk问题
    目录前言TopK问题解题方法代码实现与讲解运行结果函数解读PrintTopK 解读TestTopK 解读前言 本篇将详细讲解如何利用小根堆的方法解决TopK问题,这么多数据要处理, ...
    99+
    2024-04-02
  • java堆内存溢出问题怎么解决
    Java堆内存溢出问题的解决方法有以下几种: 增加堆内存大小:可以通过修改JVM的启动参数,增加堆内存的大小,例如增加-Xmx参...
    99+
    2023-10-27
    java
  • C语言堆结构处理TopK问题详解
    目录问题分析代码实现问题 在一百万个数据中,求出最大的k个数字,怎么效率高。 1. 将一百万个数据排序,承接上一篇的堆排序,时间复杂度为O(N * LogN)。但是显然这并不是最优解...
    99+
    2024-04-02
  • 解决使用IDEA时跳转到.class的问题
    IDEA时跳转到.class的解决项目背景:jdk1.8软件环境:IDEA问题:两个不同的项目,在A项目中写了一个实体类。B项目中引用。我想修改下实体类的内容,就在在B项目中CTRL...
    99+
    2024-04-02
  • SpringBoot:解决Property ‘spring.profiles‘ imported from location ‘class path resource 问题
    一、在学习SpringBoot配置profile的时候,.yml文件内容明明跟老师敲的一模一样,但还是报org.springframework.boot.context.config.InvalidConfigDataPropertyExc...
    99+
    2023-09-07
    spring boot spring java
  • driver-class-name: com.mysql.cj.jdbc.Driver代码爆红的解决问题
    在搭建运行springboot项目时,数据库驱动添加会报错。 而在此之前需要在pom.xml中添加mysql依赖,在多次寻求问题解决方法的过程中,我发现一个关键的说辞,就是: 我在mysql依赖中添加了版本号,而这个问题的出现很可能就是版...
    99+
    2023-08-18
    mysql java 数据库 spring boot maven
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作