自定义开关(switch)

演示代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>custom_switch</title>
  </head>
  <style>
    /** 开关 */
    .custom_switch {
      --switch-padding: 3px;
      --btnSize: 20px;
      --animation: all 0.3s;
      display: inline-flex;
      align-items: center;
      padding: var(--switch-padding);
      background-color: #ccc;
      color: #fff;
      border-radius: calc(var(--btnSize) + var(--switch-padding) * 2);
      cursor: pointer;
      user-select: none;
      font-family: Helvetica;
      line-height: var(--btnSize);
      transition: var(--animation);
      position: relative;
      padding-left: calc(var(--btnSize) + var(--switch-padding));
      -webkit-tap-highlight-color: transparent;
    }
    /** 开关-按钮 */
    .custom_switch::before {
      content: "";
      width: var(--btnSize);
      height: var(--btnSize);
      background-color: #fff;
      border-radius: 50%;
      position: absolute;
      left: var(--switch-padding);
      transition: var(--animation);
    }
    /** 开关-文本 */
    .custom_switch::after {
      content: attr(data-inactive);
      padding: 0 5px;
    }
    /** 开关-激活 */
    .custom_switch.active {
      background-color: #5a76ff;
      padding-left: var(--switch-padding);
      padding-right: calc(var(--btnSize) + var(--switch-padding));
    }
    /** 开关-激活-按钮 */
    .custom_switch.active::before {
      left: calc(100% - var(--btnSize) - var(--switch-padding));
    }
    /** 开关-激活-文本 */
    .custom_switch.active::after {
      content: attr(data-active);
    }
  </style>
  <body>
    <div class="custom_switch" data-active="启用" data-inactive="禁用"></div>
    <div class="custom_switch active" data-active="启用" data-inactive="不启用"></div>
  </body>
  <script>
    document.querySelectorAll(".custom_switch").forEach((item) => {
      item.addEventListener("click", () => {
        item.classList.toggle("active");
      });
    });
  </script>
</html>

纯净样式

/** 开关 */
.custom_switch {
  --switch-padding: 3px;
  --btnSize: 20px;
  --animation: all 0.3s;
  display: inline-flex;
  align-items: center;
  padding: var(--switch-padding);
  background-color: #ccc;
  color: #fff;
  border-radius: calc(var(--btnSize) + var(--switch-padding) * 2);
  cursor: pointer;
  user-select: none;
  font-family: Helvetica;
  line-height: var(--btnSize);
  transition: var(--animation);
  position: relative;
  padding-left: calc(var(--btnSize) + var(--switch-padding));
  -webkit-tap-highlight-color: transparent;
}
/** 开关-按钮 */
.custom_switch::before {
  content: "";
  width: var(--btnSize);
  height: var(--btnSize);
  background-color: #fff;
  border-radius: 50%;
  position: absolute;
  left: var(--switch-padding);
  transition: var(--animation);
}
/** 开关-文本 */
.custom_switch::after {
  content: attr(data-inactive);
  padding: 0 5px;
}
/** 开关-激活 */
.custom_switch.active {
  background-color: #5a76ff;
  padding-left: var(--switch-padding);
  padding-right: calc(var(--btnSize) + var(--switch-padding));
}
/** 开关-激活-按钮 */
.custom_switch.active::before {
  left: calc(100% - var(--btnSize) - var(--switch-padding));
}
/** 开关-激活-文本 */
.custom_switch.active::after {
  content: attr(data-active);
}

使用方法

<div class="custom_switch" data-active="启用" data-inactive="禁用"></div>
<div class="custom_switch active" data-active="启用" data-inactive="不启用"></div>
<!-- 
默认开关为关闭状态,通过切换class切换状态
class="active" 开关为开启状态
data-active="开启状态文本" 开关为开启状态时的文本
data-inactive="关闭状态文本" 开关为关闭状态时的文本
 -->

效果

posted @ 2024-12-30 12:58  杜柯枫  阅读(3)  评论(0编辑  收藏  举报