是否可以使用CSS / CSS3来镜像文本?
具体来说,我有这个剪刀字符“✂”(✂
),我想显示为左指向右。
是否可以使用CSS / CSS3来镜像文本?
具体来说,我有这个剪刀字符“✂”(✂
),我想显示为左指向右。
Answers:
您可以使用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 ✂</span>
<span class='flip_V'>Demo text ✂</span>
-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年跨浏览器支持的最佳选择感兴趣,请参阅我的旧答案。
实镜:
.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>
fa-flip-horizontal
和fa-flip-vertical
性能
backface-visibility: visible; transform-origin: center center; transform-style: preserve-3d; transform: matrix(-1, 0, 0, 1, 0, 0) rotateY(180deg) ;
您可以使用
.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);
}
请注意,设置position
到absolute
是很重要的!如果不设置,则需要设置 display: inline-block;
我通过搜寻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);
}
您可以使用“转换”来实现。 http://jsfiddle.net/aRcQ8/
CSS:
-moz-transform: rotate(-180deg);
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
还有rotateY
一个真正的镜像:
transform: rotateY(180deg);
也许更清楚和可以理解。
编辑:虽然似乎无法在Opera上工作……可悲的是。但它在Firefox上运行良好。我想可能需要隐式地说我们正在做某种事情translate3d
?或类似的东西。
只需为水平和垂直镜像翻转添加一个有效的演示。
.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>
这就是对我有用的 <span class="navigation-pipe">></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无效。
再举一个例子,如何翻转角色。如果需要,请添加供应商前缀,但目前所有现代浏览器都支持无前缀的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">✂</span></li>
<li>Flipped: <span class="scissors flipped">✂</span></li>
<li>Upward: <span class="scissors upward">✂</span></li>
<li>Downward: <span class="scissors downward">✂</span></li>
</ul>
</body>
</html>
direction: rtl;
可能正是您想要的。
可以与's7笔触图标'和'font-awesome'之类的字体图标配合使用:
.mirror {
display: inline-block;
transform: scaleX(-1);
}
然后在目标元素上:
<button>
<span class="s7-back mirror"></span>
<span>Next</span>
</button>