CSSを使用してテキストをミラーリング/フリップできますか?


235

CSS / CSS3を使用してテキストをミラーリングすることは可能ですか?

具体的には、右向き✂ではなく左向きを表示したいハサミ文字「✂」()があります。


9
何らかの理由でハサミの画像がうまくいかない場合は、%<および>%で偽造されているのを目にしました
ピートウィルソン


3
Michealの答えはより正確です。正解を更新していただけませんか?あなたが正しいとマークした答えは鏡ではなく、180度回転するからです。
Sanket Sahu

@PeteWilson 、? ✂charはそれほど一般的ですか?何に使うの?
Pacerier 2015年

4
回転は絵文字の実装によって異なることに注意してください。リンゴの絵文字セットでは下向きです。
Akkumulator 2017

回答:


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によるデザイン

これは確かに最も標準に準拠した回答です。残念ながら、これはまだすべてのユースケースで実際に機能する世界には住んでいません。
Chris Sobolewski、2013年

実際のブラウザの接頭辞を、接頭辞のない最後を含めて、回答に含めることはできますか?提供したCSSは機能しません。
セラーノ2014年

@SerranoPereira本当に、提案に感謝します。回答を修正しました。
methodofaction 2014年

11
CSS変換は、display:inline-blockも指定しない限り、Foundationが推奨する<i>タグなどのインライン要素では機能しないことに注意してください。
2016年

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);

2つのパラメーターはX軸とY軸です。-1はミラーになりますが、ニーズに合わせて任意のサイズにスケーリングできます。上下逆さまになります(-1, -1)

2011年にクロスブラウザーサポートで利用できる最適なオプションに興味がある場合は、以前の回答を参照しください。


21
技術的にはこれはミラーではありません。その回転。したがって、それはあるタイプの要素でのみ機能します
borisrorsvort

4
displayを追加するまでChromeでいくつかの問題がありました:スパンにインラインブロック(pictosフォントを使用)
Clarence Liu

1
この質問が出されたとき、ブラウザー変換は広くサポートされていなかったので、これは正解だったと私は主張します。実際、変換はIE 9までサポートされていないので、少なくともしばらくの間は、これが正しい答えであると私は主張します。
Chris Sobolewski、2013年

この答えは間違っています、それは鏡ではありません。例で指定されたシンボルが垂直方向に非対称であるため、この1つのケースでのみ機能します。
gregtczap 14

これ自体は便利ですが、尋ねられた正確な質問に対する答えではありません。画像を左右反転させたかったので、検索エンジンでこの質問を見つけました。OPはさみのように対称ではありません。
gillytech 2014

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
標準に準拠した(接頭辞のない)プロパティは常に最後に置く必要があります。これにより、ブラウザが標準を採用したときに、(古い、バグが多い)接頭辞の付いたバージョンではなく、標準ベースのバージョンが使用されます。この場合、これは「変換:マトリックス(-1、0、0、1、0、0);」を意味します。最後のプロパティでなければなりません。(これを反映するように回答を編集しました。)
Jay Dansand 2013年

7
私はこれが正解か疑問にする必要がありますかどうかわからないが、私はfontawesome /ブートストラップ・ユーザーが知っているようにしたいfa-flip-horizontalfa-flip-verticalプロパティ

1
すばらしい答えです。ただし、表示:ブロック; 必ずしも必要ではありません。
Gilly

6
うん...表示:ブロック; またはインラインブロックが必要
dGo

これは、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);
}

positionへの設定absoluteが非常に重要であることに注意してください!設定しない場合は、設定する必要があります display: inline-block;


7

私はインターネットを精査することでこの解決策をまとめました

このソリューションは、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

これを実現するには、「変換」を使用できます。 http://jsfiddle.net/aRcQ8/

css:

-moz-transform: rotate(-180deg);
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);

3

rotateY実際のミラー用のものもあります:

transform: rotateY(180deg);

これは、おそらく、さらに明確で理解しやすいでしょう。

編集:しかし残念ながらOperaでは動作しないようです。しかし、Firefoxでは問題なく動作します。translate3dおそらく何らかのことをしていると暗黙のうちに言う必要があるのではないでしょうか。またはそのようなもの。


1
不思議に思う人にとって、これは3D変換です。私はそれが以前に与えられたスケールと行列の方法より間違いなく読みやすく/理解できると思います。
gregtczap 14

回転がどのように鏡であるかはわかりません。それは、1つの特別な場合にのみそうであるように見えます。
セルシャープ

@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または回転するブロックが必要です。だから基本的に最初の答えは良いです。しかし、-180は機能しませんでした。



0

キャラクターを反転させる方法のもう1つの例です。ベンダープレフィックスが必要な場合は追加しますが、現在のところ、すべての最新のブラウザーはプレフィックスなしの変換プロパティをサポートしています。唯一の例外は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>



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.