SVG中的paint-order属性实现文字描边

过去只支持 SVG 元素

paint-order,表示绘制的顺序。

对于一个图形的绘制,顺序还是非常重要的。例如用SVG来绘制一个带边框的矩形

<style>
  rect{
    fill: #FFE8A3;
    stroke: #9747FF;
    stroke-width: 4;
  }
</style>

<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
  <rect x="50" y="50" width="200" height="200" />
</svg>

效果如下:
在这里插入图片描述

默认情况下,描边是在填充上面的。如果要改变绘制顺序,也相当于改变层级,让填充覆盖在描边上面,可以使用paint-order属性

rect{
  fill: #FFE8A3;
  stroke: #9747FF;
  stroke-width: 4;
  paint-order: stroke; /*先描边*/
}

表示先绘制stroke,效果如下:
在这里插入图片描述
看着变细了,这是因为描边是居中的,由于先绘制的描边,后绘制的填充颜色(后绘制的在上面),所以描边被填充盖住了一半。
这个属性在SVG文本中更明显,例如

<style>
  text{
    font-size: 60px;
    fill: #FFE8A3;
    stroke: #9747FF;
    stroke-width: 4;
    font-weight: bold;
  }
</style>
<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
  <text x="50%" y="50%" text-anchor="middle" dominant-baseline="middle">前端</text>
</svg>

在这里插入图片描述
文字本身都快被描边给覆盖了,下面调整一下

text{
  font-size: 60px;
  fill: #FFE8A3;
  stroke: #9747FF;
  stroke-width: 4;
  font-weight: bold; 
  paint-order: stroke; /*先描边*/
}

这样就好多了
在这里插入图片描述

现在支持普通文本了

在普通HTML中,可以用-webkit-text-stroke来实现文字的描边效果,例如

<h1 class="txt">前端侦探</h1>
<style>
  .txt{
  -webkit-text-stroke: 4px #9747FF;
}
</style>

在这里插入图片描述
以往通常使用绝对定位叠加的方式,手动让描边的那一层位于底部(可以用伪元素代替),就像这样

<p class="text" data-title="前端侦探">前端侦探</p>
<style>
  .text{
    margin: 0;
    font-weight: bold;
    -webkit-text-stroke: 6px rgb(51, 51, 51);
	}
	.text::before{
	    content: attr(data-title);
	    position: absolute;
	    background-image: linear-gradient(#FFCF02, #FF7352);
	    background-clip: text;
	    -webkit-background-clip: text;
	    -webkit-text-fill-color: transparent;
	    -webkit-text-stroke: 0;
	}
</style>

在这里插入图片描述
不过现在,也可以像SVG一样,直接通过paint-order来改变层级了

<h1 class="txt">前端侦探</h1>
<style>
  .txt{
  -webkit-text-stroke: 4px #9747FF;
  paint-order: stroke; /*先描边*/
}
</style>

在这里插入图片描述
相比SVG最大的好处就是,排版更加灵活,比如文本自动换行,SVG就无法直接实现,CSS就非常容易了
在这里插入图片描述

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SVG的alignment-baseline属性用于定位SVG元素内部的文本或图形元素的垂直对齐方式。它定义了基线(baseline)相对于元素的垂直位置。 alignment-baseline属性可以应用于所有可定位的SVG元素,包括文本元素(<text>、<tspan>等)和图形元素(<rect>、<circle>等)。 alignment-baseline属性有以下几个可选值: 1. auto:表示使用默认的对齐方式。对于文本元素,默认值是baseline,对于图形元素,默认值是心对齐。 2. baseline:将元素的基线与父元素的基线对齐。这是默认对齐方式,使得文本元素的基线沿着父元素的底部对齐。 3. before-edge:将元素的顶部与父元素的前沿对齐。前沿是指基线之上的最高点。 4. text-before-edge:将元素的顶部与父元素的文本前沿对齐。文本前沿是指文本行之上的最高点。 5. middle:将元素的心与父元素的心对齐。 6. central:将元素的心与父元素的心对齐。与middle相同,只是为了保持与CSS的一致性。 7. after-edge:将元素的底部与父元素的后沿对齐。后沿是指基线之下的最低点。 8. text-after-edge:将元素的底部与父元素的文本后沿对齐。文本后沿是指文本行之下的最低点。 9. ideographic:与baseline对齐,但基线的位置略有不同。在某些字体,ideographic与baseline对齐可以更好地呈现东亚文字。 10. alphabetic:与baseline对齐,但基线的位置略有不同。在某些字体,alphabetic与baseline对齐可以更好地呈现拉丁文字。 这些值可以通过CSS样式或直接在SVG元素的属性指定。通过调整alignment-baseline属性的值,可以精确控制SVG元素内部文本或图形元素的垂直对齐方式,以满足具体的设计需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值