在 div 而不是输入字段上使用 CSS 切换

Using a CSS toggle on a div instead of input field

我正在寻找一种制作某种切换按钮的方法,我找到了一个正是我想要的,但是这个例子是在输入字段上使用切换按钮,我想在 div.我尝试了一些更改 CSS 类 的方法,但由于某种原因我无法使其正常工作。

这是示例CSS我正在使用:

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

.switch input {display:none;}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ca2222;
  -webkit-transition: .4s;
  transition: .4s;
   border-radius: 34px;
}

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

input:checked + .slider {
  background-color: #2ab934;
}

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

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

/*------ ADDED CSS ---------*/
.slider:after
{
 content:'OFF';
 color: white;
 display: block;
 position: absolute;
 transform: translate(-50%,-50%);
 top: 50%;
 left: 50%;
 font-size: 10px;
 font-family: Verdana, sans-serif;
}

input:checked + .slider:after
{  
  content:'ON';
}

/*--------- END --------*/

这是例子HTML:

<label class="switch"><input type="checkbox" id="togBtn"><div class="slider round"></div></label>

当我这样使用它时,一切正常,但我的 HTML 和 div 我想切换的是这样的:

<div class="facetwp-facet facetwp-facet-aanbieding facetwp-type-checkboxes" data-name="aanbieding" data-type="checkboxes">
    <div class="facetwp-checkbox" data-value="ja">Ja</div>
</div>

我对示例 CSS 进行了更改,使其适用于 div 我想切换,但我对如何使其正常工作有点迷茫。

也许这很简单,但我迷路了,所以如果有人能帮助我一点点,那就太好了!

我将 checked class 添加到 slider div 而不是 :checked 输入 checkbox.

因此 CSS 代码中的一些更改。

.slider.checked{...} instead of input:checked + .slider {...}

.slider:focus{...} instead of input:focus + .slider {...}

.slider.checked:before {...} instead of input:checked + .slider:before {...}

试用 Jquery

中的演示
  • 使用 Jquery 单击滑块 div 以 切换 class checked.

$(".slider").click(function(){
  $(this).toggleClass("checked");
});
.switch {
  position: relative;
  display: inline-block;
  width: 90px;
  height: 34px;
}


.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ca2222;
  -webkit-transition: .4s;
  transition: .4s;
   border-radius: 34px;
}

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

.slider.checked{
  background-color: #2ab934;
}

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

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

/*------ ADDED CSS ---------*/
.slider:after
{
 content:'OFF';
 color: white;
 display: block;
 position: absolute;
 transform: translate(-50%,-50%);
 top: 50%;
 left: 50%;
 font-size: 10px;
 font-family: Verdana, sans-serif;
}

.slider.checked:after
{  
  content:'ON';
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="switch">
    <div class="slider round"></div>
</div>

试用 Javascript

中的演示
  • 使用 Javascript 单击滑块 div 以 切换 class checked.

function sliding(obj){
 obj.classList.toggle("checked");
}
.switch {
  position: relative;
  display: inline-block;
  width: 90px;
  height: 34px;
}


.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ca2222;
  -webkit-transition: .4s;
  transition: .4s;
   border-radius: 34px;
}

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

.slider.checked{
  background-color: #2ab934;
}

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

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

/*------ ADDED CSS ---------*/
.slider:after
{
 content:'OFF';
 color: white;
 display: block;
 position: absolute;
 transform: translate(-50%,-50%);
 top: 50%;
 left: 50%;
 font-size: 10px;
 font-family: Verdana, sans-serif;
}

.slider.checked:after
{  
  content:'ON';
}
<div class="switch">
    <div onclick="sliding(this);" class="slider round"></div>
</div>