Javascript CSS中带转换的可扩展Div
我在页面顶部有一个Javascript CSS中带转换的可扩展Div,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我在页面顶部有一个div,其中包含一些标题文本,在mouseenter上,这些标题文本应展开(高度),以显示一些较小的文本。然后,当鼠标移动时,它应该缩回。这比听起来更难 解决方案必须: 从仅适合页眉的高度到适合所有文本的高度 从一个过渡到另一个 尝试使用纯CSS 如果鼠标离开,则暂停展开动画,反之亦然(默认为CSS,但不是jQuery) 我试过: 在我的样式表中使用:悬停,从设置的像素值更改为自动,如中所示(但在我的样式表中它是纯CSS)。这并没有转变 在展开时使用设置的高度,这不适用于不同的
div
,其中包含一些标题文本,在mouseenter
上,这些标题文本应展开(高度),以显示一些较小的文本。然后,当鼠标移动时,它应该缩回。这比听起来更难
解决方案必须:
:悬停
,从设置的像素值更改为自动
,如中所示(但在我的样式表中它是纯CSS)。这并没有转变max height
,并将其扩展到比实际扩展的div
更大的值,如中所示。这意味着转换不能正常工作,并且在不同的设备上看起来不同jQuery
.animate()
,使用auto的像素值,然后创建一个过渡,如中所示,但动画必须在开始下一个过渡之前完成,这意味着如果远离div
,一系列动画可以在用户鼠标后继续很长时间谢谢!:) 尝试使用
css
:hover
[id^="title"] {
height: 1em;
overflow: hidden;
-webkit-transition: height 1s;
/* Transitions not working */
transition: height 1s;
}
[id^=title]:hover {
height: 10em;
}
我不知道有任何纯CSS解决方案可以解决这个问题——将值转换为
auto
是规范中没有包括的东西;我认为这甚至是一个明确的决定,因为可能存在实施问题
但对于一个“简单”的jQuery解决方案,我只需将段落内容包装在一个额外的跨距内,将初始段落高度设置为0并溢出:隐藏,将高度的过渡保留在适当的位置–然后让jQuery只做一件事,读取跨距元素的高度,为段落设置该高度,然后再次将其设置为0以再次淡出文本
.details {
height: 0;
margin: 0;
overflow: hidden;
transition: height 1s;
}
这样,CSS仍然通过转换处理高度变化的“重担”(这可能在浏览器中得到优化),而jQuery/JavaScript只是用来给它一点“轻推”,让它知道该做什么。(非常确定jQuery现在在内部也在做同样的事情,使用animate()
,如果浏览器支持它——如果一个非常旧的浏览器不支持转换,那么jQuery将处理回退实现,这将是一个额外的好处;在我的解决方案中,高度将立即改变,而不进行任何转换。)
请注意,在该示例中,所有四项的方法都是相同的,我没有费心更改文本内容;-) 一种css
方法,利用高度
,行高
,字体大小
,不透明度
[id^=“title”]p{
溢出:隐藏;
字号:0em;
线高:0em;
/*高度:0px*/
不透明度:0;
-webkit转换:高度1s;
过渡:/*高度1s,*/不透明度1s,线条高度0.1s;
}
[id^=“title”]:悬停p{
/*高度:自动*/
不透明度:1;
线高:1米;
字号:1em;
不透明度:1;
文本溢出:省略号;
}
Title 1高度工作,但不过渡。高度工作,但不过渡。高度工作,但不过渡。高度工作,但不过渡。高度工作,但不过渡。高度工作,但不过渡。高度工作,但不过渡。高度工作,但不过渡
标题2转换工作,但仅在一个视口大小上。。。过渡正在工作,但仅在一个视口大小上。。。过渡正在工作,但仅在一个视口大小上。。。过渡正在工作,但仅在一个视口大小上。。。过渡正在工作,但仅在一个视口大小上。。。过渡正在工作,但仅在一个视口大小上。。。过渡正在工作,但仅在一个视口大小上
标题3高度工作,但在不同的视口大小上,过渡看起来不同。高度工作,但过渡在不同视口大小上看起来不同。高度工作,但过渡在不同视口大小上看起来不同。高度工作,但过渡在不同视口大小上看起来不同。高度工作,但过渡在不同视口大小上看起来不同
Title 4高度和过渡工作-只有一个捕捉-动画在新的开始时不会暂停,创建了一种令人讨厌的动画堆栈。。。高度和过渡工作-只是一个捕捉-动画不会暂停时,新的开始,创建一种动画堆栈,这是恼人的。。。高度和过渡工作-只是一个捕捉-动画不会暂停时,新的开始,创建一种动画堆栈,这是恼人的
你能给我们提供一些我实际拥有的代码吗:“请看上面所有四个示例。”寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。见:。我不知道有任何纯CSS解决方案;但对于一个“简单”的jQuery解决方案,我只需将段落内容包装在一个额外的跨度内,将初始段落高度设置为0并溢出:隐藏,将高度的过渡保持在原位-然后让jQuery只做一件事-读取跨度元素的高度,为段落设置该高度,然后将其再次设置为0以设置为fa
$("div").mouseenter(function() {
$(this).find('p').css('height', $(this).find('span').height());
})
$("div").mouseleave(function() {
$(this).find('p').css('height', 0);
})