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

    浏览量

    55984
  • CSS
    CSS
    +关注

    关注

    0

    文章

    110

    浏览量

    15357
  • 选择器
    +关注

    关注

    0

    文章

    110

    浏览量

    15051
  • 静态分析
    +关注

    关注

    1

    文章

    45

    浏览量

    4181

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开放原子开源基金会发布2025国高校开源育人案例集

    11月21日,在2025开放原子开发者大会开幕式上,开放原子开源基金会正式发布《2025国高校开源育人案例集》(简称“《案例集》”),涵盖29所高校和科研机构的35个开源育人优秀案例
    的头像 发表于 11-25 17:30 518次阅读

    何在栅极驱动板,将隔离侧的-15v电源转为可调的-15至-4v输出

    何在栅极驱动板,将隔离侧的-15v电源转为可调的-15至-4v输出
    发表于 09-22 17:20

    Arm正式取消Cortex命名!CPU向着高算力进发,Lumex CSS平台加持!

    电子发烧友网报道(文/黄晶晶)日前,在Arm Unlocked上海站技术论坛上,Arm重磅推出智能终端专属 Lumex CSS平台。Lumex CSS是一套专为旗舰级智能手机及下一代个人电脑加速其人
    的头像 发表于 09-17 08:25 2722次阅读
    Arm正式取消Cortex命名!CPU向着高算力进发,Lumex <b class='flag-5'>CSS</b>平台加持!

    何在 buildroot 的 rootfs 显示当前目录?

    何在 buildroot 的 rootfs 显示当前目录?
    发表于 09-03 07:02

    Arm Zena CSS加速软件和芯片开发进程

    Arm 控股有限公司(纳斯达克股票代码:ARM,以下简称 Arm)近期宣布推出 Arm Zena 计算子系统 (Compute Subsystems, CSS)。作为标准化且预先集成的计算平台
    的头像 发表于 08-25 16:22 1795次阅读

    何在下载程序时保护flash的用户数据不被覆盖?

    使用stm32cubeide或stm32cubeprogrammer烧程序,stlink下载器,芯片stm32h743,芯片内部flash的0x08100000地址写有用户数据,如何在重新烧
    发表于 08-14 06:38

    CSS6404L 在物联网设备的应用优势

    物联网设备对存储芯片的需求聚焦于低功耗、小尺寸、高可靠性与传输效率,Cascadeteq 的 CSS6404L 64Mb Quad-SPI Pseudo-SRAM 凭借差异化技术特性,在同类产品展现显著优势。以下从核心特性及竞品对比两方面解析其应用价值。
    的头像 发表于 06-06 15:31 424次阅读

    何在DevEco Studio利用CodeGPT接入DeepSeek

    近期DeepSeek火爆全球,那一样很火的开发鸿蒙原生应用的DevEco Studio如果把它接入,会发生什么“化学反应”?下面我们将详细分享如何在DevEco Studio利用CodeGPT
    的头像 发表于 02-19 13:52 1770次阅读
    如<b class='flag-5'>何在</b>DevEco Studio<b class='flag-5'>中</b>利用CodeGPT接入DeepSeek

    JavaScript与Rust和WebAssembly集成

    偶然一次机会,接触了Rust的代码。当时想给团队小伙伴做演示,发现自己并不能在移动端按照文档生成演示demo。我就想,要是Rust代码能转化成JavaScript就好了。结果一搜,还真有。
    的头像 发表于 01-24 15:43 795次阅读
    <b class='flag-5'>JavaScript</b>与Rust和WebAssembly集成

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

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

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

    Spire.XLS for JavaScript 是一款专为开发人员设计的 JavaScript Excel 工具库,支持在任何 JavaScript 环境下直接创建、读取、编辑和转换 Excel
    的头像 发表于 01-21 09:29 794次阅读
    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 976次阅读

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

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

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

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

    开源能带我们走向何方

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