使无头组件易于设计

使无头组件易于设计

无头组件只是一个无样式组件,还是还有更多内容?

网络已经通过要求定义样式来将样式与内容分开
在 css 中而不是 html 中。这种架构允许每个网页都采用全局
设计标准,无需定义任何特定于页面的样式。

随着网络演变成一个应用程序平台,开发人员寻找方法
他们不断增长的代码库更易于维护。如今,事实上的策略是
组织应用程序代码就是定义小型、轻量级的组件,这些组件可以
一起组成。因此,组件成为
中的组成单位现代网络开发。

为了封装,组件通常会同时定义 html 和 css。
虽然这使它们更容易创作,但它们也可能更难
紧密结合到现有的设计系统中。这一点尤其正确
对于从外部供应商进口的第三方组件。

无头组件通过重新引入
之间的分离来解决这一挑战内容和风格。然而现在分离是沿着组件边界的
反对 html 和 css 之间的关系。它们是创建出色的无头组件的关键
关键在于设计组件的接口,以便开发人员可以
清晰、轻松地应用自己的风格。

转发相关道具

从最基本的意义上来说,无头组件只是一个无样式的组件。
开发人员必须能够将自己的 css 应用到 html 元素中
组件定义.

对于简单的组件,这可能只是转发 classname 的问题
prop 到根元素,以便开发人员可以在他们的
中使用类选择器css.

如果你的组件与原生 html 元素具有相同的语义,你可以使用
来自 react 的 componentprops 类型,以确保所有相关的 props
可转发。请记住省略任何您不希望用户使用的道具
您的组件能够覆盖。

import { type componentprops } from 'react'function submitbutton({ ...props }: omit<componentprops, 'type'>) {  return 

登录后复制

提供预定义类

对于包含一个或多个子元素的组件,开发者可能会
想要单独设置每个元素的样式。

支持这一点的一个策略是依赖
css 组合器。
例如,无头画廊组件的样式可能如下:

/* root container */.gallery {}/* gallery items container */.gallery > ul {}/* gallery item */.gallery > ul > li {}/* next and previous buttons */.gallery button {}

登录后复制

但是这种方法产生了一个巨大的问题,因为现在
的内部 html 结构该组件是其公共 api 的一部分。这会阻止您修改
稍后构建,而不会破坏下游代码。

更好的策略是为每个主要子元素预定义类。这边
开发人员可以使用类选择器,而不依赖于任何特定的 html
结构:

.xyz-gallery {}.xyz-gallery-next-button {}.xyz-gallery-previous-button {}.xyz-gallery-items-container {}.xyz-gallery-item {}

登录后复制

记住给你的类添加前缀,这样它们就不会与
冲突开发者自己的风格。

支持自定义布局

提供预定义的类可能是使开发人员能够实现的最快方法
设置你的组件的样式。然而,这种方法的一个缺点是
html 结构无法自定义。

这可能并不重要。毕竟,纯 html 的使用方式已经相当灵活了
可以渲染。然而,有时开发人员会按顺序获取额外的 html
来完成某些设计。如果您查看几乎所有的源代码
网站,您可能会看到大量无语义的

元素,
其唯一目的是定义弹性或网格布局,直观地对子项进行分组
边框内的元素或创建新的堆叠上下文。

您可以通过将无头组件拆分为
来支持此类用例多个相关组件。这样开发者就可以自由添加自己的
将元素布局到组件。例如,开发人员可以嵌入 next 和
自定义 flexbox 容器中图库示例中的上一个按钮:

      {data.map((item) => (      {item.content}    ))}    

登录后复制

.gallery-items-container {}.gallery-buttons-container {  display: flex;  gap: 0.5rem;  justify-content: flex-end;}

登录后复制

这些类型的组件通常使用
实现要传递的上下文
它们之间的数据。他们需要更多的工作来设计、实施和
文档。然而,它们所带来的多功能性通常意味着额外的努力
值得。

允许组件被覆盖

少数用例需要无头组件管理布局
其子组件。一个例子可能是层次树视图
允许通过拖放对其项目进行重新排序。另一个用例可能是
允许单页应用程序用 a 替换默认的锚元素有助于客户端路由的自定义链接组件。

允许开发人员定义自定义布局的高级策略是

允许通过 props 覆盖正在渲染的实际子组件:

 
}}/>

登录后复制

这使开发人员可以完全控制每个子项中渲染的内容

组件,同时允许无头组件管理其整体
结构.

您甚至可以允许开发人员自定义组件的根元素

通过道具。例如,这个按钮组件允许开发者渲染它
作为其他东西:

import { type elementtype } from 'react'function headlessbutton({ as, ...props }: { as?: elementtype }) {  const component = as ?? 'button'  return }

登录后复制

例如,为了让辅助技术将按钮视为链接,

开发人员可以指定应该使用锚元素来渲染
按钮:

Actually a link

登录后复制

概括

无头组件比不包含任何组件的组件要多得多

风格。优秀的无头组件是完全可扩展的,并允许开发人员
自定义整个内部 html 结构。

以上就是使无头组件易于设计的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2854170.html

(0)
上一篇 2025年3月10日 14:46:37
下一篇 2025年2月28日 15:34:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 在 Reactjs 应用程序中查看过渡动画

    有一天,我想为网站创建快速从列表动画中删除项目的功能。这次跳过react transition group,尝试新的view transition,节省时间。 当很少有代码能做到这一点时,为什么要编写大量代码。 view transitio…

    2025年3月10日
    200
  • ⏰ 你的声音很重要 – CSS 调查现已开放!

    嘿? 本周五,Sprintfolio 将举办Designer + Dev Mixer。我正计划参加并且对此感到非常兴奋! 这将是与设计师和开发人员建立联系、交流见解并促进集体成长的绝佳机会。 我强烈推荐加入 – 完全免费!谁有兴…

    2025年3月10日
    200
  • ust-Know 高级 Tailwind CSS 实用程序可增强开发体验

    tailwind css 以其实用性优先的方法而闻名,使开发人员能够直接在 html 中创建高度可定制的设计。除了基础知识之外,掌握高级实用程序还可以显着增强您的开发工作流程,使其更快、更高效。在这里,我们将探索每个开发人员都应该知道的六个…

    2025年3月10日 编程技术
    200
  • 掌握 Web 动画:CSS 与未优化和优化的 JavaScript 性能

    网页动画可以显着改善用户体验,但如果实施不仔细,也会影响网站性能。在本文中,我将比较三种不同的方法来对大小脉冲的圆形元素进行动画处理。我将使用 css、未优化的 javascript 和优化的 javascript,并向您展示如何使用 ch…

    2025年3月10日
    200
  • 仅使用 CSS 实时测试 HTML 和 CSS 的实用方法

    最近,我公开了一个我为创建放射状设计而开发的 CSS 框架。在开发过程中,我遇到了一些挑战,包括测试不同的功能。我注意到 CSS linter 和其他工具不允许我了解为什么某些东西不起作用,即使没有基本错误。另一个典型的 CSS 问题是如何…

    2025年3月10日
    200
  • React 中的 CSS 冲突

    ui 是我们开始输入逻辑以完成前端之前的第一步。因此,我们编写标记,然后编写获得所需用户界面所需的基本样式。在编写标记时,我们必须创建有意义的类名来寻址和访问 html 标记并向其添加样式。通过简单的用户界面和不同的标签,我们可以或多或少轻…

    2025年3月10日 编程技术
    200
  • 免费 Vanilla CSS 模板的最佳网站

    这是最好的网站的综述,您可以在其中找到并下载免费的 css 模板。我们专注于不使用任何框架的普通 css 模板。这些高质量的项目将为您的网站、登陆页面、博客和作品集提供支持。 在线空间中有许多模板创建者。以下是让下面提到的这些人脱颖而出的原…

    2025年3月10日 编程技术
    200
  • 《Insect Particlizer》像素操作与 CSS 结合的实验

    canvas..多么美丽的名字,并不能表达我对这个api的喜爱程度,虽然一开始对我来说很糟糕,但经过一些尝试和错误,我理解了它,甚至尝试用它创建不常见的东西这让我的 ide 崩溃了好几次。这里的这个实验只是我在前端之旅中经常做的无数实验之一…

    2025年3月10日
    200
  • 我如何编写 CSS 选择器

    CSS 方法有很多,但我都讨厌它们。有些多(顺风等),有些少(BEM、OOCSS 等)。但归根结底,它们都有缺陷。 当然,人们使用这些方法有充分的理由,并且解决的许多问题我也遇到过。因此,在这篇文章中,我想写下我自己的关于如何保持 CSS …

    2025年3月10日
    200
  • CSSseudo-Classes and Pseudo-Elements: An In-Depth Look

    简介 嘿,了不起的人们。今天,我们将深入研究 css 中的伪类和伪元素的世界。这些是我们 css 工具包中的强大工具,可以帮助我们以独特的方式定位和设计元素,使我们的工作更加高效,使我们的网页更加动态。 我们将从基础知识开始,了解什么是伪类…

    2025年3月10日
    200

发表回复

登录后才能评论