【问题标题】:Position own tooltip by css通过css定位自己的tooltip
【发布时间】:2022-11-23 15:45:53
【问题描述】:

我想创建基于 css 的工具提示,但我很难找到正确的位置。 我的想法是将工具提示文本设置为数据工具提示属性并在悬停时显示它们。

现在的问题是,在某些情况下,这个职位是行不通的。 例如,一种情况是,如果工具提示被隐藏溢出的相对定位元素重叠。

看到这个演示小提琴:https://jsfiddle.net/45Lbhusk/

[data-tooltip1]:hover::before {
      content: attr(data-tooltip1);
      left:auto;
      position: fixed;
      margin-top: -1.5rem;
      background: lightgray;
      border: 1px solid black;
    }

    [data-tooltip2]:hover::before {
      content: attr(data-tooltip2);
      left:auto;
      position: absolute;
      margin-top: -1.5rem;
      background: lightgray;
      border: 1px solid black;
    }

    span{
      display: block;
      font-weight: bold;
      margin: 3px;
      padding: 10px;
      border: 1px solid blue;
    }

    div{
      overflow: hidden;
      position: relative;
      background: #eeeeee;
    }
Some <br/>
    dummy <br/>
    text <br/>
    so <br/>
    that <br/>
    scrollbars <br/>
    appear. <br/>
     <br/> <br/>

    <div>
      <span data-tooltip1="Can you read this long text?">Hover for fixed positioned tooltip</span>
    </div>

    <br/>

    <div>
      <span data-tooltip2="Can you read this long text?">Hover for absolute positioned tooltip</span>
    </div>

     <br/> <br/>
    Some <br/>
    dummy <br/>
    text <br/>
    so <br/>
    that <br/>
    scrollbars <br/>
    appear. <br/>

我试图将工具提示定位为“固定”和“绝对”,但两者都有问题:

  • 修复了页面滚动时不滚动和工具提示显示在错误位置的问题
  • 绝对工具提示可能会被父级剪切。

我阅读了许多关于同一主题的其他问题,但它们需要 js 才能工作或有其他要求。我真的很想有一个只有 CSS 的解决方案。

【问题讨论】:

    标签: html css tooltip


    【解决方案1】:

    此解决方案旨在解决 absolute 版本的工具提示被 overflow: hidden 容器剪切的问题。

    它使用此 answer 中的方法在设置为 overflow: hidden 的容器中显示 absolute 定位的工具提示。

    不利的一面是它确实需要对容器范围进行额外的样式设置,这很可能与最初将其设置为 overflow: hidden 的原因相矛盾。

    例子:

    [data-tooltip2]:hover::before {
      content: attr(data-tooltip2);
      left: auto;
      position: absolute;
      margin-top: -1.5rem;
      background: lightgray;
      border: 1px solid black;
    }
    
    span {
      display: block;
      font-weight: bold;
      margin: 3px;
      padding: 10px;
      border: 1px solid blue;
    }
    
    div {
      overflow: hidden;
      position: relative;
      background: #eeeeee;
      padding-top: 100px;
      margin-top: -100px;
      background-clip: content-box;
    }
    Some <br />
    dummy <br />
    text <br />
    so <br />
    that <br />
    scrollbars <br />
    appear. <br />
    <br />
    <br />
    
    <div>
      <span data-tooltip2="Can you read this long text?"
        >Hover for absolute positioned tooltip (this container has overflow: hidden)</span
      >
    </div>
    
    <br />
    <br />
    Some <br />
    dummy <br />
    text <br />
    so <br />
    that <br />
    scrollbars <br />
    appear. <br />

    【讨论】:

      【解决方案2】:

      请检查以下代码:

      [data-tooltip1]:hover::before {
        content: attr(data-tooltip1);
        left:auto;
        position: absolute;
        background: lightgray;
        border: 1px solid black;
        bottom: 100%;
      }
      
      [data-tooltip2]:hover::before {
        content: attr(data-tooltip2);
        left:auto;
        position: absolute;
        background: lightgray;
        border: 1px solid black;
        bottom: 100%;
      }
      
      span{
        display: block;
        font-weight: bold;
        margin: 3px;
        padding: 10px;
        border: 1px solid blue;
      }
      
      div{
        overflow: visible;
        position: relative;
        background: #eeeeee;
      }
          Some <br/>
          dummy <br/>
          text <br/>
          so <br/>
          that <br/>
          scrollbars <br/>
          appear. <br/>
           <br/> <br/>
      
          <div>
            <span data-tooltip1="Can you read this long text?">Hover for fixed positioned tooltip</span>
          </div>
      
          <br/>
      
          <div>
            <span data-tooltip2="Can you read this long text?">Hover for absolute positioned tooltip</span>
          </div>
      
           <br/> <br/>
          Some <br/>
          dummy <br/>
          text <br/>
          so <br/>
          that <br/>
          scrollbars <br/>
          appear. <br/>

      目前在悬停元素的顶部位置添加工具提示。 如果你想要更多的调整,请告诉我。

      【讨论】:

      • 灰色方框相对于OP的sn-p好像移动了一点。有趣的是,将 overflow: hidden; 更改为 overflow: visible; 就可以做到这一点。
      • 一种情况是溢出可见,另一种情况是在 CSS 不正确之前悬停。所以我也更新了它。
      • 那么,哪一个变化,灰色不再像在 OP 的 sn-p 中那样在蓝色框上方和下方?
      • 两者都已更改,因为一个与固定位置一起使用,另一个与绝对一起使用,而绝对一个是正确的,只需要对 CSS 进行一些更新
      • 感谢您的回答,但溢出应该保持隐藏状态。即使在已将溢出设置为隐藏的 div 中使用,工具提示也应该始终有效。正如我所提到的,这种情况是一个不起作用的例子。溢出可见的情况当然有效。有机会让它在隐藏溢出的情况下工作吗?
      猜你喜欢
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      相关资源
      最近更新 更多