【问题标题】:JS: Relative positioning of tooltip on right of iconJS:工具提示在图标右侧的相对定位
【发布时间】:2020-11-04 20:25:41
【问题描述】:

我有一个图标,当您将鼠标悬停在它上面时,我希望在图标右侧显示一个自定义 CSS 工具提示。无论您是向上还是向下滚动页面,工具提示都需要始终显示在图标的右侧。

不,我不想使用任何插件。我只想要一点 JS/CSS 来完成工作。如果使用JQuery,需要兼容v1.7,JQuery-UI:v1.8。

另外,需要兼容IE 6和7

我更愿意将我的元素保留为兄弟元素,但看起来在某些情况下出现的 div 需要是子元素,所以如果需要更改 HTML 也没关系。

HTML:

<img src="" class="icon">ICON<img/>

<div class="demo">
    STUFF<br/>
    STUFF<br/>
    STUFF<br/>
    STUFF<br/>
    STUFF<br/>
</div>

CSS:

.demo {
    margin-left: 5px;
    padding: 10px;
    width: 265px;
    height: 110px;
    background-color: #ccc;
    position: relative;
    border: 2px solid #333;
}

.demo:after, .demo:before {
    border: solid transparent;
    content: ' ';
    height: 0;
    right: 100%;
    position: absolute;
    width: 0;
}

.demo:after {
    border-width: 11px;
    border-right-color: #ccc;
    top: 13px;
}

.demo:before {
    border-width: 14px;
    border-right-color: #333;
    top: 10px;
}

现场示例: http://jsfiddle.net/49Js3/16/

【问题讨论】:

    标签: javascript html css tooltip


    【解决方案1】:

    由于我的声誉不足以评论上面的答案,我只想添加一个更新的小提琴(基于上面的答案),绝对定位工具提示,但使用 display: inline-block 以便它是未从左侧固定到某个位置,将显示在右侧: 这是重要的一点:

    a.tippy:hover + div {
        display: inline-block;
        position: absolute;
    }
    

    http://jsfiddle.net/7gmv3wo2/

    【讨论】:

      【解决方案2】:

      在这里提琴:http://jsfiddle.net/49Js3/29/

      我无法访问 IE6,所以我不知道它是否合法。我知道您需要一个锚点才能在 IE7 及更早版本中使用 CSS 获得悬停行为。

      所以,我在您的图像周围添加了一个锚点,以及一个包含工具提示的 div。

      HTML

      <div class="outer">
      <a class="tippy" href="">
              <img src="" class="icon">ICON<img/>
         </a>
      
          <div class="demo">STUFF
              <br/>STUFF
              <br/>STUFF
              <br/>STUFF
              <br/>STUFF
              <br/>
          </div>
      </div>
      

      这是 CSS:

      .tippy {
          text-decoration: none;
      }
      .outer {
          width: 350px;
      }
      a.tippy:hover + div {
          display:block;
          float: right;
      }
      .demo {
          margin-left: 5px;
          padding: 10px;
          width: 265px;
          height: 110px;
          background-color: #ccc;
          position: relative;
          border: 2px solid #333;
          display: none;
      }
      .demo:after, .demo:before {
          border: solid transparent;
          content:' ';
          height: 0;
          right: 100%;
          position: absolute;
          width: 0;
      }
      .demo:after {
          border-width: 11px;
          border-right-color: #ccc;
          top: 13px;
      }
      .demo:before {
          border-width: 14px;
          border-right-color: #333;
          top: 10px;
      }
      

      【讨论】:

      • 看起来不错。为了让左箭头出现在 ICON 旁边,我在margin-top: -15px; 中添加了这是您推荐的方式,还是您推荐其他方式?见小提琴:jsfiddle.net/49Js3/30
      • 这在 Chrome、FF、IE8 和 9 中运行良好。但是,在 IE7 中,div 下方的内容被下推。有什么办法可以避免吗?
      • @Keven,通常情况下,您会添加一个覆盖规则,该规则具有特定于 IE7 的不同左上角值。您需要在启动时检测 ie7(来自用户代理标头),并将标记类附加到 body 元素以执行此操作。
      • 所以,尝试放到自己的网站后,发现DIV其实是在Chrome、FF、IE等内容较长的时候下推其他内容。我希望 DIV 出现在文本上。我更新了小提琴以向您展示我的意思:jsfiddle.net/49Js3/32
      • @Keven 好的,我有一个更新可以解决这个问题:jsfiddle.net/49Js3/42
      猜你喜欢
      • 2019-12-15
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多