【问题标题】:Replacing a containers content with css transition between with unkown height用未知高度之间的css转换替换容器内容
【发布时间】:2018-11-19 16:58:02
【问题描述】:

我想动态替换模态弹窗的内容,它可以在旧尺寸和新尺寸之间进行平滑过渡。

我认为我可以使用 CSS 过渡来做到这一点,但到目前为止我还没有成功。

我的设置类似于这里的 JS fiddle,我有一个容器,我用不同的宽度和高度交换了内部内容。

http://jsfiddle.net/Lsf76eby/24/

html

<input type="button" value="press me" onclick="changeDiv()" />

<div id="container">
    <div id="a">
    </div>
</div>

js

function changeDiv(){
    var b = $('<div id="b">');
    $('#container').empty().append(b);
}

css

#container{
  transition: 2s;
  height: auto;
}

#a {
  height: 200px;
  width: 200px;
  background:blue;
}

#b {
  height: 400px;
  width: 300px;
  background:red;
}

【问题讨论】:

    标签: javascript jquery html css transition


    【解决方案1】:

    我对小提琴的分支here 做了一些更改。您可以从https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions 阅读更多相关信息

    我添加了一个新的 javascript 函数,添加了一个 css 属性,并对 css 进行了一点重组

    • 您必须使用transition-property 定义将要进行转换的所有属性
    • 一个重大变化是我的 javascript 函数(改编自 MDN)在单个 div 上切换类,而不是切换 div 本身。

    希望这会有所帮助!

    html

    <div id="container">
        <div id="target" class="a">
        </div>
    </div>
    

    javascript

    //pretty much straight from the MDN doc...
    function updateTransition() {
      var el = document.querySelector("div.a");
    
      if (el) {
        el.className = "b";
      } else {
        el = document.querySelector("div.b");
        el.className = "a";
      }
    
      return el;
    }
    

    css

    #container{
      height: auto;
    }
    #target{
      transition: 2s;
      transition-property: width height background-color;
    }
    
    .a {
      height: 200px;
      width: 200px;
      background-color:blue;
    }
    
    .b {
      height: 400px;
      width: 300px;
      background-color:red;
    }
    

    【讨论】:

    • 非常感谢您的回答。问题是我没有要过渡的课程 - 抱歉,我应该更清楚地说明这一点。我只是有一个不同大小的 div 内容。特别是我会知道宽度但不知道高度。你知道是否有办法使用自动高度容器来做到这一点?
    • 这不再涉及过渡,但是有一个简单的方法来适应内容——只需使用min-heightheight: autojsfiddle.net/w1na6bsf/4设置以px为单位的高度——点击“添加文本”按钮我添加了很多次以了解我的意思。抱歉,如果我没有正确理解您的意图...
    • 抱歉,这就是我现在的样子,我只是想让它在一个很好的过渡中增长或缩小,而不是在有意义的情况下跳到新的大小。因此,如果我从一个有很多行的表转到一个只有几行的表,它会在 1 秒内过渡到新的较小尺寸。
    • 也许我必须得到新内容的高度,然后在 div 上设置它,然后我应该能够使用我正在考虑的过渡
    • 获取 div 的高度并设置它已经解决了我的问题,非常感谢。
    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2014-09-29
    • 1970-01-01
    • 2017-10-07
    相关资源
    最近更新 更多