如何将工具提示添加到div

use*_*685 530 html javascript css tooltip

我有一个div标签如下:

<div>
  <label>Name</label>
  <input type="text"/>
</div>
Run Code Online (Sandbox Code Playgroud)

现在我想要一个简单的javascript来显示工具提示:悬停div.有人可以帮帮我吗?工具提示还应具有淡入/淡出效果.

ssc*_*rus 849

对于基本工具提示,您需要:

<div title="This is my tooltip">
Run Code Online (Sandbox Code Playgroud)

对于更好的javascript版本,您可以查看:

https://jqueryhouse.com/best-jquery-tooltip-plugins/

上面的链接为您提供了25个工具提示选项.

[原始链接,现在已经过时了:http://www.designer-daily.com/jquery-prototype-mootool-tooltips-12632]

  • 如果您只想显示某些文本的工具提示,例如某些关键字的"详细信息"或类似内容,请使用[`<abbr title ="..."> ... </ abbr>`](http ://www.w3schools.com/tags/tag_abbr.asp); 浏览器通常使用破折号/点标记下划线,表示"还有更多要说明的内容,请参阅我的工具提示". (15认同)
  • 在 Chrome 上,工具提示可能需要几秒钟才能出现。在我看来有点慢。 (3认同)
  • 使用标题工具提示要注意的一件事是,如果用户单击您的 div,工具提示将不会出现。这可能非常令人沮丧...特别是如果您的 div 看起来应该被点击。例如:样式=“光标:指针;” (2认同)
  • @RayL工具提示可点击不是标准行为 - 这会模糊链接和工具提示,阻止用户知道突出显示的单词是否会1)给他们更多信息或2)完全将他们带到另一页.一般来说,不好的做法. (2认同)

And*_*ios 272

这是可以做到与CSS只,没有JavaScript的根本:运行演示

  1. 应用自定义HTML属性,例如.data-tooltip="bla bla"你的对象(div或其他):

    <div data-tooltip="bla bla">
        something here
    </div>
    
    Run Code Online (Sandbox Code Playgroud)
  2. :before每个[data-tooltip]对象的伪元素定义为透明,绝对定位且data-tooltip=""值为内容:

    [data-tooltip]:before {            
        position : absolute;
         content : attr(data-tooltip);
         opacity : 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 定义:hover:before每个的悬停状态[data-tooltip]以使其可见:

    [data-tooltip]:hover:before {        
        opacity : 1;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将样式(颜色,大小,位置等)应用于工具提示对象; 故事结局.

在演示中,我已经定义了另一个规则来指定工具提示是否必须在将鼠标悬停在父项之外但使用另一个自定义属性data-tooltip-persistent和简单规则时消失:

[data-tooltip]:not([data-tooltip-persistent]):before {
    pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

注1:浏览器的覆盖范围很广,但考虑使用旧IE的javascript后备(如果需要).

注意2:增强可能是添加一些javascript来计算鼠标位置并通过更改应用于它的类将其添加到伪元素.

  • @Luc 所说的:如果工具提示内容很长,它可能会覆盖其他可点击的元素。不透明度纯粹是视觉效果。该元素仍然存在并且可能与其他元素重叠。更好的解决方案是使用 display: none 作为默认值并在悬停时阻止。 (4认同)
  • 我在上面分叉了 @AndreaLigios 解决方案,使用 css 动画而不是过渡,因为当工具提示靠近移动设备屏幕边缘时,不透明度会在边缘情况下导致我的设置出现问题。这是:https://jsfiddle.net/dimitrisscript/d634bqtn/2/ (3认同)
  • 没门!太棒了.我不知道!! (2认同)
  • 我喜欢这个问题有两个很好的答案.一个简单,另一个可定制. (2认同)
  • 这太棒了!但是:我们如何在这里添加换行符?它似乎忽略了 `&lt;br&gt;` 和其他类似 `\n` 或 `\r` 的内容,因为它们只是在字符串的其余部分显示为纯文本。**更新:** 我刚刚注意到设置最大宽度会使其自动调整其内容并放置换行符。真的很整齐!(但是,如果有人知道答案,我仍然会很感激) (2认同)
  • @LinusGeffarth 你可以用空白来做到这一点:预包装;在当前的 Chrome 上。不过我还没有测试过其他浏览器。 (2认同)

cdh*_*wie 78

你根本不需要JavaScript; 只需设置title属性:

<div title="Hello, World!">
  <label>Name</label>
  <input type="text"/>
</div>
Run Code Online (Sandbox Code Playgroud)

请注意,工具提示的可视化表示取决于浏览器/操作系统,因此可能会淡入,但可能不会.但是,这是执行工具提示的语义方式,它可以与屏幕阅读器等辅助功能软件一起正常工作.

看到:

<div title="Hello, World!">
  <label>Name</label>
  <input type="text"/>
</div>
Run Code Online (Sandbox Code Playgroud)

  • @YvonneAburrow这个答案不仅适用于OP. (2认同)

Nat*_*han 17

这是一个不错的jQuery工具提示:

https://jqueryui.com/tooltip/

要实现此功能,请按以下步骤操作:

  1. 在您的代码中添加此代码<head></head>:

    <script type="text/javascript" src="http://cdn.jquerytools.org/1.2.5/full/jquery.tools.min.js"></script>    
    <script type="text/javascript">
    $("[title]").tooltip();
    </script> 
    <style type="text/css"> 
    
    /* tooltip styling. by default the element to be styled is .tooltip  */
    .tooltip {
        display:none;
        background:transparent url(https://dl.dropboxusercontent.com/u/25819920/tooltip/black_arrow.png);
        font-size:12px;
        height:70px;
        width:160px;
        padding:25px;
        color:#fff;
    }
    </style> 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在要使用工具提示的HTML元素上,只需向其添加title属性即可.标题属性中的任何文本都将出现在工具提示中.

注意:禁用JavaScript后,它将回退到默认的浏览器/操作系统工具提示.


Nar*_*ian 16

我做了一些应该能够适应div的东西.

HTML

<td>
    <%# (Eval("Name").ToString().Length > 65) ? Eval("Name").ToString().Substring(0, 60) + "..." : Eval("Name")%>
    <span class="showonhover">
        <a href="#"><%# (Eval("Name").ToString().Length > 65) ? "More" : "" %></a>
        <span class="hovertext">
            <%# Eval("Name") %>
        </span>
    </span>
</td>
Run Code Online (Sandbox Code Playgroud)

CSS

.showonhover .hovertext { display: none;}
.showonhover:hover .hovertext {display: inline;}
a.viewdescription {color:#999;}
a.viewdescription:hover {background-color:#999; color: White;}
.hovertext {position:absolute;z-index:1000;border:1px solid #ffd971;background-color:#fffdce;padding:11px;width:150px;font-size: 0.75em;}
Run Code Online (Sandbox Code Playgroud)

有关更深入的讨论,请参阅我的帖子:

悬停时的简单格式化工具提示文本

  • 问题是一个HTML解决方案而不是一些.net服务器端魔术. (8认同)
  • .net代码在那里显示截断.使用html和css的方法仍然有效. (5认同)

Ste*_*inn 14

这是一个纯CSS 3实现(带有可选的JS)

您唯一需要做的就是在任何名为"data-tooltip"的div上设置一个属性,当您将鼠标悬停在它旁边时,该文本将显示在它旁边.

我已经包含了一些可选的JavaScript,它会导致工具提示显示在光标附近.如果您不需要此功能,则可以放心地忽略此小提琴的JavaScript部分.

如果您不想在悬停状态下淡入,只需删除过渡属性.

它的风格类似于title属性工具提示.这是JSFiddle:http://jsfiddle.net/toe0hcyn/1/

HTML示例:

<div data-tooltip="your tooltip message"></div>
Run Code Online (Sandbox Code Playgroud)

CSS:

*[data-tooltip] {
    position: relative;
}

*[data-tooltip]::after {
    content: attr(data-tooltip);

    position: absolute;
    top: -20px;
    right: -20px;
    width: 150px;

    pointer-events: none;
    opacity: 0;
    -webkit-transition: opacity .15s ease-in-out;
    -moz-transition: opacity .15s ease-in-out;
    -ms-transition: opacity .15s ease-in-out;
    -o-transition: opacity .15s ease-in-out;
    transition: opacity .15s ease-in-out;

    display: block;
    font-size: 12px;
    line-height: 16px;
    background: #fefdcd;
    padding: 2px 2px;
    border: 1px solid #c0c0c0;
    box-shadow: 2px 4px 5px rgba(0, 0, 0, 0.4);
}

*[data-tooltip]:hover::after {
    opacity: 1;
}
Run Code Online (Sandbox Code Playgroud)

用于基于鼠标位置的工具提示位置更改的可选JavaScript:

var style = document.createElement('style');
document.head.appendChild(style);

var matchingElements = [];
var allElements = document.getElementsByTagName('*');
for (var i = 0, n = allElements.length; i < n; i++) {
    var attr = allElements[i].getAttribute('data-tooltip');
    if (attr) {
        allElements[i].addEventListener('mouseover', hoverEvent);
    }
}

function hoverEvent(event) {
    event.preventDefault();
    x = event.x - this.offsetLeft;
    y = event.y - this.offsetTop;

    // Make it hang below the cursor a bit.
    y += 10;

    style.innerHTML = '*[data-tooltip]::after { left: ' + x + 'px; top: ' + y + 'px  }'

}
Run Code Online (Sandbox Code Playgroud)


Ans*_*shi 12

好的,这是您满足的所有赏金要求:

  • 没有jQuery
  • 瞬间出现
  • 直到老鼠离开该区域才消失
  • 融入淡入/淡出效果
  • 最后......简单的解决方案

这是一个演示和我的代码链接(JSFiddle)

以下是我在这个纯粹的JS,CSS和HTML5小提琴中加入的功能:

  • 您可以设置淡入淡出的速度.
  • 您可以使用简单变量设置工具提示的文本.

HTML:

<div id="wrapper">
    <div id="a">Hover over this div to see a cool tool tip!</div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

#a{
    background-color:yellow;
    padding:10px;
    border:2px solid red;    
}

.tooltip{
    background:black;
    color:white;
    padding:5px;
    box-shadow:0 0 10px 0 rgba(0, 0, 0, 1);
    border-radius:10px;
    opacity:0;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

var div = document.getElementById('wrapper');
var a = document.getElementById("a");
var fadeSpeed = 25; // a value between 1 and 1000 where 1000 will take 10
                    // seconds to fade in and out and 1 will take 0.01 sec.
var tipMessage = "The content of the tooltip...";

var showTip = function(){    
    var tip = document.createElement("span");
    tip.className = "tooltip";
    tip.id = "tip";
    tip.innerHTML = tipMessage;
    div.appendChild(tip);
    tip.style.opacity="0"; // to start with...
    var intId = setInterval(function(){
        newOpacity = parseFloat(tip.style.opacity)+0.1;
        tip.style.opacity = newOpacity.toString();
        if(tip.style.opacity == "1"){
            clearInterval(intId);
        }
    }, fadeSpeed);
};
var hideTip = function(){
    var tip = document.getElementById("tip");
    var intId = setInterval(function(){
        newOpacity = parseFloat(tip.style.opacity)-0.1;
        tip.style.opacity = newOpacity.toString();
        if(tip.style.opacity == "0"){
            clearInterval(intId);
            tip.remove();
        }
    }, fadeSpeed);
    tip.remove();
};

a.addEventListener("mouseover", showTip, false);
a.addEventListener("mouseout", hideTip, false);
Run Code Online (Sandbox Code Playgroud)


Nim*_*tel 7

我开发了三种类型的淡入淡出效果:

/* setup tooltips */
    .tooltip {
      position: relative;
    }
    .tooltip:before,
    .tooltip:after {
      display: block;
      opacity: 0;
      pointer-events: none;
      position: absolute;
    }
    .tooltip:after {
    	border-right: 6px solid transparent;
    	border-bottom: 6px solid rgba(0,0,0,.75); 
      border-left: 6px solid transparent;
      content: '';
      height: 0;
        top: 20px;
        left: 20px;
      width: 0;
    }
    .tooltip:before {
      background: rgba(0,0,0,.75);
      border-radius: 2px;
      color: #fff;
      content: attr(data-title);
      font-size: 14px;
      padding: 6px 10px;
        top: 26px;
      white-space: nowrap;
    }

    /* the animations */
    /* fade */
    .tooltip.fade:after,
    .tooltip.fade:before {
      transform: translate3d(0,-10px,0);
      transition: all .15s ease-in-out;
    }
    .tooltip.fade:hover:after,
    .tooltip.fade:hover:before {
      opacity: 1;
      transform: translate3d(0,0,0);
    }

    /* expand */
    .tooltip.expand:before {
      transform: scale3d(.2,.2,1);
      transition: all .2s ease-in-out;
    }
    .tooltip.expand:after {
      transform: translate3d(0,6px,0);
      transition: all .1s ease-in-out;
    }
    .tooltip.expand:hover:before,
    .tooltip.expand:hover:after {
      opacity: 1;
      transform: scale3d(1,1,1);
    }
    .tooltip.expand:hover:after {
      transition: all .2s .1s ease-in-out;
    }

    /* swing */
    .tooltip.swing:before,
    .tooltip.swing:after {
      transform: translate3d(0,30px,0) rotate3d(0,0,1,60deg);
      transform-origin: 0 0;
      transition: transform .15s ease-in-out, opacity .2s;
    }
    .tooltip.swing:after {
      transform: translate3d(0,60px,0);
      transition: transform .15s ease-in-out, opacity .2s;
    }
    .tooltip.swing:hover:before,
    .tooltip.swing:hover:after {
      opacity: 1;
      transform: translate3d(0,0,0) rotate3d(1,1,1,0deg);
    }

    /* basic styling: has nothing to do with tooltips: */
    h1 {
      padding-left: 50px;
    }
    ul {
      margin-bottom: 40px;
    }
    li {
      cursor: pointer; 
      display: inline-block; 
      padding: 0 10px;
    }
Run Code Online (Sandbox Code Playgroud)
 <h1>FADE</h1>

      <div class="tooltip fade" data-title="Hypertext Markup Language">
      <label>Name</label>
      <input type="text"/>
      </div>
      

    <h1>EXPAND</h1>

      <div class="tooltip expand" data-title="Hypertext Markup Language">
      <label>Name</label>
      <input type="text"/>
      </div>
      

    <h1>SWING</h1>

      <div class="tooltip swing" data-title="Hypertext Markup Language"> 
      <label>Name</label>
      <input type="text"/>
      </div>
     
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用数据属性、伪元素等创建自定义 CSS 工具提示content: attr()

http://jsfiddle.net/clintioo/gLeydk0k/11/

<div data-tooltip="This is my tooltip">
    <label>Name</label>
    <input type="text" />
</div>
Run Code Online (Sandbox Code Playgroud)

.

div:hover:before {
    content: attr(data-tooltip);
    position: absolute;
    padding: 5px 10px;
    margin: -3px 0 0 180px;
    background: orange;
    color: white;
    border-radius: 3px;
}

div:hover:after {
    content: '';
    position: absolute;
    margin: 6px 0 0 3px;
    width: 0;
    height: 0;
    border-top: 5px solid transparent;
    border-right: 10px solid orange;
    border-bottom: 5px solid transparent;
}

input[type="text"] {
    width: 125px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
Run Code Online (Sandbox Code Playgroud)


Pro*_*eek 5

您可以在切换孩子的divonmouseoveronmouseout如下:

function Tooltip(el, text) {
  el.onmouseover = function() {
    el.innerHTML += '<div class="tooltip">' + text + '</div>' 
    }
  el.onmouseout = function() {
    el.removeChild(el.querySelector(".tooltip"))
  }
}

//Sample Usage
Tooltip(document.getElementById("mydiv"),"hello im a tip div")
Run Code Online (Sandbox Code Playgroud)

Stack Snippets 和jsFiddle 中的示例

function Tooltip(el, text) {
  el.onmouseover = function() {
    el.innerHTML += '<div class="tooltip">' + text + '</div>'
  }
  el.onmouseout = function() {
    el.removeChild(el.querySelector(".tooltip"))
  }
}

//Sample Usage
Tooltip(document.getElementById("mydiv"), "I'm a tooltip")
Run Code Online (Sandbox Code Playgroud)
#mydiv {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 120px;
  height: 50px;
  padding: 5px 10px;
  background-color: #e2f7ff;
  box-shadow: 1px 1px 1px 0px #cecece;
}

.tooltip {
  position: absolute;
  display: inline-block;
  white-space: nowrap;
  width: auto;
  height: auto;
  background-color: #11121b;
  color: white;
  padding: 4px 6px;
  border-radius: 3px;
  z-index: 99;
  left: 100%;
  top: 0;
}
Run Code Online (Sandbox Code Playgroud)
<div id="mydiv"> This is just a div </div>
Run Code Online (Sandbox Code Playgroud)


Ron*_*ews 5

您可以使用标题。它几乎适用于所有事情

<div title="Great for making new friends through cooperation.">

<input script=JavaScript type=button title="Click for a compliment" onclick="window.alert('Your hair reminds me of a sunset across a prairie')" value="making you happy">

<table title="Great job working for those who understand the way i feel">

想想任何可以对 html 窗口可见title="whatever tooltip you'd like"的标签,然后在它的标签内插入一个标签,你就会得到一个工具提示。


小智 5

您也可以使用它作为工具提示...它的工作原理相同,但您必须编写额外的标签,就是这样。

<abbr title="THis is tooltip"></abbr>
Run Code Online (Sandbox Code Playgroud)