Чи можете ви використовувати CSS для дзеркального / гортання тексту?


235

Чи можна використовувати CSS / CSS3 для дзеркального тексту?

Зокрема, у мене є ця ножиця «✂» ( ✂), яку я хотів би відображати вказуючи ліворуч та праворуч.


9
Якщо зображення ножиць з якихось причин у вас не виходить, я бачив, що це підроблене з% <і>%
Піт Вілсон


3
Відповідь Мікеля більш точна. Чи можете ви, будь ласка, оновити правильну відповідь? Тому що відповідь, яку ви позначили як правильну, - це не дзеркальна, а обертальна на 180 градусів.
Санкет Саху

@PeteWilson,? Чи так часто ✂ чар? Для чого це використовується?
Pacerier

4
Майте на увазі, що обертання різниться залежно від реалізації емоджи. На яблуках Емоджи встановлено, що він спрямований вниз.
Аккумулятор

Відповіді:


411

Для цього можна використовувати перетворення CSS. Горизонтальний фліп передбачає масштабування діва таким чином:

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

А вертикальний фліп передбачав би масштабування діва так:

-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
Це має бути правильна відповідь! (дзеркала вздовж вертикальної осі, масштаб (1, -1) для горизонтальної осі)
Дизайн Адріана

Це, звичайно, відповідність стандартам найвищого рівня, на жаль, ми не живемо у світі, де це все ще працює для всіх випадків використання.
Кріс Соболевський

Чи можете ви включити у свою відповідь фактичні префікси веб-переглядача з останнім попереднім префіксом? CSS, як ви його дали, не працює.
Серрано

@SerranoPereira дійсно, дякую за пропозицію. Відповідь змінена.
методофакція

11
Зауважте, що перетворення CSS не працює на вбудованих елементах, таких як запропоновані <i> теги Foundation, якщо ви також не вкажете потім display: inline-block.
загадка

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 буде дзеркалом, але ви можете масштабувати будь-який розмір, який вам подобається, відповідно до ваших потреб. Вгору і назад було б(-1, -1) .

Якщо вас цікавить найкращий варіант, доступний для перехресної підтримки браузера ще в 2011 році, дивіться мою старішу відповідь .


21
Технічно це не дзеркало. його обертається. Тож він працюватиме лише з деякими типами елементів
borisrorsvort

4
У мене були проблеми в Chrome, поки я не додав дисплей: вбудований блок в мій проміжок (використовуючи шрифти pictos)
Clarence Liu

1
Зважаючи на те, що коли це питання було задано, перетворення браузера не отримали широкої підтримки, я б заперечував, що ця відповідь була правильною відповіддю. Насправді перетворення не підтримуються до IE 9, тому я б заперечував, що це ВИНАГИ правильна відповідь, принаймні трохи довше.
Кріс Соболевський

Ця відповідь неправильна, це не дзеркало. Він працює лише в цьому випадку, оскільки символ, наведений у прикладі, є вертикально асиметричним.
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
Ви завжди повинні ставити властивість, сумісну зі стандартами (нефіксованою), останньою, щоб, коли стандарт був прийнятий браузером, він буде використовувати стандартну версію замість (старшої, баггірської) префіксованої версії. У цьому випадку це означає "перетворення: матриця (-1, 0, 0, 1, 0, 0);" має бути останньою власністю. (Відредаговано відповідь, щоб відобразити це.)
Джей Дансанд

7
Я не знаю, чи має це відповідати правильною відповіддю чи питанням, але я хочу повідомити користувачам програми fontawesome / bootstrap про fa-flip-horizontalта про fa-flip-verticalвластивості
lol

1
Чудова реальна відповідь. Однак дисплей: блок; не обов'язково потрібні.
Гіллі

6
так ... дисплей: блок; або потрібен вбудований блок
dGo

Це було дуже корисно для збереження правильної орієнтації тексту задньої поверхні елемента при обертанні по осі 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

ви можете використовувати "перетворення", щоб досягти цього. http://jsfiddle.net/aRcQ8/

css:

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

3

Існує також rotateYсправжнє дзеркальне:

transform: rotateY(180deg);

Що, мабуть, ще більш зрозуміло і зрозуміло.

EDIT: Схоже, він не працює на Opera, але ... на жаль. Але це чудово працює на Firefox. Я думаю, це може зайняти неявне сказання, що ми робимо якесь translate3dможливо? Або щось подібне.


1
Для тих, хто цікавиться, це 3D перетворення. Я думаю, що це, безумовно, читабельніше / зрозуміліше, ніж методи, що даються раніше на шкалі та матриці.
gregtczap

Я не бачу, як обертання - це дзеркало - це могло б бути таким лише в одному спеціальному випадку.
чел гострий

@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
поле-відображення - це властивість лише веб-кайтів. але я не думаю, що в ньому є еквівалент -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» та «font-awesome» :

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

А потім на цільовий елемент:

<button>
  <span class="s7-back mirror"></span>
  <span>Next</span>
</button>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.