【问题标题】:Pure CSS Animating Mobile menu activated using radiobutton使用单选按钮激活的纯 CSS 动画移动菜单
【发布时间】:2018-01-17 17:47:35
【问题描述】:

我有一个移动菜单,单击时应该形成 X,但是它没有响应并且卡在它的形状上。我不知道为什么它会那样做,但据我分析,这段代码应该在单击时为菜单设置动画以形成 X。我附上代码供参考。

这些是 CSS 和 HTML

/* Checkbox Hack */
input[type=checkbox] {
  display: block;
  width: 40px;
  height: 32px;
  position: absolute;
  top: -7px;
  left: -5px;
  cursor: pointer;
  opacity: 0;
  z-index: 2;
  -webkit-touch-callout: none;
}

/* Default State */
.divko {
  background: green;
  width: 400px;
  height: 100px;
  line-height: 100px;
  color: white;
  text-align: center;
}

/* Toggled State */
.myspan {
  display: block;
  width: 33px;
  height: 4px;
  margin-bottom: 5px;
  position: relative;
  background: #cdcdcd;
  border-radius: 3px;
  z-index: 1;
  transform-origin: 4px 0px;
  transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), background 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), opacity 0.55s ease;
}

.myspan:first-child {
  transform-origin: 0% 0%;
}

.myspan:nth-last-child(2) {
  transform-origin: 0% 100%;
}

input[type=checkbox]:checked ~ .myspan {
  opacity: 1;
  transform: rotate(45deg) translate(-2px, -1px);
  background: #232323;
}

input[type=checkbox]:checked ~ .divko {
  background: red;
}
<div for="toggle-1"> <span class="myspan"></span>
  <span class="myspan"></span>
  <span class="myspan"></span></div>
<input type="checkbox" id="toggle-1">
<div class="divko">I'm controlled by toggle. No JavaScript!</div>

这里是 dabblet http://dabblet.com/gist/5b4667ecc7255c228cd488c080140d95

【问题讨论】:

  • 嘿,我通过修改您的 html 将输入放在第一个跨度之前,让它与您当前的 CSS 一起工作。 CSS 没有被应用到它,因为你实际上并没有因为它的位置而选择它。
  • 确实,我可以通过应用 Ori 的修复来修复它。

标签: html css css-transitions css-transforms


【解决方案1】:

将复选框放在我为 .menu 类提供的 div 之前,并将规则应用于 input[type=checkbox]:checked ~ .menu &gt; .myspan

/* Checkbox Hack */
input[type=checkbox] {
  display: block;
  width: 40px;
  height: 32px;
  position: absolute;
  top: -7px;
  left: -5px;
  cursor: pointer;
  opacity: 0;
  z-index: 2;
  -webkit-touch-callout: none;
}

/* Default State */
.divko {
  background: green;
  width: 400px;
  height: 100px;
  line-height: 100px;
  color: white;
  text-align: center;
}

/* Toggled State */
.myspan {
  display: block;
  width: 33px;
  height: 4px;
  margin-bottom: 5px;
  position: relative;
  background: #cdcdcd;
  border-radius: 3px;
  z-index: 1;
  transform-origin: 4px 2px;
  transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), background 0.5s cubic-bezier(0.77, 0.2, 0.05, 1.0), opacity 0.55s ease;
}

input[type=checkbox]:checked ~ .menu > .myspan {
  opacity: 1;
  background: #232323;
}

input[type=checkbox]:checked ~ .menu > .myspan:first-child {
  transform: rotate(45deg);
}

input[type=checkbox]:checked ~ .menu > .myspan:nth-child(2) {
  transform: translate(-100px);
}

input[type=checkbox]:checked ~ .menu > .myspan:last-child {
  transform: rotate(-45deg);
}

input[type=checkbox]:checked ~ .divko {
  background: red;
}
<input type="checkbox" id="toggle-1">

<div for="toggle-1" class="menu">
  <span class="myspan"></span>
  <span class="myspan"></span>
  <span class="myspan"></span>
</div>

<div class="divko">I'm controlled by toggle. No JavaScript!</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多