您可以通过使用 CSS 中的 content:after 属性来在灰色星上显示第二个金色星,如下所示:
<style type="text/css">
.star {
display: inline-block;
width: 20px;
text-align: center;
}
.star.gold { color: gold; }
.star.gold-gray { color: gray; }
.star.gold-gray:after {
display: inline-block;
color: gold;
content: '\2605';
position: absolute;
margin-left: -16px;
width: 8px;
overflow: hidden;
}
.star.gray { color: gray; }
</style>
<div class="star gold">★</div>
<div class="star gold-gray">★</div>
<div class="star gray">★</div>
您确实需要具体说明尺寸才能正常工作,以便您可以正确设置半星上的负边距,并使用溢出将其裁剪为半角:隐藏,但它会满足您的需求。
(我没有在示例中指定字体大小,您可能也想这样做)
这种技术的好处是您不需要在 html 中为半星添加额外的标记,只需要正确的类即可。
编辑
不知何故,我将错误的链接粘贴到我的 jsFiddle 中,从以前的版本中,我仍在破解解决方案,而不是工作的解决方案......可能值得为此投反对票,但它确实有效!
看到它在这里工作。
编辑 2
cimmanon 提到星星“不是真正的内容”,这是非常正确的,但由于问题要求使用 CSS 解决方案来解决问题,所以我制作了一个不需要包含所有可能组合的 sprite-map 的问题。
不是因为我有任何反对精灵贴图的东西——我没有——只是因为我想试一试:)
仍然包括<span>
每个明星的元素(很难避免),但除此之外,这都是很好的标记,我认为对于屏幕阅读器来说效果很好。
在这里查看。
<style type="text/css">
.stars .label {
width: 1px;
color: transparent;
overflow: hidden;
position: absolute;
}
.star {
display: inline-block;
width: 20px;
text-align: center;
}
.star:before {
display: inline-block;
content: '\2605';
}
.star.on { color: gold; }
.star.half { color: gray; }
.star.half:after {
display: inline-block;
color: gold;
content: '\2605';
position: absolute;
margin-left: -16px;
width: 8px;
overflow: hidden;
}
.star.off { color: gray; }
</style>
<div class="stars">
<span class="label">One and a half start (out of three)</span>
<span class="star on"></span>
<span class="star half"></span>
<span class="star off"></span>
</div>