Bạn có thể sử dụng CSS để phản chiếu / lật văn bản không?


235

Có thể sử dụng CSS / CSS3 để phản chiếu văn bản không?

Cụ thể, tôi có chiếc kéo char char ✂ (( ✂) mà tôi muốn hiển thị chỉ trái và không phải.


9
Nếu hình ảnh chiếc kéo vì lý do nào đó không phù hợp với bạn, tôi đã thấy nó bị làm giả với% <và>%
Pete Wilson


3
Câu trả lời của Micheal chính xác hơn. Bạn có thể vui lòng cập nhật câu trả lời chính xác? Bởi vì câu trả lời mà bạn đã đánh dấu là chính xác không phải là phản chiếu mà là xoay 180 độ.
Sanket Sahu

@PeteWilson ,? Là ✂ char rất phổ biến? Nó dùng để làm gì?
Pacerier

4
Xin lưu ý rằng xoay vòng là khác nhau tùy thuộc vào việc thực hiện biểu tượng cảm xúc. Trên biểu tượng cảm xúc Táo đặt nó chỉ xuống.
Akkumulator

Câu trả lời:


411

Bạn có thể sử dụng các phép biến đổi CSS để đạt được điều này. Một lật ngang sẽ liên quan đến việc nhân rộng div như thế này:

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

Và một cú lật dọc sẽ liên quan đến việc nhân rộng div như thế này:

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

BẢN GIỚI THIỆU:

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
Đây phải là câu trả lời chính xác! (gương dọc theo trục dọc, tỷ lệ (1, -1) cho trục hoành)
Thiết kế của Adrian

Đó chắc chắn là câu trả lời tuân thủ các tiêu chuẩn, thật không may, chúng ta không sống trong một thế giới nơi điều này thực sự hoạt động cho tất cả các trường hợp sử dụng.
Chris Sobolewski

Bạn có thể bao gồm các tiền tố trình duyệt thực tế trong câu trả lời của bạn, với tiền tố không có tiền tố cuối cùng không? CSS như bạn đã cho nó không hoạt động.
Serrano

@SerranoPereira thực sự, cảm ơn vì lời đề nghị. Trả lời sửa đổi.
phương pháp của

11
Lưu ý rằng biến đổi CSS không hoạt động trên các thành phần nội tuyến như thẻ <i> được đề xuất của Foundation, trừ khi bạn cũng cung cấp sau đó hiển thị: inline-block.
ban hành

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

Hai tham số là trục X và trục Y, -1 sẽ là một tấm gương, nhưng bạn có thể mở rộng theo bất kỳ kích thước nào bạn muốn phù hợp với nhu cầu của bạn. Lộn ngược và ngược lại sẽ được (-1, -1).

Nếu bạn quan tâm đến tùy chọn tốt nhất có sẵn cho hỗ trợ trình duyệt chéo vào năm 2011, hãy xem câu trả lời cũ hơn của tôi .


21
Về mặt kỹ thuật đây không phải là một tấm gương. nó xoay. Vì vậy, nó sẽ chỉ hoạt động với một số loại yếu tố
borisrorsvort

4
Tôi đã gặp một số vấn đề trong Chrome cho đến khi tôi thêm hiển thị: chặn nội tuyến vào khoảng của tôi (sử dụng phông chữ tượng hình)
Clarence Liu

1
Cho rằng khi câu hỏi này được hỏi, các biến đổi trình duyệt không được hỗ trợ rộng rãi, tôi sẽ cho rằng đây là câu trả lời đúng. Trong thực tế, các biến đổi không được hỗ trợ cho đến IE 9, vì vậy tôi sẽ cho rằng đây là VẪN trả lời đúng, trong ít nhất một thời gian nữa.
Chris Sobolewski

Câu trả lời này là sai, nó không phải là một tấm gương. Nó chỉ hoạt động trong trường hợp này bởi vì biểu tượng được đưa ra trong ví dụ là không đối xứng theo chiều dọc.
gregtczap

Mặc dù bản thân nó rất hữu ích nhưng nó không phải là câu trả lời cho câu hỏi chính xác. Tôi tìm thấy câu hỏi này thông qua một công cụ tìm kiếm vì tôi muốn lật một hình ảnh theo chiều ngang. Nó không đối xứng như kéo OP.
gillytech

58

Gương thật:

.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
Bạn phải luôn đặt thuộc tính tuân thủ tiêu chuẩn (không có tiền tố), để khi tiêu chuẩn được trình duyệt chấp nhận, nó sẽ sử dụng phiên bản dựa trên tiêu chuẩn thay vì phiên bản tiền tố (cũ hơn, buggier). Trong trường hợp này, điều đó có nghĩa là "biến đổi: ma trận (-1, 0, 0, 1, 0, 0);" nên là tài sản cuối cùng (Đã chỉnh sửa câu trả lời để phản ánh điều này.)
Jay Dansand

7
Tôi không biết liệu đây có phải là câu trả lời chính xác hay câu hỏi không nhưng tôi muốn cho người dùng fontawgie / bootstrap biết về fa-flip-horizontalfa-flip-verticalcác thuộc tính
lol

1
Câu trả lời thực sự tuyệt vời. Tuy nhiên hiển thị: khối; không nhất thiết cần thiết
Gilly

6
vâng ... hiển thị: khối; hoặc khối nội tuyến là cần thiết
dGo

Điều này thực sự hữu ích để giữ hướng văn bản chính xác của backface của một phần tử khi được xoay dọc theo trục Y. Ví dụ:backface-visibility: visible; transform-origin: center center; transform-style: preserve-3d; transform: matrix(-1, 0, 0, 1, 0, 0) rotateY(180deg) ;
quốc hội

12

Bạn có thể sử dụng

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

hoặc là

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

Chú ý rằng thiết lập positionđể absolutelà rất quan trọng! Nếu bạn không đặt nó, bạn sẽ cần phải đặt display: inline-block;


7

Tôi đã cùng nhau tìm ra giải pháp này bằng cách truy quét Internet bao gồm cả

Giải pháp này dường như hoạt động trong tất cả các trình duyệt bao gồm IE6 +, sử dụng scale(-1,1)(một máy nhân bản phù hợp) và thích hợp filter/ -ms-filterthuộc tính khi cần thiết (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

Để tương thích trình duyệt chéo, hãy tạo lớp này

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

Và thêm nó vào lớp biểu tượng của bạn, tức là

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

để có được một biểu tượng tìm kiếm với tay cầm bên trái


3

bạn có thể sử dụng 'biến đổi' để đạt được điều này. http://jsfiddle.net/aRcQ8/

css:

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

3

Ngoài ra còn có rotateYmột chiếc gương thật:

transform: rotateY(180deg);

Mà, có lẽ, thậm chí còn rõ ràng và dễ hiểu hơn.

EDIT: Dường như không hoạt động trên Opera mặc dù rất buồn. Nhưng nó hoạt động tốt trên Firefox. Tôi đoán nó có thể được yêu cầu ngầm nói rằng chúng tôi đang làm một số loại translate3dcó lẽ? Hoặc điều tương tự.


1
Đối với những người tự hỏi đây là một chuyển đổi 3D. Tôi nghĩ rằng nó chắc chắn dễ đọc / dễ hiểu hơn so với các phương pháp tỷ lệ và ma trận được đưa ra trước đây.
gregtczap

Tôi không thấy cách xoay là một tấm gương - điều đó sẽ chỉ xuất hiện như vậy trong một trường hợp đặc biệt.
cel sharp

@celsharp nằm trên trục Y, do đó bạn nhìn thấy hình ảnh / thành phần từ mặt sau của nó, do đó, được nhân đôi.
jeromej

1

Chỉ cần thêm một bản demo làm việc cho lật gương ngang và dọc.

.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

đây là những gì làm việc cho tôi <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);

chỉ cần hiển thị: khối nội tuyến hoặc khối để xoay. Vì vậy, về cơ bản câu trả lời đầu tiên là tốt. Nhưng -180 đã không hoạt động.



0

Chỉ một ví dụ nữa làm thế nào nhân vật có thể được lật. Thêm tiền tố của nhà cung cấp nếu bạn cần, nhưng hiện tại tất cả các trình duyệt hiện đại đều hỗ trợ thuộc tính biến đổi chưa được trộn. Ngoại lệ duy nhất là Opera nếu chế độ Opera Mini được bật (~ 3% người dùng thế giới).

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



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.