【问题标题】:Scaling results in gaps between CSS shapes缩放导致 CSS 形状之间的间隙
【发布时间】:2014-03-16 03:22:25
【问题描述】:

我有一系列 CSS 六边形。我想为不同的视口宽度应用 CSS 缩放变换,尽管我的六边形形状中出现了间隙。

这个问题在 Firefox 上在任何比例值上都最为明显。如果缩放为非整数值,它也会出现在 Chrome 中。 Firefox 还在:before:after 伪元素中显示了令人费解的水平线,尽管这些线位于边框的中心,而不是任何形状的边缘。

片段

我的标记和样式的简化版本如下,以及JS Fiddle

HTML:

<div class="scale">
    <div class="hex"></div>
</div>

样式:

.scale {
    margin: 8em auto;
    text-align: center;
    -webkit-transform:scale(2.5, 2.5);
   -moz-transform:scale(2.5, 2.5);
    -ms-transform:scale(2.5, 2.5);
     -o-transform:scale(2.5, 2.5);
        transform:scale(2.5, 2.5);
}
.hex {
    position: relative;
    display: inline-block;
    margin: 0 30px;
    width: 60px;
    height: 104px;
    background-color: #000;
    &:before, &:after {
        position: absolute;
        width: 0;
        border: 1px solid transparent;
        border-width: (52px) (30px);
        content: "";
    }
    &:before {
        border-right-color: #000;
        right: 100%;
    }
    &:after {
        border-left-color: #000;
        left: 100%;
    }
}

屏幕截图 (Linux Mint)

Chrome:以 x2 缩放(在整数值处没有明显的间隙)

Firefox:按 x2 缩放(间隙,加上水平线)

有帮助吗?

我的猜测是这些线条出现是因为一些数字四舍五入,但我真的没有想法。有可能解决这个问题吗?我可以使用另一种方法来进行这种缩放吗?提前感谢您的任何回复。

【问题讨论】:

    标签: css transform scale scaletransform


    【解决方案1】:

    这似乎是一个缩放错误,因为当通过其他方式(例如旋转)转换项目时,间隙似乎仍然存在。

    解决它的最佳方法是将元素添加到 .hex 类而不是 .scale 类,然后重新定位。我希望这有助于引导您找到更好的解决方案。

    祝你好运!

    【讨论】:

    • 感谢您的建议,尽管六角的位置有点复杂(有很多..!)这对我来说不是最好的解决方案。不过,感谢您的调查,我很感激!
    • 欢迎 :) 其他回复看起来非常有用!谢谢。
    【解决方案2】:

    我更喜欢使用顶部/底部方法来创建六边形,因为它们非常简单。查看the one I threw in your jsfiddle

    只需修正实际测量值,我使用的方法应该可以解决您的问题。

        .hexagon{
            margin-left: 8em;
            height: 4em;
            width: 4em;
            -webkit-transform:scale(2.5, 2.5);
           -moz-transform:scale(2.5, 2.5);
            -ms-transform:scale(2.5, 2.5);
             -o-transform:scale(2.5, 2.5);
                transform:scale(2.5, 2.5);
            position: relative;
        }
        .top{
            top: 2em;
            border-bottom: 2em solid black;
            border-left: 1em solid transparent;
            border-right: 1em solid transparent;
        }
        .bottom{
            top: 4em;
            border-top: 2em solid black;
            border-left: 1em solid transparent;
            border-right: 1em solid transparent;
        }
    

    【讨论】:

    • 如果您使用的是 em 尺寸,您可以通过设置 font-size 来获得缩放(可能比使用 transform 更好?)
    • 我只是使用转换来表明该方法可以使用转换来工作,类似于 OP 使用转换的方式。不过,这是一个很好的观点。
    • @TalkativeTree:感谢您的建议-我想我会尝试这种方法。缩放时仍有一些可见的线条。还有……
    • @vals:现在这是一个绝妙的主意。无论如何,我已经在使用 ems 进行测量。我认为您的两个建议的结合是我最好的解决方案。两者都干杯。
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多