【问题标题】:CSS content class rather than attrCSS 内容类而不是 attr
【发布时间】:2015-04-02 13:59:38
【问题描述】:

我想将现有标记传递给使用 css 构建的工具提示,目前使用 attr(title) 但必须复制标记以获得所需的结果。

考虑:

<p class="toolTip" title="this is a tooltip">hover over me</p>
<p class="existing">this is a tool tip</p>


.toolTip:hover:after{
    content: attr(title);
}

我想做的是这样的:

.toolTip:hover:after{
    content: class(existing);  //invalid I know!
}

tl:博士;我想使用类从现有标记中提取内容,而不是使用 title 属性。

【问题讨论】:

  • 你是在建议继承吗?如果是,那么在传统的 css3 中是不可能的。为此,您必须使用 LESS 预处理器。
  • 为什么要特别指定class属性?
  • @i_like_robots 不必是类,但有问题的元素只有类。可以是任何东西,只要我不需要复制所有标记。
  • @Harry 可以用 jQuery 完成吗?我很乐意运行几行 jQuery 来实现这一点。任何可以节省人们在未来编辑标记区域的方法。
  • 谢谢@Harry 我想我必须使用 jQuery 来实现这一点,没什么大不了的! :)

标签: jquery css class attr


【解决方案1】:

使用纯 CSS(甚至使用预处理器)没有真正的方法可以选择元素的整个文本内容并将其分配给 content 属性。 content 属性只能有预定义的字符串、URL、属性值或计数器作为值。

您可以使用 jQuery(或普通 JS)自动将 toolTip 类和 title 属性添加到具有所需类 (.existing) 的所有元素,并将元素的文本内容分配给该类属性。这样您就不必复制 CSS 规则。

注意:这只是一个关于如何将元素的内容设置为其标题属性的简单示例,但在现实世界的场景中,您需要更多,因为将实际内容本身设置为工具提示没有多大意义。

$(document).ready(function() {
  $('.existing').addClass('toolTip');
  $('.existing').each(function() {
    $(this).attr('title', $(this).text());
  });
});
.toolTip:hover:after {
  content: attr(title);
  /* just for demo */
  position: relative;
  left: 10px;
  border: 1px solid green;
  background: lightgreen;
  padding: 2px;
  border-radius: 2px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="toolTip" title="this is a tooltip">hover over me</p>
<p class="existing">this is a tool tip</p>

不同的示例: 这是一个略有不同的示例,其中工具提示与元素的内容不同。这里元素的内容是父元素的内容,工具提示文本最初存在于子元素中(class="existing")。使用 jQuery 将这个子 span 的内容添加到父的 title 属性中。

$(document).ready(function() {
  $('.existing').parent().addClass('toolTip');
  $('.existing').each(function() {
    $(this).parent().attr('title', $(this).text());
  });
});
.toolTip:hover:after {
  content: attr(title);
  /* just for demo */
  position: relative;
  left: 10px;
  border: 1px solid green;
  background: lightgreen;
  padding: 2px;
  border-radius: 2px;
}
.existing {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="toolTip" title="this is a tooltip">hover over me</p>
<p>hover over me <span class="existing">this is a tool tip</span>
</p>

<div>I have a tooltip too<span class="existing">See, I told you!</span>
</div>

【讨论】:

  • 感谢@Harry 的所有帮助! :)
  • 总是很高兴能帮助朋友@Myles
猜你喜欢
  • 2014-02-26
  • 1970-01-01
  • 2013-01-14
  • 2013-08-12
  • 1970-01-01
  • 2016-09-16
  • 2011-12-12
  • 1970-01-01
  • 2014-08-17
相关资源
最近更新 更多