【问题标题】:Getting following content to collapse when using transform to hide content使用转换隐藏内容时使以下内容折叠
【发布时间】:2016-09-26 13:31:15
【问题描述】:

我有一种情况,例如,我有一个一个接一个的小盒子,我希望用户能够切换这些元素的显示/隐藏,我让它们按我想要的方式工作,但是当相应的框被折叠/隐藏它下面的内容也不会向上折叠。

我理解为什么会这样,这是因为使用transform 它仍然为您从其原始位置转换出来的元素分配空间;但是,由于某种原因,我无法以与使用负数 margin-top 相同的方式找到另一种方法来实现它的动画效果,而不像 transform 那样流畅。

CodePen: http://codepen.io/gutterboy/pen/GqRoJY

CodePen(margin-top 版本): http://codepen.io/gutterboy/pen/WxNGVG

HTML:

<div class="foo">
    <header>
        Header
        <a href="#" class="toggle" data-content-id="1">Toggle</a>
    </header>
    <div class="content-wrap">
        <div id="content-1" class="content">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cur id non ita fit? Et ille ridens: Video, inquit, quid agas; Quorum altera prosunt, nocent altera. Nulla erit controversia. Neutrum vero, inquit ille. Quis non odit sordidos, vanos, leves, futtiles?
            Duo Reges: constructio interrete. Quare ad ea primum, si videtur;
        </div>
    </div>
</div>
<div class="foo">
    <header>
        Header
        <a href="#" class="toggle" data-content-id="2">Toggle</a>
    </header>
    <div class="content-wrap">
        <div id="content-2" class="content">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cur id non ita fit? Et ille ridens: Video, inquit, quid agas; Quorum altera prosunt, nocent altera. Nulla erit controversia. Neutrum vero, inquit ille. Quis non odit sordidos, vanos, leves, futtiles?
            Duo Reges: constructio interrete. Quare ad ea primum, si videtur;
        </div>
    </div>
</div>
<div class="foo">
    <header>
        Header
        <a href="#" class="toggle" data-content-id="3">Toggle</a>
    </header>
    <div class="content-wrap">
        <div id="content-3" class="content">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cur id non ita fit? Et ille ridens: Video, inquit, quid agas; Quorum altera prosunt, nocent altera. Nulla erit controversia. Neutrum vero, inquit ille. Quis non odit sordidos, vanos, leves, futtiles?
            Duo Reges: constructio interrete. Quare ad ea primum, si videtur;
        </div>
    </div>
</div>

CSS (SCSS):

.foo {
    margin: 10px;
    width: 400px;

    header {
        padding: 10px;
        border: 1px solid #000;
        border-bottom: 2px solid #000;
    }

    .content-wrap {
        overflow-y: hidden;
        transform-style: preserve-3d;
    }

    .content {
        padding: 10px;
        background-color: gray;
        transform: translateY(0);
        border: 1px solid #000;
        border-top: none;
        transition: 1s;

        &.closed {
            transform: translateY(-100%);
        }

    }

}

JS(jQuery):

$(document).ready(function() {

    $('.toggle').on('click', function(e) {

        e.preventDefault();

        var content_id = $(this).data('content-id');

        $('#content-' + content_id).toggleClass('closed');

    });

});

有没有办法让下面的框在进行中的框同时折叠平滑?

还要注意,盒子的高度是可变的,因此我们不能使用height,希望避免使用非常高的max-height 之类的hacky 解决方案,并且最好避免使用任何JS 来制作动画。

【问题讨论】:

  • 你用的是什么浏览器?第二个版本对我来说非常顺利。 (最新的 Chrome)
  • 我假设移动所有与折叠的 div 相关的 div 可能会导致一些滞后。如果这是问题所在,那么对此无能为力。
  • @IdeaMan FireFox。但是我在 Chrome 中尝试过,结果是一样的。它向上转换的速度比向下转换快得多,当您单击以再次显示它时,它开始之前似乎存在某种形式的延迟。

标签: css sass css-animations css-transforms


【解决方案1】:

您的问题,由于margin : -100% 导致启动延迟,并且在margin : -40% 上仍然看不到 div

CSS 过渡添加或删除类时不动画,它只会在您更改 CSS 属性时动画。而你直接添加和删除类。

这是另一种通过 jQuery 获取的方法:

$('.toggle').on('click', function(e) {
  var content_id = $(this).data('content-id');
  $('#content-' + content_id).slideToggle('slow');
});

更新Codepen

【讨论】:

  • linear 不只是要使用的 easing 吗?比如你可以使用ease,我相信这是默认的,还有ease-inease-out等?
  • @Brett 是的,你是对的,因为 ease 是默认值,但线性不像 ease,它与 ease 相反。你可以在这里阅读更多内容stackoverflow.com/questions/9629346/…。我希望它可以根据您的需要正常工作。
  • 嗯,我测试了,问题仍然存在。
  • 刚刚在 Chrome 中测试过,也有其他人测试过,但在重新打开内容时,两者仍然显示有小延迟。
  • 延迟的主要原因是 margin: -100% 是相对于祖先的,因此比它需要的大(或多或少与声明 max-height 更大的问题相同)比需要)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 2015-03-20
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多