纯css心形推荐clip-path: polygon()(现代浏览器首选)或::before+::after旋转拼合(兼容ie11),禁用safari旧版不支持的path()语法,需设宽高或aspect-ratio,描边用outline而非border。

纯 CSS 心形能做,但必须选对方法——clip-path: polygon() 最干净,::before+::after 旋转拼合最稳,直接抄网上“万能坐标”大概率在 Safari 14.1 之前白屏。
clip-path: polygon() 是现代浏览器首选,但 Safari 旧版本不认 path()
用 clip-path: polygon() 裁剪一个方块,只留心形轮廓,零额外 DOM、缩放不失真、支持 transition 动画。关键不是“能不能写”,而是“怎么写才兼容”:
- 必须设明确的
width和height(或aspect-ratio: 1),否则%单位无参照 - 别用
path("M...")语法——Safari 14.1 及更早版本完全忽略,只认polygon()、circle()等基础函数 - 推荐这套经实测的坐标(基于 200×200 容器):
clip-path: polygon(50% 0%, 100% 50%, 75% 75%, 100% 100%, 50% 75%, 0% 100%, 25% 75%, 0% 50%) - 描边不能用
border(裁剪后边框也被切掉),改用outline或外层套一层带box-shadow的容器
::before + ::after 旋转拼合是兼容性兜底方案
两个伪元素各画一个圆,再通过 transform: rotate() 拼成心形,IE11 都能跑。难点不在“画圆”,而在“对齐”:
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
- 父容器必须设
position: relative,两个伪元素都position: absolute -
::before画左半圆:宽高建议取父容器宽的 0.6 倍,top: 0; left: 0; transform: translate(0, -0.2em) -
::after画右半圆:同样尺寸,top: 0; right: 0; transform: translate(0, -0.2em) - 最后给父容器加
transform: rotate(-45deg)扭出心形角度 - 稍有偏差就会露白边或错位,
transform-origin必须设准(常见为0 100%或100% 100%)
SVG 内联虽精准,但别直接贴
SVG 路径(d 属性)画心形精度高、缩放锐利、支持渐变和动画,但直接把整段 SVG 写进 HTML 会污染结构、难复用:
- 复制粘贴网上
d="M..."后发现大小不对?问题出在没适配viewBox——必须确保 SVG 有viewBox="0 0 100 100" - 更合理的做法是抽成
<symbol></symbol>+<use></use>,或转成 data URL 当背景图 - 如果只是静态装饰,用 CSS 方案更轻量;需要复杂动画或高清打印,再上 SVG
真正容易被忽略的点是:心形的“视觉重心”和“缩放行为”不一致——clip-path 下的缩放靠容器控制,而伪元素方案中 transform: scale() 会影响所有子元素定位。做跳动动画时,这两个方案的动画属性要分别调参,不能直接套用同一套 keyframes。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










