三分钟带你了解什么是 Headless UI (含demo)

news/2025/11/25 14:40:11/文章来源:https://www.cnblogs.com/sexintercourse/p/19268410

三分钟带你了解什么是 Headless UI (含demo)

三分钟带你了解什么是 Headless UI (含demo)

 
2024-01-037,088阅读4分钟
 

前言

首先,让我们直接看一个需求场景

在 UI 评审的时候,UI 同学希望我们实现一个这样的TabsA

image.png

然而我们平时用的 Tabs 长这样

image.png

这时你想怎么做

1.!important 直接覆盖 Ant Design 样式。

如果 UI 改造较简单,我们第一反应是直接覆盖 Ant Design 样式,可是当某些时候 Ant Design 组件的dom节点的组成已经无法满足我们覆盖 css 样式的改造,这时怎么做

2.重写一个 Tabs 组件

这个可以暂时解决该问题

可是如果后续 UI 又出了一个这样的 TabsB 需求

image.png

这时我们该怎么办,第一反应可能是在我们重写的 Tabs 组件里做两套 css 样式,根据不同情况展示出不同样式,可是如果后续又出了一款新的 UI 我们的代码会变得越来越冗长、复杂、难以理解,而且自己维护的组件可能会遇到一些浏览器兼容问题,数据上的边界条件处理考虑不周导致的未知 bug 等等,这些问题可能都会让自己决定放弃,还是使用成熟的组件库框架 Ant Design 比较好,只能继续去和 UI 沟通使用通用的组件,然而这会在某些程度上限制我们系统 UI 界面的设计灵活性。

Headless UI 可以帮助我们解决以上问题

什么是 Headless UI?

Headless UI 是 Tailwind Labs 提供的一套开源组件库,github stars 22.9K

image.png

Headless UI 让我们第一时间联想到无头 UI,这不是很好理解,那么在此之前我们先了解一下 Headless Browser

A headless browser is a web browser without a graphical user interface.

可以看出 Headless Browser 是没有用户交互界面的浏览器,那么 Headless UI 也是类似的意思,指的是不提供样式的 UI 组件,相对于传统组件,如 Ant Design,element-ui 等,Headless UI 组件只处理状态变更、事件绑定、浏览器兼容性和无障碍访问等功能,唯独就是缺少了样式,这是 Headless UI 的核心特点。

Headless UI 的设计思想

对于传统组件,我们在 A 页面和 B 页面都是使用的一套样式,难以去自定义一些 UI 样式,在 Headless UI 中我们可以在 A 页面和 B 页面结合不同的 css 去实现不同的 Tabs, 即组件的核心逻辑和样式解耦,可以灵活实现TabsA 和 TabsB 两套不同的 UI 样式

image.png

实现代码

codesandbox.io/p/devbox/he…

基于 Headless UI 思想的进一步思考

可以看到 demo 里有两种不同的 dialog,dialog 里有不同的 tab, 但是他们只是 UI 不同, 逻辑层相同,所以我们可以将逻辑抽离出来,封装成 vue3 的一个 hook, 这样两个 dialog 可以使用同一个 hook, 去实现两个不同的 dialog。

 
import { ref } from "vue";
import {
  StarOutlined,
  GlobalOutlined,
  PictureOutlined,
  ShopOutlined,
} from "@ant-design/icons-vue";
export const useModal = () => {
  const visible = ref(false);
  const title = "弹窗的标题";
  const contentText = "这有一个tabs";
  const tabList = [
    {
      tab: "推荐",
      icon: StarOutlined,
      content: "这是推荐content",
    },
    {
      tab: "美食",
      content: "这是美食content",
      icon: ShopOutlined,
    },
    {
      tab: "影视",
      content: "这是影视content",
      icon: PictureOutlined,
    },
    {
      tab: "旅行",
      content: "这是旅行content",
      icon: GlobalOutlined,
    },
  ];

  const onOk = () => {
    visible.value = false;
  };

  const onShow = () => {
    visible.value = true;
  };

  return {
    onOk,
    visible,
    title,
    contentText,
    tabList,
    onShow,
  };
};

image.png

image.png

上面的场景只是一个 dialog 的抽象,结合了 Headless UI 核心思想, 但实际上在很多业务场景中可以带给我们启发,比如在实现一个业务通用组件的时候,我们可以将组件的关注点分离,实现逻辑层抽离为 hook, UI 层单独实现。

典型的业务场景

PC Mobile

对于 PC 跟 mobile 场景来说,它实际上是两套不同的 UI,但是它需要共同共用同一套的业务逻辑,所以在这种场景下,一般来说可以使用上面说到的 hooks

组件库

对于通用业务组件,能否沉淀一套 Headless UI 组件库

优缺点

优点

  • 有利于单元测试:只关心逻辑层,代码简洁,无需关注 UI
  • UI灵活性:逻辑与 UI 解耦

缺点

  • 对开发者能力要求高,需要较强的组件抽象设计能力
  • UI 层完全自定义,存在一定开发成本

react 相关流行的 headless ui 库 github.com/chakra-ui/c…

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

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

相关文章

PDF超级助手软件下载安装教程_免费PDF编辑工具使用指南

软件介绍 在日常办公和学习中,PDF文件的使用频率仅次于Word、Excel、PPT等办公软件。无论是文档归档、资料分享还是合同签署,PDF都扮演着重要角色。但市面上大多数PDF编辑软件要么需要付费,要么只能在线使用,功能受…

Vue3快速笔记

vue3快速笔记参考地址:https://blog.csdn.net/sq91fra/article/details/135963246在vue3中,一个vue组件必不可少的标签只有<template>,其余两个都可以省略基础示例: 插值语法演示// App.vue<script setup>…

详细介绍:技术实践:在基于 RISC-V 的 ESP32 上运行 MQTT over QUIC

详细介绍:技术实践:在基于 RISC-V 的 ESP32 上运行 MQTT over QUICpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

python-IPO模型

1、开始/结束为如下形状图形2、输入/输出为如下形状图形3、中间涉及到的处理过程使用如下图形典型的IPO流程

搭建vue前端项目

一、创建项目文件夹 demo mkdir demo二、创建package.json 模式1:交互模式(默认) npm init# 1 package name 项目名称(必须小写,不能有空格,可用连字符 -) 默认当前文件夹名称 # 2 version: (1.0.0) …

2025厦门十大正规留学机构有哪些

2025厦门十大正规留学机构有哪些一、厦门留学机构如何选?这些疑问你有吗?作为一位拥有15年经验的国际教育规划师,我经常被厦门的学生和家长问及如何选择留学中介。在2025年10月23日的今天,留学市场日益复杂,许多人…

完整教程:C++ 模板进阶

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025广州有哪些办理出国留学机构

2025广州有哪些办理出国留学机构一、 广州留学中介怎么选?这些疑问你有吗?作为从事国际教育规划师工作已有十年的专业人士,我经常被广州的学生和家长问及如何选择留学中介。在2025年的今天,留学市场愈发多元,但选…

windows下 自动检测网络状态,并重连至指定wifi的脚本

1、新建bat文件 @echo off chcp 65001 >nul 2>&1 setlocal enabledelayedexpansionREM ===== 配置参数 ===== shell:startup REM wifi_name 要连接的无线网名称 set wifi_name=wifiname REM test_interval …

2025港澳留学中介排名

2025港澳留学中介排名作为从事国际教育规划工作逾十二年的专业人士,我时常遇到家长和学生们提出各类关于港澳留学中介选择的疑问。2025年,随着全球留学市场的复苏,港澳地区作为近水楼台的教育高地,关注度持续攀升。…

2025北京留学中介机构名单

2025北京留学中介机构名单一、北京留学中介怎么选?这份排名帮你避开坑洼2025年,计划出国留学的北京家庭,面对市场上众多的中介机构,是否感到无从下手?究竟北京本地的留学中介哪家口碑更胜一筹?想要申请美国顶尖名…

2025年金刚砂耐磨地坪材料搅拌机制造企业权威推荐榜单:石墨增碳剂搅拌机/塑料粉混合机/石墨粉搅拌机源头厂家精选

金刚砂耐磨地坪材料作为工业地坪的核心选择,其搅拌设备的混合均匀度与生产效率直接关系到材料性能与施工质量。根据建材机械行业数据统计,2024年中国干粉砂浆设备市场规模已突破80亿元,其中搅拌机在生产线中的价值占…

2025年武汉优质的华新水泥生产厂家推荐榜单,华新水泥有哪些鑫俊熙层层把关品质优

行业背景与评选标准 随着武汉城市建设步伐加快,华新水泥作为基础建材的重要品类,其供应商选择备受关注。本文基于企业生产能力、产品质量、服务体系及市场口碑等维度,对武汉地区华新水泥供应商进行综合评估,旨在为…

计算机视觉:pyqt5+yoloV5目标检测平台 python实战 torch 目标识别 大数据项目 目标跟踪(建议收藏)✅ - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

odoo12 跟踪所有的模型调用的onchange 方法

明白,你现在使用的是 Odoo 12,它的 onchange 机制确实和 Odoo 13+ 完全不同。 你贴出的 Odoo 12 的源码: def _onchange_eval(self, field_name, onchange, result):...在 Odoo 12 中,onchange 方法的核心逻辑集中…

对于高增量数据库的解决方案记录(暂时修改)

对于高增量数据库的解决方案记录(暂时修改)ALTER TABLE t_paper_question MODIFY paper_id varchar(32) NOT NULL COMMENT 试卷; -- 先删除原主键 ALTER TABLE t_paper_question DROP PRIMARY KEY; -- 添加新复合主键…

2025年北京阅卷考试软件公司权威推荐榜单:自动阅卷软件/网上阅卷的软件/答题卡扫描源头公司精选

数据显示,2025年中国在线教育市场规模预计突破6000亿元,其中超过90%的高校已部署或正在升级在线考试系统。在这一背景下,北京阅卷考试软件公司凭借其创新的技术和服务,正推动着教育评价体系的智能化变革。 本文将基…

2025年11月五大GEO优化公司:技术融合驱动增长新生态

随着AI大模型与全域搜索技术深度融合,GEO(全域搜索优化)已成为企业突破流量边界、实现精准增长的核心抓手。数据显示,2025年GEO优化驱动的全域营销转化效率较传统搜索模式提升4.0倍,核心场景首屏覆盖率平均提升70…

《基于IPD流程的研发项目管理》公开课(2025年12月12-13日)

《基于IPD流程的研发项目管理》公开课(2025年12月12-13日)【课程背景】 随着国内产品创新环境的逐渐形成,许多企业管理者创新意识逐步提升,产品研发项目管理的规范性被提上日程,研发的效率和质量、成本等因素引起…

HarmonyOS应用性能调优与内存管理实战 - 指南

HarmonyOS应用性能调优与内存管理实战 - 指南2025-11-25 14:22 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…