CSS повернуть свойство в IE

Я хочу повернуть DIV в определенной степени. В FF это работает, но в IE я сталкиваюсь с проблемой.

Например, в следующем стиле я могу установить вращение от 1 до 4

 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);

Это означает, что DIV будет повернут на 90 или 180 или 270 или 360 градусов. Но если мне нужно повернуть DIV только на 20 градусов, он больше не работает.

Как я могу решить эту проблему в IE?

7 ответов

Решение

Чтобы повернуть на 45 градусов в IE, вам понадобится следующий код в таблице стилей:

filter: progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476); /* IE6,IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"; /* IE8 */

Вы заметите, что IE8 имеет синтаксис, отличный от IE6/7. Вам нужно предоставить обе строки кода, если вы хотите поддерживать все версии IE.

Ужасные числа есть в радианах; вам нужно будет самостоятельно составить цифры, если вы хотите использовать угол, отличный от 45 градусов (в Интернете есть учебники, если вы их ищете).

Также обратите внимание, что синтаксис IE6 / 7 вызывает проблемы для других браузеров из-за неэкранированного символа двоеточия в строке фильтра, означающего, что это недопустимый CSS. В моих тестах это заставляет Firefox игнорировать весь код CSS после фильтра. Это то, о чем вам нужно знать, так как это может вызвать часы путаницы, если вас поймают на этом. Я решил это, поместив специфичные для IE вещи в отдельную таблицу стилей, которую не загружали другие браузеры.

Все остальные современные браузеры (включая IE9 и IE10 - ура!) Поддерживают CSS3 transform стиль (хотя часто с префиксами поставщиков), так что вы можете использовать следующий код для достижения того же эффекта во всех других браузерах:

-moz-transform: rotate(45deg);  /* FF3.5/3.6 */
-o-transform: rotate(45deg);  /* Opera 10.5 */
-webkit-transform: rotate(45deg);  /* Saf3.1+ */
transform: rotate(45deg);  /* Newer browsers (incl IE9) */

Надеюсь, это поможет.

редактировать

Так как этот ответ все еще набирает голоса, я чувствую, что должен обновить его информацией о библиотеке JavaScript под названием CSS Sandpaper, которая позволяет использовать (почти) стандартный код CSS для вращений даже в более старых версиях IE.

После того, как вы добавили CSS Sandpaper на свой сайт, вы сможете написать следующий код CSS для IE6–8:

-sand-transform: rotate(40deg);

Гораздо проще, чем традиционный filter стиль, который вы обычно должны использовать в IE.

редактировать

Также обратите внимание на дополнительную причуду специально с IE9 (и только IE9), который поддерживает оба стандарта transform и старый стиль IE -ms-filter, Если вы укажете их обоих, это может привести к тому, что IE9 будет полностью запутан и будет отображаться просто сплошной черный ящик там, где был бы элемент. Лучшее решение этого состоит в том, чтобы избежать filter стиль с помощью наждачной бумаги polyfill, упомянутой выше.

Вам нужно будет выполнить матричное преобразование следующим образом:

filter: progid:DXImageTransform.Microsoft.Matrix(
  M11 = COS_THETA,
  M12 = -SIN_THETA,
  M21 = SIN_THETA,
  M22 = COS_THETA,
  sizingMethod = 'auto expand'
);
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(
  M11 = COS_THETA,
  M12 = -SIN_THETA,
  M21 = SIN_THETA,
  M22 = COS_THETA,
  SizingMethod = 'auto expand'
)";

Где COS_THETA и SIN_THETA - это значения косинуса и синуса угла (т.е. 0.70710678 на 45°).

Существует онлайн-инструмент под названием IETransformsTranslator. С помощью этого инструмента вы можете преобразовать матричный фильтр, что работает в IE6,IE7 и IE8. Просто вставьте свои функции преобразования CSS3 (например, rotate(15deg)), и он сделает все остальное. http://www.useragentman.com/IETransformsTranslator/

http://css3please.com/

Прокрутите вниз до ".box_rotate" для префикса Microsoft IE9+. Подобное обсуждение здесь: вращение элемента Div в jQuery

Просто подсказка... подумайте дважды, прежде чем использовать "transform: rotate()" или даже "-ms-transform:rotate()" (IE9) с мобильными телефонами!

Я много дней стучал к стене. У меня есть "кинетическая" система, которая скользит изображения и, поверх него, область команд. Я сделал "трансформацию" на кнопке со стрелкой, чтобы она имитировала наведение вверх и вниз... Я просмотрел более 1000 строк кода целую вечность!!!;-)

Все хорошо, как только я удалил transform: повернуть из CSS. Это немного (не говоря о плохих словах) сложно, как IE справляется с этим, по сравнению с другими браузерами.

Отличный ответ @Spudley! Спасибо, что написали это!

Полезная ссылка для преобразования IE

Этот инструмент преобразует свойства CSS3 Transform (которые используют почти все современные браузеры) в эквивалентный CSS с использованием запатентованной технологии Microsoft Visual Filters.

Для примера IE11 (тип браузера = версия Trident =7.0):

image.style.transform = "rotate(270deg)";
Другие вопросы по тегам