
marimo 布局对齐详解使用 marimo.center、marimo.left 与 marimo.right 控制输出位置【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimomarimo.center、marimo.left、marimo.right是 marimo 提供的三个无状态stateless布局函数用于将任意输出内容在单元格渲染区域内水平居中、左对齐或右对齐。本文基于 justify.md 文档及 marimo/_output/justify.py 源码讲解三个函数的 API 签名、底层实现原理与实战用法帮助你精准控制标题、图片、按钮、统计文本等输出的摆放位置。一、三个函数是什么marimo 布局体系中的对齐三剑客在 marimo 中布局函数分为两类详见 layouts 索引无状态布局函数只负责如何渲染子内容不携带任何值。marimo.center、marimo.left、marimo.right就属于这一类它们与marimo.hstack、marimo.vstack、marimo.callout、marimo.accordion等并列。有状态布局元素位于marimo.ui下如tabs跟踪选中标签、table跟踪选中行它们携带用户交互值。三个对齐函数只接受一个对象返回一个排版好的Html对象没有.value因此不能作为交互控件使用纯属排版工具。二、API 签名与行为说明根据 marimo/_output/justify.py 中的定义三个函数签名完全一致均为item: object一个位置参数import marimo as mo mo.center(item) # 居中 mo.left(item) # 左对齐 mo.right(item) # 右对齐函数参数返回类型效果mo.center(item)item: object任意可渲染对象Html将 item 水平居中mo.left(item)item: object任意可渲染对象Html将 item 左对齐默认即左对齐显式调用用于嵌套场景mo.right(item)item: object任意可渲染对象Html将 item 右对齐关于item参数的灵活性它被声明为object意味着几乎任何 marimo 能渲染的东西都能传——mo.md(...)创建的 Markdown、mo.ui.*交互控件、matplotlib图形、DataFrame、甚至自定义Html对象。内部会先经过as_html(item)统一转换为Html后再对齐见 hypertext.py。三个函数在marimo/__init__.py中被导出为公共 API见 marimo/init.py因此既可以直接调用顶层函数mo.center(x)也可以调用Html对象的方法形式mo.md(...).center()两者等价。三、底层实现原理一行代码背后的 flex 布局3.1 顶层函数只是薄封装查看 marimo/_output/justify.py 可以看到三个顶层函数各自只有一行核心逻辑mddoc def center(item: object) - Html: return as_html(item).center()即先as_html(item)把输入统一成Html再委托给Html的同名方法。真正干活的是Html.center()/Html.left()/Html.right()。3.2 Html 方法基于 vstack 的 align 实现在 marimo/_output/hypertext.py#L193-L239 中三个方法的实现统一委托给marimo._plugins.stateless.flex模块def center(self) - Html: from marimo._plugins.stateless import flex return flex.vstack([_BlockWrapped(self)], aligncenter, gap0) def right(self) - Html: from marimo._plugins.stateless import flex return flex.vstack([_BlockWrapped(self)], alignend, gap0) def left(self) - Html: from marimo._plugins.stateless import flex return flex.vstack([_BlockWrapped(self)], alignstart, gap0)也就是说对齐的本质是把内容包装成一个单元素的纵向 flex 容器vstack再通过align参数控制水平对齐方向aligncenter→ CSSalign-items: center→ 水平居中alignend→ CSSalign-items: flex-end→ 靠右alignstart→ CSSalign-items: flex-start→ 靠左映射关系定义在 flex.py 的align_items_map中start: flex-start、center: center、end: flex-end、stretch: stretch。由于 flex 方向是columnalign-items控制的是水平轴上的对齐因此恰好实现了左右对齐的效果。gap0表示容器内部无间距。从源码结构看这种实现方式让对齐函数天然继承了 flex 布局的渲染能力内容会被_BlockWrapped包成块级元素即使原本是内联的文本或按钮也能作为一个整体参与对齐。3.3 与直接使用 vstack 的关系由于底层就是vstack你完全可以用mo.vstack([item], aligncenter)达到与mo.center(item)相同的效果。但center/left/right的定位是对单个元素进行快捷对齐语义更清晰、代码更简短无需显式构造列表。四、实战示例从标题到按钮的完整用法4.1 标题与图片居中以下代码在单元格中运行即可看到效果import marimo as mo # Markdown 标题居中 mo.center(mo.md(# Hello, world)) # 等价的方法调用形式 mo.md(# Hello, world).center() # 图片居中 mo.md().center()4.2 运行按钮与统计信息右对齐仓库示例 examples/misc/colliding_blocks_and_pi.py 中就使用了run_button.right()将按钮推到右侧examples/ai/data/data_labeler.py 中则用.center()居中展示图片与标题、用.right()将字符计数提示右对齐import marimo as mo # 将运行按钮右对齐 run_button mo.ui.run_button() mo.right(run_button) # 右对齐的字符计数提示来自 data_labeler.py 的实际写法 _character_count mo.md(f{len(notes.value)}/100 characters used).right() # 居中的标题与提示 mo.md(### Real or AI generated?).center()4.3 在 Markdown 渲染的标题旁快速对齐Html的方法形式可以链式使用例如在 examples/ai/chat/deepseek_example.py 中可以看到对多行 Markdown 整体调用.center()的写法将一段介绍文本整体居中展示。五、嵌套与组合技巧三个对齐函数返回的都是Html因此可以自由嵌套在其他布局函数中构成更复杂的排版import marimo as mo mo.vstack( [ mo.center(mo.md(## 报表标题)), mo.hstack( [ mo.md(左列内容), mo.right(mo.ui.button(label提交, on_clicklambda: None)), ] ), ], alignstretch, gap0.5, )典型的使用场景包括将图表标题居中置于图表上方将提交/下一步类按钮右对齐符合常见 UI 习惯将字数统计、更新时间等辅助信息右对齐避免干扰主体内容在mo.callout见 callout.md或mo.accordion内部对局部内容单独对齐。六、注意事项对齐的是内容块本身由于实现是内容包裹 flex 容器对齐针对的是被包装内容在单元格水平方向的位置如果父容器如vstack设置了alignstretch子内容会被拉伸填满此时子元素内部再套center等才有明显效果。无状态属性三个函数不产生任何值不能读取交互状态若需要与用户输入联动应搭配mo.ui.*控件或mo.stop等运行时 API。参数必须是可渲染对象item会被as_html转换若传入完全无法渲染的原始类型会抛出转换错误建议统一传mo.md(...)、控件或已渲染的Html。文档来源本文对应的 API 文档入口为 docs/api/layouts/justify.md其中通过::: marimo.center、::: marimo.left、::: marimo.right指令自动嵌入三个函数的完整 docstring函数文档由mddoc装饰器生成与源码保持同步。通过center、left、right三个轻量函数你可以在不引入额外 CSS 的前提下快速完成单元格输出内容的水平定位让交互界面如标注工具、模型对比、数据报表的布局更加规整清晰。【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考