CSS文字外描边

中心描边困境

CSS的 text-stroke 属性是中心描边,描边会同时向文字内外扩展,这会导致文字本身的视觉重量(字重)被侵蚀,同时描边比预期的细。通过伪元素绝对定位的方法,可以实现仅向外扩展的外描边效果,从而避免这个问题。

实现外描边

核心原理是创建两层文字:底层用于描边,顶层用于显示原始文字颜色,并通过绝对定位将它们重叠。需要注意的是底层伪元素的描边宽度要设置为期望描边宽度的两倍。

示例CSS:

css 复制代码
.App {
  font-family: sans-serif;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
}

.outline-text-center {
  font-size: 50px;
  font-weight: 900;
  color: pink;
  -webkit-text-stroke: 5px blue;
  text-stroke: 5px blue;
}

.outline-text-outer {
  position: relative;
  font-size: 50px;
  font-weight: 900;
  color: pink;
}

.outline-text-outer::before {
  content: attr(data-content);
  position: absolute;
  top: 0;
  left: 0;
  z-index: -1;
  -webkit-text-stroke: calc(5px * 2) blue;
  text-stroke: calc(5px * 2) blue;
}

示例JS:

javascript 复制代码
import "./styles.css";

export default function App() {
  return (
    <div className="App">
      <div class="outline-text-center">文字描边</div>
      <div class="outline-text-outer" data-content="文字描边">
        文字描边
      </div>
    </div>
  );
}

效果图:

第一行文字是原生的中心描边效果,第二行文字是使用伪元素的外描边效果。

实际项目开发中可以将fontStroke封装为mixin方便复用。

相关推荐
SoaringHeart22 分钟前
Flutter进阶:基于 EasyRefresh 的下拉刷新封装 n_easy_refresh_mixin.dart
前端·flutter
IT_陈寒2 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰3 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
竹林8183 小时前
用 The Graph 查询链上数据实战:从手搓 RPC 到 Subgraph,我的 NFT 项目数据加载快了 10 倍
前端·javascript
妙码生花4 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
Awu12274 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
咪库咪库咪5 小时前
Vue3-生命周期
前端
莪_幻尘5 小时前
你的 AI Skill 越多越蠢?Token 上下文爆炸的求生指南
前端·ai编程
lichenyang4536 小时前
从 has.echo 到异步 API 注册表:一次 ASCF API 回调不触发的排查复盘
前端
林瞅瞅6 小时前
Nuxt3 项目部署 Nginx 防盗链后特定 JS 文件 403 问题修复方案
前端