Перетворення CSS3 не працює


122

Я намагаюся перетворити елементи меню, обертаючи їх на 10 градусів. Мій CSS працює у Firefox, але мені не вдалося повторити ефект у Chrome та Safari. Я знаю, що IE не підтримує цю властивість CSS3, тому це не проблема.

Я використовував наступний CSS:

li a {
   -webkit-transform:rotate(10deg);
   -moz-transform:rotate(10deg);
   -o-transform:rotate(10deg); 
}

Хто-небудь, будь ласка, підкаже, де я помиляюся?

Дякую.


2
FYI, IE підтримує цю властивість CSS3, вам просто потрібен префікс:-ms-transform:rotate(10deg);
Джошуа Пінтер


2
Оскільки про це ніхто ще не згадував, адже це вже 2016 рік, переконайтеся, що ви розміщуєте нефіксовану версію правила CSS (наприклад transform: rotate(10deg);) під тією, яку попередньо встановлену версію ви вирішите підтримати.
Максиміліан Ламестер

Відповіді:


301

Це лише здобутий здогад, не бачачи решти HTML / CSS:

Ви звернулися display: blockчи display: inline-blockдо li a? Якщо ні, спробуйте.

В іншому випадку спробуйте застосувати до liцього правила перетворення CSS3 .


22
Я тебе люблю! display: inline-blockДопоміг.
Багз Зайчик

2
Пояснення було б корисним :)
scitronboy

56

У веб-браузерах, що базуються на веб-програмах (Safari та Chrome), в інертних -webkit-transform елементах ігнорується. . Встановіть, display: inline-block;щоб це працювало . Для демонстрації / тестування ви також можете використовувати негативний кут або transformation-originщоб текст не повертався з видимої області.


Для мене прекрасно працювали, дякую! Я використовував його на <span> і копіювати </span> для створення символу copyleft.
Елізабет

@Elisabeth Це чудовий додаток. Зауважте, що посилання на юридичні особи повинні бути завершені крапкою з двократкою (як і в <span>&copy;</span>), хоча більшість браузерів надають обидва способи.
фігаг

Ще одне зауваження: якщо ви претендуєте перетворення для стану взаємодії (наприклад, :hoverчи :active) вам потрібно застосувати inline-blockдо елементу в стані по замовчуванням, наприклад, a { display: inline-block; } a:active { transform: translateY(0.125em); }. Застосування лише inline-blockдо стану взаємодії, здається, не працює. Принаймні, у Chrome - це чудово працює у Firefox.
Пол д'Ауст

1
дякую за вказівку на те, що -webkit-transformне працює над вбудованими елементами. На цьому раніше застрягли.
пбоїнов

@phihag Чудовий момент, ти врятував мені кілька головних зачісок! Варто зазначити, що це може призвести до зникнення ваших елементів після запуску анімації.
texelate

21

Оскільки відповідна документація ніхто не посилається:

Модуль трансформації CSS Рівень 1 - Термінологія - трансформований елемент

Елемент, що перетворюється - це елемент однієї з таких категорій:

  • елемент, макет якого керується моделлю CSS box, яка є або блоковим рівнем, або атомним вбудованим елементом , або властивістю відображення обчислює таблицю-рядок, групу рядків таблиці, групу заголовків таблиці, колонтитул таблиці -група, таблиця-комірка або таблиця-підпис
  • елемент у просторі імен SVG і не керується моделлю вікна CSS, яка має атрибути перетворення, 'patternTransform' або gradientTransform.

У вашому випадку <a>елементи inlineза замовчуванням.

Зміна значення displayвластивості inline-blockвідображає елементи як атомні елементи на рівні рівня , і тому елементи стають "перетворюваними" за визначенням.

li a {
   display: inline-block;
   -webkit-transform: rotate(10deg);
   -moz-transform: rotate(10deg);
   -o-transform: rotate(10deg); 
   transform: rotate(10deg);
}

Як було сказано вище, це здається застосовним лише у -webkitбазованих браузерах, оскільки, здається, працює в IE / FF незалежно.


0

Ви спеціально намагаєтесь лише обертати посилання? Тому що робити це на тегах LI, здається, працює нормально.

Відповідно до перетворень Снука, потрібно, щоб уражені елементи були блоковими. У нього також є якийсь код, щоб зробити цю роботу для IE за допомогою фільтрів, якщо ви хочете їх додати (хоча, мабуть, є деякі обмеження у значеннях).


-4

-webkit-transform більше не потрібна

ms вже підтримує обертання ( -ms-transform: rotate(-10deg);)

спробуйте це:

li a {
   ...

    -webkit-transform: rotate(-10deg);
    -moz-transform: rotate(-10deg);
    -o-transform: rotate(-10deg);
    -ms-transform: rotate(-10deg);
    -sand-transform: rotate(10deg);
    display: block;
    position: fixed;
    }

1
Під час своїх тестів сьогодні я помітив, що -webkit-transformвін справді більше не потрібен Chrome. Однак це все-таки було потрібно в Safari 8.
John Slegers

Для чого таке -sand-перетворення? Короткий пошук в Google не виявив нічого.
Піт

google 'CSS Sandpaper', що відповідає питанню та може полегшити роботу. це хак, який реалізує підтримку стандартного перетворення CSS для старих версій IE
Pedro Justo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.