"Transition" 不转换 ul 元素

"Transition" does not transform the ul element

这是一个简单的下拉菜单。

无法理解为什么带有 "transition" 的动画不转换 ul 元素?我用 START & END 隔离了代码中的问题。

一开始 ul 有 translateY(-2em),悬停时有 translateY(0%)

html {
  background: #EEEEEE;
}
.container {
  background: white;
  margin: 5% auto 0 auto;
}
.menu ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
.menu ul li {
  display: inline-block;
  padding: 15px;
  position: relative;
}
/*
////////////
////START///
////////////
*/

.menu ul li ul {
  display: none;
  transform: translateY(-2em);
  /* Why transition does not work? */
  transition: transform 300ms ease-in-out 0s;
}
.menu ul li:hover ul {
  display: flex;
  flex-direction: column;
  position: absolute;
  background: white;
  margin-top: 15px;
  width: 100%;
  left: 0;
  transform: translateY(0%)
}
/*
////////////
////END/////
////////////
*/

.menu ul li:hover ul li:hover {
  background: #EEEEEE;
}
<div class="container">
  <div class="menu">
    <ul>
      <li>One
      </li>
      <li>Hover
        <ul ">
              <li>0</li>
              <li>0</li>
              <li>0</li>
              <li>0</li>
              <li>0</li>
            </ul>
          </li>

          <li>Three</li>
        </ul>
      </div>
    </div>

这并不漂亮,但它表明是 displayposition 属性的更改阻止了转换工作。

最常见的是使用 max-heightopacity and/or visibility.

html {
  background: #EEEEEE;
}
.container {
  background: white;
  margin: 5% auto 0 auto;
}
.menu ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
.menu ul li {
  display: inline-block;
  padding: 15px;
  position: relative;
}
/*
////////////
////START///
////////////
*/

.menu ul li ul {
  transform: translateY(-2em);
  /* Why transition does not work? */
  transition: all 300ms ease-in-out;
}
.menu ul li:hover ul {
  background: white;
  margin-top: 15px;
  width: 100%;
  left: 0;
  transform: translateY(0%)
}
/*
////////////
////END/////
////////////
*/

.menu ul li:hover ul li:hover {
  background: #EEEEEE;
}
<div class="container">
  <div class="menu">
    <ul>
      <li>One
      </li>
      <li>Hover
        <ul ">
              <li>0</li>
              <li>0</li>
              <li>0</li>
              <li>0</li>
              <li>0</li>
            </ul>
          </li>

          <li>Three</li>
        </ul>
      </div>
    </div>