【问题标题】:1px gaps appearing on transformed element in Firefox - Subpixel rounding issueFirefox 中转换后的元素上出现 1px 间隙 - 亚像素舍入问题
【发布时间】:2015-04-21 22:17:16
【问题描述】:

将转换属性添加到 div 似乎会使 Firefox 将宽度值舍入到最接近的数字,从而使列之间出现间隙。

我制作了一个 jsFiddle 示例。在各种浏览器中调整窗口大小,div 之间会出现和消失。这在 Chrome Safari 或 IE 中不会发生。

http://jsfiddle.net/afz79xmr/

这是一个错误还是我缺少一些 特殊 css 属性?


必需的代码

body{
    margin:0;
}
.item{
    transform:skewY(2deg);
    transition: transform .6s ease,  background .6s ease;
    width: 20%;
    height: 50px;
    float:left;
    background: red;
}

.item:hover{
    transform:skewY(5deg);
    background: darkblue;
}
<div class="wrap">
    <div class="item">a</div>
    <div class="item">b</div>
    <div class="item">c</div>
    <div class="item">d</div>
    <div class="item">e</div>
</div>
<br />
<h1>resize my window</h1>

【问题讨论】:

  • ^^^ 注意:您可能需要将上面的 sn-p 视为“整页”。
  • 什么都没有?如果我需要澄清任何事情,请告诉我。

标签: css firefox css-transforms


【解决方案1】:

经过大量测试,我设法通过添加这行 CSS 解决了我的问题:

border-right: 1px solid transparent;    

See here for the updated jsfiddle.

body {
  margin: 0;
}
.item {
  transform: skewY(2deg);
  transition: transform .6s ease, background .6s ease;
  backface-visibility: hidden;
  width: 20%;
  height: 50px;
  top: -20px;
  position: absolute;
  background: red;
  border-right: 1px solid transparent;
}
.a {} .b {
  left: 20%;
}
.c {
  left: 40%;
}
.d {
  left: 60%;
}
.e {
  left: 80%;
}
.item:hover {
  transform: skewY(4deg);
  background: darkblue;
}
<div class="wrap">
  <div class="a item">a</div>
  <div class="b item">b</div>
  <div class="c item">c</div>
  <div class="d item">d</div>
  <div class="e item">e</div>
</div>
<br />
<h1>resize my window</h1>

更新

我已经注意到这种解决方法会产生一些问题:

  1. 弄乱其他浏览器
  2. Border-right 使 .item 溢出其容器

我的解决方案是将所有内容移动到 Firefox“规则”中

@-moz-document url-prefix() {
    .item{
        border-right: 1px solid transparent;
    }
    .item:last-of-type{
        border-right: 0;
    }    
}

See here for the updated jsfiddle.

body {
  margin: 0;
}
.item {
  transform: skewY(2deg);
  transition: transform .6s ease, background .6s ease;
  backface-visibility: hidden;
  width: 20%;
  height: 50px;
  top: -20px;
  position: absolute;
  background: red;
}

@-moz-document url-prefix() {
  .item {
    border-right: 1px solid transparent;
  }
  .item:last-of-type {
    border-right: 0;
  }
}

.b {
  left: 20%;
}
.c {
  left: 40%;
}
.d {
  left: 60%;
}
.e {
  left: 80%;
}
.item:hover {
  transform: skewY(4deg);
  background: darkblue;
}
<div class="wrap">
  <div class="a item">a</div>
  <div class="b item">b</div>
  <div class="c item">c</div>
  <div class="d item">d</div>
  <div class="e item">e</div>
</div>
<br />
<h1>resize my window</h1>

【讨论】:

  • 这是一些有趣的行为,很好的解决方法 :) 仍然有点紧张。
猜你喜欢
  • 2017-01-05
  • 1970-01-01
  • 2020-10-19
  • 2016-03-27
  • 2017-11-03
  • 2018-03-23
  • 2015-05-29
  • 2012-09-29
  • 2021-09-24
相关资源
最近更新 更多