【问题标题】:How to change the size of a css toggle switch如何更改css切换开关的大小
【发布时间】:2022-01-05 08:58:01
【问题描述】:

我正在为一个名为 elementor 的插件设计一个元素。这个项目真的只是为了帮助我学习为 wordpress 开发的功能。

我正在制作的是一个“切换内容”滑块,可以在文本或预定义的 html 之间切换。我根据本指南使用了滑块:https://www.w3schools.com/howto/howto_css_switch.asp 现在开关的尺寸非常大。我想要一个小开关。怎么可能改变呢?谁能帮我吗?谢谢。

.switch {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
}

.switch input { 
  opacity: 0;
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: .4s;
  transition: .4s;
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  -webkit-transition: .4s;
  transition: .4s;
}

input:checked + .slider {
  background-color: #2196F3;
}

input:focus + .slider {
  box-shadow: 0 0 1px #2196F3;
}

input:checked + .slider:before {
  -webkit-transform: translateX(26px);
  -ms-transform: translateX(26px);
  transform: translateX(26px);
}

/* Rounded sliders */
.slider.round {
  border-radius: 34px;
}

.slider.round:before {
  border-radius: 50%;
}

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>

</style>
</head>
<body>

<h2>Toggle Switch</h2>

<label class=" switch">
  <input type="checkbox" checked>
  <span class=" slider round"></span>
</label>

</body>
</html> 

【问题讨论】:

  • 你可以使用calc();var();,因为px你需要从零开始重写尺寸

标签: html css toggle


【解决方案1】:

我用过calc();var();,所以你不用做很多工作
Mozilla 文档:calc() explanationvar() explanation--var: ; explanation

只需更改 ONE开关高度 即可响应所有更改!!!

* {
    --switch-height: 34px; /* change the value */
      
    /* other code, pls see it then */
}

如果你想要一个更小的开关,8px 默认填充,会占用很多空间,
所以我为您简化了!只需将 --switch-padding: 8px; 更改为更小的内容...
CSS 会自动为您计算所有内容,以使开关 看起来不错 所有尺寸 :)

如果你想让开关更大,同样的事情,记得让填充也更大(填充变量)

我知道这不是一个“we-are-doing-your-work.com”网站,但我真的很想帮助你!

这里是完整的固定代码:

* {
  --switch-height: 34px;
  --switch-padding: 8px;
  --switch-width: calc((var(--switch-height) * 2) - var(--switch-padding));
  --slider-height: calc(var(--switch-height) - var(--switch-padding));
  --slider-on: calc(var(--switch-height) - var(--switch-padding));
}

.switch {
  position: relative;
  display: inline-block;
  width: var(--switch-width);
  height: var(--switch-height);
}

.switch input {
  opacity: 0;
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: .4s;
  transition: .4s;
}

.slider:before {
  content: "";
  position: absolute;
  height: var(--slider-height);
  width: var(--slider-height);
  left: calc(var(--switch-padding) / 2);
  bottom: calc(var(--switch-padding) / 2);
  background-color: white;
  -webkit-transition: .4s;
  transition: .4s;
}

input:checked+.slider {
  background-color: #2196F3;
}

input:focus+.slider {
  box-shadow: 0 0 1px #2196F3;
}

input:checked+.slider:before {
  transform: translateX(var(--slider-on));
}

.slider.round {
  border-radius: var(--slider-height);
}

.slider.round:before {
  border-radius: 50%;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>

  <h2>Toggle Switch</h2>

  <label class="switch">
        <input type="checkbox" checked>
        <span class="slider round"></span>
    </label>

</body>

</html>

【讨论】:

    【解决方案2】:

    你可以通过改变css来改变大小

    .switch {
      position: relative;
      display: inline-block;
      width: 35px;
      height: 22px;
    }
    
    .switch input { 
      opacity: 0;
      width: 0;
      height: 0;
    }
    
    .slider {
      position: absolute;
      cursor: pointer;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background-color: #ccc;
      -webkit-transition: .4s;
      transition: .4s;
    }
    
    .slider:before {
      position: absolute;
      content: "";
      height: 10px;
      width: 10px;
      left: 4px;
      bottom: 6px;
      background-color: white;
      -webkit-transition: .4s;
      transition: .4s;
    }
    
    input:checked + .slider {
      background-color: #2196F3;
    }
    
    input:focus + .slider {
      box-shadow: 0 0 1px #2196F3;
    }
    
    input:checked + .slider:before {
      -webkit-transform: translateX(16px);
      -ms-transform: translateX(16px);
      transform: translateX(16px);
    }
    
    /* Rounded sliders */
    .slider.round {
      border-radius: 34px;
    }
    
    .slider.round:before {
      border-radius: 50%;
    }
    <html>
    <head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
    
    </style>
    </head>
    <body>
    
    <h2>Toggle Switch</h2>
    
    <label class=" switch">
      <input type="checkbox" checked>
      <span class=" slider round"></span>
    </label>
    
    </body>
    </html>

    尝试不同的宽度和高度

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-17
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2018-04-23
      • 2015-02-21
      • 1970-01-01
      相关资源
      最近更新 更多