返回

checkbox+label+selector 实现脑洞开大的效果

前端

技巧说明

checkbox标签虽然可以直接实现复选框,但它独特的特性可以用CSS搭配实现更强大的功能。checkbox有checked属性,在选中时为true,配合label标签和CSS的selector就可以用非常少的代码保存一个状态,再通过保存的状态来实现意想不到的效果。

示例

一、实现一个灯泡切换

代码:

<label for="lightSwitch">
  <input type="checkbox" id="lightSwitch">
  <img src="lightbulb-off.png" alt="Lightbulb off">
</label>

<style>
#lightSwitch:checked + img {
  content: url('lightbulb-on.png');
}
</style>

效果:

动图

二、实现一个菜单切换

代码:

<nav>
  <label for="menuToggle">
    <input type="checkbox" id="menuToggle">
    <span>Menu</span>
  </label>

  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">About</a></li>
    <li><a href="#">Contact</a></li>
  </ul>
</nav>

<style>
#menuToggle:checked + ul {
  display: block;
}

ul {
  display: none;
}
</style>

效果:

动图

三、实现一个模态框

代码:

<div id="modal">
  <label for="modalToggle">
    <input type="checkbox" id="modalToggle">
    <span>Modal</span>
  </label>

  <div class="modal-content">
    <p>This is a modal window.</p>
    <button type="button">Close</button>
  </div>
</div>

<style>
#modalToggle:checked + .modal-content {
  display: block;
}

.modal-content {
  display: none;
}
</style>

效果:

动图

技巧解析

checkbox的特点是:

  1. 有checked属性,在选中时为true。
  2. checked属性可以被CSS选择器选中。

label标签可以给表单元素提供一个标签,当点击标签时,表单元素也会被选中。

selector是CSS选择器,可以用来选择HTML元素。

结合这三个特点,就可以实现各种意想不到的效果。

在示例中,灯泡切换的效果是通过checkbox的checked属性来实现的。当checkbox被选中时,图片的src属性就会变成“lightbulb-on.png”,从而实现灯泡亮起的效果。

菜单切换的效果是通过checkbox的checked属性来控制ul元素的display属性。当checkbox被选中时,ul元素的display属性就会变成“block”,从而实现菜单的显示。

模态框的效果是通过checkbox的checked属性来控制modal-content元素的display属性。当checkbox被选中时,modal-content元素的display属性就会变成“block”,从而实现模态框的显示。

结语

checkbox+label+selector是一个非常强大的技巧,可以实现各种意想不到的效果。掌握了这个技巧,你就可以在遇到类似需求时灵活应用。