我有使用bootstrap工具提示的下一页,我无法正确定位 该页面具有以下特征:
#outer-container
是我的页面。它有固定的宽度。.inner-container
。它们具有固定宽度和overflow-x: auto
。.inner-containers
是动态生成的。 (不确定它是否相关,因此以下示例代码是静态的).inner-container
div内,有任意HTML,可能包含许多<img>
代码<img>
都有一个工具提示,其中alt
文字为标题。.inner-container
div 以下是摘录,您可以在整页中运行代码段时看到问题。
$("#outer-container").tooltip({
selector: "img",
placement: "right",
title: function () { return $(this).attr("alt"); },
});
#outer-container
{
border: 1px solid;
padding: 10px;
width: 960px;
margin-left: auto;
margin-right: auto;
overflow: auto;
}
.inner-container
{
width: 600px;
overflow-x: auto;
border: 1px solid;
margin-bottom : 10px;
float: right;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div id="outer-container">
<div class="inner-container">
<figure>
<img src="http://i.imgur.com/mrXWW8S.png" alt="Man ALL IS LOŚ͖̩͇̗̪̏̈́T ALL IS LOST the pon̷y he comes he c̶̮omes he comes the ichor permeates all MY FACE MY FACE ᵒh god no NO NOO̼OO NΘ stop the an*̶͑̾̾̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e not rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ" />
<figcaption>
Image originally posted by <a href="http://meta.stackexchange.com/questions/213769/work-is-hard-lets-color-the-walls/213975#213975">Travis J</a>
</figcaption>
</figure>
</div>
<div class="inner-container">
<figure>
<img src="http://i.stack.imgur.com/CThCe.png" alt="Sanely-sized stackoverflow logo" />
<figcaption>Sanely-sized stackoverflow logo</figcaption>
</figure>
</div>
<div class="inner-container">
<figure>
<img src="http://i.stack.imgur.com/MvHsz.jpg" alt="Insanely-long-sized stackoverflow logo" />
<figcaption>Insanely-long-sized stackoverflow logo</figcaption>
</figure>
</div>
</div>
上面的代码很好地显示了工具提示,但是有一点问题。 工具提示不会在截断的图像之后立即定位,而是在隐藏的图像部分结束的位置之后,因此它在图像中显示得太远。
向右滚动.inner-container
时,工具提示会更接近img,直到它紧挨着它。
当图像比整个屏幕更宽时,情况变得更糟,因为现在工具提示距离太远,现在它不仅生成.inner-container
中的预期滚动条,而且还生成整个页面上的预期滚动条。
现在无法看到工具提示,因为只要您尝试滚动工具提示就会消失。
现在的问题是......
有没有办法配置引导工具提示或用css设置样式,使其始终显示在裁剪图像的边缘,如第二张图像,而不是“实际”但隐藏边缘?此外,当图像比.inner-container
短时,工具提示应显示在图像旁边而不是容器的右边缘
答案 0 :(得分:0)
#outer-container .tooltip { left: calc(50% + 480px)!important; }
答案 1 :(得分:0)
感谢@ y34h的想法,但我必须通过覆盖实际的bootstrap js代码来专门计算left
属性的正确值。
这是新的Tooltip.getCalcultedOffset
,它是计算工具提示绝对位置的函数:
$.fn.tooltip.Constructor.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
return placement === 'bottom' ? {
top: pos.top + pos.height,
left: pos.left + pos.width / 2 - actualWidth / 2 } :
placement === 'top' ? {
top: pos.top - actualHeight,
left: pos.left + pos.width / 2 - actualWidth / 2 } :
placement === 'left' ? {
top: pos.top + pos.height / 2 - actualHeight / 2,
left: pos.left - actualWidth } :
/* placement == 'right' */ {
top: pos.top + pos.height / 2 - actualHeight / 2,
left:
/* begin fix */
Math.min(
pos.left + pos.width, //original left
$(".inner-container").offset().left + $(".inner-container")[0].clientWidth //max left
)
/* end fix */
};
};
实际更改包含在/* begin fix */
和/* end fix */
以下是完整的工作代码:
$.fn.tooltip.Constructor.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
return placement === 'bottom' ? {
top: pos.top + pos.height,
left: pos.left + pos.width / 2 - actualWidth / 2 } :
placement === 'top' ? {
top: pos.top - actualHeight,
left: pos.left + pos.width / 2 - actualWidth / 2 } :
placement === 'left' ? {
top: pos.top + pos.height / 2 - actualHeight / 2,
left: pos.left - actualWidth } :
/* placement == 'right' */ {
top: pos.top + pos.height / 2 - actualHeight / 2,
left:
/* begin fix */
Math.min(
pos.left + pos.width, //original left
$(".inner-container").offset().left + $(".inner-container")[0].clientWidth //max left
)
/* end fix */
};
};
$("#outer-container").tooltip({
selector: "img",
placement: "right",
title: function () { return $(this).attr("alt"); },
});
#outer-container
{
border: 1px solid;
padding: 10px;
width: 960px;
margin-left: auto;
margin-right: auto;
overflow: auto;
}
.inner-container
{
width: 600px;
overflow-x: auto;
border: 1px solid;
margin-bottom : 10px;
float: right;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div id="outer-container">
<div class="inner-container">
<figure>
<img src="http://i.imgur.com/mrXWW8S.png" alt="Man ALL IS LOŚ͖̩͇̗̪̏̈́T ALL IS LOST the pon̷y he comes he c̶̮omes he comes the ichor permeates all MY FACE MY FACE ᵒh god no NO NOO̼OO NΘ stop the an*̶͑̾̾̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e not rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ" />
<figcaption>
Image originally posted by <a href="http://meta.stackexchange.com/questions/213769/work-is-hard-lets-color-the-walls/213975#213975">Travis J</a>
</figcaption>
</figure>
</div>
<div class="inner-container">
<figure>
<img src="http://i.stack.imgur.com/CThCe.png" alt="Sanely-sized stackoverflow logo" />
<figcaption>Sanely-sized stackoverflow logo</figcaption>
</figure>
</div>
<div class="inner-container">
<figure>
<img src="http://i.stack.imgur.com/MvHsz.jpg" alt="Insanely-long-sized stackoverflow logo" />
<figcaption>Insanely-long-sized stackoverflow logo</figcaption>
</figure>
</div>
</div>