Pouvez-vous utiliser CSS pour mettre en miroir / retourner du texte?

235

Est-il possible d'utiliser CSS / CSS3 pour refléter du texte?

Plus précisément, j'ai ce ciseaux char “✂” ( ✂) que je voudrais afficher pointant vers la gauche et non vers la droite.

pistache
la source
9
Si l'image des ciseaux pour une raison quelconque ne fonctionne pas pour vous, je l'ai vue truquée avec% <et>%
Pete Wilson
3
La réponse de Micheal est plus exacte. Pouvez-vous mettre à jour la bonne réponse? Parce que la réponse que vous avez marquée comme correcte n'est pas un miroir mais une rotation de 180 degrés.
Sanket Sahu
@PeteWilson,? Le ✂ char est-il si commun? À quoi ça sert?
Pacerier
4
Sachez que la rotation est différente selon l'implémentation des emoji. Sur les emoji de pommes, il pointe vers le bas.
Akkumulator

Réponses:

411

Vous pouvez utiliser des transformations CSS pour y parvenir. Un retournement horizontal impliquerait de mettre à l'échelle le div comme ceci:

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

Et un retournement vertical impliquerait de mettre à l'échelle le div comme ceci:

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

DÉMO:

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>

methodofaction
la source
4
Ce devrait être la bonne réponse! (miroirs le long de l'axe vertical, échelle (1, -1) pour l'axe horizontal)
Conception par Adrian
C'est certainement la réponse la plus conforme aux normes, malheureusement nous ne vivons pas dans un monde où cela fonctionne réellement pour tous les cas d'utilisation.
Chris Sobolewski
Pourriez-vous inclure les préfixes de navigateur réels dans votre réponse, le dernier non préfixé? Le CSS tel que vous l'avez donné ne fonctionne pas.
Serrano
@SerranoPereira en effet, merci pour la suggestion. Réponse modifiée.
methodofaction
11
Notez que la transformation CSS ne fonctionne pas sur les éléments en ligne comme les balises <i> suggérées par Foundation, à moins que vous ne donniez également ensuite display: inline-block.
inscription
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);

Les deux paramètres sont l'axe X et l'axe Y, -1 sera un miroir, mais vous pouvez adapter l'échelle à n'importe quelle taille selon vos besoins. À l'envers et en arrière serait (-1, -1).

Si vous êtes intéressé par la meilleure option disponible pour la prise en charge multi-navigateurs en 2011, consultez mon ancienne réponse .

Chris Sobolewski
la source
21
Techniquement, ce n'est pas un miroir. son tourné. Cela ne fonctionnera donc qu'avec certains types d'éléments
borisrorsvort
4
J'ai eu quelques problèmes dans Chrome jusqu'à ce que j'ajoute display: inline-block à mon span (en utilisant des polices pictos)
Clarence Liu
1
Étant donné que lorsque cette question a été posée, les transformations de navigateur n'étaient pas largement prises en charge, je dirais que c'était la bonne réponse. En fait, les transformations ne sont pas prises en charge avant IE 9, donc je dirais que c'est TOUJOURS la bonne réponse, pendant au moins un peu plus longtemps.
Chris Sobolewski
Cette réponse est fausse, ce n'est pas un miroir. Cela ne fonctionne que dans ce cas, car le symbole donné dans l'exemple est verticalement asymétrique.
gregtczap
Bien que cela soit utile en soi, ce n'est pas la réponse à la question exacte posée. J'ai trouvé cette question via un moteur de recherche parce que je voulais retourner une image horizontalement. Ce n'est pas symétrique comme les ciseaux OP.
gillytech du
58

Véritable miroir:

.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
la source
14
Vous devez toujours placer la propriété conforme aux normes (non préfixée) en dernier, de sorte que lorsque la norme est adoptée par un navigateur, il utilise la version basée sur les normes au lieu de la version préfixée (plus ancienne, plus boguée). Dans ce cas, cela signifie "transformer: matrice (-1, 0, 0, 1, 0, 0);" devrait être la dernière propriété. (Modifié la réponse pour refléter cela.)
Jay Dansand
7
Je ne sais pas si cela devrait être sur la bonne réponse ou la question, mais je veux que les utilisateurs de fontawesome / bootstrap soient informés des propriétés fa-flip-horizontaletfa-flip-vertical
lol
1
Grande vraie réponse. Cependant afficher: bloc; pas nécessairement nécessaire.
Gilly
6
yep ... affichage: bloc; ou un bloc en ligne est nécessaire
dGo
Cela a été très utile pour conserver l'orientation correcte du texte de la face arrière d'un élément lorsqu'il est tourné le long de l'axe Y. Par exemple:backface-visibility: visible; transform-origin: center center; transform-style: preserve-3d; transform: matrix(-1, 0, 0, 1, 0, 0) rotateY(180deg) ;
parlement
12

Vous pouvez utiliser soit

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

ou

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

Notez que le réglage positionsur absoluteest très important! Si vous ne le définissez pas, vous devrez définir display: inline-block;

Emanuela Colta
la source
7

J'ai bricolé cette solution en parcourant Internet, y compris

Cette solution semble fonctionner dans tous les navigateurs, y compris IE6 +, en utilisant scale(-1,1)(un miroir approprié) et les propriétés filter/ appropriées -ms-filterlorsque cela est nécessaire (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
la source
6

Pour la compatibilité entre navigateurs, créez cette classe

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

Et ajoutez-le à votre classe d'icônes, c'est-à-dire

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

pour obtenir une icône de recherche avec la poignée à gauche

Michael
la source
3

vous pouvez utiliser «transformer» pour y parvenir. http://jsfiddle.net/aRcQ8/

css:

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

Il y a aussi le rotateYpour un vrai miroir:

transform: rotateY(180deg);

Ce qui est peut-être encore plus clair et compréhensible.

EDIT: ne semble pas fonctionner sur Opera si… malheureusement. Mais cela fonctionne bien sur Firefox. Je suppose qu'il pourrait être nécessaire de dire implicitement que nous faisons une sorte de translate3dpeut-être? Ou quelque chose comme ça.

jeromej
la source
1
Pour ceux qui se demandent, c'est une transformation 3D. Je pense que c'est certainement plus lisible / compréhensible que les méthodes d'échelle et de matrice données précédemment.
gregtczap
Je ne vois pas comment une rotation est un miroir - cela ne semblerait être le cas que dans un cas spécial.
cel sharp
@celsharp c'est sur l'axe Y, donc vous voyez l'image / l'élément de son dos, donc, en miroir.
jeromej
1

Il suffit d'ajouter une démo de travail pour un retournement de miroir horizontal et vertical.

.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
la source
0

c'est ce qui a fonctionné pour moi <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);

juste besoin d'affichage: bloc en ligne ou bloc à tourner. Donc, fondamentalement, la première réponse est bonne. Mais -180 n'a pas fonctionné.

Iggy
la source
0

Vous pouvez essayer la réflexion sur boîte

box-reflect: 20px right;

voir la compatibilité des boîtes de propriétés CSS? pour plus de détails

Sudeep
la source
1
box-reflect est une propriété réservée aux webkits. mais je ne pense pas qu'il ait un équivalent -moz- .. Vérifiez cet article ..
mithunsatheesh
le séparateur ne devrait pas :non plus;
mithunsatheesh
0

Juste un exemple de plus sur la façon dont le personnage pourrait être inversé. Ajoutez des préfixes de fournisseur si vous en avez besoin, mais pour l'instant tous les navigateurs modernes prennent en charge la propriété de transformation non préfixée. La seule exception est Opera si le mode Opera Mini est activé (~ 3% des utilisateurs mondiaux).

<!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
la source
0

direction: rtl; est probablement ce que vous recherchez.

Христо Тодоров
la source
-1

Cela fonctionne très bien avec des icônes de police comme «icônes de trait s7» et «police génial» :

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

Et puis sur l'élément cible:

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