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

如何在Reveal.js中切换片段时修改指定片段的文本样式?

实现Reveal.js片段切换时修改已有元素样式

要实现后续片段显示时修改已显示片段的样式,我们可以结合Reveal.js的片段状态属性和CSS选择器,或者通过事件监听来动态控制样式。以下是具体解决方案:

步骤1:标记需要修改的目标元素

先给要变色的数字添加自定义类,方便后续定位:

---
title-slide: false
format: 
  revealjs:
    theme: sky
---

## Test

::: {.fragment .fade-in}
Part 1
:::

::: {.fragment .fade-in .tiny-text}
<span class="num-22">22</span> number of this sentence should turn green when the third fragment is on.

<span class="num-23">23</span> number of this sentence should turn red when the third fragment is on.

At the fourth fragment, these two numbers should be back to black.
:::

::: {.fragment .fade-in .tiny-text}
Third fragment is on. 22 and 23 should be coloured green and red.
:::

::: {.fragment .fade-in .tiny-text}
Fourth fragment: back to black.
:::

步骤2:添加CSS样式控制

Reveal.js会在片段切换时给<body>标签添加data-fragment-index属性,值为当前激活的片段索引(从0开始)。利用这个属性编写CSS规则即可实现样式切换:

<style>
  .tiny-text {
    font-size: 0.6em;
  }

  /* 第三个片段激活时(索引为2),修改数字颜色 */
  body[data-fragment-index="2"] .num-22 {
    color: green;
  }
  body[data-fragment-index="2"] .num-23 {
    color: red;
  }

  /* 第四个片段激活时(索引为3),恢复默认黑色 */
  body[data-fragment-index="3"] .num-22,
  body[data-fragment-index="3"] .num-23 {
    color: black;
  }
</style>

可选:用JavaScript事件监听实现灵活控制

如果需要处理回退片段等复杂场景,可以通过Reveal.js的片段事件来动态修改样式:

<script>
// 监听片段显示事件
Reveal.on('fragmentshown', function(event) {
  // 获取当前片段在父容器中的索引
  const fragmentIndex = Array.from(event.fragment.parentElement.children).indexOf(event.fragment);
  const num22 = document.querySelector('.num-22');
  const num23 = document.querySelector('.num-23');

  if (fragmentIndex === 2) {
    // 第三个片段显示时设置颜色
    num22.style.color = 'green';
    num23.style.color = 'red';
  } else if (fragmentIndex === 3) {
    // 第四个片段显示时恢复颜色
    num22.style.color = 'black';
    num23.style.color = 'black';
  }
});

// 监听片段隐藏事件,处理回退场景
Reveal.on('fragmenthidden', function(event) {
  const fragmentIndex = Array.from(event.fragment.parentElement.children).indexOf(event.fragment);
  const num22 = document.querySelector('.num-22');
  const num23 = document.querySelector('.num-23');

  if (fragmentIndex === 2) {
    // 隐藏第三个片段时恢复颜色
    num22.style.color = 'black';
    num23.style.color = 'black';
  }
});
</script>

说明

  • 片段索引从0开始计数:第一个片段对应索引0,第三个片段对应索引2,第四个对应索引3。
  • CSS方案简洁高效,适合简单样式切换;JavaScript方案适合需要复杂交互或回退处理的场景。

内容的提问来源于stack exchange,提问作者armandfavrot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:05:18