RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Facebook開(kāi)源StyleX如何在JavaScript中寫(xiě)CSS呢?

OSC開(kāi)源社區(qū) ? 來(lái)源:OSC開(kāi)源社區(qū) ? 2023-12-14 10:03 ? 次閱讀

Meta(原 Facebook)開(kāi)源了全新的 CSS-in-JS 庫(kù) StyleX。

官方介紹道,StyleX 是一個(gè)富有表現(xiàn)力、具有確定性、可靠且可擴(kuò)展的樣式系統(tǒng)。它通過(guò)使用編譯時(shí) (compile-time) 工具融合了靜態(tài) CSS 的性能和可擴(kuò)展性。 此外,StyleX 不僅僅是一個(gè)基于編譯器的 CSS-in-JS 庫(kù),它經(jīng)過(guò)精心設(shè)計(jì),可以滿足大型應(yīng)用程序、可復(fù)用組件庫(kù)和靜態(tài)類型代碼庫(kù)的要求。Meta 旗下多款產(chǎn)品如 Facebook、WhatsApp、Instagram、Workplace、Threads 等都在使用 StyleX 作為其 CSS 樣式解決方案。 StyleX 主要特性

快速:StyleX 在編譯時(shí)和運(yùn)行時(shí)都具備高效的性能。Babel 轉(zhuǎn)換不會(huì)對(duì)構(gòu)建過(guò)程產(chǎn)生顯著影響。在運(yùn)行時(shí),StyleX 避免了使用 JavaScript 插入樣式的開(kāi)銷(xiāo),并僅在必要時(shí)高效地組合類名字符串。生成的 CSS 經(jīng)過(guò)優(yōu)化,確保即使是大型網(wǎng)站的樣式也能被瀏覽器快速解析。

可擴(kuò)展:StyleX 旨在適應(yīng)像 Meta 這樣的超大型代碼庫(kù)。通過(guò)原子構(gòu)建和文件級(jí)緩存,Babel 插件能夠處理數(shù)萬(wàn)個(gè)組件在編譯時(shí)的樣式處理。由于 StyleX 設(shè)計(jì)為封裝樣式,它允許在隔離環(huán)境中開(kāi)發(fā)新組件,并期望一旦在其他組件中使用時(shí)能夠可預(yù)測(cè)地呈現(xiàn)。

可預(yù)測(cè)性:StyleX 會(huì)自動(dòng)管理 CSS 選擇器的特異性,以確保生成的規(guī)則之間不會(huì)發(fā)生沖突。它為開(kāi)發(fā)人員提供了一個(gè)可靠地應(yīng)用樣式的系統(tǒng),并確保 “最后應(yīng)用的樣式始終生效”。

類型安全:使用 TypeScript 或 Flow 類型來(lái)約束組件接受的樣式,每個(gè)樣式屬性和變量都具有完全的類型定義。這有助于提高代碼的可讀性和可維護(hù)性,同時(shí)減少潛在的錯(cuò)誤和沖突。

樣式去重:StyleX 鼓勵(lì)在同一文件中編寫(xiě)樣式和組件。這種方法有助于使樣式在長(zhǎng)期內(nèi)更具可讀性和可維護(hù)性。StyleX 能夠利用靜態(tài)分析和構(gòu)建時(shí)工具來(lái)跨組件去重樣式,并刪除未使用的樣式。

可測(cè)試性:StyleX 可以配置為輸出調(diào)試類名,而不是功能性的原子類名。這可以用于生成快照,以便在對(duì)設(shè)計(jì)進(jìn)行輕微更改時(shí)不會(huì)經(jīng)常變化。通過(guò)這種方式,開(kāi)發(fā)人員可以更輕松地測(cè)試和驗(yàn)證樣式的正確性,從而提高開(kāi)發(fā)效率和產(chǎn)品質(zhì)量。

示例代碼

import stylex from '@stylexjs/stylex';

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

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

下面是一個(gè)按鈕組件的示例代碼

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 (
    
  );
}






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    516

    瀏覽量

    53850
  • CSS
    CSS
    +關(guān)注

    關(guān)注

    0

    文章

    109

    瀏覽量

    14370
  • 選擇器
    +關(guān)注

    關(guān)注

    0

    文章

    107

    瀏覽量

    14534
  • 靜態(tài)分析
    +關(guān)注

    關(guān)注

    1

    文章

    40

    瀏覽量

    3885

原文標(biāo)題:Facebook開(kāi)源StyleX , 在JavaScript中寫(xiě)CSS

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    開(kāi)源能帶我們走向何方

    開(kāi)源大模型、開(kāi)源數(shù)據(jù)庫(kù)、開(kāi)源框架、開(kāi)源硬件......近些年,這些詞匯不絕于耳。雷軍說(shuō),好的代碼像詩(shī)一樣優(yōu)美,自己大二時(shí)寫(xiě)的代碼就已經(jīng)
    的頭像 發(fā)表于 12-06 17:09 ?430次閱讀

    Tailwind CSS v4.0發(fā)布首個(gè)Beta版本

    Tailwind CSS 是一個(gè)為快速開(kāi)發(fā)而精心設(shè)計(jì)的原子類 CSS 框架,它提供了充滿設(shè)計(jì)感和應(yīng)用程序至上的能力來(lái)創(chuàng)建組件,它在最新的 2.0 版本中加入了暗黑模式,開(kāi)箱即用。
    的頭像 發(fā)表于 11-25 10:02 ?174次閱讀
    Tailwind <b class='flag-5'>CSS</b> v4.0發(fā)布首個(gè)Beta版本

    研發(fā)都應(yīng)該了解的如何在vite接入現(xiàn)代化css工程化方案

    好的css工程化方案可以增強(qiáng)我們項(xiàng)目的可維護(hù)性、提高樣式的復(fù)用性、進(jìn)行自動(dòng)化處理等,在提高頁(yè)面加載速度和性能的同時(shí),我們可以有更多的精力進(jìn)行js邏輯的處理。
    的頭像 發(fā)表于 10-25 17:25 ?351次閱讀

    何在Altium Designer快速定位器件

    想知道如何在Altium Designer快速定位器件嘛?
    的頭像 發(fā)表于 10-12 09:28 ?2714次閱讀
    如<b class='flag-5'>何在</b>Altium Designer<b class='flag-5'>中</b>快速定位器件

    基于CSS融合存儲(chǔ)系統(tǒng)的自動(dòng)化制造服務(wù)平臺(tái)存儲(chǔ)解決方案

    基于CSS融合存儲(chǔ)系統(tǒng)的自動(dòng)化制造服務(wù)平臺(tái)存儲(chǔ)解決方案
    的頭像 發(fā)表于 09-10 10:15 ?336次閱讀
    基于<b class='flag-5'>CSS</b>融合存儲(chǔ)系統(tǒng)的自動(dòng)化制造服務(wù)平臺(tái)存儲(chǔ)解決方案

    何在反激式拓?fù)?b class='flag-5'>中實(shí)現(xiàn)軟啟動(dòng)

    電子發(fā)燒友網(wǎng)站提供《如何在反激式拓?fù)?b class='flag-5'>中實(shí)現(xiàn)軟啟動(dòng).pdf》資料免費(fèi)下載
    發(fā)表于 09-04 11:09 ?0次下載
    如<b class='flag-5'>何在</b>反激式拓?fù)?b class='flag-5'>中</b>實(shí)現(xiàn)軟啟動(dòng)

    bootstrap框架介紹

    Bootstrap概述 Bootstrap是一個(gè)開(kāi)源的前端框架,由Twitter公司開(kāi)發(fā)。它基于HTML、CSSJavaScript,提供了一套響應(yīng)式、移動(dòng)優(yōu)先的組件和樣式,可以幫助開(kāi)發(fā)者快速構(gòu)建網(wǎng)頁(yè)。 1.2
    的頭像 發(fā)表于 07-11 09:53 ?545次閱讀

    鴻蒙語(yǔ)言基礎(chǔ)類庫(kù):ohos.convertxml xml轉(zhuǎn)換JavaScript

    轉(zhuǎn)換xml文本為JavaScript對(duì)象。
    的頭像 發(fā)表于 07-08 15:54 ?411次閱讀
    鴻蒙語(yǔ)言基礎(chǔ)類庫(kù):ohos.convertxml  xml轉(zhuǎn)換<b class='flag-5'>JavaScript</b>

    芯海應(yīng)用筆記:CSS34P16P(A)型應(yīng)用說(shuō)明文檔

    CSS34P16P(A)是 USB Type-C 型控制器,它符合最新 USB Type-C 型和 PD 標(biāo)準(zhǔn). CSS34P16 為適配器、車(chē)載充電器、移動(dòng)電源等應(yīng)用提供了一個(gè)完整的 USB
    發(fā)表于 05-16 14:46

    Arm新Arm Neoverse計(jì)算子系統(tǒng)(CSS):Arm Neoverse CSS V3和Arm Neoverse CSS N3

    Arm宣布了兩款新的Arm Neoverse計(jì)算子系統(tǒng)(CSS),它們基于“迄今為止最好的一代Neoverse技術(shù)”。是什么讓這些新產(chǎn)品在擁擠的計(jì)算技術(shù)領(lǐng)域脫穎而出? Arm的兩個(gè)新Arm
    的頭像 發(fā)表于 04-24 17:53 ?1048次閱讀
    Arm新Arm Neoverse計(jì)算子系統(tǒng)(<b class='flag-5'>CSS</b>):Arm Neoverse <b class='flag-5'>CSS</b> V3和Arm Neoverse <b class='flag-5'>CSS</b> N3

    何在STEP 7(TIA Portal)安全地并且間接地尋址?

    采用間接尋址時(shí),只有程序執(zhí)行時(shí),用于讀或寫(xiě)數(shù)值的地址才得以確定。使用這種方法可以減少編程量并使得程序更靈活。
    的頭像 發(fā)表于 04-07 09:58 ?573次閱讀
    如<b class='flag-5'>何在</b>STEP 7(TIA Portal)<b class='flag-5'>中</b>安全地并且間接地尋址<b class='flag-5'>呢</b>?

    何在Cubemx添加所有的外設(shè)頭文件?

    ,需要自己去添加相應(yīng)的頭文件,但自己添加有時(shí)還是會(huì)報(bào)錯(cuò),而且是不知原因的報(bào)錯(cuò)。 所以,在這向各位開(kāi)發(fā)者、大咖,請(qǐng)教一下,如何在Cubemx添加所有的外設(shè)頭文件,或者在配置完cubemx后如何高效的添加自己所需要的外設(shè)頭文件
    發(fā)表于 04-01 07:46

    STM32L431CCT6頻繁出現(xiàn)LSE CSS錯(cuò)誤是什么原因?qū)е碌模?/a>

    STM32L431CCT6芯片,外部使用32.768k的晶振,匹配電容22pf。LSE作為RTC,LPUART1的時(shí)鐘源,啟用LSE CSS功能。經(jīng)常會(huì)發(fā)生LSE CSS錯(cuò)誤,在發(fā)生錯(cuò)誤的時(shí)候沒(méi)有
    發(fā)表于 03-28 09:01

    何在TC264/TC377使用FOC

    何在TC264/TC377使用FOC?GTMMOLD 的相關(guān)配置實(shí)在太過(guò)了混亂了,實(shí)在有看不到,沒(méi)有什么相關(guān)的中文資料或者開(kāi)源代碼可供參考。
    發(fā)表于 01-19 07:59

    英飛凌與碳化硅供應(yīng)商SK Siltron CSS達(dá)成協(xié)議

    英飛凌與韓國(guó)SK Siltron子企業(yè)SK Siltron CSS最近達(dá)成了一項(xiàng)重要協(xié)議。根據(jù)該協(xié)議,SK Siltron CSS將為英飛凌提供6英寸碳化硅(SiC)晶圓,以支持英飛凌在SiC半導(dǎo)體生產(chǎn)方面的需求。
    的頭像 發(fā)表于 01-17 14:08 ?658次閱讀
    RM新时代网站-首页