父div浮动会干扰子div的宽度

时间:2011-08-30 17:44:35

标签: css tooltip

我要做的是有一个非常简单的工具提示,使用jQuery在悬停时隐藏/显示。

jsFiddle demo of the problem

要做到这一点,我所做的就是在li上设置一个工具提示。这个div绝对位于每个li的顶部。工具提示div将包含不同长度的文本,因此我不能只预先定义其宽度。我只想根据文本长度一直扩展宽度。

我的问题是,当我浮动li时,div也会浮动(或者看起来如此)因此取得浮动的li的宽度。工具提示现在变得像li的宽度一样窄,我不喜欢这样做。

这是HTML:

<ul id="images">
    <li><img src="[some image]" /><div class="tooltip">Some text that is quite long.</div></li>
    <li><div class="tooltip">Some text that is quite small.</div><img src="[some image]" /></li>
    <li><img src="[some image]" /></li>
    <li><img src="[some image]" /></li>
</ul>

这是CSS:

#images li {
    list-style: none;
    margin-left: 10px;
    position: relative;
}

.tooltip {
    color: #FFF;
    clear: both;
    background: #000;
    padding: 10px;
    font: 11px Arial, Helvetica, sans-serif; 
    -moz-border-radius: 5px;
    position: absolute;
    top: -50px;
    display: none;
    border: 2px solid #999;
}

我希望有人会帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

块元素扩展到其容器的宽度。 Float不会改变这一点。

如果您想在工具顶部使用不同的宽度,请使用width并指定宽度(以像素为单位)

如果你想走一条更漂亮的路线,你可以定义宽度和高度,检查溢出并使用JavaScript扩大它。

答案 1 :(得分:1)

您可以随时计算确切的宽度。

例如,您在页面之外创建一个工具提示div,如

<div class="tooltip" id="calc"></div>

#calc{
  top:-100px;
  left:-100px;
}

如果添加以下js,它将很好地显示

$(".tooltip","#images").each(function(){
  $("#calc").text($(this).text());
  $(this).width($("#calc").width());
});

更新了小提琴here

答案 2 :(得分:0)

我认为你需要改变一下你的方法!您可以在具有绝对位置的div中使用其HTML内容,而不是使用与实际工具提示相同的div,并根据正在悬停的对象的位置设置其位置。

$('#images li').hover(function() {
  $('#myTooltip').html($(this).find('.tooltip').html());
  /* Here you need to set #myTooltip absolute position. 
     based on the position of $('this') or the mouse position
     with an offset */

}, function() {
  $('#myTooltip').hide();
});

其中#myTooltip是在列表外定义的具有绝对位置的div。