You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NiceGUI的Mermaid图节点中适配Font Awesome图标与文字

修复NiceGUI中Mermaid节点Font Awesome图标与文字无法同时显示的问题

问题描述:在NiceGUI中创建包含Font Awesome图标的Mermaid图表时,节点内仅显示图标,文字被隐藏,确认是节点标签宽度不足导致。

解决方案

可以通过以下几种方式调整节点宽度,让图标和文字同时显示:

1. 为单个节点设置最小宽度

在Mermaid语法中使用style指令,给每个节点指定最小宽度:

from nicegui import ui

@ui.page('/')
def index_page() -> None:
    def fa_setup():
        ui.run_javascript("""
            const link = document.createElement('link');
            link.rel = 'stylesheet';
            link.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css';
            document.head.appendChild(link);
        """)
    fa_setup()

    class State:
        def __init__(self):
            self.graph = """
                graph LR;
                A1["fa:fa-credit-card A1"];
                A2["fa:fa-server A2"];
                A1 -- |4ms| --> A2;
                // 为每个节点设置最小宽度
                style A1 min-width: 120px;
                style A2 min-width: 120px;
            """

    state = State()

    diag = ui.mermaid(content=state.graph, config={'securityLevel': 'loose', 'theme': 'classic'})
    diag.bind_content(state, 'graph')

ui.run()

2. 定义通用样式类批量应用

如果有多个节点,推荐用classDef定义统一的样式类,再给节点添加类名,避免重复设置:

from nicegui import ui

@ui.page('/')
def index_page() -> None:
    def fa_setup():
        ui.run_javascript("""
            const link = document.createElement('link');
            link.rel = 'stylesheet';
            link.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css';
            document.head.appendChild(link);
        """)
    fa_setup()

    class State:
        def __init__(self):
            self.graph = """
                graph LR;
                // 定义通用节点样式
                classDef nodeStyle min-width: 120px;
                A1["fa:fa-credit-card A1"]:::nodeStyle;
                A2["fa:fa-server A2"]:::nodeStyle;
                A1 -- |4ms| --> A2;
            """

    state = State()

    diag = ui.mermaid(content=state.graph, config={'securityLevel': 'loose', 'theme': 'classic'})
    diag.bind_content(state, 'graph')

ui.run()

3. 全局CSS调整所有节点

如果希望所有Mermaid节点都自动适配宽度,可以添加全局CSS样式,无需修改Mermaid语法:

from nicegui import ui

@ui.page('/')
def index_page() -> None:
    def fa_setup():
        ui.run_javascript("""
            const link = document.createElement('link');
            link.rel = 'stylesheet';
            link.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css';
            document.head.appendChild(link);
            // 添加全局CSS调整Mermaid节点宽度
            const style = document.createElement('style');
            style.textContent = `.mermaid .node rect { min-width: 120px; padding: 8px; }`;
            document.head.appendChild(style);
        """)
    fa_setup()

    class State:
        def __init__(self):
            self.graph = """
                graph LR;
                A1["fa:fa-credit-card A1"];
                A2["fa:fa-server A2"];
                A1 -- |4ms| --> A2;
            """

    state = State()

    diag = ui.mermaid(content=state.graph, config={'securityLevel': 'loose', 'theme': 'classic'})
    diag.bind_content(state, 'graph')

ui.run()

你可以根据实际需求选择合适的方法,调整min-width的值来适配不同长度的文字。

内容的提问来源于stack exchange,提问作者Anirban Nag 'tintinmj'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:37:23