【问题标题】:Highlighting a tag using CSS使用 CSS 突出显示标签
【发布时间】:2014-12-23 01:50:27
【问题描述】:

我有一个使用 CSS3 创建的 HTML 标签。我想“突出显示”一个特定的标签。理想情况下,我想在标签周围发光,表明它处于活动状态。我正在使用 ':after' 创建标签的形状,但这不允许我在实际形状周围突出显示。

这是一个小提琴: http://jsfiddle.net/nocztpxv/2/

HTML

<a href="#" class="tag">
    InsertHTML
</a>

CSS

.active{
    border: 1px solid rgb(246, 255, 0);    
    box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.05) inset, 0px 0px 8px rgba(255, 252, 14, 0.6);
}

如您所见,除箭头/三角形部分外,所有内容都被突出显示。有谁知道我如何在箭头/三角形周围也有相同的突出显示?

【问题讨论】:

  • 你在CSS Tricks上看到这个帖子了吗?您可能无法以目前的形式进行
  • 我相信你需要在给它一个固定的宽度和高度之后旋转(45度)你的:after伪元素
  • 目前这是不可能的,除非你遇到了臃肿棘手的解决方法。由于这些三角形已经使用borderborder-color 进行了渲染。最好的解决方案是在 Photoshop 中的某个位置绘制一个合适的图像,具有中性和活动状态,并处理 :hover 上的 background-image 等。我已经在很多流行的资源中看到了这一点。跨度>
  • @knitevision Terry 提供了我正在寻找的解决方案.. 不确定它是否适合作为一个臃肿棘手的解决方法或现在;)

标签: html css


【解决方案1】:

我能想到一种解决方案,但需要对您的 DOM 稍作修改。解决方案是将链接文本包装在&lt;span&gt; 元素中,然后我们将使用旋转矩形来实现该效果,而不是使用三角形边框。但是,由于 z-index 中的背景必须高于旋转矩形,因此需要嵌套(因此我们在 &lt;span&gt; 元素上声明了蓝色背景。

在此处查看小提琴:http://jsfiddle.net/teddyrised/nocztpxv/6/ 对于堆栈的 3D 可视化,请参阅此处:http://jsfiddle.net/teddyrised/nocztpxv/8/

由于只有两个可能的伪元素,并且您已经将::before::after 用于样式目的,因此我们只能使用额外的嵌套级别:

<a href="#" class="tag">
    <span>InsertHTML</span>
</a>
<a href="#" class="tag active">
    <span>InsertHTML</span>
</a>
<a href="#" class="tag">
    <span>InsertHTML</span>
</a>

对于 CSS(注意:您可能希望将供应商前缀添加到 CSS 转换属性):

.tag {
    font-family: Helvetica, Arial, sans-serif;
    display: inline-block;
    color: #fff;
    position: relative;
    border-top-left-radius: 4px;
    border-bottom-left-radius: 4px;
    margin: 0 30px 0 0;
    text-decoration: none;
}

/* The rotated square */
.tag::after {
    background-color: #588fe5;
    display: block;
    height: 27px;
    width: 27px;
    position: absolute;
    top: 6px;
    right: -13px;
    content: "";
    transform: rotate(45deg);
    z-index: 1;
}

/* Nested span */
.tag > span {
    display: inline-block;
    background-color: #588fe5;
    position: relative;
    padding: 10px;
    z-index: 2;
}

/* The white dot */
.tag > span::before {
    background: #fff;
    width: 10px;
    height: 10px;
    content: "";
    display: inline-block;
    border-radius: 20px;
    margin: 0 5px 0 0;
}

/* Hover effects */
.tag:hover::after, .tag:hover > span {
    background-color: #739fe4;
}

/* Active tag */
.tag.active, .tag.active::after {
    box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.05) inset, 0px 0px 8px rgba(255, 252, 14, 0.6);
}

【讨论】:

  • 哇!我永远不会自己想出那个。非常感谢@Terry!对我的代码的调整不是问题。这完全解决了我的问题。
  • @ericbelldesigns 很高兴我提供了帮助——现在我已经包含了一个 3D 演示来向您展示堆叠的工作原理;)jsfiddle.net/teddyrised/nocztpxv/8