คุณสามารถใช้ CSS เพื่อสะท้อน / พลิกข้อความได้หรือไม่?


235

เป็นไปได้ที่จะใช้ CSS / CSS3 เพื่อสะท้อนข้อความ

โดยเฉพาะฉันมีกรรไกรนี้ถ่าน“ ✂” ( ✂) ที่ฉันต้องการแสดงให้ชี้ไปทางซ้ายและไม่ถูกต้อง


9
หากภาพกรรไกรด้วยเหตุผลบางอย่างไม่ได้ผลสำหรับคุณฉันเห็นมันแกล้งด้วย% <และ>%
Pete Wilson


3
คำตอบของ Micheal นั้นแม่นยำกว่า คุณช่วยอัพเดทคำตอบที่ถูกต้องได้ไหม? เพราะคำตอบที่คุณทำเครื่องหมายว่าถูกต้องไม่ใช่มิเรอร์ แต่หมุนไป 180 องศา
Sanket Sahu

@PeteWilson ✂ char เป็นเรื่องธรรมดามากเหรอ? มันใช้ทำอะไร?
Pacerier

4
ระวังว่าการหมุนจะแตกต่างกันไปตามอิโมจิ ในแอปเปิ้ลอิโมจิตั้งค่ามันชี้ลง
Akkumulator

คำตอบ:


411

คุณสามารถใช้การแปลง CSS เพื่อให้บรรลุสิ่งนี้ การพลิกแนวนอนจะเป็นการไต่ระดับ div ดังนี้:

-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 เช่นนี้

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

การสาธิต:

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
นี่ควรเป็นคำตอบที่ถูกต้อง! (กระจกตามแนวแกน, ขนาด (1, -1) สำหรับแกนนอน)
ออกแบบโดย Adrian

แน่นอนว่าเป็นคำตอบที่ตรงตามมาตรฐาน แต่น่าเสียดายที่เรายังไม่ได้อยู่ในโลกที่ใช้งานได้จริงในทุกกรณี
Chris Sobolewski

คุณสามารถรวมคำนำหน้าเบราว์เซอร์ที่เกิดขึ้นจริงในคำตอบของคุณด้วยคำนำหน้าไม่ใช่ครั้งสุดท้าย? CSS ตามที่คุณให้ไว้ไม่ทำงาน
Serrano

@SerranoPereira แน่นอนขอบคุณสำหรับคำแนะนำ แก้ไขคำตอบแล้ว
methodofaction

11
โปรดทราบว่าการแปลง CSS ไม่ทำงานกับองค์ประกอบแบบอินไลน์เช่นแท็ก <i> ที่แนะนำของมูลนิธิเว้นแต่คุณจะให้การแสดงผล: 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);

พารามิเตอร์สองตัวคือแกน X และแกน Y, -1 จะเป็นมิเรอร์ แต่คุณสามารถปรับขนาดตามขนาดที่คุณต้องการได้ ลง Upside (-1, -1)และข้างหลังจะเป็น

หากคุณกำลังสนใจในตัวเลือกที่ดีที่สุดสำหรับการข้ามกลับสนับสนุนเบราว์เซอร์ในปี 2011 เห็นคำตอบเก่าของฉัน


21
ในทางเทคนิคนี่ไม่ใช่กระจก มันหมุน ดังนั้นจะใช้งานได้กับองค์ประกอบบางประเภทเท่านั้น
borisrorsvort

4
ฉันมีปัญหาบางอย่างใน Chrome จนกว่าฉันจะเพิ่มจอแสดงผล: แบบอินไลน์บล็อกของฉัน (ใช้แบบอักษรสัญลักษณ์)
Clarence Liu

1
เนื่องจากเมื่อมีการถามคำถามนี้การแปลงเบราว์เซอร์ไม่ได้รับการสนับสนุนอย่างกว้างขวางฉันจะยืนยันว่านี่เป็นคำตอบที่ถูกต้อง ในความเป็นจริงการแปลงไม่ได้รับการสนับสนุนจนกว่า IE 9 ดังนั้นฉันจะยืนยันว่านี่คือคำตอบที่ถูกต้องยังคงเป็นเวลาอย่างน้อยอีกสักครู่
Chris Sobolewski

คำตอบนี้ผิดมันไม่ใช่กระจก ใช้งานได้เฉพาะในกรณีนี้เนื่องจากสัญลักษณ์ที่ให้ไว้ในตัวอย่างมีความไม่สมดุลในแนวตั้ง
gregtczap

แม้ว่ามันจะมีประโยชน์ในตัวมันเองมันไม่ใช่คำตอบของคำถามที่ถูกถาม ฉันพบคำถามนี้ผ่านเครื่องมือค้นหาเพราะฉันต้องการพลิกภาพในแนวนอน มันไม่สมมาตรเหมือนกรรไกรของโอพีเอส
gillytech

58

กระจกจริง:

.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
คุณควรเสมอวางมาตรฐาน (ไม่ใช่นำหน้า) คุณสมบัติที่ผ่านมาเพื่อที่ว่าเมื่อมาตรฐานถูกนำมาใช้เบราว์เซอร์ก็จะใช้รุ่นตามมาตรฐานแทน (เก่า buggier) นำหน้ารุ่น ในกรณีนี้นั่นหมายถึง "transform: matrix (-1, 0, 0, 1, 0, 0);" ควรเป็นคุณสมบัติสุดท้าย (แก้ไขคำตอบเพื่อสะท้อนสิ่งนี้)
Jay Dansand

7
ฉันไม่ทราบว่าควรเป็นคำตอบที่ถูกต้องหรือคำถาม แต่ฉันต้องการให้ผู้ใช้ fontawesome / bootstrap รู้เกี่ยวกับคุณสมบัติfa-flip-horizontalและfa-flip-verticalคุณสมบัติ
lol

1
คำตอบที่ดีจริง อย่างไรก็ตามจอแสดงผล: บล็อก; ไม่จำเป็นต้อง
Gilly

6
ใช่ ... แสดงผล: บล็อก; หรือต้องการบ
ล็อกอินไลน์

สิ่งนี้มีประโยชน์จริง ๆ ในการทำให้การวางแนวข้อความที่ถูกต้องของ backface ขององค์ประกอบเมื่อหมุนไปตามแกน Y ตัวอย่างเช่น:backface-visibility: visible; transform-origin: center center; transform-style: preserve-3d; transform: matrix(-1, 0, 0, 1, 0, 0) rotateY(180deg) ;
รัฐสภา

12

คุณสามารถใช้งานได้เช่นกัน

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

หรือ

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

ขอให้สังเกตว่าการตั้งค่าpositionที่จะabsoluteเป็นสิ่งที่สำคัญมาก! หากคุณไม่ตั้งค่าคุณจะต้องตั้งค่า display: inline-block;


7

ฉันเอาก้อนกรวดมารวมกันเพื่อแก้ไขปัญหานี้โดยการกำจัดสิ่งสกปรกบนอินเทอร์เน็ตรวมถึง

วิธีแก้ปัญหานี้ดูเหมือนว่าจะทำงานในเบราว์เซอร์ทั้งหมดรวมถึง IE6 + โดยใช้scale(-1,1)(มิรเรอร์ที่เหมาะสม) และเหมาะสมfilter/ -ms-filterคุณสมบัติเมื่อจำเป็น (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

สำหรับความเข้ากันได้ของเบราว์เซอร์ข้ามสร้างคลาสนี้

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

และเพิ่มลงในคลาสไอคอนของคุณเช่น

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

เพื่อรับไอคอนค้นหาพร้อมที่จับทางด้านซ้าย



3

นอกจากนี้ยังมีrotateYสำหรับกระจกจริงหนึ่ง:

transform: rotateY(180deg);

ซึ่งบางทีอาจจะชัดเจนและเข้าใจได้มากกว่า

แก้ไข:ดูเหมือนจะไม่ทำงานบน Opera แต่…น่าเศร้า แต่มันใช้งานได้ดีบน Firefox ฉันเดาว่ามันอาจจำเป็นต้องพูดโดยปริยายว่าเรากำลังทำอะไรบางอย่างtranslate3d? หรืออะไรทำนองนั้น


1
สำหรับผู้ที่สงสัยว่านี่คือการแปลง 3D ฉันคิดว่ามันอ่าน / เข้าใจได้ดีกว่าวิธีสเกลและเมทริกซ์ที่ให้ไว้ก่อนหน้านี้
gregtczap

ฉันไม่เห็นว่าการหมุนเป็นกระจก - ซึ่งจะปรากฏเป็นกรณีพิเศษเพียงกรณีเดียวเท่านั้น
cel sharp

@celsharp มันอยู่บนแกน Y ดังนั้นคุณจะเห็นภาพ / องค์ประกอบจากด้านหลังของมันจึงสะท้อน
jeromej

1

เพียงเพิ่มตัวอย่างการทำงานสำหรับการพลิกกระจกแนวนอนและแนวตั้ง

.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

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน <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);

เพียงแค่ต้องการแสดง: อินไลน์บล็อกหรือบล็อกเพื่อหมุน ดังนั้นโดยทั่วไปคำตอบแรกนั้นดี แต่ -180 ไม่ทำงาน


0

คุณสามารถลองใช้กล่องสะท้อนแสง

box-reflect: 20px right;

เห็นCSS เข้ากันได้กับกล่องคุณสมบัติสะท้อน? สำหรับรายละเอียดเพิ่มเติม


1
box-reflect เป็นคุณสมบัติ webkit เท่านั้น แต่ฉันไม่คิดว่ามันมีเทียบเท่า -moz- .. ตรวจสอบการโพสต์นี้ ..
mithunsatheesh

นอกจากนี้ยังควรจะแยก:ไม่ได้;
mithunsatheesh

0

อีกตัวอย่างหนึ่งที่สามารถพลิกตัวละครได้ เพิ่มคำนำหน้าผู้ขายหากคุณต้องการ แต่ตอนนี้เบราว์เซอร์ที่ทันสมัยทั้งหมดรองรับคุณสมบัติการแปลงที่ไม่ได้เตรียมการไว้ล่วงหน้า ข้อยกเว้นเพียงอย่างเดียวคือ Opera หากเปิดใช้งานโหมด Opera Mini (ผู้ใช้ทั่วโลกประมาณ 3%)

<!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 stroke icons'และ'font-Awesome' :

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

แล้วองค์ประกอบเป้าหมาย:

<button>
  <span class="s7-back mirror"></span>
  <span>Next</span>
</button>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.