border-image-slice 默认值在 safari 中为 100%,而 chrome/firefox 为 1,导致渐变边框在 safari 中被错误切为整图并拉伸成色块,必须显式声明 border-image-slice: 1 才能统一行为。

border-image-slice 默认值在 Safari 中是 100%,不是 1
这是最常被忽略的根源:Chrome/Firefox 把 border-image-slice 默认当作 1(即 1 像素单位),而 Safari(尤其是 iOS 15.6 之前)默认是 100%。结果就是,你写 border-image: linear-gradient(...) 30,Safari 实际按 border-image-slice: 100% 解析,整张渐变图被“切掉只剩边缘”,拉伸后只剩一个色块。
必须显式声明 border-image-slice: 1,哪怕你用的是百分比切割(如 25% 30% 15% 20%),也要先重置这个默认值。否则任何 repeat 或 stretch 行为都不可靠。
- 错误写法:
border-image: linear-gradient(90deg, #f00, #00f) 30;(Safari 悄悄变成100%) - 正确写法:
border-image: linear-gradient(90deg, #f00, #00f) 1;+ 后续再设border-image-slice: 25% 30% 15% 20% - IE11 不支持百分比
border-image-slice,只认数字,若需兼容得放弃百分比
Android WebView 对 border-image-repeat 双值语法静默失效
Android 4.4–6.0 的系统 WebView(基于 Chromium 30–48)根本不解析 border-image-repeat: repeat stretch 这类双值写法——它只读第一个词 repeat,然后把四边全当成平铺,导致左右边框拉伸失效、图像错位、拼接缝明显。
这不是报错,而是静默降级,你在 DevTools 里看不到警告,但真机上边框就断了。
- 安全写法只用单值:
border-image-repeat: round(旧 WebView 容错性最高) - 若必须分方向控制,改用 JS 检测:
CSS.supports('border-image-repeat', 'round'),再动态加兜底 class - 兜底边框必须写在
border-image之前:border: 3px solid #eee;,否则会被覆盖
SVG 作 border-image-source 时坐标或 viewBox 不对齐,高 DPI 下直接糊成一片
Retina 或 Windows 缩放 125% 场景下,border-image 用 SVG 源时模糊,根本不是抗锯齿问题,而是渲染器把逻辑像素当设备像素采样。比如 border-width: 1.5px 在 2x 屏实际是 3 物理像素,但浏览器做了亚像素插值,虚线间隙就被“抹开”。
在 Linux 上通过 Chrome 挂载/VNC 自动发布小红书长笔记。Agent 撰写标题和正文后执行 xhs_publish.sh --publish --submit,触发小红书发布。
必须同时满足四个条件,缺一不可:
- SVG 文件带整数
viewBox="0 0 100 100"(不能缺,也不能是小数) - 所有路径坐标用整数:
d="M10,10 L20,10"✅,d="M10.5,10.5"❌ - CSS 中
border-width设整数值(1px、2px),禁用1.33px类缩放残留 - 容器加
image-rendering: crisp-edges(Chrome/Firefox)和image-rendering: -webkit-optimize-contrast(Safari/iOS)
圆角容器里 border-image 根本不响应 border-radius
这不是 bug,是 W3C 规范明确写的:border-image 渲染路径永远是直角矩形,不参与 border-radius 裁剪。哪怕你写了 border-radius: 12px,边框四角仍是原始尖角,渐变或图案在弧线段必然断裂、堆叠或突变。
别试图调 border-image-slice 或 border-image-outset 来“修圆角”,没用。真正有效的解法只有两个:
- 用
box-shadow多层叠加模拟渐变边框(天然继承圆角,无兼容风险) - 用
clip-path: inset(0 round 12px)强制裁剪(iOS 14+/Safari 12.1+ 支持,数值必须和border-radius完全一致)
最麻烦的点往往不在代码本身,而在你得先接受:border-image 和 border-radius 本就不在同一个渲染维度里——一个是贴图,一个是几何裁剪。强行让它们共存,只会花更多时间绕弯子。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










