[英]CSS rotated div border shows odd outline
我正在尝试旋转带边框的 div。 边框与背景颜色相同。 边框轮廓和背景之间出现一条很细的线。 下面是我的代码。 我试图摆脱奇怪的线。
body { background-color: black; } div { width: 50px; height: 50px; background-color: white; border: 50px solid black; transform: rotate(45deg); }
<div></div>
我尝试了多种浏览器。
我可以通过使用另一个 div 而不是边框来解决这个问题,但我更感兴趣的是让边框按预期工作。
一个简单的解决方法是使用backface-visibility: hidden
。
当一个元素旋转时,看起来transform: rotate()
的渲染可能会导致它的背面显示出来,就像在 3D 透视中一样。
在这种情况下,这可能会导致背面的background-color
(元素正面的镜像)溢出边界边缘。
backface-visibility: hidden
通过使背面不可见来修复它,如下例所示。
在旁注中, MDN确实提到backface-visibility
对 2D 变换没有影响,这表明transform: rotate()
具有透视的这种行为比预期的更偶然。
例子:
body { background-color: black; display: flex; gap: 100px; } div { width: 50px; height: 50px; background-color: white; border: 50px solid black; transform: rotate(45deg); } div + div { /* fixed here */ backface-visibility: hidden; }
<div></div> <div></div>
这很有趣,因为它只出现在旋转变换中。 您可以使用 outline 将其移除以在带有边框的细线上绘制,这也不会影响它的定位,如下所示:
body { background-color: black; } div { width: 50px; height: 50px; background-color: white; border: 50px solid black; transform: rotate(45deg); outline-offset:-1px; outline: 2px solid black; }
<div></div>
仅限Firefox
我最好的猜测是浏览器图形函数中Z-axis
的 3D 旋转存在舍入问题。 X-axis
和Y-axis
显示没有问题。 绘制的元素的大小似乎向下舍入(更小),而浏览器使用实际值或向上舍入的值进行计算。 不同之处在于元素background-color
能够渗透的狭窄间隙。 我在片段中使用red
来展示这一点。
当旋转不是0deg
(通常是旋转的目的)时,transform transform: rotate(..)
和transform: rotateZ(..)
显示相同的问题。
要解决此问题(仅限 Firefox!!),请将transform-style: preserve-3d
与正在旋转的元素一起使用。
body { background-color: black; padding: 3rem; } div { width: 50px; height: 50px; background-color: red; border: 50px solid black; transform: rotate(45deg); }.test { transform-style: preserve-3d; /* voila. background colored border is gone..: */ margin-top; 4rem; /* create some distance */ }
<div></div> <div class="test"></div>
像下面这样尝试,不需要边框,只需使用边距即可。
body { background-color: black; } div{ width: 50px; height: 50px; background-color: white; transform: rotate(45deg); border: 0px; /* border: 50px solid black; */ margin: 50px; }
<div></div>
body { background-color: black; } div { width: 50px; height: 50px; background-color: white; transform: rotate(45deg); border: 0px; /* border: 50px solid black; */ margin: 50px; }
<div></div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.