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

如何为ToggleButton添加ON/OFF切换状态文本?

解决ToggleButton切换时显示ON/OFF文本的问题

嗨,我来帮你搞定这个ToggleButton的文本显示问题~ 你之前尝试用content: "ON"的思路是对的,但可能没结合按钮的选中状态来切换内容,或者文本的定位没做好。咱们分两种方法来实现,你可以选自己喜欢的:

方法一:用HTML元素控制文本显示

这种方法直观,适合需要自定义文本样式的场景:

HTML结构

<div class="toggle-container">
  <!-- 第一个开关 -->
  <label class="toggle-btn">
    <input type="checkbox" class="toggle-input">
    <span class="toggle-track">
      <span class="toggle-text-on">ON</span>
      <span class="toggle-text-off">OFF</span>
    </span>
  </label>
  
  <!-- 可以复制多个开关 -->
  <label class="toggle-btn">
    <input type="checkbox" class="toggle-input">
    <span class="toggle-track">
      <span class="toggle-text-on">ON</span>
      <span class="toggle-text-off">OFF</span>
    </span>
  </label>
</div>

CSS样式

/* 开关容器 */
.toggle-btn {
  position: relative;
  display: inline-block;
  width: 70px;
  height: 36px;
  margin: 0 15px;
  cursor: pointer;
}

/* 隐藏原生checkbox */
.toggle-input {
  opacity: 0;
  width: 0;
  height: 0;
}

/* 开关轨道 */
.toggle-track {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  border-radius: 36px;
  transition: background-color 0.3s ease;
  /* 让文本居中 */
  display: flex;
  align-items: center;
  padding: 0 10px;
  color: white;
  font-size: 14px;
  font-weight: 500;
}

/* 开关滑块 */
.toggle-track:before {
  content: "";
  position: absolute;
  width: 28px;
  height: 28px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  border-radius: 50%;
  transition: transform 0.3s ease;
  box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}

/* 选中状态:轨道变紫色,显示ON文本 */
.toggle-input:checked + .toggle-track {
  background-color: #9c27b0;
}
.toggle-input:checked + .toggle-track .toggle-text-off {
  display: none;
}

/* 未选中状态:显示OFF文本 */
.toggle-input:not(:checked) + .toggle-track .toggle-text-on {
  display: none;
}

/* 选中时滑块移动 */
.toggle-input:checked + .toggle-track:before {
  transform: translateX(34px);
}

方法二:用CSS content动态生成文本

这种方法更简洁,不需要额外的HTML元素,直接通过CSS生成文本:

HTML结构

<div class="toggle-container">
  <label class="toggle-btn">
    <input type="checkbox" class="toggle-input">
    <span class="toggle-track"></span>
  </label>
  
  <label class="toggle-btn">
    <input type="checkbox" class="toggle-input">
    <span class="toggle-track"></span>
  </label>
</div>

CSS样式

.toggle-btn {
  position: relative;
  display: inline-block;
  width: 70px;
  height: 36px;
  margin: 0 15px;
  cursor: pointer;
}

.toggle-input {
  opacity: 0;
  width: 0;
  height: 0;
}

.toggle-track {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  border-radius: 36px;
  transition: background-color 0.3s ease;
}

/* 生成OFF文本 */
.toggle-track:after {
  content: "OFF";
  position: absolute;
  right: 10px;
  color: white;
  font-size: 14px;
  font-weight: 500;
  line-height: 36px;
  transition: all 0.3s ease;
}

/* 选中时切换为ON文本,调整位置 */
.toggle-input:checked + .toggle-track {
  background-color: #9c27b0;
}
.toggle-input:checked + .toggle-track:after {
  content: "ON";
  left: 10px;
  right: auto;
}

.toggle-track:before {
  content: "";
  position: absolute;
  width: 28px;
  height: 28px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  border-radius: 50%;
  transition: transform 0.3s ease;
  box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}

.toggle-input:checked + .toggle-track:before {
  transform: translateX(34px);
}

这两种方法都能实现你要的效果:按钮开启时紫色区域显示ON,关闭时灰色区域显示OFF。你之前的问题大概率是没利用:checked伪类来切换content的内容,或者文本的位置没调整好,导致看不到效果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:35:13