¿Se puede usar CSS para reflejar / voltear texto?

235

¿Es posible usar CSS / CSS3 para reflejar el texto?

Específicamente, tengo este carácter de tijera “✂” ( ✂) que me gustaría mostrar apuntando hacia la izquierda y no hacia la derecha.

pistacho
fuente
99
Si la imagen de tijera por alguna razón no funciona para ti, la he visto falsificada con% <y>%
Pete Wilson
3
La respuesta de Micheal es más precisa. ¿Puedes por favor actualizar la respuesta correcta? Porque la respuesta que has marcado como correcta no es espejo sino rotación de 180 grados.
Sanket Sahu
@PeteWilson,? ¿El ✂ char es tan común? ¿Para qué sirve?
Pacerier
44
Tenga en cuenta que la rotación es diferente dependiendo de la implementación de emoji. En el conjunto de emoji de manzanas, apunta hacia abajo.
Akkumulator

Respuestas:

411

Puede usar transformaciones CSS para lograr esto. Un giro horizontal implicaría escalar el div de esta manera:

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

Y un giro vertical implicaría escalar el div de esta manera:

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

MANIFESTACIÓN:

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>

método de acción
fuente
44
¡Esta debería ser la respuesta correcta! (espejos a lo largo del eje vertical, escala (1, -1) para eje horizontal)
Diseño de Adrian el
Sin duda, es la respuesta que cumple con los estándares más habituales, desafortunadamente no vivimos en un mundo donde esto realmente funcione para todos los casos de uso todavía.
Chris Sobolewski
¿Podría incluir los prefijos reales del navegador en su respuesta, con el último sin prefijo? El CSS que le diste no funciona.
Serrano
@SerranoPereira de hecho, gracias por la sugerencia. Respuesta modificada
methodofaction
11
Tenga en cuenta que la transformación CSS no funciona en elementos en línea como las etiquetas <i> sugeridas por Foundation, a menos que también proporcione 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);

Los dos parámetros son el eje X y el eje Y, -1 será un espejo, pero puede escalar a cualquier tamaño que desee para satisfacer sus necesidades. Al revés y al revés lo sería (-1, -1).

Si está interesado en la mejor opción disponible para soporte de navegador cruzado en 2011, vea mi respuesta anterior .

Chris Sobolewski
fuente
21
Técnicamente esto no es un espejo. está girado. Por lo tanto, solo funcionará con algún tipo de elementos
borisrorsvort
44
Tuve algunos problemas en Chrome hasta que agregué display: bloque en línea a mi lapso (usando fuentes pictos)
Clarence Liu
1
Dado que cuando se hizo esta pregunta, las transformaciones del navegador no eran ampliamente compatibles, diría que esta fue la respuesta correcta. De hecho, las transformaciones no son compatibles hasta IE 9, por lo que argumentaría que TODAVÍA es la respuesta correcta, al menos durante un tiempo más.
Chris Sobolewski
Esta respuesta es incorrecta, no es un espejo. Solo funciona en este caso porque el símbolo dado en el ejemplo es verticalmente asimétrico.
gregtczap
Aunque esto es útil en sí mismo, no es la respuesta a la pregunta exacta formulada. Encontré esta pregunta a través de un motor de búsqueda porque quería voltear una imagen horizontalmente. No es simétrico como las tijeras de OP.
gillytech
58

Espejo real:

.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
fuente
14
Usted debe siempre poner la propiedad (sin prefijo) compatible con los estándares pasado, por lo que cuando el estándar es adoptado por un navegador, se utilizará la versión basada en estándares, en lugar de la (mayores, buggier) versión prefijado. En este caso, eso significa "transformar: matriz (-1, 0, 0, 1, 0, 0);" Debería ser la última propiedad. (Editó la respuesta para reflejar esto.)
Jay Dansand
77
No sé si esto debería estar en la respuesta correcta o en la pregunta, pero quiero informar a los usuarios de fontawesome / bootstrap sobre las propiedades fa-flip-horizontalyfa-flip-vertical
lol
1
Gran respuesta real. Sin embargo pantalla: bloque; No necesariamente necesario.
Gilly
66
sí ... pantalla: bloque; o se necesita un bloqueo en línea
dGo
Esto fue realmente útil para mantener la orientación correcta del texto de la cara posterior de un elemento cuando se gira a lo largo del eje Y. Por ejemplo:backface-visibility: visible; transform-origin: center center; transform-style: preserve-3d; transform: matrix(-1, 0, 0, 1, 0, 0) rotateY(180deg) ;
Parlamento
12

Puedes usar cualquiera

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

o

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

Tenga en cuenta que el establecimiento positionde absolutees muy importante! Si no lo configura, deberá configurarlo display: inline-block;

Emanuela Colta
fuente
7

He improvisado esta solución rastreando Internet incluyendo

Esta solución parece funcionar en todos los navegadores, incluido IE6 +, utilizando scale(-1,1)(un espejo adecuado) y propiedades apropiadas filter/ -ms-filtercuando sea necesario (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
fuente
6

Para compatibilidad cruzada con el navegador, cree esta clase

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

Y agréguelo a su clase de ícono, es decir

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

para obtener un icono de búsqueda con el asa a la izquierda

Miguel
fuente
3

puedes usar 'transformar' para lograr esto. http://jsfiddle.net/aRcQ8/

css:

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

También está el rotateYde un espejo real:

transform: rotateY(180deg);

Lo cual, tal vez, es aún más claro y comprensible.

EDITAR: Aunque no parece funcionar en Opera ... tristemente. Pero funciona bien en Firefox. Supongo que podría ser necesario decir implícitamente que estamos haciendo algún tipo de translate3dtal vez. O algo así.

jeromej
fuente
1
Para aquellos que se preguntan, esta es una transformación 3D. Creo que definitivamente es más legible / comprensible que los métodos de escala y matriz dados anteriormente.
gregtczap
No veo cómo una rotación es un espejo, eso solo parecería ser así en un caso especial.
Cel Sharp
@celsharp está en el eje Y, por lo que puede ver la imagen / elemento desde su parte posterior, por lo tanto, reflejado.
jeromej
1

Simplemente agregue una demostración de trabajo para la inversión de espejo horizontal y 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
fuente
0

esto es lo que funcionó para mí <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);

solo necesita mostrar: bloque en línea o bloque para rotar. Entonces, básicamente, la primera respuesta es buena. Pero -180 no funcionó.

Iggy
fuente
0

Solo un ejemplo más de cómo el personaje podría voltearse. Agregue prefijos de proveedor si los necesita, pero por ahora todos los navegadores modernos admiten la propiedad de transformación no prefijada. La única excepción es Opera si el modo Opera Mini está habilitado (~ 3% de usuarios mundiales).

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

drogo
fuente
0

direction: rtl; es probablemente lo que estás buscando.

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

Eso funciona bien con los iconos de fuente como 's7 stroke icons' y 'font-awesome' :

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

Y luego en el elemento objetivo:

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