【问题标题】:How to vertically center pseudo element on transform rotate in Firefox如何在 Firefox 中的变换旋转上垂直居中伪元素
【发布时间】:2018-08-09 18:31:32
【问题描述】:

我在如何使 X 在转换过程中保持在中间时遇到了麻烦。看来问题只发生在 Chrome 和 FF 之间的 Firefox 浏览器中。

我使用的是 FF Quantum 58.0.2,X 移到顶部,在 Chrome 中我没有问题。

我尝试在伪元素选择器中添加top: 50%;,但在旋转过程中,X 将几个像素移至底部。有没有其他方法可以像在 Chrome 中那样在 Firefox 中实现这一点?

.close >.x-button{
  width: 0.5em;
  height: 0.5em;
  position: relative;	
  background-color: #343a40;
  border-radius: 50%;
  display: flex;
  flex-direction: column;
  justify-content: center;
  margin: 0.5em 0em;
  transition: all 500ms ease-out;
  -moz-transition: all 500ms ease-out;
  transform-origin: center center;
}
.close >.x-button::before,
.close >.x-button::after{
  position: absolute;
  content: '';
  width: 100%;
  height: 0.08em;
}
.close:hover >.x-button{
    border-radius: 0;
    background-color: transparent;
    -ms-transform: scale(1.8) rotateZ(-360deg);
    -o-transform: scale(1.8) rotateZ(-360deg);
    -webkit-transform: scale(1.8) rotateZ(-360deg);
    -moz-transform: scale(1.8) rotateZ(-360deg);
    transform: scale(1.8) rotateZ(-360deg);
}
.close:hover >.x-button::before,
.close:hover >.x-button::after {
  background-color: #FD0030;
}
.close >.x-button::before{
	-ms-transform: rotate(45deg);
	-moz-transform: rotate(45deg);
	-o-transform: rotate(45deg);
	-webkit-transform: rotate(45deg);
	transform: rotate(45deg);
}
.close >.x-button::after{
	-ms-transform: rotate(-45deg);
	-moz-transform: rotate(-45deg);
	-o-transform: rotate(-45deg);
	-webkit-transform: rotate(-45deg);
	transform: rotate(-45deg);
}
<button class="close">
  <span class="x-button"></span>
</button>

【问题讨论】:

    标签: css firefox pseudo-element


    【解决方案1】:

    您可以像使用任何位置绝对元素一样将前后垂直居中

    给它一个top: 50%transform: translateY(-50%)

    我在 Mac FF 上验证了这一点

    .close >.x-button{
      width: 0.5em;
      height: 0.5em;
      position: relative;	
      background-color: #343a40;
      border-radius: 50%;
      display: flex;
      flex-direction: column;
      justify-content: center;
      margin: 0.5em 0em;
      transition: all 500ms ease-out;
      -moz-transition: all 500ms ease-out;
      transform-origin: center center;
    }
    .close >.x-button::before,
    .close >.x-button::after{
      position: absolute;
      content: '';
      width: 100%;
      height: 0.08em;
      top: 50%;
    }
    .close:hover >.x-button{
        border-radius: 0;
        background-color: transparent;
        -ms-transform: scale(1.8) rotateZ(-360deg);
        -o-transform: scale(1.8) rotateZ(-360deg);
        -webkit-transform: scale(1.8) rotateZ(-360deg);
        -moz-transform: scale(1.8) rotateZ(-360deg);
        transform: scale(1.8) rotateZ(-360deg);
    }
    .close:hover >.x-button::before,
    .close:hover >.x-button::after {
      background-color: #FD0030;
    }
    .close >.x-button::before{
    	-ms-transform: rotate(45deg);
    	-moz-transform: rotate(45deg);
    	-o-transform: rotate(45deg);
    	-webkit-transform: rotate(45deg);
    	transform: rotate(45deg) translateY(-50%);
    }
    .close >.x-button::after{
    	-ms-transform: rotate(-45deg);
    	-moz-transform: rotate(-45deg);
    	-o-transform: rotate(-45deg);
    	-webkit-transform: rotate(-45deg);
    	transform: rotate(-45deg) translateY(-50%);
    }
    <button class="close">
      <span class="x-button"></span>
    </button>

    【讨论】:

    • 我的 x 看起来扭曲了。我将 translateY(-50%) 放在了悬停状态之外,现在看起来很好。谢谢!
    • 哦,我明白了,在 mac 上,x 在 chrome 和 ff 上看起来是一样的,所以我认为它应该是这样的
    【解决方案2】:

    您也可以在

    上添加bottom: 0.20em
    .close >.x-button::before,
    .close >.x-button::after
    

    在所有浏览器上修复它。

    为什么是.20em.25em 是图标尺寸的一半,.5em 是顶部和底部边距的一半。

    火狐:

    片段:

    .close>.x-button {
      width: 0.5em;
      height: 0.5em;
      position: relative;
      background-color: #343a40;
      border-radius: 50%;
      display: flex;
      flex-direction: column;
      justify-content: center;
      margin: 0.5em 0em;
      transition: all 500ms ease-out;
      -moz-transition: all 500ms ease-out;
      transform-origin: center center;
    }
    
    .close>.x-button::before,
    .close>.x-button::after {
      position: absolute;
      content: '';
      width: 100%;
      height: 0.08em;
      /* new */
      bottom: .20em;
    }
    
    .close:hover>.x-button {
      border-radius: 0;
      background-color: transparent;
      -ms-transform: scale(1.8) rotateZ(-360deg);
      -o-transform: scale(1.8) rotateZ(-360deg);
      -webkit-transform: scale(1.8) rotateZ(-360deg);
      -moz-transform: scale(1.8) rotateZ(-360deg);
      transform: scale(1.8) rotateZ(-360deg);
    }
    
    .close:hover>.x-button::before,
    .close:hover>.x-button::after {
      background-color: #FD0030;
    }
    
    .close>.x-button::before {
      -ms-transform: rotate(45deg);
      -moz-transform: rotate(45deg);
      -o-transform: rotate(45deg);
      -webkit-transform: rotate(45deg);
      transform: rotate(45deg);
    }
    
    .close>.x-button::after {
      -ms-transform: rotate(-45deg);
      -moz-transform: rotate(-45deg);
      -o-transform: rotate(-45deg);
      -webkit-transform: rotate(-45deg);
      transform: rotate(-45deg);
    }
    <button class="close">
      <span class="x-button"></span>
    </button>

    【讨论】:

    • 哇,这真是太棒了。我从来没想过那个。谢谢!
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2013-03-07
    相关资源
    最近更新 更多