如何用HTML的details标签展示复杂的科学公式和注释

夏宇小哥_7580

夏宇小哥_7580

2026-10-02

107人浏览

原创

无法直接渲染latex公式,需配合katex等库动态渲染;应将公式存于data-latex属性,展开时调用katex.render()并设displaymode:true,注释须置于math-block外。

如何用html的details标签展示复杂的科学公式和注释

<details></details> 本身不支持直接渲染 LaTeX 或 MathML 公式,强行塞进去只会显示原始代码或乱码。必须配合数学渲染库(如 KaTeX 或 MathJax)在展开后动态渲染,否则公式根本不会正确显示。

为什么直接写 <details><summary>E=mc²</summary><p>E = m c^2</p></details> 不行

浏览器原生不解析 LaTeX 语法;<details></details> 展开时内容只是“可见”,但未触发数学库的渲染流程。常见现象是:展开后看到一串 E = m c^2 文本,或者 \frac{1}{2}mv^2 这样的源码,而不是排版好的分数和上标。

  • MathJax 默认只在页面加载时扫描一次 ,动态插入的内容不会自动处理
  • KaTeX 要求显式调用 katex.render(),且目标元素必须为空或仅含纯文本
  • <summary></summary> 里不能放复杂 HTML,否则部分浏览器会忽略或截断

用 KaTeX + details 实现可展开公式(推荐方案)

核心思路:把公式源码存在 data-latex 属性里,展开后读取、清空容器、再调用 katex.render() 渲染。注释可放在同个 <div> 里用普通 HTML 写。 <pre class="brush:php;toolbar:false;">&lt;details&gt;&lt;summary&gt;动能公式&lt;/summary&gt;&lt;div class=&quot;math-block&quot; data-latex=&quot;\frac{1}{2}mv^2&quot;&gt;&lt;/div&gt; &lt;p&gt;其中:&lt;code&gt;m&lt;/code&gt; 是质量(kg),&lt;code&gt;v&lt;/code&gt; 是速度(m/s)&lt;/p&gt;&lt;div class=&quot;aritcle_card flexRow artxards&quot;&gt; &lt;div class=&quot;artcardd flexRow&quot;&gt; &lt;a class=&quot;aritcle_card_img&quot; rel=&quot;nofollow&quot; href=&quot;/xiazai/skill5806&quot; title=&quot;html-deploy&quot;&gt;&lt;img src=&quot;https://img.php.cn/upload/skill/000/000/081/179066538882434.jpg&quot; alt=&quot;html-deploy&quot; onerror=&quot;this.onerror='';this.src='/static/lhimages/moren/morentu.png'&quot; &gt;&lt;/a&gt; &lt;div class=&quot;aritcle_card_info flexColumn&quot;&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;/xiazai/skill5806&quot; title=&quot;html-deploy&quot; class=&quot;overflowclass&quot;&gt;html-deploy&lt;/a&gt; &lt;p class=&quot;overflowclass&quot;&gt;使用 htmlcode.fun 将 HTML 内容或文件部署到网页,适用于用户要求“部署到网页”“托管此 HTML”“生成此前端...的实时链接”等场景。&lt;/p&gt; &lt;/div&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;/xiazai/skill5806&quot; title=&quot;html-deploy&quot; class=&quot;aritcle_card_btn flexRow flexcenter&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;span&gt;下载&lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;/details&gt;</pre> <p>配合 JS(需提前引入 KaTeX CSS 和 JS):</p> <pre class="brush:php;toolbar:false;">document.addEventListener('DOMContentLoaded', () =&gt; { document.querySelectorAll('details').forEach(details =&gt; { details.addEventListener('toggle', () =&gt; { if (details.open) { const block = details.querySelector('.math-block'); if (block &amp;&amp; !block.hasAttribute('data-rendered')) { katex.render(block.dataset.latex, block, { displayMode: true }); block.setAttribute('data-rendered', 'true'); } } }); }); });</pre> <h3>兼容性与易踩坑点</h3> <p>细节决定成败——这些地方出错会导致公式空白或报错:</p> <ul> <li>确保 <code>katex.render() 的第二个参数是 DOM 元素,不是字符串或 jQuery 对象

  • displayMode: true 必须加,否则行内公式会挤在一行,分式、求和号等无法居中展开
  • 不要在 <div class="math-block"> 里预先写任何文字或标签,KaTeX 会清空它;注释必须放在外面 <li>Safari 对 <code>details[toggle] 事件支持较晚,iOS 15.4+ 才稳定;老版本可用 setTimeout 延迟渲染作为降级
  • 如果页面有多个 <details></details>,每个都要独立判断 data-rendered,避免重复调用 render() 报错
  • 最常被忽略的是:公式渲染依赖字体文件加载完成。若网络慢或 KaTeX 字体路径配错,会出现方块或缺失符号——建议检查浏览器控制台是否有 404 字体请求,并确认 katex.min.css 已正确引入。

    前端入门到VUE实战笔记:立即使用
    在学习笔记中,你将探索 前端 的入门与实战技巧!

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    html版权符号
    html版权符号

    html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    2023.06.14

    5395

    7

    html在线编辑器
    html在线编辑器

    html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

    2023.06.21

    3112

    4

    html网页制作
    html网页制作

    html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.07.31

    2770

    5

    html空格
    html空格

    html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.01

    2799

    5

    html是什么
    html是什么

    HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

    2023.08.11

    4679

    6

    html字体大小怎么设置
    html字体大小怎么设置

    在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

    2023.08.11

    2741

    3

    html转txt
    html转txt

    html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.31

    2529

    3

    html文本框代码怎么写
    html文本框代码怎么写

    html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

    2023.09.01

    2288

    6

    HTML嵌入CSS样式的方法
    HTML嵌入CSS样式的方法

    HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

    2023.09.20

    2288

    5

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    HTML 开发手册
    HTML 开发手册

    共150课时 | 299.2万人学习

    Web前端入门基础教程
    Web前端入门基础教程

    共251课时 | 96.4万人学习

    GDB 17.2 官方文档集合
    GDB 17.2 官方文档集合

    共0课时 | 0人学习