CSS :before / :after 的背景颜色独立于父级
CSS Background Color for :before / :after independent of parent
我有一系列 CSS 规则来为 PDF 添加 FontAwesome 图标 before/after link,phone 数字,电子邮件地址等
此外,我有一个 links 的全局悬停规则,它使所有 link 元素的背景颜色为黄色。
.main a:hover {
background-color: yellow;
}
.main a[href^="tel"]:before {
content: '\f879';
background-color: transparent;
}
.main a[href^"tel"]:hover::before {
background-color: transparent;
}
<div class="main">
<p>Phone: <a href="tel:131313">131313</a></p>
<p><a href="/test.html">Normal link - no icon</a></p>
</div>
我的问题是我不想将黄色悬停颜色应用于图标。
如果我将伪元素上的悬停颜色设置为特定颜色(例如,不透明),一切正常。但是这些 link 可以出现在任何地方(卡片、手风琴等),它们可能具有不同的背景颜色,所以我宁愿不必定义每个可能的实例。
您可以为伪元素赋予 position: absolute
样式。这会将它与其父对象分开。尝试以下操作:
.main a[href^="tel"] {
content: '\f879';
background-color: transparent;
margin-left: 10px;
}
.main a[href^="tel"]:before {
content: '\f879';
background-color: transparent;
position: absolute;
left: 0;
}
根据自己的喜好调整边距!
这是我的解决方案,使用 jQuery 用 span
包装所有具有属性 href
并以“tel”开头的锚点。我没有在此处导入 FontAwesome,因此您的图标无法正确显示,但您可以看到,即使锚点被段落文本包围,您想要的突出显示也能正常工作。
$(function() {
$('a[href^="tel"]').html('<span>' + $('a[href^="tel"]').html() + '</span>');
});
.main a:before {
content: '\f879A';
}
.main a span:hover {
background-color: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<div class="main">
<p>Hello, <a href="tel:131313">131313</a>!</p>
</div>
您可以使用偏移渐变,但您需要根据您的情况更新值,因为它取决于图标的大小:
.main a:hover {
background: linear-gradient(yellow 0 0) 10px no-repeat;
}
.main a[href^="tel"]:before {
content: '\f879';
background-color: transparent;
}
.main a[href^"tel"]:hover::before {
background-color: transparent;
}
<div class="main">
<p><a href="tel:131313">131313</a></p>
</div>
我有一系列 CSS 规则来为 PDF 添加 FontAwesome 图标 before/after link,phone 数字,电子邮件地址等
此外,我有一个 links 的全局悬停规则,它使所有 link 元素的背景颜色为黄色。
.main a:hover {
background-color: yellow;
}
.main a[href^="tel"]:before {
content: '\f879';
background-color: transparent;
}
.main a[href^"tel"]:hover::before {
background-color: transparent;
}
<div class="main">
<p>Phone: <a href="tel:131313">131313</a></p>
<p><a href="/test.html">Normal link - no icon</a></p>
</div>
我的问题是我不想将黄色悬停颜色应用于图标。
如果我将伪元素上的悬停颜色设置为特定颜色(例如,不透明),一切正常。但是这些 link 可以出现在任何地方(卡片、手风琴等),它们可能具有不同的背景颜色,所以我宁愿不必定义每个可能的实例。
您可以为伪元素赋予 position: absolute
样式。这会将它与其父对象分开。尝试以下操作:
.main a[href^="tel"] {
content: '\f879';
background-color: transparent;
margin-left: 10px;
}
.main a[href^="tel"]:before {
content: '\f879';
background-color: transparent;
position: absolute;
left: 0;
}
根据自己的喜好调整边距!
这是我的解决方案,使用 jQuery 用 span
包装所有具有属性 href
并以“tel”开头的锚点。我没有在此处导入 FontAwesome,因此您的图标无法正确显示,但您可以看到,即使锚点被段落文本包围,您想要的突出显示也能正常工作。
$(function() {
$('a[href^="tel"]').html('<span>' + $('a[href^="tel"]').html() + '</span>');
});
.main a:before {
content: '\f879A';
}
.main a span:hover {
background-color: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<div class="main">
<p>Hello, <a href="tel:131313">131313</a>!</p>
</div>
您可以使用偏移渐变,但您需要根据您的情况更新值,因为它取决于图标的大小:
.main a:hover {
background: linear-gradient(yellow 0 0) 10px no-repeat;
}
.main a[href^="tel"]:before {
content: '\f879';
background-color: transparent;
}
.main a[href^"tel"]:hover::before {
background-color: transparent;
}
<div class="main">
<p><a href="tel:131313">131313</a></p>
</div>