【问题标题】:How to control position and colour of title text in HTML href element? [duplicate]如何控制 HTML href 元素中标题文本的位置和颜色? [复制]
【发布时间】:2023-03-31 09:50:01
【问题描述】:

使用 HTML 和 CSS,而不是 JS,如何更改悬停链接时显示的标题文本的位置、文本颜色和背景颜色?我想将标题文本置于链接文本的中点下方。

a:link {text-decoration: none;
color: #000;
border-bottom: 2px solid #f00;  }

a:hover, a:active
{text-decoration: none;
color: #f00;
border-bottom: 2px solid #f00;  }

a:visited {text-decoration: none;
color: black;
border-bottom: 2px solid #888;  }
<div>
<a href="#" title="hello">text</a>
</div>

【问题讨论】:

  • 你不能。您需要制作一个自定义工具提示来做到这一点。如果您不想自己动手,可以使用相应的库。

标签: html css


【解决方案1】:

更新

在最终弄清楚 OP 的意思是,解决方案原本可以正常工作,但有一个例外,属性 title 的默认行为没有被抑制,因此在自定义工具提示之后有一个额外的工具提示。

解决方案是这样的:不要使用title 属性 如果没有 JavaScript,您将受到许多无法使用 CSS 控制的默认行为的摆布。但是不要气馁,因为您可以使用另一种替代方法,它不仅有效且符合语义(如果标记正确),而且在功能上也很灵活。

使用data-* 属性* = 小写字母中没有空格的任何字符串--改用破折号。)

  • 我们可以使用任意长度的任意字符串
  • 我们可以将其命名为任何我们想要的名称(在之前规定的限制范围内)
  • 我们可以在一个元素上拥有尽可能多的data-* 属性...
  • ...该元素可以是任何元素

请参阅下面片段中的最后两个示例。


使用带有attr() 值的::before and ::after 伪元素。不限于title,这很好,看看下面的片段。

片段

div {
  margin: 50px;
  position: relative;
}
a:link {
  text-decoration: none;
  color: #000;
  border-bottom: 2px solid #f00;
}
a:visited {
  text-decoration: none;
  color: black;
  border-bottom: 2px solid #888;
}
a:hover,
a:active {
  text-decoration: none;
  color: #f00;
  border-bottom: 2px solid #f00;
}
a:hover::after {
  content: attr(title);
  color: blue;
  position: absolute;
  top: 3ex;
  left: -.5ch;
  border-bottom: 0 none transparent;
}
a[name]:hover::after {
  content: attr(href);
  background: black;
  color: cyan;
  border-bottom: 0 none transparent;
}
a[target]:hover::after {
  content: attr(target);
  left: -1.5ch;
  background: red;
  color: white;
  border-bottom: 0 none transparent;
}
a[data-node]:hover::after {
  content: attr(data-node);
  left: -4ch;
  border-bottom: 0 none transparent;
  background: black;
  color: gold;
}
a[data-anything]:hover::after {
  content: attr(data-anything);
  left: 0;
  border-bottom: 0 none transparent;
  color: purple;
  width: 8ch;
}
<div>
  <a href="#" title="hello">text</a>
</div>


<div>
  <a href="#" title="world!">text</a>
</div>


<div>
  <a href="h++p://nowhere.lost" name='destination'>Where do I go to?</a>
</div>

<div>
  <a href="#" target="#anchorPoint">Target</a>
</div>

<div>
  <a href="#" data-node="anyArbitraryString">Data-*</a>
</div>

<div>
  <a href="#" data-anything="For anything you want represented by a string">Use Data-*</a>
</div>

【讨论】:

  • 非常感谢,但它仍然显示默认标题框以及蓝色文本。
  • @ruffle 那我一定是误解了你的问题,请进一步解释。
  • 在这里举你的第一个例子,我的意思是有蓝色的文本,但不是默认的标题框,它显示在它的下方和右侧。实现这一点的方法可能是使用跨度。
  • 你是说那条红线?这很烦人,我想我知道该做什么......
  • 不,不是红线,虽然那很烦人。当我将鼠标悬停在“文本”上时,我会在它下面看到一个蓝色的“你好”,然后不久之后,默认的标题框也会出现,白色背景上的黑色文本,也显示“你好”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多