css - Firefox 中转换元素上出现 1px 间隙 - 亚像素舍入问题

标签 css firefox css-transforms

将转换属性添加到 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>

最佳答案

经过大量测试后,我通过添加这行 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 中“at-rule”

@-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>

关于css - Firefox 中转换元素上出现 1px 间隙 - 亚像素舍入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29784166/

相关文章:

javascript - 报价和自动换行

CSS:进入视口(viewport)时位置粘在底部

javascript - firefox 和 radialgradient(使用 html5 Canvas )

javascript - 从 JS 应用的 CSS3 转换不起作用

css3 旋转和原点

html - 页尾空白处

jquery - css 完全删除而不仅仅是可见性 :hidden

firefox - 在 Travis 上安装最新版本的 Firefox 并使用 Protractor 运行

firefox - 为什么 FF 51.0.1 会屏蔽页面证书?

css - 使用百分比时 Chrome 中的转换位置不正确