0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Facebook开源StyleX如何在JavaScript中写CSS呢?

OSC开源社区 来源:OSC开源社区 2023-12-14 10:03 次阅读

Meta(原 Facebook)开源了全新的 CSS-in-JS 库 StyleX。

官方介绍道,StyleX 是一个富有表现力、具有确定性、可靠且可扩展的样式系统。它通过使用编译时 (compile-time) 工具融合了静态 CSS 的性能和可扩展性。 此外,StyleX 不仅仅是一个基于编译器的 CSS-in-JS 库,它经过精心设计,可以满足大型应用程序、可复用组件库和静态类型代码库的要求。Meta 旗下多款产品如 Facebook、WhatsApp、Instagram、Workplace、Threads 等都在使用 StyleX 作为其 CSS 样式解决方案。 StyleX 主要特性

快速:StyleX 在编译时和运行时都具备高效的性能。Babel 转换不会对构建过程产生显著影响。在运行时,StyleX 避免了使用 JavaScript 插入样式的开销,并仅在必要时高效地组合类名字符串。生成的 CSS 经过优化,确保即使是大型网站的样式也能被浏览器快速解析。

可扩展:StyleX 旨在适应像 Meta 这样的超大型代码库。通过原子构建和文件级缓存,Babel 插件能够处理数万个组件在编译时的样式处理。由于 StyleX 设计为封装样式,它允许在隔离环境中开发新组件,并期望一旦在其他组件中使用时能够可预测地呈现。

可预测性:StyleX 会自动管理 CSS 选择器的特异性,以确保生成的规则之间不会发生冲突。它为开发人员提供了一个可靠地应用样式的系统,并确保 “最后应用的样式始终生效”。

类型安全:使用 TypeScript 或 Flow 类型来约束组件接受的样式,每个样式属性和变量都具有完全的类型定义。这有助于提高代码的可读性和可维护性,同时减少潜在的错误和冲突。

样式去重:StyleX 鼓励在同一文件中编写样式和组件。这种方法有助于使样式在长期内更具可读性和可维护性。StyleX 能够利用静态分析和构建时工具来跨组件去重样式,并删除未使用的样式。

可测试性:StyleX 可以配置为输出调试类名,而不是功能性的原子类名。这可以用于生成快照,以便在对设计进行轻微更改时不会经常变化。通过这种方式,开发人员可以更轻松地测试和验证样式的正确性,从而提高开发效率和产品质量。

示例代码

import stylex from '@stylexjs/stylex';

const styles = stylex.create({
  root: {
    padding: 10,
  },
  element: {
    backgroundColor: 'red',
  },
});

const styleProps = stylex.apply(styles.root, styles.element);

下面是一个按钮组件的示例代码

import * as stylex from "@stylexjs/stylex";

const styles = stylex.create({
  base: {
    appearance: "none",
    borderWidth: 0,
    borderStyle: "none",
    backgroundColor: "blue",
    color: "white",
    borderRadius: 4,
    paddingBlock: 4,
    paddingInline: 8,
  },
});

export default function Button({
  onClick,
  children,
}: Readonly<{
  onClick: () => void;
  children: React.ReactNode;
}>) {
  return (
    
  );
}






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • javascript
    +关注

    关注

    0

    文章

    525

    浏览量

    53928
  • CSS
    CSS
    +关注

    关注

    0

    文章

    110

    浏览量

    14412
  • 选择器
    +关注

    关注

    0

    文章

    109

    浏览量

    14576
  • 静态分析
    +关注

    关注

    1

    文章

    41

    浏览量

    3900

原文标题:Facebook开源StyleX , 在JavaScript中写CSS

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SciChart—高性能的JavaScript图表和图形库

    使用 SciChart 的 JavaScript 图表库为您的 JS 应用程序发现终极解决方案。 使用 WebGL 创建动态、高速的图表和图形,非常适合实时处理复杂的数据可视化。使用我们强大而灵活
    的头像 发表于 01-22 10:15 77次阅读
    SciChart—高性能的<b class='flag-5'>JavaScript</b>图表和图形库

    Spire.XLS for JavaScript——多功能JavaScript电子表格库(一)

    Spire.XLS for JavaScript 是一款专为开发人员设计的 JavaScript Excel 工具库,支持在任何 JavaScript 环境下直接创建、读取、编辑和转换 Excel
    的头像 发表于 01-21 09:29 88次阅读
    Spire.XLS for <b class='flag-5'>JavaScript</b>——多功能<b class='flag-5'>JavaScript</b>电子表格库(一)

    javascript:void(0) 是否影响SEO优化

    使用 javascript:void(0) 确实可能对SEO优化产生负面影响 。以下是关于 javascript:void(0) 对SEO影响的具体分析: 搜索引擎爬虫的理解问题 搜索引擎爬虫(如
    的头像 发表于 12-31 16:08 190次阅读

    javascript:void(0) 的作用是什么

    javascript:void(0) 在 HTML 和 JavaScript 是一个常见的表达式,主要用来创建一个无操作的链接(通常是 标签)或者阻止默认事件处理。具体来说,它的作用有以下几点
    的头像 发表于 12-31 15:55 293次阅读

    何在播放视频过程插入音频

    ZDP14x0是一款基于开源GUI引擎的图像显示专用驱动芯片,可以通过串口或者SPI与其他芯片通信,且能播放视频。本文将介绍如何在播放视频过程插入音频。
    的头像 发表于 12-26 11:13 376次阅读
    如<b class='flag-5'>何在</b>播放视频过程<b class='flag-5'>中</b>插入音频

    开源能带我们走向何方

    开源大模型、开源数据库、开源框架、开源硬件......近些年,这些词汇不绝于耳。雷军说,好的代码像诗一样优美,自己大二时的代码就已经
    的头像 发表于 12-06 17:09 516次阅读

    Tailwind CSS v4.0发布首个Beta版本

    Tailwind CSS 是一个为快速开发而精心设计的原子类 CSS 框架,它提供了充满设计感和应用程序至上的能力来创建组件,它在最新的 2.0 版本中加入了暗黑模式,开箱即用。
    的头像 发表于 11-25 10:02 247次阅读
    Tailwind <b class='flag-5'>CSS</b> v4.0发布首个Beta版本

    研发都应该了解的如何在vite接入现代化css工程化方案

    好的css工程化方案可以增强我们项目的可维护性、提高样式的复用性、进行自动化处理等,在提高页面加载速度和性能的同时,我们可以有更多的精力进行js逻辑的处理。
    的头像 发表于 10-25 17:25 440次阅读

    何在Altium Designer快速定位器件

    想知道如何在Altium Designer快速定位器件嘛?
    的头像 发表于 10-12 09:28 4308次阅读
    如<b class='flag-5'>何在</b>Altium Designer<b class='flag-5'>中</b>快速定位器件

    基于CSS融合存储系统的自动化制造服务平台存储解决方案

    基于CSS融合存储系统的自动化制造服务平台存储解决方案
    的头像 发表于 09-10 10:15 394次阅读
    基于<b class='flag-5'>CSS</b>融合存储系统的自动化制造服务平台存储解决方案

    何在反激式拓扑实现软启动

    电子发烧友网站提供《如何在反激式拓扑实现软启动.pdf》资料免费下载
    发表于 09-04 11:09 0次下载
    如<b class='flag-5'>何在</b>反激式拓扑<b class='flag-5'>中</b>实现软启动

    bootstrap框架介绍

    Bootstrap概述 Bootstrap是一个开源的前端框架,由Twitter公司开发。它基于HTML、CSSJavaScript,提供了一套响应式、移动优先的组件和样式,可以帮助开发者快速构建网页。 1.2
    的头像 发表于 07-11 09:53 640次阅读

    芯海应用笔记:CSS34P16P(A)型应用说明文档

    CSS34P16P(A)是 USB Type-C 型控制器,它符合最新 USB Type-C 型和 PD 标准. CSS34P16 为适配器、车载充电器、移动电源等应用提供了一个完整的 USB
    发表于 05-16 14:46

    Arm新Arm Neoverse计算子系统(CSS):Arm Neoverse CSS V3和Arm Neoverse CSS N3

    Arm宣布了两款新的Arm Neoverse计算子系统(CSS),它们基于“迄今为止最好的一代Neoverse技术”。是什么让这些新产品在拥挤的计算技术领域脱颖而出? Arm的两个新Arm
    的头像 发表于 04-24 17:53 1175次阅读
    Arm新Arm Neoverse计算子系统(<b class='flag-5'>CSS</b>):Arm Neoverse <b class='flag-5'>CSS</b> V3和Arm Neoverse <b class='flag-5'>CSS</b> N3

    STM32L431CCT6频繁出现LSE CSS错误是什么原因导致的?

    STM32L431CCT6芯片,外部使用32.768k的晶振,匹配电容22pf。LSE作为RTC,LPUART1的时钟源,启用LSE CSS功能。经常会发生LSE CSS错误,在发生错误的时候没有
    发表于 03-28 09:01