无卡顿 CSS 条纹

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 $200 免费信用额度!

当我想到在 CSS 中创建 条纹 时,我的脑海中立即浮现出 repeating-linear-gradient硬停止渐变。通过使用相同的颜色在两个颜色停止之间,您可以创建一条条纹,并使用不同的颜色在两个颜色停止之间(共享中间的颜色)创建另一条(或更多条)条纹。

就像这样

background: repeating-linear-gradient(
  45deg,
  black,
  black 10px,
  #444 10px,
  #444 11px
);

这将在黑色背景上创建 10 像素间隔的倾斜深灰色条纹。

但这是它在我的屏幕上渲染的方式

您可以看到渲染卡顿的地方,其中一两条条纹看起来比其他条纹更亮更细吗?我不知道为什么。我假设这与次像素渲染或类似的东西有关。这并不难复制。不仅仅是这两种颜色或这种特定的角度,几乎所有使用 repeating-linear-gradient 创建的条纹都会出现这种情况。不过,当条纹更粗时(例如,5px 或更粗),卡顿现象就不那么明显了。

我制作了一些示例。 这种带有较紧条纹且朝另一个方向的示例尤其常见

我前几天需要这样做,发现卡顿现象,并记起了我们条纹文章中的 这个小注释。它相当于:不要使用 repeating-linear-gradient。只需使用 linear-gradient,设置 background-size 并让它重复。的确,这样做似乎能解决问题。问题在于…… 您要将 background-size 设置为多大?如果条纹是垂直或水平的,那么将其弄脏相对容易。但是如果条纹成角度…… 计算完美的宽度×高度很棘手。我猜这与勾股定理有关,但我在这方面并不擅长。

所以,您该怎么办呢?

使用这个 不错的生成器工具

它会执行必要的任何复杂数学运算以使其正确。您可以在 此处查看未压缩的 JavaScript 代码。搜索 / GET BACKGROUND SIZE / 以查看正在进行的所有数学运算。无论它在那里做了什么,条纹都会完美地显示出来。

有点可惜 repeating-linear-gradient 没有更好的视觉输出,因为它更容易理解,但嘿,你必须做你必须做的事情。