2017-06-14 37 views
1

我正在使用柔性布局以呈现具有3个均匀大小的列的容器DIV。它正如我所期望的那样工作,直到我应用一个缩放变换。当容器缩小时,内容框之间出现细缝。这个问题发生在MacOS Chrome和Safari上,但不是Firefox。我相信我看到了渲染错误,但是想知道是否有人可能有解决方法的想法。比例变换导致与柔性布局的渲染间隙

这里有一个大大简化例子演示了Chrome的问题:

body { 
 
    background: black; 
 
    margin: 0; 
 
} 
 
.scale { 
 
    transform: scale(0.703125); 
 
} 
 
.container { 
 
    display: flex; 
 
    width: 600px; 
 
    height: 200px; 
 
} 
 
.column { 
 
    flex-grow: 1; 
 
    background:#ff0000; 
 
} 
 
.column:nth-child(2) { 
 
    background: #ff3333; 
 
}
<div class="container scale"> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
</div> 
 
<div class="container"> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
</div>
周围

+0

以供将来参考报我尺度变换问题在这里铬:HTTPS ://bugs.chromium.org/p/chromium/issues/detail?id = 733294 – Ghazgkull

回答

1

请考虑解决该问题与CSS盒子阴影。

以下是使用box-shadow属性的值spread-radius的示例。

body { 
 
    background: black; 
 
    margin: 0; 
 
} 
 

 
.container { 
 
    display: flex; 
 
    height: 200px; 
 
} 
 

 
.column { 
 
    flex-grow: 1; 
 
    background: #ff0000; 
 
} 
 

 
.scale { 
 
    transform: scale(0.703125); 
 
    overflow: hidden;     /* new */ 
 
} 
 

 
.scale>div:nth-child(2) { 
 
    box-shadow: 0 0 0 1000px #ff0000; /* new */ 
 
} 
 

 
.column:nth-child(2) { 
 
    background: orange;    /* easier to see */ 
 
}
<div class="container scale"> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
</div> 
 
<div class="container"> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
</div>

下面是这个方法是如何工作的详细解释:

+0

您对问题的解释并不准确,但想法在影子周围工作是非常好的。你可以更新你的答案,以消除有关小数位的问题的想法是什么? (想想以后有人碰到这个问题,不想传播虚假信息) – Ghazgkull

+0

...为什么它值得,一个简单的1px的影子似乎在做诡计。'box-shadow:0 0 0 1px#ff0000;' – Ghazgkull

+1

对于任何玩家来说,下面是一个最终的Codepen,展示了一个更复杂的示例,应用此解决方法:https://codepen.io/Ghazgkull/pen/BZLVmO – Ghazgkull

0

的一种方法是使用该元素相匹配的颜色之一的背景,所以页面的背景不显示在元素之间。

body { 
 
    background: black; 
 
    margin: 0; 
 
} 
 
.scale { 
 
    transform: scale(0.703125); 
 
} 
 
.container { 
 
    display: flex; 
 
    width: 600px; 
 
    height: 200px; 
 
} 
 
.column { 
 
    flex-grow: 1; 
 
    background:#ff0000; 
 
} 
 
.column:nth-child(2), .scale { 
 
    background: #ff3333; 
 
}
<div class="container scale"> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
</div> 
 
<div class="container"> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
    <div class="column"></div> 
 
</div>

+0

感谢您的想法。但在我的真实例子中,这个容器是一个覆盖层,我为三列顺序放置以显示下面的内容...所以容器实际上必须是透明的。 – Ghazgkull

+0

你能告诉我你正在使用的实际代码吗?也许用它更新你的文章或创建一个小提琴或codepen它? @Ghazgkull –

+0

根据缩放柔性盒容器的这个问题,示例代码显示了问题。我只是寻找解决方法来消除缩放内容div之间出现的差距。 – Ghazgkull