在CSS中有什么方法可以给不同颜色的文本提供轮廓吗?我想突出我的文本的一些部分,使其更直观-如名称,链接等。改变链接的颜色等是常见的现在,所以我想要一些新的东西。
当前回答
只要加上这个答案。“描边”和“提纲”是不一样的。
提纲看起来很棒。抚摸看起来很可怕。
其他地方列出的SVG解决方案也存在同样的问题。如果你想要一个大纲,你需要把文本放两遍。一次抚摸,又一次不抚摸。
描边不是勾勒轮廓
body { font-family: sans-serif; margin: 20px; } .stroked { color: white; -webkit-text-stroke: 1px black; } .thickStroked { color: white; -webkit-text-stroke: 10px black; } .outlined { color: white; text-shadow: -1px -1px 0 #000, 0 -1px 0 #000, 1px -1px 0 #000, 1px 0 0 #000, 1px 1px 0 #000, 0 1px 0 #000, -1px 1px 0 #000, -1px 0 0 #000; } .thickOutlined { color: white; text-shadow: 0.0px 10.0px 0.02px #000, 9.8px 2.1px 0.02px #000, 4.2px -9.1px 0.02px #000, -8.0px -6.0px 0.02px #000, -7.6px 6.5px 0.02px #000, 4.8px 8.8px 0.02px #000, 9.6px -2.8px 0.02px #000, -0.7px -10.0px 0.02px #000, -9.9px -1.5px 0.02px #000, -3.5px 9.4px 0.02px #000, 8.4px 5.4px 0.02px #000, 7.1px -7.0px 0.02px #000, -5.4px -8.4px 0.02px #000, -9.4px 3.5px 0.02px #000, 1.4px 9.9px 0.02px #000, 10.0px 0.8px 0.02px #000, 2.9px -9.6px 0.02px #000, -8.7px -4.8px 0.02px #000, -6.6px 7.5px 0.02px #000, 5.9px 8.0px 0.02px #000, 9.1px -4.1px 0.02px #000, -2.1px -9.8px 0.02px #000, -10.0px -0.1px 0.02px #000, -2.2px 9.8px 0.02px #000, 9.1px 4.2px 0.02px #000, 6.1px -8.0px 0.02px #000, -6.5px -7.6px 0.02px #000, -8.8px 4.7px 0.02px #000, 2.7px 9.6px 0.02px #000, 10.0px -0.6px 0.02px #000, 1.5px -9.9px 0.02px #000, -9.3px -3.6px 0.02px #000, -5.5px 8.4px 0.02px #000, 7.0px 7.2px 0.02px #000, 8.5px -5.3px 0.02px #000, -3.4px -9.4px 0.02px #000, -9.9px 1.3px 0.02px #000, -0.8px 10.0px 0.02px #000, 9.6px 2.9px 0.02px #000, 4.9px -8.7px 0.02px #000, -7.5px -6.7px 0.02px #000, -8.1px 5.9px 0.02px #000, 4.0px 9.2px 0.02px #000, 9.8px -2.0px 0.02px #000, 0.2px -10.0px 0.02px #000, -9.7px -2.3px 0.02px #000, -4.3px 9.0px 0.02px #000, 7.9px 6.1px 0.02px #000 } svg { font-size: 40px; font-weight: bold; width: 450px; height: 70px; fill: white; } .svgStroke { fill: white; stroke: black; stroke-width: 20px; stroke-linejoin: round; } <h1 class="stroked">Properly stroked!</h1> <h1 class="outlined">Properly outlined!</h1> <h1 class="thickStroked">Thickly stroked!</h1> <h1 class="thickOutlined">Thickly outlined!</h1> <svg viewBox="0 0 450 70"> <text class="svgStroke" x="10" y="45">SVG Thickly Stroked!</text> </svg> <svg viewBox="0 0 450 70"> <text class="svgStroke" x="10" y="45">SVG Thickly Outlined!</text> <text class="svgText" x="10" y="45">SVG Thickly Outlined!</text> </svg>
PS:我想知道如何使SVG是任何任意文本的正确大小。我感觉这相当复杂,包括生成SVG,用Javascript查询它以获得范围,然后应用结果。如果有更简单的非js方式,我很想知道。
更新:正如@12me21指出的那样,在SVG中,你可以使用paint-order="stroke"在填充之前使它成为stroke,然后你就不必重复文本了
svg { 字体大小:40像素; 粗细:大胆的; 宽度:450 px; 身高:70 px; 填充:白色; } .svgText { 填充:白色; 中风:黑色; 笔划宽度:15 px; stroke-linejoin:圆形; paint-order:中风; } <svg viewBox="0 0 450 70"> <text class="svgText" x="10" y="45">< /文本> < / svg >
其他回答
试一试:
<!DOCTYPE html> <html> <head> <style> h1 { text-shadow: 2px 2px; } h1.m1 { text-shadow: 2px 2px red; } h1.m2 { text-shadow: 2px 2px 5px red; } h1.m3 { color: white; text-shadow: 2px 2px 4px #000000; } h1.m4 { text-shadow: 0 0 3px #FF0000; } h1.m5{ color: #FFFFFF; background: #232323; text-shadow: 0 0 5px #FFF, 0 0 10px #FFF, 0 0 15px #FFF, 0 0 20px #49ff18, 0 0 30px #49FF18, 0 0 40px #49FF18, 0 0 55px #49FF18, 0 0 75px #49ff18; } h1.m6{ color: #FFFFFF; background: #FFFFFF; text-shadow: 2px 2px 0 #4074b5, 2px -2px 0 #4074b5, -2px 2px 0 #4074b5, -2px -2px 0 #4074b5, 2px 0px 0 #4074b5, 0px 2px 0 #4074b5, -2px 0px 0 #4074b5, 0px -2px 0 #4074b5; } h1.m7 { color: #444444; background: #FFFFFF; text-shadow: 1px 0px 1px #CCCCCC, 0px 1px 1px #EEEEEE, 2px 1px 1px #CCCCCC, 1px 2px 1px #EEEEEE, 3px 2px 1px #CCCCCC, 2px 3px 1px #EEEEEE, 4px 3px 1px #CCCCCC, 3px 4px 1px #EEEEEE, 5px 4px 1px #CCCCCC, 4px 5px 1px #EEEEEE, 6px 5px 1px #CCCCCC, 5px 6px 1px #EEEEEE, 7px 6px 1px #CCCCCC; } </style> </head> <body> <h1 class="m6">Text-shadow effect!</h1> <h1 class="m7">Text-shadow effect!</h1> <h1>Text-shadow effect!</h1> <h1 class="m1">Text-shadow effect!</h1> <h1 class="m2">Text-shadow effect!</h1> <h1 class="m3">Text-shadow effect!</h1> <h1 class="m4">Text-shadow effect!</h1> <h1 class="m5">Text-shadow effect!</h1> </body> </html>
你可以尝试叠加多个模糊阴影,直到阴影看起来像笔画,如下所示:
.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;
}
我也有这个问题,文本阴影不是一个选项,因为角落看起来很糟糕(除非我有很多很多阴影),我不想要任何模糊,因此我唯一的其他选择是做以下:有2个div,对于背景div,放一个-webkit-text-stroke,然后允许尽可能大的轮廓你喜欢。
div { 字体大小:200 px; 位置:绝对的; 空白:nowrap;} } .front { 颜色:蓝色; } .outline { -webkit-text-stroke: 30px红色; 用户选择:没有; } < div class = "大纲" > 大纲文本 < / div > < div class = "正面" > 大纲文本 < / div >
使用这种方法,我能够实现一个轮廓,因为如果你想让你的文本在非常大的轮廓下保持可读性,那么笔画宽度方法就不是一个选择(因为使用笔画宽度,轮廓将从字母内部开始,当宽度大于字母时,它就不容易读了。
注意:我需要这么粗的轮廓的原因是我在“谷歌地图”中模拟街道标签,我想在文本周围有一个白色的粗光晕。这个解决方案对我来说非常有效。
这里有一把小提琴展示了这个解
我们可以使用文本笔画
HTML
<h1>Sample Text</h1>
CSS
h1{
-webkit-text-stroke: 2px red;
text-stroke: 2px red;
}
小菜一碟。试试这个,而不是使用文本阴影