Перетворення 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.