【CSS】文字描边的三种实现方式

目录

  • 1. 可行的几种方式
    • 1.1. text-shadow 描边
      • 代码
      • 优缺点
    • 1.2. text-stroke 描边
      • 实现
      • 优缺点
    • 1.3. svg 描边
      • 实现
      • 优缺点
  • 总结

1. 可行的几种方式

  • text-shadow
  • –webkit-text-stroke
  • svg

1.1. text-shadow 描边

MDN text-shadow

代码

<div class="text stroke">新年快乐</div>

用 text-shadow 实现八个方向的文字阴影。

.text {font-size: 150px;color: white;font-weight: 400;
}.stroke {text-shadow: 4px 0 #000,-4px 0 #000,0 4px #000,0 -4px #000,4px 4px #000,-4px -4px #000,4px -4px #000,-4px 4px #000;
}

在这里插入图片描述

优缺点

优点

  • 兼容性好

在这里插入图片描述

缺点

  • 文字边缘会有锯齿。

如上图,当文字很大时,尤其明显。因为我们只设置了8个方向的阴影,这些方向交界处容易出问题。

  • 文字必须设置颜色

如果我们把文字设置为透明色,描边就失效了,因为text-shadow本质就是设置文本阴影。

color: transparent;

在这里插入图片描述

效果:文字透明了,文字阴影彻底显现了出来。

1.2. text-stroke 描边

MDN text-stroke

实现

<div class="text stroke">新年快乐</div>
.text {font-size: 150px;color: white;font-weight: 400;
}.stroke {-webkit-text-stroke: 4px #000;
}

在这里插入图片描述
可以实现丝滑的描边效果!

注意:text-stroke 是居中描边,我们这里设置了 4px 的描边,实际上会在文字内部和外部各画2px。直接使用 text-stroke 来描边会让文字本身变瘦

比如,我们继续加大描边的宽度,设置8px。

-webkit-text-stroke: 8px #000;

可以看到最终的效果是文字的白色部分越来越少。
在这里插入图片描述
如果你觉得这样无所谓,那这样实现也可以。但如果你不想要文字本身的宽度(白色部分)改变,那么可以用下面的技巧来实现。

我们增加一个伪元素来,完整代码如下:

<div class="text stroke" data-content="2023, 新年快乐!">2023, 新年快乐!</div>
.text {font-size: 150px;color: white;font-weight: 400;position: relative;z-index: 0;
}.text::after {content: attr(data-content);-webkit-text-stroke: 8px #000;position: absolute;left: 0;top: 0;z-index: -1;
}

在这里插入图片描述
这里我们给伪元素设置描边,并且将原本的文字覆盖在其上面,能完美实现描边,且没有改变原本的文字宽度。
注意:我们原本想实现4px的描边,前面我们提到text-stroke是居中描边,因此为了实现效果我们实际上要设置8px。

优缺点

优点

  • 效果好,描边丝滑。

缺点

  • 兼容性一般,需要加 -webkit 前缀

在这里插入图片描述

1.3. svg 描边

实现

<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="200"><text class="text stroke"x="0" y="0" alignment-baseline="text-before-edge" text-anchor="start">2023, 新年快乐!</text>
</svg>
.text {font-size: 150px;fill: white;font-weight: 400;
}.stroke {stroke: #000;stroke-width: 4px;
}

在这里插入图片描述
通过设置stroke + stroke-width 即可实现描边。
注意:这里实现的效果也类似前面 text-stroke 的居中描边,实际上文字本身也变瘦了。

为了不让文字本身变瘦,我们可以用paint-order属性来改变描边绘制的方式。

.stroke {stroke: #000;stroke-width: 8px;paint-order: stroke;
}

在这里插入图片描述
同样实现了描边效果,且不改变文字原本宽度。

优缺点

优点

  • 兼容性最好
  • 通过 stroke-linejoin 属性,还可以对 svg 的描边有更灵活的控制
.stroke1 {stroke-linejoin: round;
}.stroke2 {stroke-linejoin: bevel;
}.stroke3 {stroke-linejoin: miter;
}

在这里插入图片描述

缺点

  • 需要设置svg 的宽高,文字排版可能不够灵活

总结

我们介绍了css中三种文字描边的实现方式,它们各有优缺点,可以根据实际的应用场景选择最合适的方式!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/328263.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网安入门09-Sql注入(绕过方法梳理)

ByPass SQL注入ByPass是指攻击者通过各种手段绕过应用程序中已经实施的SQL注入防御措施&#xff0c;例如输入恶意数据、修改请求头等方式&#xff0c;绕过过滤、转义、限制等操作&#xff0c;从而成功地执行恶意SQL语句。攻击者使用SQL注入ByPass技术可以让应用程序的防御措施…

【已解决】在开启ssh和sshd状态下,XShell无法连接到VMware虚拟机中的Linux操作系统

【已解决】在开启ssh和sshd状态下&#xff0c;XShell无法连接到VMware虚拟机中的Linux操作系统 XShell无法连接到VMware虚拟机中的Linux操作系统&#xff0c;今天上线突然发现XShell无法连接到VMware虚拟机中的Linux操作系统&#xff0c;但是找了很多解决方案都没有解决&#x…

助力工业产品质检,基于YOLOv5全系列参数模型【n/s/m/l/x】开发构建智能PCB电路板质检分析系统

AI助力工业质检智能生产制造已经有很多成功的实践应用了&#xff0c;在我们前面的系列博文中也有很多对应的实践&#xff0c;感兴趣的话可以自行移步阅读前面的博文即可&#xff1a; 《助力质量生产&#xff0c;基于目标检测模型MobileNetV2-YOLOv3-Lite实现PCB电路板缺陷检测…

ckplayer如何设置键盘的方向左和方向右是快退或快进多少秒?

默认是20秒&#xff0c;那怎么按照自定义的配置呢&#xff1f; 打开文件&#xff1a;“.\ckplayer\js\ckplayer.js” 然后在下面的函数中修改就可以了&#xff1a; 下面的代码我已经修改为了按一次方向左键为快退3秒&#xff0c;按一次方向右键为快进5秒。 /** fastBack* 功能&…

Python的核心知识点整理大全66(已完结撒花)

目录 D.3 忽略文件 .gitignore 注意 D.4 初始化仓库 D.5 检查状态 D.6 将文件加入到仓库中 D.7 执行提交 D.8 查看提交历史 D.9 第二次提交 hello_world.py D.10 撤销修改 hello_world.py 注意 D.11 检出以前的提交 往期快速传送门&#x1f446;&#xff08;在文…

浅谈 JVM 类加载过程

&#x1f697;&#x1f697;&#x1f697;今天给大家分享的是HTTPS加密的工作过程。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; ✈️✈…

Linux时间同步和时间设置

时间分为&#xff1a; 1、hwclock&#xff1a;用于查看硬件时间 hwclock -r&#xff08;--show&#xff1a;读取硬件时钟并打印结果&#xff09; &#xff1a;查看硬件时间 hwclock -s &#xff1a;系统时间向硬件时间同步 hwclock -w &#xff1a;硬件时间向系统时间同步 …

vue路由使用history模式部署线上报错ChunkLoadError: Loading chunk xxxxxx failed.

使用vue的history路由模式打包上线,发现控制台报错 点击其他路由模块,报错模块找不到 ChunkLoadError: Loading chunk runHotelCheckin failed. (missing: http://120.2.3.212:10082/infoManage/static/js/runHotelCheckin.dev.js?v1704359862052) 后面查找原因是vue.confi…

java基于SSM的游戏商城的设计与实现论文

基于SSM的游戏商城的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于游戏信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以…

机器学习笔记 - 基于OpenCV+稀疏光流的无监督运动检测

一、简述 在各种高级开源库的帮助下&#xff0c;检测固定摄像机拍摄的运动行为是轻而易举可以实现的&#xff0c;但检测移动的摄像机拍摄的移动物体的运动检测依然是一个复杂的问题。在这里&#xff0c;我们将继续基于稀疏光流&#xff0c;并检测移动的无人机相机的运动。 这里…

html5中各标签的语法格式总结以及属性值说明

有关闭标签的元素 a元素 <a href"" target"" title""></a>表格相关元素 table元素&#xff1a;表格标签caption元素&#xff1a;表头thead元素tbody元素&#xff1a;表格主体元素tfoot元素th元素tr元素&#xff1a;行标签td元素&…

基于FFmpeg的短视频编辑工具Cut

前言 最近在学习FFmpeg和音视频的相关知识&#xff0c;为了加强对FFmpeg的认识和了解&#xff0c;于是撸了一个短视频编辑软件Cut。 效果图先行&#xff1a; 技术点 启动页优化 但启动app的时候会有一个短暂的黑屏或者白屏。为什么呢&#xff1f; 是因为在App启动时&#x…