Неможливо використовувати CSS calc () з transform: translateX в IE


79

Всі,

Я хотів би мати можливість використовувати calc () з transform: translateX у своєму CSS.

Наприклад,

#myDiv {
  -webkit-transform: translateX(calc(100% - 50px));
  -moz-transform: translateX(calc(100% - 50px));
  transform: translateX(calc(100% - 50px));
}

Хоча це чудово працює в Chrome, Safari та Firefox - не працює в IE10 або IE11.

Простий приклад ви можете побачити тут: http://jsfiddle.net/SL2mk/9/

Це неможливо? Це помилка в IE, чи calc()не повинна працювати в цьому контексті?

Для чого це варто - я читав тут, що ви можете "скласти", translateXщоб отримати той самий ефект, і моє тестування, схоже, підтверджує це. Тобто,

#div {
  transform: translateX(calc(100% - 50px));
}

те саме, що:

#div {
  transform: translateX(100%) translateX(-50px);
}

Але я не знаю, чи це найкращий, найнадійніший і надійний спосіб зробити це.

Я також знаю, що це можна використовувати leftзамість translateX, але останній набагато плавніший при використанні з переходами, оскільки, наскільки я розумію, він змушує використовувати графічний процесор для обробки анімації.

Заздалегідь дякую за вашу пораду та розуміння!


5
Це помилка , і це питання - обман . Просто скористайтеся двома translateXs, це найкращий спосіб
Зак Сосьє

2
"Я читав тут, що ви можете" складати "translateX" - Ви врятували мій день.
Elfayer

Відповіді:


194

Це:

transform: translateX(100%) translateX(-50px);

отримує компіляцію під час аналізу, але вираз calc тут:

transform: translateX(calc(100% - 50px));

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

Отже, перший краще в тому сенсі, що а) він працює зараз, б) дієвий і в) він буде працювати в майбутньому, поки специфікація не буде діяти.


Це було чудовим способом вирішити проблему, з якою я стикався з компресором YUI CSS, який неправильно обробляв вкладений вираз calc (). Дякую!
idungotnosn

21
Це, безумовно, найкорисніше, що я за довгий час дізнався про CSS!
ніразул

Ого, це своєрідно! У мене це спрацювало дуже добре. Дякую.
Майкл Джованні Пумо

10
Це безглуздо, але нова інформація для мене тут полягає в тому, що можна використовувати один і той самий тип перетворень кілька разів на елементі! Дякую!
marcias

2
2 translateX виконуються одночасно або один за одним? Тому що, якщо один за одним, властивості переходів також подвоюються, спричиняючи інший ефект, ніж використання calc ().
Лука Регеллін,

10

Я просто використовую їх обох за допомогою селектора браузера -ms-. Це чудово працює.

-ms-transform: translateX(100%) translateX(-50px); /* IE 11 */
transform: translateX(calc(100% - 50px));

1
я підтверджую, що це працює пристойно добре. (я фактично використовую щось на зразок calc(912px - 50vw)запобігання відображенню бічної панелі у верхній частині приладової панелі, якщо ви не наведете на неї курсор.
GottZ,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.