随着所有新的 CSS3 边框内容的出现(
-webkit
,...)现在可以为字体添加边框吗? (就像蓝色 Twitter 徽标周围的纯白色边框一样)。如果没有,是否有任何不太丑陋的黑客可以在 CSS/XHTML 中实现此目的,或者我仍然需要启动 Photoshop?
有一个实验性 CSS 属性,称为 text-lines,在 -webkit 前缀后面的某些浏览器上受支持。
h1 {
-webkit-text-stroke: 2px black; /* width and color */
font-family: sans; color: yellow;
}
<h1>Hello World</h1>
另一个可能的技巧是使用四个阴影,在所有方向上每个阴影一个像素,使用属性
text-shadow
:
h1 {
/* 1 pixel black shadow to left, top, right and bottom */
text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
font-family: sans; color: yellow;
}
<h1>Hello World</h1>
但是超过 1 个像素的厚度就会变得模糊。
http://codepen.io/pixelass/pen/gbGZYL
/// Stroke font-character
/// @param {Integer} $stroke - Stroke width
/// @param {Color} $color - Stroke color
/// @return {List} - text-shadow list
@function stroke($stroke, $color) {
$shadow: ();
$from: $stroke*-1;
@for $i from $from through $stroke {
@for $j from $from through $stroke {
$shadow: append($shadow, $i*1px $j*1px 0 $color, comma);
}
}
@return $shadow;
}
/// Stroke font-character
/// @param {Integer} $stroke - Stroke width
/// @param {Color} $color - Stroke color
/// @return {Style} - text-shadow
@mixin stroke($stroke, $color) {
text-shadow: stroke($stroke, $color);
}
是的老问题..有接受的(和好的)答案..
但是...万一有人需要这个并且讨厌输入代码...
这是一个 2px 黑色边框,支持跨浏览器(不是 IE) 我需要这个@fontface 字体,所以它需要比以前看到的答案更干净...... 我以像素方式获取每一侧,以确保“模糊”(手绘或类似)字体(几乎)没有间隙。 可以添加子像素(0.5px),但我不需要它。
仅用于边框的长代码??? ...是的!!!
text-shadow: 1px 1px 0 #000,
-1px 1px 0 #000,
1px -1px 0 #000,
-1px -1px 0 #000,
0px 1px 0 #000,
0px -1px 0 #000,
-1px 0px 0 #000,
1px 0px 0 #000,
2px 2px 0 #000,
-2px 2px 0 #000,
2px -2px 0 #000,
-2px -2px 0 #000,
0px 2px 0 #000,
0px -2px 0 #000,
-2px 0px 0 #000,
2px 0px 0 #000,
1px 2px 0 #000,
-1px 2px 0 #000,
1px -2px 0 #000,
-1px -2px 0 #000,
2px 1px 0 #000,
-2px 1px 0 #000,
2px -1px 0 #000,
-2px -1px 0 #000;
text-shadow
(或 -webkit-text-shadow
/
-moz-text-shadow
)和非常低的模糊来模拟
文本笔画:
#element
{
text-shadow: 0 0 2px #000; /* horizontal-offset vertical-offset 'blur' colour */
-moz-text-shadow: 0 0 2px #000;
-webkit-text-shadow: 0 0 2px #000;
}
但是,虽然这比
-webkit-text-stroke
属性更广泛可用,但我怀疑它是否可供大多数用户使用,但这可能不是问题(优雅降级等等)。
div {
-webkit-text-fill-color: black;
-webkit-text-stroke-color: red;
-webkit-text-stroke-width: 2.00px;
}
有关使用文本描边的深入文章是
这里,支持文本描边的浏览器列表是这里。
.text_with_1px_border
{
text-shadow:
-1px -1px 0px #000,
0px -1px 0px #000,
1px -1px 0px #000,
-1px 0px 0px #000,
1px 0px 0px #000,
-1px 1px 0px #000,
0px 1px 0px #000,
1px 1px 0px #000;
}
.text_with_2px_border
{
text-shadow:
/* first layer at 1px */
-1px -1px 0px #000,
0px -1px 0px #000,
1px -1px 0px #000,
-1px 0px 0px #000,
1px 0px 0px #000,
-1px 1px 0px #000,
0px 1px 0px #000,
1px 1px 0px #000,
/* second layer at 2px */
-2px -2px 0px #000,
-1px -2px 0px #000,
0px -2px 0px #000,
1px -2px 0px #000,
2px -2px 0px #000,
2px -1px 0px #000,
2px 0px 0px #000,
2px 1px 0px #000,
2px 2px 0px #000,
1px 2px 0px #000,
0px 2px 0px #000,
-1px 2px 0px #000,
-2px 2px 0px #000,
-2px 1px 0px #000,
-2px 0px 0px #000,
-2px -1px 0px #000;
}
text-shadow
,我想你也会喜欢这个例子(当我需要在文本上提供良好的阴影时,我经常使用它):
text-shadow:
-2px -2px lightblue,
-2px -1.5px lightblue,
-2px -1px lightblue,
-2px -0.5px lightblue,
-2px 0px lightblue,
-2px 0.5px lightblue,
-2px 1px lightblue,
-2px 1.5px lightblue,
-2px 2px lightblue,
-1.5px 2px lightblue,
-1px 2px lightblue,
-0.5px 2px lightblue,
0px 2px lightblue,
0.5px 2px lightblue,
1px 2px lightblue,
1.5px 2px lightblue,
2px 2px lightblue,
2px 1.5px lightblue,
2px 1px lightblue,
2px 0.5px lightblue,
2px 0px lightblue,
2px -0.5px lightblue,
2px -1px lightblue,
2px -1.5px lightblue,
2px -2px lightblue,
1.5px -2px lightblue,
1px -2px lightblue,
0.5px -2px lightblue,
0px -2px lightblue,
-0.5px -2px lightblue,
-1px -2px lightblue,
-1.5px -2px lightblue;
text-shadow:
1px 1px 2px black,
1px -1px 2px black,
-1px 1px 2px black,
-1px -1px 2px black;
webkit
似乎对我来说很麻烦,所以我对答案不满意。然后我找到了这个codepen,它可以为你生成
raw CSS
。只需在 JS 中输入颜色和边框宽度,然后向下滚动到 CSS 输出即可。2px 黑色文本轮廓示例:
text-shadow: -2px -2px 0 black,-2px -1px 0 black,-2px 0px 0 black,-2px 1px 0 black,-2px 2px 0 black,-1px -2px 0 black,-1px -1px 0 black,-1px 0px 0 black,-1px 1px 0 black,-1px 2px 0 black,0px -2px 0 black,0px -1px 0 black,0px 0px 0 black,0px 1px 0 black,0px 2px 0 black,1px -2px 0 black,1px -1px 0 black,1px 0px 0 black,1px 1px 0 black,1px 2px 0 black,2px -2px 0 black,2px -1px 0 black,2px 0px 0 black,2px 1px 0 black,2px 2px 0 black
以防万一 codepen 被删除 (Vue.js
):
new Vue({
el: '#app',
data: {
width: 5,
color: 'DeepPink',
styles: ''
},
created() {
this.textChange()
},
methods: {
textChange() {
var shadows = []
var color = this.color
for(let i = -this.width; i <= this.width; i++) {
for(let j = -this.width; j <= this.width; j++) {
shadows.push(`${i*1}px ${j*1}px 0 ${color}`)
}
}
this.styles = shadows.join(',')
}
}
})
html:
<p><strong>text-shadow:</strong> {{styles}}</p>
http://codepen.io/anon/pen/BNYGBy?editors=110
/// Stroke font-character
/// @param {Integer} $stroke - Stroke width
/// @param {Color} $color - Stroke color
/// @return {List} - text-shadow list
.stroke(@stroke, @color) {
@maxi: @stroke + 1;
.i-loop (@i) when (@i > 0) {
@maxj: @stroke + 1;
.j-loop (@j) when (@j > 0) {
text-shadow+: (@i - 1)*(1px) (@j - 1)*(1px) 0 @color;
text-shadow+: (@i - 1)*(1px) (@j - 1)*(-1px) 0 @color;
text-shadow+: (@i - 1)*(-1px) (@j - 1)*(-1px) 0 @color;
text-shadow+: (@i - 1)*(-1px) (@j - 1)*(1px) 0 @color;
.j-loop(@j - 1);
}
.j-loop (0) {}
.j-loop(@maxj);
.i-loop(@i - 1);
}
.i-loop (0) {}
.i-loop(@maxi);
text-shadow+: 0 0 0 @color;
}
(它基于 Pixelass 答案,而是使用 SCSS)
我最终尝试在 JS(带有 IE Canvas 的 HTML 画布)中执行此操作,但它对性能影响很大(即使在我的 C2D 机器上)。总之,如果你确实需要这种效果,可以考虑JS库(大部分应该可以在IE6上运行),但不要因为性能问题而过度使用;如果您仍然需要替代方案...您可以使用 SFiR,然后 PS it 和 SFiR it。 CSS3 今天还没有准备好。
h1 {
-webkit-text-stroke: 10px black; /* width and color */
paint-order: stroke fill; /* <-- add this for ticker text stroke */
font-family: sans; color: yellow;
}
<h1>Hello World</h1>