在切换按钮中添加动画

Raj*_*aja 1 html css css3 css-transitions

我正在尝试使用HTML元素创建一个切换按钮.但我不能为此做动画.在这里,我尝试使用transitionCSS3属性.转换仅适用于某些元素,并且它不能按预期的switch-group:before元素工作.有没有办法改进更多的动画来获得一个有吸引力的动画?我尝试了很多链接,但这对我的代码没有帮助.我在下面附上了代码,

input[type=checkbox] {
  display: none;
}

.switch-wrapper {
  position: relative;
  width: 70px;
  border: 1px solid;
  cursor: pointer;
  height: 22px;
  overflow: hidden;
}

.switch-on,
.switch-off {
  display: block;
  width: 50%;
  float: left;
  height: 100%;
  transition: 0.5s;
}

.switch-on {
  background-color: red;
  margin-left: -100%;
  text-indent: -18px;
  line-height: 21px;
  text-align: center;
}

.switch-off {
  text-indent: 18px;
  line-height: 21px;
  text-align: center;
  background-color: aliceblue;
}

.switch-group:before {
  display: block;
  content: "";
  position: absolute;
  height: 18px;
  width: 18px;
  margin: 2px;
  background-color: #1b191e;
  top: 0px;
}

.switch-group {
  display: block;
  position: relative;
  height: 23px;
  width: 200%;
  user-select: none;
}

input[type=checkbox]:checked+.switch-group .switch-on {
  margin-left: 0;
}

input[type=checkbox]:checked+.switch-group:before {
  right: 50%;
}
Run Code Online (Sandbox Code Playgroud)
<div class="switch-wrapper">
  <input type="checkbox" id="checked" />
  <label class="switch-group" for="checked">
    <span class="switch-on">ON</span>
    <span class="switch-off">OFF</span>
  </label>
</div>
Run Code Online (Sandbox Code Playgroud)

Bhu*_*wan 5

转换不适用于您的:before伪元素,因为您正在将:before rightauto(默认情况下)更改为0...转换不适用于auto值...

因此,尝试left:0在开始时使用,然后使用单击(当输入选中时)更改它的值,calc()并使用transtion:0.5sin :before来使其具有动画效果

input[type=checkbox] {
  display: none;
}

.switch-wrapper {
  position: relative;
  width: 70px;
  border: 1px solid;
  cursor: pointer;
  height: 22px;
  overflow: hidden;
}

.switch-on,
.switch-off {
  display: block;
  width: 50%;
  float: left;
  height: 100%;
  transition: 0.5s;
}

.switch-on {
  background-color: red;
  margin-left: -50%;
  text-indent: -18px;
  line-height: 21px;
  text-align: center;
}

.switch-off {
  text-indent: 18px;
  line-height: 21px;
  text-align: center;
  background-color: aliceblue;
}

.switch-group:before {
  display: block;
  content: "";
  position: absolute;
  height: 18px;
  width: 18px;
  margin: 2px;
  background-color: #1b191e;
  top: 0px;
  left: 0;
  transition: 0.5s;
}

.switch-group {
  display: block;
  position: relative;
  height: 23px;
  width: 200%;
  user-select: none;
}

input[type=checkbox]:checked+.switch-group .switch-on {
  margin-left: 0;
}

input[type=checkbox]:checked+.switch-group:before {
  left: calc(50% - 22px);
}
Run Code Online (Sandbox Code Playgroud)
<div class="switch-wrapper">
  <input type="checkbox" id="checked" />
  <label class="switch-group" for="checked">
    <span class="switch-on">ON</span>
    <span class="switch-off">OFF</span>
  </label>
</div>
Run Code Online (Sandbox Code Playgroud)


或者,如果您希望代码以更直观的方式工作,请尝试使用opacity而不是margin.

我已经改变了一些你的CSS

input[type=checkbox] {
  display: none;
}

.switch-wrapper {
  position: relative;
  width: 70px;
  border: 1px solid;
  cursor: pointer;
  height: 22px;
  overflow: hidden;
}

.switch-on,
.switch-off {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  transition: 0.5s;
  padding: 2px 6px;
}

.switch-on {
  background-color: red;
  line-height: 21px;
  opacity: 0;
}

.switch-off {
  line-height: 21px;
  background-color: aliceblue;
  opacity: 1;
  text-align: right;
}

.switch-group:before {
  display: block;
  content: "";
  position: absolute;
  height: 18px;
  width: 18px;
  margin: 2px;
  background-color: #1b191e;
  top: 0px;
  left: 0;
  transition: 0.5s;
  z-index: 99;
}

.switch-group {
  display: block;
  position: relative;
  height: 23px;
  user-select: none;
}

input[type=checkbox]:checked+.switch-group .switch-on {
  opacity: 1;
}

input[type=checkbox]:checked+.switch-group .switch-off {
  opacity: 0;
}

input[type=checkbox]:checked+.switch-group:before {
  left: calc(100% - 22px);
}
Run Code Online (Sandbox Code Playgroud)
<div class="switch-wrapper">
  <input type="checkbox" id="checked" />
  <label class="switch-group" for="checked">
    <span class="switch-on">ON</span>
    <span class="switch-off">OFF</span>
  </label>
</div>
Run Code Online (Sandbox Code Playgroud)