Luk*_*non 8 html javascript css jquery css3
我的div
页面顶部有一个包含一些标题文本,其中mouseenter
,应该展开(高度),以显示一些较小的文本.然后,mouseleave
它应该缩回.这比听起来更难......
解决方案必须:
我试过了:
:hover
在我的样式表中使用,从设置像素值更改auto
为,如此问题中所示(但在我的中它是纯CSS).这没有过渡.max-height
并扩展到大于实际展开的大小.这意味着转换不能正常工作,并且在不同设备上看起来不同.div
jQuery
.animate()
auto的像素值,然后创建一个转换,如本问题所示,但动画必须在开始下一个之前完成,这意味着一系列动画可以在用户的鼠标后很长一段时间内继续远离div
.请在此处查看以上四个示例.
如上所述,纯CSS将是理想的,但如果不可能,我会很好用JavaScript(我更喜欢jQuery).
谢谢!:)
我不知道有任何纯 CSS 解决方案可以将 \xe2\x80\x93 值转换为auto
规范中未包含的内容;我认为这甚至是一个明确的决定,因为可能存在实施问题。
但是对于 \xe2\x80\x9csimple\xe2\x80\x9d jQuery 解决方案,我\xe2\x80\x99d 只是将段落内容包装在一个额外的范围内,将初始段落高度设置为 0 并溢出:隐藏,保留过渡对于 \xe2\x80\x93 的高度,然后让 jQuery 只做一件事,读取 span 元素的高度,设置段落的高度,然后再次将其设置为 0 以再次淡出文本。
\n\n.details {\n height: 0;\n margin: 0; \n overflow: hidden;\n transition: height 1s;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n
$("div").mouseenter(function() {\n $(this).find(\'p\').css(\'height\', $(this).find(\'span\').height());\n})\n\n$("div").mouseleave(function() {\n $(this).find(\'p\').css(\'height\', 0);\n})\n
Run Code Online (Sandbox Code Playgroud)\n\n这样,CSS 仍然可以通过transition
(即可能应该在浏览器中进行优化),而 jQuery/JavaScript 只是用来给它一些 \xe2\x80\x9cnudge\xe2\x80\x9d 它需要知道做什么。(很确定 jQuery 现在也在内部做同样的事情animate()
,如果浏览器支持它 \xe2\x80\x93 的话,额外的好处是 jQuery 会处理后备实现,如果一个非常旧的浏览器不支持transition
; 在我的解决方案高度会立即改变,没有任何过渡。)
https://jsfiddle.net/ypwu9n0g/7/
\n\n请注意,在该示例中,所有四个项目的方法都是相同的,并且我没有费心更改文本内容;-)
\n