HTML /CSS iOSのようなSlide Switchを実装する

はじめに

ロボットをWebページから操作する上で、iPhone等でよく使われている、次の写真のようなトグルスイッチを実装してみたので、その手順をまとめます。

HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Robot Controller</title>
  <link rel="stylesheet" href="style.css">
  <script src="script.js" defer></script>
</head>
<body>
    <div class="container">
      <div class="toggle-btn" id="btn_fast_slow" onclick="this.classList.toggle('active')">
        <div class="inner-circle"></div>
      </div>
    </div>
</body>
</html>

CSS

.container {
  position: absolute;
  left: 725px;
  top: 743px;
  transform:translate(-50%, -50%);
}

.toggle-btn {
  width: 230px;
  height: 100px;
  background: rgb(240, 240, 240);
  border-radius: 90px;
  padding: 5px;
  transition: all 300ms ease-in-out;
}

.toggle-btn > .inner-circle {
  width: 100px;
  height: 100px;
  background: white;
  border-radius: 50%;
  transition: all 300ms ease-in-out;
  filter: drop-shadow(5px 5px 3px rgba(0, 0, 0, 0.161));
}

.toggle-btn.active {
  background:rgb(55, 248, 168);
}

.toggle-btn.active > .inner-circle {
  margin-left: 132px;
}

解説

divタグのcontainerというクラスを用意して、まずCSS配置を決めています。

toggle-btnクラスの中で、HTMLのonclick属性を使用して処理を行います。this.classList.toggle(‘active’)の記述で、CSSで記述したtoggle-btnのactiveクラスを有効にしています。

classListによって、toggle-btnクラスにクラス名を追加したり削除したりすることができます。toggleメソッドを指定することで、クラスが含まれている場合は削除、含まれていない場合は追加することが可能です。

    <div class="container">
      <div class="toggle-btn" id="btn_fast_slow" onclick="this.classList.toggle('active')">
        <div class="inner-circle"></div>
      </div>
    </div>

CSSでtoggle-btnに対して、actibeという子クラスを定義して、スイッチを押した時の背景色の変化と、円の移動を定義しています。

.toggle-btn.active {
  background:rgb(55, 248, 168);
}

.toggle-btn.active > .inner-circle {
  margin-left: 132px;
}

参考にさせて頂いたリンク

https://qiita.com/tomokichi_ruby/items/2460c5902d19b81cace5