如何制作边缘光滑的CSS三角形?

kir*_*cha 31 css geometry smooth edges css-shapes

我有一个三角形(JSFiddle)使用这个CSS:

.triangle {
    width: 0;
    height: 0;
    border-top: 0;
    border-bottom: 30px solid #666699;
    border-left: 20px solid transparent; 
    border-right: 20px solid transparent;
    }
Run Code Online (Sandbox Code Playgroud)

这个HTML:

<div class="triangle"></div>
Run Code Online (Sandbox Code Playgroud)

这会形成一个三角形,但对角线呈锯齿状和像素化.我怎样才能让它们变得光滑?(我可以通过点缀它们来在Safari和Chrome中平滑它们,但这打破了Firefox和IE中的三角形.)

Can*_*hin 54

对于Firefox,您可以添加-moz-transform:scale(.9999); 使光滑的边缘.在你的情况下:

.triangle {
    width: 0;
    height: 0;
    border-top: 0;
    border-bottom: 30px solid #666699;
    border-left: 20px solid transparent; 
    border-right: 20px solid transparent;
    -moz-transform: scale(.9999);
}
Run Code Online (Sandbox Code Playgroud)

会做的伎俩.

  • 无论如何它在我的计算机上工作,它使得线条看起来"太平滑",即与旋转(0.01度)方法相比有点模糊 (2认同)
  • @ErinDrummond你试过哪个浏览器和版本?我暗示,我的回答只适用于Firefox.我已经使用Firefox(32.0.3)为Mac检查了旋转(0.01)并且它没有让我顺利. (2认同)

unc*_*ton 29

我偶然发现了同样的问题,并找出了这个技巧(至少,它适用于Mac):

-webkit-transform: rotate(0.05deg);
-moz-transform: scale(1.1);
-o-transform: rotate(0.05deg); /* Didn't check Opera yet */
transform: rotate(0.05deg);
Run Code Online (Sandbox Code Playgroud)

  • 我建议进行360度旋转,使三角形位于同一位置`transform:rotate(360deg);` (21认同)
  • 按照@JohnC的建议进行旋转(360deg)并不能精确地工作,因为它将三角形放在相同的位置 - 旋转0.01deg会稍微移动它足以应用抗锯齿,但不足以让人们能够知道它已经旋转 (2认同)

iam*_*der 19

即使在纯CSS中,我们也可以获得平滑的对角线.

.triangle {
    width: 0;
    height: 0;
    border-top: 0;
    border-bottom: 30px solid #666699;
    border-left: 20px solid rgba(255, 255, 255, 0); 
    border-right: 20px solid rgba(255, 255, 255, 0);
}
Run Code Online (Sandbox Code Playgroud)

而不是透明,你可以使用rgba(255,255,255,0).这又是透明的.但是alpha = 0会产生平滑的对角线.

查看rgba css-tricks.com/rgba-browser-support的浏览器支持

谢谢

  • 我添加以下内容以在不等三角形上形成平滑边:`-moz-transform:scale(.9999);`. (13认同)
  • 不适合我.你能提供一个jsfiddle吗? (12认同)
  • 应该标记答案关于-moz-transform:scale(.9999)作为正确的答案,这是有效的 (2认同)

kcm*_*cmr 13

inset在透明边框中使用边框样式可以在Firefox中获得更好的效果:

border-top: 22px solid $pink;
border-right: 84px inset transparent;
border-left: 84px inset transparent;
Run Code Online (Sandbox Code Playgroud)

  • 插图为我工作,添加rgba没有. (3认同)