Bisakah Anda menggunakan CSS untuk mencerminkan / membalik teks?


246

Apakah mungkin menggunakan CSS / CSS3 untuk mencerminkan teks?

Secara khusus, saya memiliki karakter gunting "✂" ( ✂) yang ingin saya tampilkan mengarah ke kiri dan bukan ke kanan.


9
Jika gambar gunting karena suatu alasan tidak berhasil untuk Anda, saya telah melihatnya dipalsukan dengan% <and>%
Pete Wilson


3
Jawaban dari Micheal lebih akurat. Bisakah Anda memperbarui jawaban yang benar? Karena jawaban yang Anda tandai benar bukanlah cermin melainkan rotasi 180 derajat.
Sanket Sahu

@PeteWilson,? Apakah ✂ char begitu umum? Untuk apa itu digunakan?
Pacerier

4
Ketahuilah bahwa rotasi berbeda tergantung pada penerapan emoji. Di Apple emoji setelnya mengarah ke bawah.
Akkumulator

Jawaban:


429

Anda dapat menggunakan transformasi CSS untuk mencapai ini. Pembalikan horizontal akan melibatkan penskalaan div seperti ini:

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

Dan flip vertikal akan melibatkan penskalaan div seperti ini:

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


Ini tentu saja merupakan jawaban yang paling sesuai dengan standar, sayangnya kita belum hidup di dunia di mana ini benar-benar berfungsi untuk semua kasus penggunaan.
Chris Sobolewski

Bisakah Anda menyertakan awalan browser yang sebenarnya dalam jawaban Anda, dengan awalan bukan awalan terakhir? CSS yang Anda berikan tidak berfungsi.
Serrano

@SerranoPereira memang, terima kasih atas sarannya. Jawaban diubah.
metodologi tindakan

Ini harus menjadi jawaban yang benar karena ini adalah cermin sungguhan. Jawaban yang dipilih hanyalah sebuah putaran yang dalam kasus asimetris apapun tidak akan memberikan bayangan cermin.
gregtczap

11
Perhatikan bahwa transformasi CSS tidak bekerja pada elemen inline seperti tag <i> Foundation yang disarankan, kecuali jika Anda juga memberikan display: inline-block.
enigment

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

Kedua parameter tersebut adalah sumbu X, dan sumbu Y, -1 akan menjadi cermin, tetapi Anda dapat menskalakan ke ukuran apa pun yang Anda suka sesuai dengan kebutuhan Anda. Bisa terbalik dan mundur (-1, -1).

Jika Anda tertarik dengan opsi terbaik yang tersedia untuk dukungan lintas browser pada tahun 2011, lihat jawaban lama saya .


21
Secara teknis ini bukan cermin. itu diputar. Jadi itu hanya akan bekerja dengan beberapa jenis elemen
borisrorsvort

4
Saya memiliki beberapa masalah di Chrome sampai saya menambahkan display: inline-block ke span saya (menggunakan font pictos)
Clarence Liu

1
Mengingat bahwa ketika pertanyaan ini diajukan, transformasi browser tidak didukung secara luas, saya berpendapat bahwa ini adalah jawaban yang benar. Faktanya, transformasi tidak didukung hingga IE 9, jadi saya berpendapat bahwa ini MASIH jawaban yang benar, setidaknya untuk beberapa saat lagi.
Chris Sobolewski

Jawaban ini salah, ini bukan cermin. Ini hanya berfungsi dalam satu kasus ini karena simbol yang diberikan dalam contoh asimetris vertikal.
gregtczap

Meskipun ini sendiri berguna, ini bukanlah jawaban untuk pertanyaan yang diajukan. Saya menemukan pertanyaan ini melalui mesin pencari karena saya ingin membalik gambar secara horizontal. Ini tidak simetris seperti gunting OP.
gillytech

61

Cermin nyata:

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


15
Anda harus selalu meletakkan properti yang memenuhi standar (tidak diawali) di urutan terakhir, sehingga ketika standar diadopsi oleh browser, ia akan menggunakan versi berbasis standar dan bukan versi yang diawali (lama, buggier). Dalam hal ini, itu berarti "transform: matrix (-1, 0, 0, 1, 0, 0);" harus menjadi properti terakhir . (
Mengedit

7
Saya tidak tahu apakah ini harus pada jawaban yang benar atau pertanyaan tetapi saya ingin memberi tahu pengguna fontawesome / bootstrap tentang properti fa-flip-horizontaldanfa-flip-vertical
lol

1
Jawaban nyata yang bagus. Namun tampilan: blok; belum tentu dibutuhkan.
Gilly

6
ya ... tampilan: blok; atau diperlukan blok-sebaris
dGo

Ini sangat membantu untuk menjaga orientasi teks yang benar dari bagian belakang sebuah elemen ketika diputar sepanjang sumbu Y. Misalnya:backface-visibility: visible; transform-origin: center center; transform-style: preserve-3d; transform: matrix(-1, 0, 0, 1, 0, 0) rotateY(180deg) ;
parlemen

13

Anda juga dapat menggunakan

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

atau

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

Perhatikan bahwa pengaturan positionke absolutesangat penting! Jika Anda tidak ingin menyetelnya, Anda harus menyetelnya display: inline-block;


8

Saya menyusun solusi ini dengan menjelajahi Internet termasuk

Solusi ini tampaknya berfungsi di semua browser termasuk IE6 +, menggunakan scale(-1,1)(mirror yang tepat) dan properti filter/ yang sesuai -ms-filterbila diperlukan (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

Untuk kompatibilitas lintas browser, buat kelas ini

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

Dan tambahkan ke kelas ikon Anda, yaitu

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

untuk mendapatkan ikon penelusuran dengan pegangan di sebelah kiri


3

Anda dapat menggunakan 'transformasi' untuk mencapai ini. http://jsfiddle.net/aRcQ8/

css:

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

3

Ada juga rotateYuntuk cermin sungguhan:

transform: rotateY(180deg);

Yang, mungkin, lebih jelas dan bisa dimengerti.

EDIT: Sepertinya tidak berfungsi di Opera… sayangnya. Tetapi berfungsi dengan baik di Firefox. Saya kira mungkin diperlukan untuk secara implisit mengatakan bahwa kita melakukan semacam translate3dmungkin? Atau semacam itu.


1
Bagi mereka yang bertanya-tanya, ini adalah transformasi 3D. Saya pikir ini pasti lebih mudah dibaca / dimengerti daripada metode skala dan matriks yang diberikan sebelumnya.
gregtczap

Saya tidak melihat bagaimana rotasi adalah cermin - yang hanya akan tampak demikian dalam satu kasus khusus.
sel tajam

@celsharp itu ada di sumbu Y, jadi Anda melihat gambar / elemen dari belakangnya, jadi, dicerminkan.
jeromej

1

Hanya menambahkan demo kerja untuk flip cermin horizontal dan vertikal.

.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

untuk inilah saya berhasil <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);

hanya perlu tampilan: blok sebaris atau blok untuk memutar. Jadi pada dasarnya jawaban pertama bagus. Tapi -180 tidak berhasil.



0

Satu lagi contoh bagaimana karakter bisa dibalik. Tambahkan awalan vendor jika Anda membutuhkannya, tetapi untuk saat ini semua browser modern mendukung properti transformasi yang tidak diperbaiki. Satu-satunya pengecualian adalah Opera jika mode Opera Mini diaktifkan (~ 3% pengguna dunia).

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



-1

Itu berfungsi dengan baik dengan ikon font seperti 's7 stroke icons' dan 'font-awesome' :

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

Dan kemudian pada elemen target:

<button>
  <span class="s7-back mirror"></span>
  <span>Next</span>
</button>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.