【问题标题】:Dropdown transition not working in Safari下拉转换在 Safari 中不起作用
【发布时间】:2016-08-02 21:03:05
【问题描述】:

我有一个导航,其中一些项目有一个下拉菜单。 在 Firefox 和 Chrome 中,一切正常。 但在 Safari 中,这种转换根本没有发生。

如果 safari 有过渡问题,但页面上的其他过渡没有任何问题,我已经搜索了一下。

我已将fiddle 包含在代码中。

HTML

<nav>
  <ul>
    <li><a href="">lorem</a></li>
    <li class="dd">
      <a href="" class="dd-trigger">ipsum</a>
      <ul class="dd-list">
        <li><a href="">sit</a></li>
        <li><a href="">amet</a></li>
      </ul>
    </li>
    <li><a href="">dolor</a></li>
  </ul>
</nav>

CSS

nav > ul:after {
  display: table;
  clear: both;
  content: '';
}

nav {
  margin-top: 60px;
}
nav > ul {
  background: turquoise;
}
nav > ul > li {
  float: left;
  margin-left: 20px;
}

.dd {
  position: relative;
}
.dd:hover .dd-list {
  height: auto;
  opacity: 1;
  transform: translateY(100%);
}

.dd-list {
  background: lightgray;
  position: absolute;
  bottom: 0;
  transform: translateY(97%);
  height: 0;
  overflow: hidden;
  opacity: 0;
  transition: opacity 250ms ease,  transform 250ms ease,  height 250ms ease;
}

ul {
  list-style: none;
  padding: 0;
  margin: 0;
}
ul a {
  display: block;
  color: white;
  padding: 10px 15px;
}
ul a:hover {
  background: darkturquoise;
}

【问题讨论】:

    标签: html css safari css-transitions


    【解决方案1】:

    我已设置浏览器前缀并将height: 1px; 添加到.dd-listJSFiddle


    CSS

    nav > ul:after {
      display: table;
      clear: both;
      content: '';
    }
    
    nav {
      margin-top: 60px;
    }
    nav > ul {
      background: turquoise;
    }
    nav > ul > li {
      float: left;
      margin-left: 20px;
    }
    
    .dd {
      position: relative;
    }
    .dd:hover .dd-list {
      height: auto;
      opacity: 1;
      transform: translateY(100%);
      -webkit-transform: translateY(100%);
      -moz-transform: translateY(100%);
      -ms-transform: translateY(100%);
      -o-transform: translateY(100%);
    }
    
    .dd-list {
      background: lightgray;
      position: absolute;
      bottom: 0;
      transform: translateY(97%);
      -webkit-transform: translateY(97%);
      -moz-transform: translateY(97%);
      -ms-transform: translateY(97%);
      -o-transform: translateY(97%);
      height: 1px;
      overflow: hidden;
      opacity: 0;
      transition: opacity 250ms ease, transform 250ms ease, height 250ms ease;
      -webkit-transition: opacity 250ms ease, transform 250ms ease, height 250ms ease;
      -moz-transform: opacity 250ms ease, transform 250ms ease, height 250ms ease;
      -ms-transform: opacity 250ms ease, transform 250ms ease, height 250ms ease;
      -o-transform: opacity 250ms ease, transform 250ms ease, height 250ms ease;
    }
    
    ul {
      list-style: none;
      padding: 0;
      margin: 0;
    }
    ul a {
      display: block;
      color: white;
      padding: 10px 15px;
    }
    ul a:hover {
      background: darkturquoise;
    }
    

    【讨论】:

    • 感谢您的回答,但是当您将鼠标悬停在它出现的不可见下拉列表上时,我发现了一个错误,这不应该发生。我通过将高度设置为 1px 而不是最小高度来修复它
    • 好的,很高兴它有帮助。编辑我的答案以匹配解决方案
    【解决方案2】:

    像这样在所有转换 css 之前添加前缀 -webkit-

    -webkit-transform: translateY(100%);
    

    Transform 仅在带有前缀 -webkit- 的 Safari 中有效。

    好习惯是所有前缀都用tranformcss

    transform:
    -webkit-transform:
    -moz-transform:
    -ms-transform:
    -o-transform:
    

    这种方式转换适用于所有浏览器

    【讨论】:

    • 如果我在小提琴中添加前缀它仍然不会改变任何东西
    • 请创建一个小提琴来查看问题
    【解决方案3】:

    我用一个小技巧解决了它..

    设置height: 1px,你可以吗?并且还设置了 -webkit-transform 和 -webkit-transition 支持。

    【讨论】:

    • 是的,1px 阻止它可见,但过渡不平滑
    猜你喜欢
    • 2017-06-17
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2020-03-26
    • 2015-07-19
    • 1970-01-01
    • 2018-07-24
    • 2017-11-03
    相关资源
    最近更新 更多