【问题标题】:How To Add CSS3 Transition With HTML5 details/summary tag reveal?如何使用 HTML5 详细信息/摘要标签添加 CSS3 过渡?
【发布时间】:2016-11-07 20:59:46
【问题描述】:

仅使用 CSS3,有没有办法在 DETAILS/SUMMARY 显示上添加漂亮的淡入和从左滑动的过渡效果?

有关此新标签的演示,请参阅此演示:

details {
  transition:height 3s ease-in;
}
<details>
  <summary>Copyright 1999-2014.</summary>
  <section>
    <p> - by Refsnes Data. All Rights Reserved.</p>
    <p>All content and graphics on this web site are the property of the company Refsnes Data.</p>
  </section>
</details>

在我的例子中,在summary 标记之后,我将所有其他内容放在它自己的section 标记中,以便我可以设置它的样式,因为summary:after 选择器似乎不起作用。我尝试在 sectiondetails 标签的高度上使用 CSS3 过渡,但没有帮助。

【问题讨论】:

  • 请将问题本身的所有 HTML 和 CSS 包含在 minimal reproducible example 中。您可能还想考虑使用与 w3schools 不同的参考,例如 MDN 甚至 the standard itself。此外,HTML 元素不需要全部大写,以这种方式引用它们会使问题难以阅读。
  • HTML 标准以全小写形式定义和讨论它们,您发布的 w3schools 链接也是如此......
  • 我没有看到您在发布的 HTML 或 jsfiddle 中尝试的 CSS3 转换。我们想看看你尝试了什么,你已经做了什么研究,等等。就关闭标志而言,如果没有其他人同意我的关闭原因,它就会消失。考虑到接近投票队列是 8k,我猜没有其他人会。
  • 请注意,仍然缺乏 Edge 支持。我提出了一个解决方案here

标签: html css css-transitions


【解决方案1】:

如果您不打算在鼠标悬停时显示它,您可能希望使用带有 keyframes 的 CSS 动画。如果你只想让动画出现,比如说,当你在页面上看到细节/摘要描述时,你可以使用一些 jQuery 让浏览器在滚动时添加动画的类。

https://jsfiddle.net/22e95bxt/

这是你要找的吗?

编辑:哎呀。这不是你要的。我的错!

【讨论】:

  • 很接近了。看起来你需要使用 [open] 和 :not([open]) 选择器来改进它,这就是我正在做的事情。
  • 如果您可以删除粗体编辑,然后将选择器切换为触发动画的 DETAILS[open] SECTION,您的答案看起来是最好的。这样,它只会在点击时发生。
【解决方案2】:

details
{
    transition: height 1s ease;
    overflow: hidden;
}

details:not([open])
{
    height: 1.25em;
}

details[open]
{
    height: 2.50em;
}
<details>
    <summary>Example</summary>
    Height needs to be set for this to work. Works on Chrome, haven't tested further.
</details>

我建议您也在这里查看 Animate.css:http://daneden.me/animate。如果

【讨论】:

  • 不幸的是,我的身高必须是自动的,因为它是不可预测的。
【解决方案3】:

这应该可以解决它。

details[open] summary ~ * {
  animation: sweep .5s ease-in-out;
}

@keyframes sweep {
  0%    {opacity: 0; margin-left: -10px}
  100%  {opacity: 1; margin-left: 0px}
}
<details>
  <summary>Copyright 1999-2014.</summary>
  <p> - by Refsnes Data. All Rights Reserved.</p>
  <p>All content and graphics on this web site are the property of the company Refsnes Data.</p>
</details>

感谢Andrew 指出这一点。我改编了他的回答。这是它的工作原理。通过在DETAILS 标签上添加[open] 属性,它只会在单击时触发动画关键帧。然后,通过添加SUMMARY ~ * 表示“SUMMARY 标记之后的所有元素”,以便动画适用于这些元素,而不是 SUMMARY 元素。

【讨论】:

  • 只有在
    之后什么都没有的情况下才有效。
  • @fcalderan 不是这样——我已经在常见问题解答中实现了它,其中有多个。
  • @Felipe & Volomike,如果你想添加一个新方法,那是一回事,但完全改变为不同的方法或多或少违反了 Stack Overflow 政策。
  • 由于性能原因考虑Felipe's answer。他有了一点小进步。
【解决方案4】:

我的造型……

使用max-height 而非height 进行转换,您可以在打开的细节中拥有未知高度(小于99rem)的内容。

details {
  margin: 1.3rem 0;
  border-bottom: 1px solid #aaa;
  padding: 0.5rem;
  height: auto;
  max-height: 1.5rem; /* set to line height */
  transition: all 0.1s ease;
}

details[open] {
  max-height: 99rem;
  transition: all 1s ease;
  border: 1px solid #aaa;
}

details summary {
  font-weight: bold;
  cursor: pointer;
  margin-bottom: 0.5em;
  font-weight: bold;
  margin: -0.5em -0.5em 0;
  padding: 0.5em;
}

details[open] summary {
  border-bottom: 1px solid #aaa;
  margin-bottom: 0.8em;
}
<details>
  <summary>Something like… question?</summary>
  And some very, very long explanation of summarised text. And some very, very long explanation of summarised text. And some very, very long explanation of summarised text
</details>

【讨论】:

    【解决方案5】:

    除了Volomike's answer,出于性能原因,还可以将margin-left 更改为transform: translateX()

    details[open] summary ~ * {
      animation: sweep .5s ease-in-out;
    }
    
    @keyframes sweep {
      0%    {opacity: 0; transform: translateX(-10px)}
      100%  {opacity: 1; transform: translateX(0)}
    }
    <details>
      <summary>Copyright 1999-2014.</summary>
      <p> - by Refsnes Data. All Rights Reserved.</p>
      <p>All content and graphics on this web site are the property of the company Refsnes Data.</p>
    </details>

    【讨论】:

    • 如何在关闭时恢复此动画?简单地添加具有相同动画但具有属性animation-direction: reversedetails[close] summary ~ * 属性不起作用。
    • @Rich_Rich 这是不可能的。根据MDN 的说法:“不幸的是,目前没有内置的方法来动画打开和关闭之间的过渡。”
    • 这是我唯一的 CSS 梦想。还需要注意:在 Firefox iOS 上(因此可能在所有 iOS 浏览器上),关闭和重新打开不会重播动画。
    猜你喜欢
    • 1970-01-01
    • 2017-09-12
    • 2012-08-19
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多