在CSS中有什么方法可以给不同颜色的文本提供轮廓吗?我想突出我的文本的一些部分,使其更直观-如名称,链接等。改变链接的颜色等是常见的现在,所以我想要一些新的东西。
当前回答
我正在寻找一个跨浏览器的文本笔画解决方案,工作时叠加在背景图像。我想我有一个解决方案,不涉及额外的标记,js和工作在IE7-9(我还没有测试6),也不会导致混淆问题。
这是一个使用CSS3文本阴影的组合,除了IE (http://caniuse.com/#search=text-shadow),它有很好的支持,然后使用IE过滤器的组合。目前CSS3文本笔画支持很差。
即过滤器
辉光滤镜(http://www.impressivewebs.com/css3-text-shadow-ie/)看起来很糟糕,所以我没有使用它。
大卫·休伊特的答案是在不同方向的组合上添加阴影滤镜。ClearType随后不幸被删除,因此我们最终得到了严重的别名文本。
然后我将useragentman上建议的一些元素与dropshadow滤镜结合起来。
把它们放在一起
这个例子是带有白色描边的黑色文本。顺便说一下,我使用条件html类的目标IE (http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/)。
#myelement {
color: #000000;
text-shadow:
-1px -1px 0 #ffffff,
1px -1px 0 #ffffff,
-1px 1px 0 #ffffff,
1px 1px 0 #ffffff;
}
html.ie7 #myelement,
html.ie8 #myelement,
html.ie9 #myelement {
background-color: white;
filter: progid:DXImageTransform.Microsoft.Chroma(color='white') progid:DXImageTransform.Microsoft.Alpha(opacity=100) progid:DXImageTransform.Microsoft.dropshadow(color=#ffffff,offX=1,offY=1) progid:DXImageTransform.Microsoft.dropshadow(color=#ffffff,offX=-1,offY=1) progid:DXImageTransform.Microsoft.dropshadow(color=#ffffff,offX=1,offY=-1) progid:DXImageTransform.Microsoft.dropshadow(color=#ffffff,offX=-1,offY=-1);
zoom: 1;
}
其他回答
在CSS3中有一个实验性的webkit属性叫做text-stroke,我一直试图让这个工作一段时间,但到目前为止还没有成功。
我所做的是使用已经支持的文本阴影属性(我相信在Chrome, Firefox, Opera和IE 9中都支持)。
使用四个阴影来模拟笔画文本:
.strokeme { 颜色:白色; 背景颜色:白色; 文字阴影:-1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000 } < div class = " strokeme”> 此文本在某些浏览器中应该有笔画 < / div >
我在这里为你做了一个演示
这里有一个悬浮的例子
正如Jason C在评论中提到的,除了Opera Mini,所有主流浏览器都支持文本阴影CSS属性。这个解决方案可以向后兼容(对于自动更新的浏览器来说不是问题),我认为应该使用文本笔画CSS。
我也有这个问题,文本阴影不是一个选项,因为角落看起来很糟糕(除非我有很多很多阴影),我不想要任何模糊,因此我唯一的其他选择是做以下:有2个div,对于背景div,放一个-webkit-text-stroke,然后允许尽可能大的轮廓你喜欢。
div { 字体大小:200 px; 位置:绝对的; 空白:nowrap;} } .front { 颜色:蓝色; } .outline { -webkit-text-stroke: 30px红色; 用户选择:没有; } < div class = "大纲" > 大纲文本 < / div > < div class = "正面" > 大纲文本 < / div >
使用这种方法,我能够实现一个轮廓,因为如果你想让你的文本在非常大的轮廓下保持可读性,那么笔画宽度方法就不是一个选择(因为使用笔画宽度,轮廓将从字母内部开始,当宽度大于字母时,它就不容易读了。
注意:我需要这么粗的轮廓的原因是我在“谷歌地图”中模拟街道标签,我想在文本周围有一个白色的粗光晕。这个解决方案对我来说非常有效。
这里有一把小提琴展示了这个解
文本阴影生成器
这里有很多很棒的答案。看起来文本阴影可能是最可靠的方法来做到这一点。我不会详细说明如何使用文本阴影来做到这一点,因为其他人已经这样做了,但基本思想是在文本元素周围创建多个文本阴影。文本轮廓越大,需要的文本阴影就越多。
所有提交的答案(截至本文)都为文本阴影提供了静态解决方案。我采用了不同的方法,编写了这个JSFiddle,它接受轮廓颜色、模糊和宽度值作为输入,并为元素生成适当的文本阴影属性。只需填写空白,检查预览,然后单击复制css并将其粘贴到您的样式表。
不必要的阑尾
显然,包含指向JSFiddle链接的答案不能被发布,除非它们也包含代码。如果你愿意,你可以完全忽略这个附录。这是我的小提琴生成文本阴影属性的JavaScript。请注意,你不需要在你自己的作品中实现这段代码:
function computeStyle() {
var width = document.querySelector('#outline-width').value;
width = (width === '') ? 0 : Number.parseFloat(width);
var blur = document.querySelector('#outline-blur').value;
blur = (blur === '') ? 0 : Number.parseFloat(blur);
var color = document.querySelector('#outline-color').value;
if (width < 1 || color === '') {
document.querySelector('.css-property').innerText = '';
return;
}
var style = 'text-shadow: ';
var indent = false;
for (var i = -1 * width; i <= width; ++i) {
for (var j = -1 * width; j <= width; ++j) {
if (! (i === 0 && j === 0 && blur === 0)) {
var indentation = (indent) ? '\u00a0\u00a0\u00a0\u00a0' : '';
style += indentation + i + "px " + j + "px " + blur + "px " + color + ',\n';
indent = true;
}
}
}
style = style.substring(0, style.length - 2) + '\n;';
document.querySelector('.css-property').innerText = style;
var exampleBackground = document.querySelector('#example-bg');
var exampleText = document.querySelector('#example-text');
exampleBackground.style.backgroundColor = getOppositeColor(color);
exampleText.style.color = getOppositeColor(color);
var textShadow = style.replace(/text-shadow: /, '').replace(/\n/g, '').replace(/.$/, '').replace(/\u00a0\u00a0\u00a0\u00a0/g, '');
exampleText.style.textShadow = textShadow;
}
你可以尝试叠加多个模糊阴影,直到阴影看起来像笔画,如下所示:
.shadowOutline {
text-shadow: 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black, 0 0 4px black;
}
这里有一个小提琴:http://jsfiddle.net/GGUYY/
我提到它只是为了以防有人感兴趣,尽管我不会称之为解决方案,因为它在很多方面都失败了:
它不能在旧的IE中工作 它在每种浏览器中的呈现方式都不一样 应用这么多阴影是非常沉重的处理:S
我用6种不同的阴影得到了更好的结果:
.strokeThis{
text-shadow:
-1px -1px 0 #ff0,
0px -1px 0 #ff0,
1px -1px 0 #ff0,
-1px 1px 0 #ff0,
0px 1px 0 #ff0,
1px 1px 0 #ff0;
}