Können Sie CSS zum Spiegeln / Spiegeln von Text verwenden?

235

Ist es möglich, CSS / CSS3 zum Spiegeln von Text zu verwenden?

Insbesondere habe ich dieses Scherenzeichen "✂" ( ✂), das ich nach links und nicht nach rechts zeigen möchte.

Pistacchio
quelle
9
Wenn das Scherenbild aus irgendeinem Grund für Sie nicht funktioniert, habe ich gesehen, dass es mit% <und>% gefälscht ist
Pete Wilson
3
Die Antwort von Micheal ist genauer. Können Sie bitte die richtige Antwort aktualisieren? Denn die Antwort, die Sie als richtig markiert haben, ist nicht Spiegelung, sondern Drehung um 180 Grad.
Sanket Sahu
@ PeteWilson ,? Ist das Zeichen so häufig? Wofür wird es verwendet?
Pacerier
4
Beachten Sie, dass die Rotation je nach Emoji-Implementierung unterschiedlich ist. Auf Äpfeln Emoji Set zeigt es nach unten.
Akkumulator

Antworten:

411

Sie können CSS-Transformationen verwenden, um dies zu erreichen. Ein horizontaler Flip würde das Skalieren des Div wie folgt beinhalten:

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

Und ein vertikaler Flip würde das Skalieren des Div wie folgt beinhalten:

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

DEMO:

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>

Methode der Aktion
quelle
4
Dies sollte die richtige Antwort sein! (Spiegel entlang der vertikalen Achse, Skala (1, -1) für horizontale Achse)
Entwurf von Adrian
Es ist sicherlich die Antwort, die den Nost-Standards entspricht. Leider leben wir noch nicht in einer Welt, in der dies tatsächlich für alle Anwendungsfälle funktioniert.
Chris Sobolewski
Könnten Sie die tatsächlichen Browserpräfixe in Ihre Antwort aufnehmen, wobei das letzte nicht vorangestellt wird? Das CSS, wie Sie es angegeben haben, funktioniert nicht.
Serrano
@ FerranoPereira in der Tat, danke für den Vorschlag. Antwort geändert.
Methodofaction
11
Beachten Sie, dass die CSS-Transformation nicht für Inline-Elemente wie die von Foundation vorgeschlagenen <i> -Tags funktioniert , es sei denn, Sie geben dann auch display: inline-block an.
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);

Die beiden Parameter sind X-Achse und Y-Achse. -1 ist ein Spiegel. Sie können jedoch auf eine beliebige Größe skalieren, die Ihren Anforderungen entspricht. Umgedreht und rückwärts wäre (-1, -1).

Wenn Sie an der besten Option interessiert sind, die 2011 für die browserübergreifende Unterstützung verfügbar war, lesen Sie meine ältere Antwort .

Chris Sobolewski
quelle
21
Technisch ist dies kein Spiegel. es ist gedreht. Es wird also nur mit einer Art von Elementen
funktionieren
4
Ich hatte einige Probleme in Chrome, bis ich Anzeige hinzufügte: Inline-Block zu meiner Spanne (unter Verwendung von Pictos-Schriftarten)
Clarence Liu
1
Angesichts der Tatsache, dass Browser-Transformationen bei der Beantwortung dieser Frage nicht allgemein unterstützt wurden, würde ich argumentieren, dass dies die richtige Antwort war. Tatsächlich werden Transformationen erst in IE 9 unterstützt, daher würde ich argumentieren, dass dies immer noch die richtige Antwort ist, zumindest für eine Weile länger.
Chris Sobolewski
Diese Antwort ist falsch, es ist kein Spiegel. Dies funktioniert nur in diesem Fall, da das im Beispiel angegebene Symbol vertikal asymmetrisch ist.
Gregtczap
Obwohl dies an sich nützlich ist, ist es nicht die Antwort auf die genaue gestellte Frage. Ich habe diese Frage über eine Suchmaschine gefunden, weil ich ein Bild horizontal spiegeln wollte. Es ist nicht symmetrisch wie die OP-Schere.
Gillytech
58

Echter Spiegel:

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

Cícero Verneck Corrêa
quelle
14
Sie sollten immer die standardkonforme Eigenschaft (ohne Präfix) an die letzte Stelle setzen, damit bei der Übernahme des Standards durch einen Browser die standardbasierte Version anstelle der (älteren, fehlerhafteren) Präfixversion verwendet wird. In diesem Fall bedeutet dies "transformieren: Matrix (-1, 0, 0, 1, 0, 0)"; sollte die letzte Eigenschaft sein. (Die Antwort wurde bearbeitet, um dies widerzuspiegeln.)
Jay Dansand
7
Ich weiß nicht, ob dies auf der richtigen Antwort oder der Frage sein sollte, aber ich möchte Fontawesome / Bootstrap-Benutzer über die fa-flip-horizontalund fa-flip-verticalEigenschaften informieren
lol
1
Tolle echte Antwort. Anzeige: Block; nicht unbedingt benötigt.
Gilly
6
yep ... Anzeige: Block; oder Inline-Block wird benötigt
dGo
Dies war sehr hilfreich, um die korrekte Textausrichtung der Rückseite eines Elements beizubehalten, wenn es entlang der Y-Achse gedreht wird. Zum Beispiel:backface-visibility: visible; transform-origin: center center; transform-style: preserve-3d; transform: matrix(-1, 0, 0, 1, 0, 0) rotateY(180deg) ;
Parlament
12

Sie können entweder Benutzer

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

oder

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

Beachten Sie, dass die Einstellung positionauf absolutesehr wichtig ist! Wenn Sie es nicht einstellen, müssen Sie einstellen display: inline-block;

Emanuela Colta
quelle
7

Ich habe diese Lösung zusammengeschustert, indem ich das Internet einschließlich durchsucht habe

Diese Lösung scheint in allen Browsern einschließlich IE6 + zu funktionieren und verwendet scale(-1,1)(einen geeigneten Spiegel) und entsprechende filter/ -ms-filterEigenschaften, falls erforderlich (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);
}
Jay Dansand
quelle
6

Erstellen Sie diese Klasse aus Gründen der Cross-Browser-Kompatibilität

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

Und fügen Sie es Ihrer Symbolklasse hinzu, dh

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

um ein Suchsymbol mit dem Griff links zu erhalten

Michael
quelle
3

Sie können 'transform' verwenden, um dies zu erreichen. http://jsfiddle.net/aRcQ8/

CSS:

-moz-transform: rotate(-180deg);
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
Rito
quelle
3

Es gibt auch rotateYeinen echten Spiegel:

transform: rotateY(180deg);

Was vielleicht noch klarer und verständlicher ist.

EDIT: Scheint aber nicht an Opera zu funktionieren ... leider. Aber es funktioniert gut unter Firefox. Ich denke, es könnte erforderlich sein, implizit zu sagen, dass wir translate3dvielleicht eine Art von tun ? Oder etwas ähnliches.

jeromej
quelle
1
Für diejenigen, die sich fragen, ist dies eine 3D-Transformation. Ich denke, es ist definitiv lesbarer / verständlicher als die zuvor angegebenen Skalen- und Matrixmethoden.
Gregtczap
Ich sehe nicht, wie eine Drehung ein Spiegel ist - das scheint nur in einem speziellen Fall so zu sein.
Cel
@celsharp ist auf der Y-Achse, so dass Sie das Bild / Element von hinten sehen, also gespiegelt.
Jeromej
1

Fügen Sie einfach eine funktionierende Demo für horizontalen und vertikalen Spiegelwechsel hinzu.

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

Niyasc
quelle
0

Dafür hat es bei mir funktioniert <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);

brauche nur Anzeige: Inline-Block oder Block zum Drehen. Die erste Antwort ist also im Grunde gut. Aber -180 hat nicht funktioniert.

Iggy
quelle
0

Sie könnten versuchen, Box-Reflect

box-reflect: 20px right;

Siehe CSS-Eigenschaft Box-Reflect-Kompatibilität? für mehr Details

Sudeep
quelle
1
Box-Reflect ist eine reine Webkit-Eigenschaft. aber ich glaube nicht, dass es ein -moz- Äquivalent hat .. Überprüfen Sie diesen Beitrag ..
mithunsatheesh
auch Trennzeichen sollte :nicht sein;
mithunsatheesh
0

Nur noch ein Beispiel, wie der Charakter umgedreht werden könnte. Fügen Sie bei Bedarf Herstellerpräfixe hinzu, aber derzeit unterstützen alle modernen Browser nicht vordefinierte Transformationseigenschaften. Die einzige Ausnahme ist Opera, wenn der Opera Mini-Modus aktiviert ist (~ 3% Weltnutzer).

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

Drugan
quelle
0

direction: rtl; ist wahrscheinlich das, wonach Sie suchen.

Христо Тодоров
quelle
-1

Das funktioniert gut mit Schriftarten -Symbolen wie "s7-Strich-Symbole" und "Schrift-fantastisch" :

.mirror {
  display: inline-block;
  transform: scaleX(-1);
}

Und dann zum Zielelement:

<button>
  <span class="s7-back mirror"></span>
  <span>Next</span>
</button>
Dmitry Anch
quelle