防止 CSS 工具提示超出 page/window
Prevent CSS tooltip from going out of page/window
我有一个仅 CSS 的工具提示,它在您 hover
link 时加载 span
作为工具提示。然而,这是用 CSS 定位的,但如果 link 靠近页面顶部或侧面,则工具提示会离开页面的 side/top。
css 是否有办法进行此更改,还是我必须依赖 JS?
我已经开始尝试将一些东西与 jQuery 放在一起,但如果可能的话我宁愿使用 CSS。
JS fiddle 在 https://jsfiddle.net/gtoprh21/12/
片段:
$( ".ktooltip" )
.mouseover(function(e) {
var mousex = e.pageX + 20; //Get X coordinates
var mousey = e.pageY + 10; //Get Y coordinates
if((mousey+100)>$(window).height())
{
$('.tooltip')
.css({ top: mousey-100 ,left: mousex })
}
else if((mousex+200)>$(window).width())
{
$('.tooltip')
.css({ top: mousey ,left: mousex-200})
}
else
{
$('.tooltip')
.css({ top: mousey, left: mousex })
}
})
.ref, .refs {
position:relative;
}
/*added a text indent to overide indent styles further down*/
.ktooltip {
display: inline-block;
text-indent:0em;
}
.ref .ktooltiptext, .refs .ktooltiptext {
visibility:hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px 5px;
top: -40px;
left: 10px;
border:2px solid grey;
line-height: normal;
/* Position the tooltip */
position: absolute;
z-index: 1;
}
.ref:hover .ktooltiptext, .refs:hover .ktooltiptext {
visibility: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<sup class="ref expl">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<!-- lhe reference in a tooltip -->
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</sup>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles.</span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- likn to ref -->
<sup class="ref expl">
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">2</a>
<!-- the tooltip -->
<span class="ktooltiptext"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</sup>
</span><br>
</p>
不幸的是,如果您想保持工具提示的良好定位,仅使用 CSS 是不可能的。
脚本解决方案
但是,由于您已经在使用一些脚本,我建议您使用以下解决方案:
- 使用
position: absolute
将 .ktooltiptext
相应地定位到 .ref
,
- 使用
.getBoundingClientRect()
方法轻松获取tooltip的位置和大小,
- 如果超出
window
、 ,请进行一些更正
- 也对CSS做了一些修改。
Snippet with only native JavaScript(避免jQuery,文档会更轻。)
var ktooltips = document.querySelectorAll(".ktooltip");
ktooltips.forEach(function(ktooltip, index){ // For each ktooltip
ktooltip.addEventListener("mouseover", position_tooltip); // On hover, launch the function below
})
function position_tooltip(){
// Get .ktooltiptext sibling
var tooltip = this.parentNode.querySelector(".ktooltiptext");
// Get calculated ktooltip coordinates and size
var ktooltip_rect = this.getBoundingClientRect();
var tipX = ktooltip_rect.width + 5; // 5px on the right of the ktooltip
var tipY = -40; // 40px on the top of the ktooltip
// Position tooltip
tooltip.style.top = tipY + 'px';
tooltip.style.left = tipX + 'px';
// Get calculated tooltip coordinates and size
var tooltip_rect = tooltip.getBoundingClientRect();
// Corrections if out of window
if ((tooltip_rect.x + tooltip_rect.width) > window.innerWidth) // Out on the right
tipX = -tooltip_rect.width - 5; // Simulate a "right: tipX" position
if (tooltip_rect.y < 0) // Out on the top
tipY = tipY - tooltip_rect.y; // Align on the top
// Apply corrected position
tooltip.style.top = tipY + 'px';
tooltip.style.left = tipX + 'px';
}
.ref,
.refs {
position: relative;
}
.ktooltip {
display: inline-block;
text-indent: 0em;
}
.ref .ktooltiptext,
.refs .ktooltiptext {
visibility: hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px; /* TAKIT: Changed here */
top: -999px; /* TAKIT: Changed here */
left: -999px; /* TAKIT: Changed here */
border: 2px solid grey;
line-height: normal;
position: absolute; /* TAKIT: Changed here */
z-index: 1;
}
.ref:hover .ktooltiptext,
.refs:hover .ktooltiptext {
visibility: visible;
}
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<sup class="ref expl">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<!-- the reference in a tooltip -->
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</sup>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles.</span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- link to ref -->
<sup class="ref expl">
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">20</a>
<!-- the tooltip -->
<span class="ktooltiptext"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</sup>
</span><br>
</p>
片段 jQuery
$(".ktooltip").mouseover(function(e) {
var tooltip = $(this).siblings('.ktooltiptext'); // Get tooltip element (ktooltiptext)
var tipX = $(this).outerWidth() + 5; // 5px on the right of the ktooltip
var tipY = -40; // 40px on the top of the ktooltip
tooltip.css({ top: tipY, left: tipX }); // Position tooltip
// Get calculated tooltip coordinates and size
var tooltip_rect = tooltip[0].getBoundingClientRect();
// Corrections if out of window
if ((tooltip_rect.x + tooltip_rect.width) > $(window).width()) // Out on the right
tipX = -tooltip_rect.width - 5; // Simulate a "right: tipX" position
if (tooltip_rect.y < 0) // Out on the top
tipY = tipY - tooltip_rect.y; // Align on the top
// Apply corrected position
tooltip.css({ top: tipY, left: tipX });
});
.ref,
.refs {
position: relative;
}
.ktooltip {
display: inline-block;
text-indent: 0em;
}
.ref .ktooltiptext,
.refs .ktooltiptext {
visibility: hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px; /* TAKIT: Changed here */
top: -999px; /* TAKIT: Changed here */
left: -999px; /* TAKIT: Changed here */
border: 2px solid grey;
line-height: normal;
position: absolute; /* TAKIT: Changed here */
z-index: 1;
}
.ref:hover .ktooltiptext,
.refs:hover .ktooltiptext {
visibility: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<sup class="ref expl">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<!-- the reference in a tooltip -->
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</sup>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles.</span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- link to ref -->
<sup class="ref expl">
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">20</a>
<!-- the tooltip -->
<span class="ktooltiptext"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</sup>
</span><br>
</p>
使用上述任何代码段,您可以使用 window 来查看弹出窗口不会出现在右侧之外!它也不应该出现在顶部。
⋅
⋅
⋅
一个CSS唯一的建议
现在,如果您不太关心工具提示的位置,您可以使用这个解决方案,我没有更改您的任何 HTML:
- 在
span
个元素上使用position: relative;
作为参考,
- 在
.ktooltiptext
、 上使用 position: absolute
- 根据需要使用
top
和 left
定位 .ktooltiptext
。
使用该解决方案,工具提示将保持其样式,但会左对齐,在 span
元素下方,因此工具提示永远不会出现在右侧或顶部。
p span { /* TAKIT: Changed here */
position: relative;
}
.ktooltip {
display: inline-block;
text-indent: 0em;
}
.ref .ktooltiptext,
.refs .ktooltiptext {
visibility: hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px; /* TAKIT: Simplified here */
border: 2px solid grey;
line-height: normal;
position: absolute; /* TAKIT: Changed */
top: 20px; /* TAKIT: Changed */
left: 0; /* TAKIT: Added to always align tooltip on the left of the span */
z-index: 1;
}
.ref:hover .ktooltiptext,
.refs:hover .ktooltiptext {
visibility: visible;
}
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<sup class="ref expl">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<!-- the reference in a tooltip -->
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</sup>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles.</span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- link to ref -->
<sup class="ref expl">
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">20</a>
<!-- the tooltip -->
<span class="ktooltiptext"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</sup>
</span><br>
</p>
选项 1) 使用 title
全局属性
title - Specifies extra information about an element (displayed as a
tool tip)
Docs: The title global attribute
Use of the title attribute is highly problematic for:
- People using touch-only devices
- People navigating with keyboards
- People navigating with the aid of assistive technology such as screen readers or magnifiers
- People experiencing fine motor control impairments
- People with cognitive concerns. This is mainly due to inconsistent browser support, compounded by the additional
complication introduced by assistive technology's parsing of the
browser-rendered page.
span {border-bottom: 1px dashed pink}
<span title="According to tradition Nicholas was bishop of Myra in Lycia (south-west Turkey today).">
Mouse over this paragraph, to display the title attribute as a tooltip.
</span>
选项 2) 如果文本和工具提示文本是固定大小的: 4 css 类 可用于放置引用触发元素的工具提示。
类似于:
.tooltip-top {top: -3em}
.tooltip-bottom {top: 0}
.tooltip-left {left: -3em}
.tooltip-right {right: 0}
您可以仅使用 CSS 并且完全不使用 JS 来尝试此操作。不是最优雅的工具提示类型,但它永远不会让你失望,它永远不会让你失望:)
.ktooltip {
display: inline-block;
text-indent:0em;
}
.ktooltiptext, .ktooltiptext {
display: none;
width: calc(100vw - 35px);
background: #fff;
border-radius: 6px;
padding: 5px 5px;
left: 10px;
border: 2px solid grey;
line-height: normal;
text-decoration: none;
position: absolute;
z-index: 1;
}
p {display:inline-block}
.ktooltip:hover + span {
display: block;
}
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<div style="display:inline-block">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</div>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles. </span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- likn to ref -->
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">2</a>
<span class="ktooltiptext" onclick="return false;"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</span><br>
</p>
只需复制此 css 并替换为您的 class
.ref .ktooltiptext, .refs .ktooltiptext
.ref .ktooltiptext, .refs .ktooltiptext {
visibility:hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px 5px;
top: -15px;
left: 10px;
border:2px solid grey;
line-height: normal;
/* Position the tooltip */
position: absolute;
z-index: 1;
}
虽然整个事情需要重新编码,但您可以通过这样的方式实现:
$(".ktooltip").on('mouseover', function(e) {
var tooltip = $('.ktooltiptext'),
wt = $(window).scrollTop(), //window top pos
ww = $(window).outerWidth(), //window width
tt = tooltip.offset().top, //Tooltip top pos
tl = tooltip.offset().left, //Tooltip left pos
tw = tooltip.outerWidth(); //Tooltip Width
tooltip.css({ 'left': '10px', 'right': 'auto', 'top': '-40px' });
if(tt < wt) tooltip.css('top', 0);
if((tl + tw) > ww) tooltip.css({ 'left': 'auto', 'right': 0 });
})
我有一个仅 CSS 的工具提示,它在您 hover
link 时加载 span
作为工具提示。然而,这是用 CSS 定位的,但如果 link 靠近页面顶部或侧面,则工具提示会离开页面的 side/top。
css 是否有办法进行此更改,还是我必须依赖 JS? 我已经开始尝试将一些东西与 jQuery 放在一起,但如果可能的话我宁愿使用 CSS。
JS fiddle 在 https://jsfiddle.net/gtoprh21/12/
片段:
$( ".ktooltip" )
.mouseover(function(e) {
var mousex = e.pageX + 20; //Get X coordinates
var mousey = e.pageY + 10; //Get Y coordinates
if((mousey+100)>$(window).height())
{
$('.tooltip')
.css({ top: mousey-100 ,left: mousex })
}
else if((mousex+200)>$(window).width())
{
$('.tooltip')
.css({ top: mousey ,left: mousex-200})
}
else
{
$('.tooltip')
.css({ top: mousey, left: mousex })
}
})
.ref, .refs {
position:relative;
}
/*added a text indent to overide indent styles further down*/
.ktooltip {
display: inline-block;
text-indent:0em;
}
.ref .ktooltiptext, .refs .ktooltiptext {
visibility:hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px 5px;
top: -40px;
left: 10px;
border:2px solid grey;
line-height: normal;
/* Position the tooltip */
position: absolute;
z-index: 1;
}
.ref:hover .ktooltiptext, .refs:hover .ktooltiptext {
visibility: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<sup class="ref expl">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<!-- lhe reference in a tooltip -->
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</sup>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles.</span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- likn to ref -->
<sup class="ref expl">
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">2</a>
<!-- the tooltip -->
<span class="ktooltiptext"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</sup>
</span><br>
</p>
不幸的是,如果您想保持工具提示的良好定位,仅使用 CSS 是不可能的。
脚本解决方案
但是,由于您已经在使用一些脚本,我建议您使用以下解决方案:
- 使用
position: absolute
将.ktooltiptext
相应地定位到.ref
, - 使用
.getBoundingClientRect()
方法轻松获取tooltip的位置和大小, - 如果超出
window
、 ,请进行一些更正
- 也对CSS做了一些修改。
Snippet with only native JavaScript(避免jQuery,文档会更轻。)
var ktooltips = document.querySelectorAll(".ktooltip");
ktooltips.forEach(function(ktooltip, index){ // For each ktooltip
ktooltip.addEventListener("mouseover", position_tooltip); // On hover, launch the function below
})
function position_tooltip(){
// Get .ktooltiptext sibling
var tooltip = this.parentNode.querySelector(".ktooltiptext");
// Get calculated ktooltip coordinates and size
var ktooltip_rect = this.getBoundingClientRect();
var tipX = ktooltip_rect.width + 5; // 5px on the right of the ktooltip
var tipY = -40; // 40px on the top of the ktooltip
// Position tooltip
tooltip.style.top = tipY + 'px';
tooltip.style.left = tipX + 'px';
// Get calculated tooltip coordinates and size
var tooltip_rect = tooltip.getBoundingClientRect();
// Corrections if out of window
if ((tooltip_rect.x + tooltip_rect.width) > window.innerWidth) // Out on the right
tipX = -tooltip_rect.width - 5; // Simulate a "right: tipX" position
if (tooltip_rect.y < 0) // Out on the top
tipY = tipY - tooltip_rect.y; // Align on the top
// Apply corrected position
tooltip.style.top = tipY + 'px';
tooltip.style.left = tipX + 'px';
}
.ref,
.refs {
position: relative;
}
.ktooltip {
display: inline-block;
text-indent: 0em;
}
.ref .ktooltiptext,
.refs .ktooltiptext {
visibility: hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px; /* TAKIT: Changed here */
top: -999px; /* TAKIT: Changed here */
left: -999px; /* TAKIT: Changed here */
border: 2px solid grey;
line-height: normal;
position: absolute; /* TAKIT: Changed here */
z-index: 1;
}
.ref:hover .ktooltiptext,
.refs:hover .ktooltiptext {
visibility: visible;
}
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<sup class="ref expl">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<!-- the reference in a tooltip -->
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</sup>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles.</span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- link to ref -->
<sup class="ref expl">
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">20</a>
<!-- the tooltip -->
<span class="ktooltiptext"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</sup>
</span><br>
</p>
片段 jQuery
$(".ktooltip").mouseover(function(e) {
var tooltip = $(this).siblings('.ktooltiptext'); // Get tooltip element (ktooltiptext)
var tipX = $(this).outerWidth() + 5; // 5px on the right of the ktooltip
var tipY = -40; // 40px on the top of the ktooltip
tooltip.css({ top: tipY, left: tipX }); // Position tooltip
// Get calculated tooltip coordinates and size
var tooltip_rect = tooltip[0].getBoundingClientRect();
// Corrections if out of window
if ((tooltip_rect.x + tooltip_rect.width) > $(window).width()) // Out on the right
tipX = -tooltip_rect.width - 5; // Simulate a "right: tipX" position
if (tooltip_rect.y < 0) // Out on the top
tipY = tipY - tooltip_rect.y; // Align on the top
// Apply corrected position
tooltip.css({ top: tipY, left: tipX });
});
.ref,
.refs {
position: relative;
}
.ktooltip {
display: inline-block;
text-indent: 0em;
}
.ref .ktooltiptext,
.refs .ktooltiptext {
visibility: hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px; /* TAKIT: Changed here */
top: -999px; /* TAKIT: Changed here */
left: -999px; /* TAKIT: Changed here */
border: 2px solid grey;
line-height: normal;
position: absolute; /* TAKIT: Changed here */
z-index: 1;
}
.ref:hover .ktooltiptext,
.refs:hover .ktooltiptext {
visibility: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<sup class="ref expl">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<!-- the reference in a tooltip -->
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</sup>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles.</span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- link to ref -->
<sup class="ref expl">
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">20</a>
<!-- the tooltip -->
<span class="ktooltiptext"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</sup>
</span><br>
</p>
使用上述任何代码段,您可以使用 window 来查看弹出窗口不会出现在右侧之外!它也不应该出现在顶部。
⋅ ⋅ ⋅
一个CSS唯一的建议
现在,如果您不太关心工具提示的位置,您可以使用这个解决方案,我没有更改您的任何 HTML:
- 在
span
个元素上使用position: relative;
作为参考, - 在
.ktooltiptext
、 上使用 - 根据需要使用
top
和left
定位.ktooltiptext
。
position: absolute
使用该解决方案,工具提示将保持其样式,但会左对齐,在 span
元素下方,因此工具提示永远不会出现在右侧或顶部。
p span { /* TAKIT: Changed here */
position: relative;
}
.ktooltip {
display: inline-block;
text-indent: 0em;
}
.ref .ktooltiptext,
.refs .ktooltiptext {
visibility: hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px; /* TAKIT: Simplified here */
border: 2px solid grey;
line-height: normal;
position: absolute; /* TAKIT: Changed */
top: 20px; /* TAKIT: Changed */
left: 0; /* TAKIT: Added to always align tooltip on the left of the span */
z-index: 1;
}
.ref:hover .ktooltiptext,
.refs:hover .ktooltiptext {
visibility: visible;
}
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<sup class="ref expl">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<!-- the reference in a tooltip -->
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</sup>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles.</span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- link to ref -->
<sup class="ref expl">
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">20</a>
<!-- the tooltip -->
<span class="ktooltiptext"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</sup>
</span><br>
</p>
选项 1) 使用 title
全局属性
title - Specifies extra information about an element (displayed as a tool tip)
Docs: The title global attribute Use of the title attribute is highly problematic for:
- People using touch-only devices
- People navigating with keyboards
- People navigating with the aid of assistive technology such as screen readers or magnifiers
- People experiencing fine motor control impairments
- People with cognitive concerns. This is mainly due to inconsistent browser support, compounded by the additional complication introduced by assistive technology's parsing of the browser-rendered page.
span {border-bottom: 1px dashed pink}
<span title="According to tradition Nicholas was bishop of Myra in Lycia (south-west Turkey today).">
Mouse over this paragraph, to display the title attribute as a tooltip.
</span>
选项 2) 如果文本和工具提示文本是固定大小的: 4 css 类 可用于放置引用触发元素的工具提示。 类似于:
.tooltip-top {top: -3em}
.tooltip-bottom {top: 0}
.tooltip-left {left: -3em}
.tooltip-right {right: 0}
您可以仅使用 CSS 并且完全不使用 JS 来尝试此操作。不是最优雅的工具提示类型,但它永远不会让你失望,它永远不会让你失望:)
.ktooltip {
display: inline-block;
text-indent:0em;
}
.ktooltiptext, .ktooltiptext {
display: none;
width: calc(100vw - 35px);
background: #fff;
border-radius: 6px;
padding: 5px 5px;
left: 10px;
border: 2px solid grey;
line-height: normal;
text-decoration: none;
position: absolute;
z-index: 1;
}
p {display:inline-block}
.ktooltip:hover + span {
display: block;
}
<p>
<span id="edtxt.trans1" class="tei l">My hope is in a bishop,
<!--link to a reference -->
<div style="display:inline-block">
<a href="#edtxt-explnote1" id="reference-to-edtxt-explnote1" class="ktooltip">1</a>
<span class="ktooltiptext">According to tradition <span style="name">Nicholas</span> was bishop of Myra in Lycia (south-west Turkey today).</span>
</div>
</span><br>
<span id="trans2" class="tei l">and in almighty God and his never-ending miracles. </span><br>
<span id="trans3" class="tei l">Generous Saint Nicholas holds an office,</span><br>
<span id="trans4" class="tei l">there is a gold symbol in his sign.
<!-- likn to ref -->
<a href="#edtxt-explnote2" id="reference-to-edtxt-explnote2" class="ktooltip">2</a>
<span class="ktooltiptext" onclick="return false;"> One of <span style="">Nicholas’s</span> symbols was three <sup>bags</sup> of gold <span style="font-variant: small-caps;">which</span> were the <span style="color: red;">dowry</span> he provided <span style="color: blue;">for</span> three <span style="color: green;">girls</span>
</span>
</span><br>
</p>
只需复制此 css 并替换为您的 class
.ref .ktooltiptext, .refs .ktooltiptext
.ref .ktooltiptext, .refs .ktooltiptext {
visibility:hidden;
width: 200px;
background: #fff;
border-radius: 6px;
padding: 5px 5px;
top: -15px;
left: 10px;
border:2px solid grey;
line-height: normal;
/* Position the tooltip */
position: absolute;
z-index: 1;
}
虽然整个事情需要重新编码,但您可以通过这样的方式实现:
$(".ktooltip").on('mouseover', function(e) {
var tooltip = $('.ktooltiptext'),
wt = $(window).scrollTop(), //window top pos
ww = $(window).outerWidth(), //window width
tt = tooltip.offset().top, //Tooltip top pos
tl = tooltip.offset().left, //Tooltip left pos
tw = tooltip.outerWidth(); //Tooltip Width
tooltip.css({ 'left': '10px', 'right': 'auto', 'top': '-40px' });
if(tt < wt) tooltip.css('top', 0);
if((tl + tw) > ww) tooltip.css({ 'left': 'auto', 'right': 0 });
})