【问题标题】:on hover, div takes over entire li悬停时,div 占据整个 li
【发布时间】:2012-12-12 10:11:31
【问题描述】:

我有一个无序列表,每个 li 包含一个 img 和一个 div。我的目标是悬停在 div 上将使 img 做一些事情。现在它只是添加/删除类,但这是一个占位符。添加/删除有效,但这不是问题(尽管如果您对此有提示,总是很乐意从更有经验的人那里获得意见)。

问题是悬停的 div 在悬停时突然膨胀以填满整个 li,并且似乎也暂时失去了其上部填充。这意味着当那个 div 被一个花哨的按钮替换时……这个按钮可能会像当前的纯文本一样跳跃。

html:

<ul id="headmenu">
    <li id="kite1">
        <img src="img/kitesani1a.png" id="kites1a" />
        <div id="attend" class="headmenulink">attending</div>
    </li>
</ul>

CSS:

ul#headmenu { margin: 2em 0 0 0; padding: 0; }
ul#headmenu li { margin: 0 1% 0 0; padding: 0; width: 19%; float: left; display: inline; list-style: none;}
ul#headmenu img { padding-bottom: 5em; position: relative; top: 0; left: 0; z-index: 100; }
li .headmenulink { padding-top: 2em; position: relative; bottom: 0; left: 0; border:1px solid blue; }

ul#headmenu li img {
    transition-duration: 0.8s;
    transition-property: transform;
}

.kite1ahover {
    float: right;
    position: relative;
    -webkit-transform:rotate(10deg);
    -moz-transform:rotate(10deg);
}

(在实际版本中,css 更冗长。)最后,当前的 jQuery 草案位:

$("#attend").hover(function(){
    $("#kites1a").addClass('kite1ahover').delay(500).queue(function(next){
        $(this).removeClass('kite1ahover');
        next();
});

我做了一个 jsfiddle,但它给了我奇怪的错误。不确定它是否可以编辑,但以防万一,它位于http://jsfiddle.net/klh02/5UMK5/7/ - 然后我还在http://www.karinoyo.com/temp/index.php 做了一个精简的真实示例。如果您打开实时版本(不是小提琴),您会看到临时蓝色边框在悬停时扩展,同时文本跳上一两行。 (注意:唯一的“实时”悬停在“参加”李,左起第一个李。)

扩展 div 是因为 CSS 吗?还是因为 jQuery?或者这只是在这种情况下发生的事情,我需要做一些创造性的定位来让 div 保持不动而不是扩展/跳跃?

提前致谢!

【问题讨论】:

  • 在 id 选择器之前使用 ul 是不必要的(我错了),因为 id 是唯一的。
  • 这实际上并没有错,它只是多余的(主要是为了我自己在草稿时的启发,这就是我现在的样子)。我会在上线前清理,但即使它留在里面,我的理解是这不会是一个大问题。

标签: jquery css animation hover


【解决方案1】:

在你的小提琴中,DIV 会增长,因为悬停类内部有一个浮点数:

.kite1ahover {
    float:right; /* remove this */
    position: relative;
    -webkit-transform:rotate(10deg);
    -moz-transform:rotate(10deg); 
    -o-transform:rotate(10deg);
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
    filter: alpha(opacity=100);
    -moz-opacity:1;
    -khtml-opacity: 1;
    opacity: 1;
}​

这打破了盒子的高度。一旦你删除它,DIV 就会停止增长。您得到的“奇怪”错误来自 jQuery 代码中缺少的右括号:

$(document).ready(function(){
    $("#attend").hover(function(){
        $("#kites1a").addClass('kite1ahover').delay(500).queue(function(next){
            $(this).removeClass('kite1ahover');
            next();
        });
    });
// missing brackets here...
});

您会找到一个有效的变体here

【讨论】:

  • 是的,正如我在上面回答的那样,我得到了今晚的 cookie,它是由另一个项目的 c&p 代码引起的愚蠢错误。一旦我意识到这一点并移除浮动,一切都会正常运行。另外,关于奇怪的 jsfiddle 错误啊。谢谢!
【解决方案2】:

弹跳是因为您使用“kite1ahover”类使 img 浮动

当元素浮动时,它们占据的大小被忽略(好像它们是空心的),因此 div 成为该框中的顶部元素,因此跳转到顶部。

如果你停止使用浮动,而是使用左、右、上、下的组合,你应该可以随意移动 img

例如 position:relative; left:100px;

【讨论】:

  • 是的,我现在才意识到这一点。我因当晚的愚蠢错误而获胜!走我。适合我从另一个项目中提取一些代码作为简单的插入。你是对的,一旦我把它拿出来,奇怪的行为就停止了。
猜你喜欢
  • 2014-04-09
  • 2016-01-29
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多