仅使用 CSS 将文本转换为带有内容作为工具提示的图标

Turning text into icon with content as tooltip with CSS only

我正在尝试将超链接变成图标,同时将内容文本变成工具提示。问题是我在一个只有 CSS 可以玩的地方工作,我不能修改 HTML 或添加任何 Javascript。我正在 table 中从外部源检索数据,其中一列是一个超链接 - 我想将其转换为一个图标,其中文本内容作为悬停时的工具提示方式。

下面的截图是我得到的程度,是否有任何方法可以使 :hover 部分的外观、感觉和行为更像工具提示?或者是否有另一种方法可以完全实现我所追求的目标?

.external-link {
    font-size: 0;
}

.external-link:after {
    content: ' ';
    background: url(https://cdn.sstatic.net/Sites/Whosebug/Img/favicon.ico?v=ec617d715196) no-repeat;
    display: inline-block;
    height: 32px;
    width: 32px;
}

.external-link:hover {
    /* Well it shows the text, but it ain't pretty nor very functional.. */
    font-size: initial;
}
<a href="https://www.whosebug.com/" class="external-link">Stack Overflow</a>

您可以像下面那样编辑您的 css。只是一些想法。不确定是否可以将工具提示文本写入 css

.external-link {
    font-size: 0;
    position: relative;
}

.external-link:after {
    content: ' ';
    background: url(https://cdn.sstatic.net/Sites/Whosebug/Img/favicon.ico?v=ec617d715196) no-repeat;
    display: inline-block;
    height: 32px;
    width: 32px;
}

.external-link:before {
    content: 'Text';
    position: absolute;
    display: inline-block;
    height: auto;
    padding: 2px 5px;
    width: 100%;
    display:none;
    color: white;
    font-size:initial;
    background: #00000099;
    bottom: -15px;
}

.external-link:hover:before {
    /* Well it shows the text, but it ain't pretty nor very functional.. */
    display:block;
}
<a href="https://www.whosebug.com/" class="external-link">Stack Overflow</a>

这有点棘手,但可以通过修改 beforeafter 伪元素来实现。您只需在 content 属性 中编写工具提示内容,否则,您应该修改 HMTL 本身。

所以你的最终代码应该是这样的:

.external-link {
  font-size: 0;
}

.external-link::before {
  content: 'Stack Overflow';
  visibility: hidden;
  width: 120px;
  background-color: #555;
  color: #fff;
  text-align: center;
  padding: 5px 0;
  border-radius: 6px;
  /* Position the tooltip text */
  position: absolute;
  left: 40px;
  z-index: 1;
  /* Fade in tooltip */
  opacity: 0;
  transition: opacity 0.3s;
}

.external-link::after {
  content: ' ';
  background: url(https://cdn.sstatic.net/Sites/Whosebug/Img/favicon.ico?v=ec617d715196) no-repeat;
  display: inline-block;
  height: 32px;
  width: 32px;
}

.external-link:hover.external-link::before {
  /* Well it shows the text, but it ain't pretty nor very functional.. */
  font-size: initial;
  visibility: visible;
  opacity: 1;
}
<a href="https://www.whosebug.com/" class="external-link">Stack Overflow</a>