【问题标题】:Diagonal stripes that are 1px wide1px 宽的斜条纹
【发布时间】:2017-10-11 17:22:08
【问题描述】:

我希望为元素提供具有重复的 1 像素宽对角线条纹的背景。似乎repeating-linear-gradient 应该能够做到这一点,但是在 Safari 中呈现时:

background-image: repeating-linear-gradient(
    45deg, black, black 1px, transparent 1px, transparent 3px
);

Looks like this:

#thing {
  height: 200px;
  background-image: repeating-linear-gradient( 45deg, black, black 1px, transparent 1px, transparent 3px);
}
<div id="thing"></div>

看起来浏览器在aliasing 上的表现不佳,导致条带图案不均匀。关于如何解决此问题或以其他方式完成我想做的事情的任何想法?

【问题讨论】:

  • 在 chrome 中看起来更糟
  • 在 Firefox 中更糟 :)
  • 当您的意思是 1px 宽的条纹时,它是对角线 1px,还是沿 x/y 轴测量时为 1px?您看到的云纹图案是由于浏览器中的抗锯齿造成的。
  • @Terry 我想要由 1px 块组成的行。我尝试做一些疯狂的事情,比如指定 1.414px(对角线长度)的停靠点,但这似乎没有帮助。
  • @KyleCronin 你运气不好——如果你熟悉Pythagorean triples,就不可能得到一个对角线宽度为也是一个整数,反之亦然……这是因为在一个1*1px宽的正方形块上,对角线宽度是sqrt(2),这是一个无理数。

标签: html css


【解决方案1】:

在这里对这个难题进行更详细的解释:根据毕达哥拉斯原理(及其三元组),不可能有一个正方形(就是两个直角三角形组合在一起),其边是整数,对角线长度也是一个整数。

这是因为 12 + 12 = sqrt(2)2。由于 2 的平方根是一个无理数,因此它的所有导数(任何边长为整数的平方)都将有一条无理数的对角线。

这是我能得到的最接近的值 - 指定一个整数正方形,但条纹将是非整数宽度:http://jsfiddle.net/teddyrised/SR4gL/2/

#thing {
    height: 200px;
    background-image: linear-gradient(-45deg, black 25%, transparent 25%, transparent 50%, black 50%, black 75%, transparent 75%, transparent);
    background-size: 4px 4px;
}

平铺在您的元素上的假想正方形的边长将为 4 像素宽。这意味着对角线长度将是 sqrt(32),当对角线测量时条纹将为 1.414...px(接近 1,但不完全在那里),或在平行于 x 或 y 轴测量时为 2px 宽。

【讨论】:

  • 我仍然在那个渐变中看到奇怪的东西,尽管值得称赞的是它更规则。但是,我能够接受您的想法并获得所需的渐变。感谢您的帮助。
  • 是否可以使用矩形而不是正方形?
  • @kgrote Square 是必须的,因为 OP 规定条纹应该是 45 度。
  • 为什么 1.414px 的东西不起作用?当然,一旦浏览器对它进行抗锯齿处理,1.414px 和 sqrt(2) 之间的微小差异就不会被注意到,因为它只会使像素更加透明,或者在它们旁边添加一些真正透明的像素(取决于差异是哪种方式)?其实,为什么浏览器一开始就不能对 sqrt(1/2)px 宽线进行抗锯齿处理呢?
  • @CameronMartin 因为不存在非整数像素值,我实际上并不真正理解您的评论。我没说 1.414...px 是个问题。
【解决方案2】:

非常感谢 Terry 的suggested approach 使用标准的linear-gradient 和百分比和background-size。玩了一会儿,我设法获得了exact gradient I was looking for

background-image: linear-gradient(
    to right top,
    transparent 33%,
    black 33%,
    black 66%,
    transparent 66%
);
background-size: 3px 3px;

【讨论】:

  • 这看起来实际上就像我也在寻找的东西,但在当前的 chrome 版本 (58) 中,它像某种老式电视一样闪烁。也发生在 Firefox 中...
  • @FlorianMuller 让点变大。那么,这种影响就会减少。也申请image-rendering: pixelated
猜你喜欢
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2019-12-15
  • 2015-08-29
  • 2021-12-23
相关资源
最近更新 更多