您可以使用的一个很酷的 CSS3 声明是 ::selection
,它会用您选择的颜色覆盖浏览器级别或系统级别的文本高亮颜色。在撰写本文时,只有 Safari 和 Firefox 支持此功能,并且两者使用的方式略有不同。幸运的是,这可以被认为是一种“前向增强”技术。对于使用现代浏览器的用户来说,这是一个不错的功能,但在其他浏览器中会被忽略,这也不是什么大问题。

这就是问题所在
::selection {
background: #ffb7b7; /* WebKit/Blink Browsers */
}
::-moz-selection {
background: #ffb7b7; /* Gecko Browsers */
}
在选择器内部,color
和 background
是唯一有效的属性。为了增加一些趣味性,您可以更改不同段落或页面不同部分的选择颜色。
我所做的只是对具有不同类的段落使用不同的选择颜色
p.red::selection {
background: #ffb7b7;
}
p.red::-moz-selection {
background: #ffb7b7;
}
p.blue::selection {
background: #a8d1ff;
}
p.blue::-moz-selection {
background: #a8d1ff;
}
p.yellow::selection {
background: #fff2a8;
}
p.yellow::-moz-selection {
background: #fff2a8;
}
请注意,即使样式块执行相同的操作,选择器也不会组合在一起。如果您将它们组合在一起,则不起作用。
/* Combining like this WILL NOT WORK */
p.yellow::selection,
p.yellow::-moz-selection {
background: #fff2a8;
}
这是因为如果选择器的一部分浏览器无法理解或无效,则浏览器会忽略整个选择器。对此有一些例外情况(IE 7?),但与这些选择器无关。
为了获得更疯狂的趣味性,您可以在文本选择时显示图像。
我特别喜欢你选择的可爱颜色 :)
就前向增强技术而言,此技术非常棒。诚然,只有大约 20% 的当前平均查看者基础才能看到它,但对于那些看到它的人来说,它是一个极好的视觉效果,并且对那些看不到它的人没有任何损害。很棒的提示!
这真的很酷。大多数访问者可能永远不会看到它,但那些看到它的人会感到惊讶。虽然我不明白为什么 Firefox 必须为其浏览器添加 -moz-……可能应该建议他们更改它。
我真的很喜欢这个想法,所以我把它提升到了一个新的水平
http://metaatem.net/selcolor.php
好吧,我不能就此止步。这是下一步
网络标准万岁!
Erik,这太酷了
耶!我在这里实现了它:http://www.barefootstudios.ca/
感谢大家。我已经清理了它并将其放在 EC2 上。这是新的网址,如果您发现它对您不起作用,请告诉我!
http://metaatem.net/highlite/
在 Opera 中不起作用
这对我也无效!!FF2
哦,这对现代浏览器用户来说是一件非常好的事情。它在 Opera 9.5 中运行良好,与您的“在 html 中隐藏图像”相同
@Jermayn:它绝对可以在 Firefox 2 中运行。示例页面对您不起作用吗?
@bart:它在 Opera 9.5 中运行良好,这很酷。因此,现在只剩下 IE 落后了(就主要浏览器而言)。
不错的效果!有没有办法定义突出显示时文本的颜色?
@Martha Retallick
当然可以!只需使用 color
我似乎无法在 Opera 中使其工作,有人知道为什么吗?
这是代码
*::selection {
background: #C32A22;
color: #DFDCDC;
}
*::-moz-selection {
background: #C32A22 none repeat scroll 0 0;
color: #DFDCDC;
}
使用这些,但它们似乎不适用于可编辑文本,例如输入字段中的文本。
::selection {background-color: #ffb7b7;}
::-moz-selection {background-color: #ffb7b7;}
::-webkit-selection {background-color: #ffb7b7;}
来自文章
“在撰写本文时,只有 Safari 和 Firefox 支持此功能……”
也就是说,Opera 的前缀是 -o-,因此,如果 Opera 对此的支持已发生变化,请尝试使用 ::-o-selection {background:#C32A22;}。如上文所述,“background 是唯一有效的属性”,因此声明颜色只是增加了输入。使用 color:#DFDCDC; 不会更改突出显示文本的颜色。
Webkit 是 Safari 的东西。我想 Opera 可能选择支持它,但他们没有义务这样做。
老实说,我不太喜欢使用所有前缀。它们会增加 CSS 的负担,并且并不总是得到良好的支持。我通常会等到所有浏览器(或至少除了 IE 之外的所有浏览器)都添加了对无前缀属性的支持,或者我使用 Lea Verou 的 prefix-free 脚本。(http://lea.verou.me/prefixfree/)当然,任何脚本都会增加负担,但至少对我来说工作量更少,因为一旦不再需要,我就可以直接删除脚本,而无需遍历每一行 CSS 删除冗余代码。
在 Chrome 中也运行良好
可惜它不适用于输入(可能仅在 Firefox 中有效)
嗨,一开始它对我不起作用,直到我将“background”更改为“background-color”。现在它运行良好。谢谢!非常酷。
显然
::selection
和::-moz-selection
无效。定义部分
p.red::selection
似乎仅适用于段落,至少当我尝试使用div.red::selection
时,它没有效果,这很可惜。我想更改选中文本的字体颜色。请在代码中添加或修改内容。
非常棒,谢谢!我只是想知道是否有一种方法可以更改失去焦点时的灰色选择颜色(例如,当您单击浏览器地址栏时)。
不错的效果……刚刚在一个网站上实现了它,它运行得非常完美(并且在 Chrome 中)。快速简单的样式编辑。一些客户也喜欢这种对细节的关注。谢谢!
嗨,
我有一个问题:为什么不能将 ::selection 和 ::-moz-selection 放在一起并为两者定义一个值?如果您这样做,FF 将忽略这些值。
此致
这是一个很好的 CSS 课程!当浏览器不理解选择器中的任何部分时,它会忽略整个选择器(即使它们是用逗号分隔的)。有一些例外情况,但主要是在旧版浏览器(IE 7?)中。
@Chris,但这确实有效
这是为什么?有什么区别?
Dave – 浏览器只需要忽略名称或值无效/无法识别的属性声明,而不需要忽略整个规则或它们所在的整行。无论您是在单独的行上列出属性声明,还是将它们全部放在一行上,实际上都没有关系。
想要了解更多 技术细节?
谢谢@Meta_Ing,我现在完全理解了:)
它在IE 8中不起作用
在webkit中静态文本效果很好,但在textarea或input中无效!
非常棒的文章,谢谢。