可以使用CSS来镜像/翻转文本吗?


235

是否可以使用CSS / CSS3来镜像文本?

具体来说,我有这个剪刀字符“✂”(✂),我想显示为左指向右。


9
如果剪刀图像由于某种原因对您不起作用,我已经看到它用%<和>%伪造了
Pete Wilson


3
Micheal的答案更为准确。您能否更新正确答案?因为您标记为正确的答案不是镜像而是旋转180度。
Sanket Sahu 2013年

@PeteWilson ,?✂char很常见吗?它有什么用?
起搏器

4
请注意,旋转方式因表情符号实现而异。在苹果表情符号上,它指向下方。
Akkumulator

Answers:


411

您可以使用CSS转换来实现此目的。水平翻转将涉及像这样缩放div:

-moz-transform: scale(-1, 1);
-webkit-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
transform: scale(-1, 1);

垂直翻转会涉及到像这样缩放div:

-moz-transform: scale(1, -1);
-webkit-transform: scale(1, -1);
-o-transform: scale(1, -1);
-ms-transform: scale(1, -1);
transform: scale(1, -1);

演示:

span{ display: inline-block; margin:1em; } 
.flip_H{ transform: scale(-1, 1); color:red; }
.flip_V{ transform: scale(1, -1); color:green; }
<span class='flip_H'>Demo text &#9986;</span>
<span class='flip_V'>Demo text &#9986;</span>


4
这应该是正确的答案!(沿垂直轴的镜像,水平轴的scale(1,-1))
Adrian

无疑,这是符合标准的最新解答,不幸的是,我们还没有生活在这样一个适用于所有用例的世界中。
克里斯·索博洛夫斯基

您能否在答案中包含实际的浏览器前缀,并使用非前缀的最后一个?您提供的CSS不起作用。
塞拉诺2014年

确实,@ SerranoPereira,感谢您的建议。答案已修正。
methodofaction 2014年

11
请注意,CSS转换不适用于 Foundation建议的<i>标签之类的内联元素,除非您还提供了display:inline-block。
enigment

66
-moz-transform: scale(-1, 1);
-webkit-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
transform: scale(-1, 1);

两个参数分别是X轴和Y轴,-1将是一个镜像,但是您可以缩放到任意大小以适应需要。倒挂和倒退都会(-1, -1)

如果您对2011年跨浏览器支持的最佳选择感兴趣,请参阅我的旧答案


21
从技术上讲,这不是一面镜子。它旋转了。因此,它仅适用于某些类型的元素
borisrorsvort

4
在添加显示之前,我在Chrome中遇到了一些问题:在跨度中使用内联块(使用pictos字体)
Clarence Liu

1
鉴于提出此问题时,浏览器转换并未得到广泛支持,我认为这是正确的答案。实际上,直到IE 9才支持转换,因此我认为这至少在更长的时间内仍然是正确的答案。
克里斯·索博洛夫斯基

这个答案是错误的,它不是一面镜子。它仅在这种情况下有效,因为示例中给出的符号在垂直方向上是不对称的。
gregtczap 2014年

尽管这本身是有用的,但这并不是所要提出的确切问题的答案。我通过搜索引擎找到了这个问题,因为我想水平翻转图片。它不像OP剪刀那样对称。
gillytech

58

实镜:

.mirror{
    display: inline-block; 
    font-size: 30px;

    -webkit-transform: matrix(-1, 0, 0, 1, 0, 0);
    -moz-transform: matrix(-1, 0, 0, 1, 0, 0);
    -o-transform: matrix(-1, 0, 0, 1, 0, 0);
    transform: matrix(-1, 0, 0, 1, 0, 0);
}
<span class='mirror'>Mirror Text<span>


14
您应该始终将符合标准的(无前缀)属性放在最后,这样,当浏览器采用该标准时,它将使用基于标准的版本,而不是(旧的,错误的)前缀版本。在这种情况下,这意味着“转换:matrix(-1,0,0,1,0,0);” 应该是最后一个属性。(编辑答案以反映这一点。)
Jay Dansand

7
我不知道这是否应该是正确答案或问题,但我不想让fontawesome /引导用户了解fa-flip-horizontalfa-flip-vertical性能
洛尔

1
真正的好答案。但是display:block; 不一定需要。
吉莉2014年

6
是的... display:block; 还是需要内联阻止功能
dGo,2015年

沿Y轴旋转时,这对于保持元素背面的正确文本方向非常有帮助。例如:backface-visibility: visible; transform-origin: center center; transform-style: preserve-3d; transform: matrix(-1, 0, 0, 1, 0, 0) rotateY(180deg) ;
国会

12

您可以使用

.your-class{ 
      position:absolute; 
      -moz-transform: scaleX(-1); 
      -o-transform: scaleX(-1); 
      -webkit-transform: scaleX(-1); 
      transform: scaleX(-1); 
      filter: FlipH;  
}

要么

 .your-class{ 
  position:absolute;
  transform: rotate(360deg) scaleX(-1);
}

请注意,设置positionabsolute是很重要的!如果不设置,则需要设置 display: inline-block;


7

我通过搜寻Internet来拼凑此解决方案,包括

该解决方案似乎可以在包括IE6 +在内的所有浏览器中使用,scale(-1,1)并在必要时使用(适当的镜像)和适当的filter/ -ms-filter属性(IE6-8):

/* Cross-browser mirroring of content. Note that CSS pre-processors
  like Less cough on the media hack. 

  Microsoft recommends using BasicImage as a more efficent/faster form of
  mirroring, instead of FlipH or some kind of Matrix scaling/transform.
  @see http://msdn.microsoft.com/en-us/library/ms532972%28v=vs.85%29.aspx
  @see http://msdn.microsoft.com/en-us/library/ms532992%28v=vs.85%29.aspx
*/

/* IE8 only via hack: necessary because IE9+ will also interpret -ms-filter,
  and mirroring something that's already mirrored results in no net change! */
@media \0screen {
  .mirror {
    -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(mirror=1)";
  }
}
.mirror {
  /* IE6 and 7 via hack */
  *filter: progid:DXImageTransform.Microsoft.BasicImage(mirror=1);
  /* Standards browsers, including IE9+ */
  -moz-transform: scale(-1,1);
  -ms-transform: scale(-1,1);
  -o-transform: scale(-1,1); /* Op 11.5 only */
  -webkit-transform: scale(-1,1);
  transform: scale(-1,1);
}

6

为了实现跨浏览器兼容性,请创建此类

.mirror-icon:before {
    -webkit-transform: scale(-1, 1);
    -moz-transform: scale(-1, 1);
    -ms-transform: scale(-1, 1);
    -o-transform: scale(-1, 1);
    transform: scale(-1, 1);
}

并将其添加到您的图标类,即

<i class="icon-search mirror-icon"></i>

获取带有左侧手柄的搜索图标



3

还有rotateY一个真正的镜像:

transform: rotateY(180deg);

也许更清楚和可以理解。

编辑:虽然似乎无法在Opera上工作……可悲的是。但它在Firefox上运行良好。我想可能需要隐式地说我们正在做某种事情translate3d?或类似的东西。


1
对于那些想知道这是3D转换的人。我认为绝对比以前给出的标度和矩阵方法更具可读性/可理解性。
gregtczap 2014年

我看不到旋转是如何镜像的-在一种特殊情况下,情况似乎如此。
Cel夏普

@celsharp它在Y轴上,因此您可以从其背面看到图像/元素,从而得到镜像。
jeromej

1

只需为水平和垂直镜像翻转添加一个有效的演示。

.horizontal-flip {
  -moz-transform: scale(-1, 1);
  -webkit-transform: scale(-1, 1);
  -o-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  transform: scale(-1, 1);
}

.vertical-flip {
  -moz-transform: scale(1, -1);
  -webkit-transform: scale(1, -1);
  -o-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
<div class="horizontal-flip">
  Hello, World
  <input type="text">
</div>
<hr>
<div class="vertical-flip">
  Hello, World
  <input type="text">
</div>


0

这就是对我有用的 <span class="navigation-pipe">&gt;</span>

display:inline-block;
-moz-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=4);

只需要display:inline-block或block即可旋转。所以基本上第一个答案是好的。但是-180无效。



0

再举一个例子,如何翻转角色。如果需要,请添加供应商前缀,但目前所有现代浏览器都支持无前缀的transform属性。唯一例外是Opera,如果启用了Opera Mini模式(约3%的世界用户)。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Text rotation</title>
  <style type="text/css" media="screen">
    .scissors {
      display: inline-block;
      font-size: 50px;
      color: red;
    }
    .original {
      color: initial;
    }
    .flipped {
      transform: rotateZ(180deg);
    }
    .upward {
      transform: rotateZ(-90deg);
    }
    .downward {
      transform: rotateZ(90deg);
    }
  </style>
  
</head>
<body>
  <ul>
    <li>Original: <span class="scissors original">&#9986;</span></li>
    <li>Flipped: <span class="scissors flipped">&#9986;</span></li>
    <li>Upward: <span class="scissors upward">&#9986;</span></li>
    <li>Downward: <span class="scissors downward">&#9986;</span></li>
  </ul>
</body>
</html>



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.