Metni yansıtmak / ters çevirmek için CSS kullanabilir misiniz?


235

Metni yansıtmak için CSS / CSS3 kullanmak mümkün müdür?

Özellikle, ✂sağa değil sola işaret etmek istediğim “✂” ( ) makas makasım var .


9
Makas görüntüsü herhangi bir nedenden dolayı sizin için işe yaramazsa,% <ve>% ile sahte olduğunu gördüm
Pete Wilson


3
Micheal'ın cevabı daha doğru. Lütfen doğru cevabı güncelleyebilir misiniz? Çünkü doğru olarak işaretlediğiniz cevap ayna değil 180 derece dönüyor.
Sanket Sahu

@PeteWilson,? So karakter çok yaygın mı? Ne için kullanılır?
Pacerier

4
Emoji uygulamasına bağlı olarak rotasyonun farklı olduğunu unutmayın. Elma emoji set aşağı dönük.
Akkumulator

Yanıtlar:


411

Bunu başarmak için CSS dönüşümlerini kullanabilirsiniz. Yatay bir çevirme div'in aşağıdaki gibi ölçeklenmesini içerir:

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

Ve dikey bir çevirme div'i şu şekilde ölçeklendirmeyi içerir:

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


4
Bu doğru cevap olmalı! (dikey eksen boyunca aynalar, yatay eksen için ölçek (1, -1))
Adrian tarafından tasarlandı

Kesinlikle standartlara uygun cevap, ne yazık ki bunun henüz tüm kullanım durumları için işe yaradığı bir dünyada yaşamıyoruz.
Chris Sobolewski

Gerçek tarayıcı öneklerini cevabınıza öneksiz son eklenmiş olarak ekleyebilir misiniz? Verdiğiniz gibi CSS çalışmıyor.
Serrano

@SerranoPereira gerçekten, öneri için teşekkürler. Yanıt değiştirildi.
methodofaction

11
CSS dönüşümünün, daha sonra display: inline-block vermedikçe Foundation'ın önerilen <i> etiketleri gibi satır içi öğelerinde çalışmadığını unutmayın .
16:54

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

İki parametre X ekseni ve Y ekseni, -1 bir ayna olacaktır, ancak ihtiyaçlarınıza uygun herhangi bir boyuta ölçeklendirebilirsiniz. Baş aşağı ve geri olur (-1, -1).

2011'de tarayıcılar arası destek için mevcut en iyi seçenekle ilgileniyorsanız, daha eski cevabımı inceleyin .


21
Teknik olarak bu bir ayna değil. döndürülmüş. Bu yüzden sadece bazı elemanlarla çalışır
borisrorsvort

4
Görüntülü reklam ekleyene kadar Chrome'da bazı sorunlar yaşadım: yayılımıma satır içi blok (pictos yazı tiplerini kullanarak)
Clarence Liu

1
Bu soru sorulduğunda, tarayıcı dönüşümlerinin geniş ölçüde desteklenmediği göz önüne alındığında, bunun doğru cevap olduğunu iddia ediyorum. Aslında dönüşümler IE 9'a kadar desteklenmiyor, bu yüzden bunun en az biraz daha uzun bir süre STILL için doğru cevap olduğunu iddia ediyorum.
Chris Sobolewski

Bu cevap yanlış, bir ayna değil. Sadece bu durumda çalışır, çünkü örnekte verilen sembol dikey olarak asimetriktir.
gregtczap

Bu kendi başına faydalı olsa da, sorulan sorunun cevabı değildir. Bu soruyu bir arama motoru aracılığıyla buldum çünkü bir resmi yatay olarak çevirmek istedim. OP makasları gibi simetrik değil.
gillytech

58

Gerçek ayna:

.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
Her zaman standartlara uygun (öneksiz) özelliği en son olarak koymalısınız, böylece standart bir tarayıcı tarafından kabul edildiğinde, (eski, buggier) önekli sürüm yerine standartlara dayalı sürümü kullanır. Bu durumda, "dönüşüm: matris (-1, 0, 0, 1, 0, 0);" son mülk olmalıdır . (Cevabı bunu yansıtacak şekilde
düzenledi

7
Bunun doğru cevapta mı yoksa soruda mı olduğunu bilmiyorum ama fontawesome / bootstrap kullanıcılarının fa-flip-horizontalve fa-flip-verticalözellikleri hakkında bilgi sahibi olmak istiyorum
lol

1
Harika gerçek cevap. Ancak display: block; ille de gerekli değildir.
Gilly

6
evet ... ekran: blok; veya satır içi blok gerekli
dGo

Bu, Y ekseni boyunca döndürüldüğünde bir öğenin arka yüzünün doğru metin yönünü korumak için gerçekten yararlı oldu. Örneğin:backface-visibility: visible; transform-origin: center center; transform-style: preserve-3d; transform: matrix(-1, 0, 0, 1, 0, 0) rotateY(180deg) ;
parlamento

12

Siz de

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

veya

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

Bildirim ayarı o positionkadar absoluteçok önemlidir! Ayarlamazsanız, ayarlamanız gerekir display: inline-block;


7

Bu çözümü, internet de dahil olmak üzere,

Bu çözüm, IE6 + dahil olmak üzere tüm tarayıcılarda scale(-1,1)(uygun bir ayna) ve gerektiğinde uygun filter/ -ms-filterözellikleri (IE6-8) kullanarak çalışıyor gibi görünüyor :

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

Tarayıcılar arası uyumluluk için bu sınıfı oluşturun

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

Ve bunu simge sınıfınıza ekleyin, ör.

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

soldaki tutamaçla bir arama simgesi almak için


3

bunu başarmak için 'dönüşümü' kullanabilirsiniz. http://jsfiddle.net/aRcQ8/

css:

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

3

rotateYGerçek bir ayna için de var :

transform: rotateY(180deg);

Belki de daha açık ve anlaşılır.

EDIT: Ama ne yazık ki Opera üzerinde çalışmıyor gibi görünüyor. Ancak Firefox'ta iyi çalışıyor. Sanırım örtük bir şekilde translate3dbelki de bir çeşit iş yaptığımızı söylemek gerekebilir. Ya da böyle bir şey.


1
Bunun bir 3D dönüşümü olduğunu merak edenler için. Daha önce verilen ölçek ve matris yöntemlerinden kesinlikle daha okunabilir / anlaşılır olduğunu düşünüyorum.
gregtczap

Dönüşün nasıl bir ayna olduğunu görmüyorum - bu sadece özel bir durumda öyle görünüyor.
cel sharp

@ celsharp Y eksenindedir, bu yüzden görüntüyü / elemanı arkadan görürsünüz, böylece yansıtılır.
jeromej

1

Yatay ve dikey ayna çevirme için çalışan bir demo ekliyoruz.

.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

bu benim için işe yaradı <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);

sadece ekran gerekir: satır içi blok veya döndürmek için blok. Temel olarak ilk cevap iyidir. Ama -180 işe yaramadı.



0

Karakterin nasıl çevrilebileceğine bir örnek daha. Gerekiyorsa satıcı önekleri ekleyin, ancak şimdilik tüm modern tarayıcılar önceden düzeltilmemiş dönüştürme özelliğini desteklemektedir. Tek istisna Opera Mini modu etkinse Opera'dır (~% 3 dünya kullanıcısı).

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

'S7 kontur simgeleri' ve 'font-awesome' gibi yazı tipi simgeleriyle iyi çalışır :

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

Ve sonra hedef öğede:

<button>
  <span class="s7-back mirror"></span>
  <span>Next</span>
</button>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.