问题 jQuery:有没有办法在没有任何文本移动的情况下为div的宽度设置动画?


我正在使用jQuery缩小a div的宽度,像这样:

$('div#foo').animate({width: 0},someSpeed);

虽然它正在缩小,但文字会回流以适应越来越薄的版本 div。我不希望这种情况发生 - 我希望文本保持不变,只是随着宽度减小而从视图中消失,就像你做的那样 $('div#foo').slideUp()

是否有CSS技巧或其他方式使这项工作?


4608
2018-02-03 13:33


起源

OT:如何处理宽度达到0后重新显示的文本内容?我必须使用追加 .hide(0) 保持文本隐藏 - 请看这里: jsfiddle.net/AvYyT - Šime Vidas
@ŠimeVidas - 我最初是这样做的,但我简化了我的问题: $(this).animate({width: 0, opacity: 0},speed,function(){$(this).css('display','none');});。因此,当完成动画时,它会将显示设置为无。 - Nathan Long


答案:


现场演示:  http://jsfiddle.net/AvYyT/1/ 

诀窍是使用内部容器并将其设置为外部容器的宽度。


9
2018-02-03 14:11



是的,这似乎是他正在寻找的。指出。 - David Houde


您可以使用jQuery将内容的宽度设置为 div,添加 overflow:hidden 到了 div 然后才减小宽度。

像(未经测试,可能有错别字,但你明白了......):

var el = $('div#foo');
el.children().each(function() {
  $(this).width(el.width());
});
el.css('overflow', 'hidden').animate({width: 0}, someSpeed);

但这取决于内容 div如果里面有图像,这将无效。


3
2018-02-03 14:07



将子宽度设置为父宽度的精确值是不安全的。如果孩子有填充,边缘和/或边界,孩子将变宽,见这里: jsfiddle.net/AvYyT/3。为了解决这个问题,你必须减去差异 $(this).outerWidth(true) - $(this).width(), 看这里: jsfiddle.net/AvYyT/4 - Šime Vidas
@ŠimeVidas:就像我说的,这取决于内容 div,我只是用代码示例来说明这个想法。 - jeroen


一种选择是使用 white-space: nowrap; 在...上 div。唯一的问题是,如果您有一长串文本,则必须手动添加换行符。


3
2018-02-03 14:31



这适用于max-width,在这种情况下您可能还想使用 overflow: auto,并且不需要额外的元素。 - chad
当我们有长文本和文本时,我们怎么能这样做 - jitendra varshney
@jitendravarshney如果您有不同的问题,那么最好提出一个新问题 - Michael Mior


在你的div CSS中,使用: overflow-x: hidden; overflow-y: hidden;


0
2018-02-03 13:44



@David如果你猜测,请在评论中猜测。只有在您确定它有效时才发布答案。 - Šime Vidas
@Šime,你怎么知道他不是'相当肯定'它的工作,无论那意味着什么?你知道你有点像StackOverflow恶霸,对吧? - Dutchie432
溢出:隐藏只在重排时无法将内容调整到新空间。 - David Mårtensson
我很抱歉。我错了。我会考虑你的建议,谢谢你的外交。 - David Houde
@Šime我个人认为不需要主持人的注意,或者我自己也会请求。我只是觉得你应该知道有一种礼貌的陈述方式。从你的代表和你的答案,我可以看到你知道你在说什么 - 我只是鼓励你尝试给予礼貌的批评,而不是简单地批评每一件小事。 - Dutchie432


试着给它 vertical-align:top


-1
2018-02-03 13:35



没有改变什么。 - Nathan Long
如果您猜测,请在评论中猜测。只有在您确定它有效时才发布答案。 - Šime Vidas