Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

Clay UI 库

Posted on 2024-12-22

Clay UI 库

Nic Barker 的一个令人着迷的项目,他这样描述 Clay:

Clay 是一个 C 语言的 Flex-box 风格的 UI 自动布局库,具有声明性语法和微秒级性能。

他对图书馆的介绍视频非常出色:我从中学到了很多关于 UI 布局如何工作的知识,动画视觉解释清晰、有品味,确实有助于理解不同的概念:

Clay 是一个 C 库,以约 2000 行的clay.h无依赖头文件形式提供。它只处理布局计算:如果你想渲染结果,你需要添加一个额外的渲染层。

在该库的一个引人入胜的演示中, Clay 站点本身是使用编译为 WebAssembly 的 Clay C 渲染的!您甚至可以在默认 HTML 渲染器和基于 Canvas 的替代渲染器之间切换。

这不一定是一个好主意:因为布局完全是使用使用transform定位的<div>元素来处理的transform: translate(0px, 70px)样式 CSS 尝试跨多个框选择文本的行为很奇怪,而且我不清楚可访问性的影响是。

它确实为 Clay 的功能提供了一个非常引人注目的演示,特别是当您调整浏览器窗口大小并且通过 Clay WebAssembly 桥实时重新计算页面布局时。

这也意味着您可以在网站上点击“D”并打开自定义 Clay 调试器,显示页面上布局元素的层次结构:

左边是 Clay 网站,右边是一个显示 UI 布局元素树的面板,其中一个已被选中,并在面板底部的框中​​显示详细信息: 边界框:{ x: 278, y: 13,宽度:101,高度:24},布局方向:LEFT_TO_RIGHT,大小调整:宽度:FITQ,高度:FITQ,填充:{x:8,uy:0}

这也意味着整个页面是使用C代码定义的!鉴于此,我发现代码本身的可读性令人惊讶

void DeclarativeSyntaxPageDesktop () {  
  CLAY ( CLAY_ID ( "SyntaxPageDesktop" ), CLAY_LAYOUT ({ .sizing = { CLAY_SIZING_GROW (), CLAY_SIZING_FIT ({ . min = windowHeight - 50 }) }, . childAlignment = { 0 , CLAY_ALIGN_Y_CENTER }, . padding = { . x = 50 } })) {  
    CLAY ( CLAY_ID ( "SyntaxPage" ), CLAY_LAYOUT ({ .sizing = { CLAY_SIZING_GROW (), CLAY_SIZING_GROW () }, .childAlignment = { 0 , CLAY_ALIGN_Y_CENTER }, .padding = { 32 , 32 }, .childGap = 32 }), CLAY_BORDER ({ .left = { 2 , COLOR_RED }, .right = { 2 , COLOR_RED } })) {  
      CLAY ( CLAY_ID ( "SyntaxPageLeftText" ), CLAY_LAYOUT ({ .sizing = { CLAY_SIZING_PERCENT ( 0.5 ) }, .layoutDirection = CLAY_TOP_TO_BOTTOM , .childGap = 8 })) {  
        CLAY_TEXT ( CLAY_STRING ( "声明性语法" ), CLAY_TEXT_CONFIG ({ . fontSize = 52 , . fontId = FONT_ID_TITLE_56 , . textColor = COLOR_RED }));  
        CLAY ( CLAY_ID ( "SyntaxSpacer" ), CLAY_LAYOUT ({ .sizing = { CLAY_SIZING_GROW ({ . max = 16 }) } })) {}  
        CLAY_TEXT ( CLAY_STRING ( "具有嵌套 UI 元素层次结构的灵活且可读的声明性语法。" ), CLAY_TEXT_CONFIG ({ . fontSize = 28 , . fontId = FONT_ID_BODY_36 , . textColor = COLOR_RED }));  
        CLAY_TEXT ( CLAY_STRING ( "将元素与标准 C 代码混合,如循环、条件和函数。" ), CLAY_TEXT_CONFIG ({ . fontSize = 28 , . fontId = FONT_ID_BODY_36 , . textColor = COLOR_RED }));  
        CLAY_TEXT ( CLAY_STRING ( "从文本、图像和矩形等 UI 基元创建您自己的可重用组件库。" ), CLAY_TEXT_CONFIG ({ . fontSize = 28 , . fontId = FONT_ID_BODY_36 , . textColor = COLOR_RED }));  
      }  
      CLAY ( CLAY_ID ( "SyntaxPageRightImage" ), CLAY_LAYOUT ({ .sizing = { CLAY_SIZING_PERCENT ( 0.50 ) }, .childAlignment = { .x = CLAY_ALIGN_X_CENTER } })) {  
        CLAY ( CLAY_ID ( "SyntaxPageRightImageInner" ), CLAY_LAYOUT ({ .sizing = { CLAY_SIZING_GROW ({ . max = 568 }) } }), CLAY_IMAGE ({ . sourceDimensions = { 1136 , 1194 }, . sourceURL = CLAY_STRING ( “/clay/images/declarative.png” ) })) {}  
      }  
    }  
  }  
}

我还没有准备好放弃 HTML 和 CSS 来用编译为 WebAssembly 的 C 语言编写网页,但作为理解布局引擎(以及未来构建非 Web 界面的潜在工具)的练习,这确实是一个很好的选择。值得深入研究的有趣项目。

通过黑客新闻

标签: CSS , C , webAssembly , html

原文: https://simonwillison.net/2024/Dec/21/clay-ui-library/#atom-everything

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Colin Percival
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Dustin Curtis
  • eighty twenty
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Liz Danzico
  • Lou Plummer
  • Luke Wroblewski
  • Matt Baer
  • Matt Stoller
  • Matthias Endler
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Rohit Patel
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Steve Blank
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • Understanding AI
  • Wes Kao
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme