Skip to content

搞英语 → 看世界

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

Menu
  • 首页
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
  • Product Hunt
  • Visual Capitalist
  • Elon Musk
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

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abdisalan Mohamud
  • Addy Osmani
  • Aeon
  • Ahoy There! on THT's den
  • Alec Muffett
  • Andreas
  • anhvn
  • Ankaph
  • Annie
  • Armin Ronacher
  • Ask Hacker News Weekly
  • Astro Blog
  • Austin White
  • Backlinko
  • Better Dev Link
  • Building Pika Out Loud
  • Caleb Hearth
  • Cédric Aellen
  • Chip Huyen
  • Colossal
  • Cooltools by KK
  • CoRecursive
  • Craig Mod
  • Curt Merrill
  • Dan Abramov's Overreacted Blog RSS Feed
  • Daniel Lemire
  • Daniel Stenberg
  • Daring Fireball
  • David H
  • David Heinemeier Hansson
  • Dayu | 大宇
  • Ed Zitron
  • Ersei
  • Ersei 'n Stuff
  • Evan Martin
  • First Page Sage
  • Founder Weekly
  • FuzzyGrim
  • Gabriel
  • Good Enough
  • Gregory Hammond
  • Habib
  • How They Make Money
  • I Love Charts
  • Ian Betteridge
  • Ivaylo Durmonski
  • Jason Kottke
  • Jason Kratz
  • Jeff Perry
  • John D. Cook
  • Jonas Hietala
  • Jonathan Snook
  • jwb
  • Kevin Kelly
  • Kevin Yank
  • Kirsty
  • Kush
  • Loris Cro
  • Maarten van Gompel
  • Manas J. Saloi
  • Mandy Brown
  • Matt Fantinel
  • Matt Mullenweg
  • Mere Civilian
  • Ness Labs
  • News Letter
  • Nicholas Carlini
  • Nicolas F. R. A. Prado
  • Niko
  • Nir Eyal
  • Noah Smith
  • Pedro Lopes
  • Positive News
  • Predrag Gruevski
  • Rachel Kroll
  • Recomendo by KK
  • rendezvous with cassidoo
  • Rest of World
  • Ruben Schade
  • Scott Galloway
  • Sébastien Etter
  • SEMrush Blog
  • Seth Godin
  • Shariq Raza Qadri
  • Simon Willison
  • Six Colors
  • Slashdot
  • Spectre Collie
  • Spyglass
  • storytelling with data
  • Streamline Blog
  • Tableau Blog
  • tekphloyd
  • The Alchemy of Money
  • The Independent Variable
  • The Marginalian
  • thriftmac
  • Tim Bray
  • Tim Ferriss
  • Tim Kellogg
  • TLDR
  • Topslakr
  • Track Awesome list
  • Trump
  • Victor Kropp
  • Vincent Ritter
  • Vox
  • Westenberg
  • Xe Iaso
  • xkcd
  • Yuri Cunha
  • Zarar
  • 未分类
  • 英文媒体
  • 英文推特
  • 英文独立博客
  • 读写错误
©2026 搞英语 → 看世界 | Design: Newspaperly WordPress Theme