Как применить переход CSS3 ко всем свойствам, кроме background-position?


109

Я хотел бы применить переход CSS ко всем свойствам, кроме background-position. Я пытался сделать это так:

.csstransitions a {
    -webkit-transition: all 0.3s ease;                  
    -moz-transition: all 0.3s ease;                 
    -o-transition: all 0.3s ease;   
    -ms-transition: all 0.3s ease;          
    transition: all 0.3s ease;
}

.csstransitions a {
    -webkit-transition: background-position 0s ease 0s;                 
    -moz-transition: background-position 0s ease 0s;                
    -o-transition: background-position 0s ease 0s;  
    -ms-transition: background-position 0s ease 0s;         
    transition: background-position 0s ease 0s;
}

Сначала я установил для всех свойств переход, а затем попытался перезаписать только переход для свойства background-position.

Однако это, похоже, также сбрасывает все другие свойства - так что в основном никаких переходов больше не происходит.

Есть ли способ сделать это, не перечисляя все свойства?


1
Привет, я действительно ищу эту проблему. Вы получили приемлемый ответ?
Milche Patern

Ответы:


144

Вот решение, которое также работает в Firefox:

transition: all 0.3s ease, background-position 1ms;

Я сделал небольшую демонстрацию: http://jsfiddle.net/aWzwh/


3
У 1msменя почему- то не сработало, но сработало 0.
Flimm 01

@Flimm, какой браузер вы используете? А что значит «не сработало», ничего не анимировал?
Феликс Эдельманн

1
Для меня 1msне сработало, но сработало 1ms none! @ericsoco 0msили 0sтоже работает.
BCoder

3
Единицы времени ДОЛЖНЫ иметь единицу. Таким образом, 0 не работает так же, как 4 не будет работать, но 4 будут работать так же, как 0 будут работать.
ESR

2
Я так долго искал это, спасибо, @FelixEdelmann !!
tatsu

17

Надеюсь не опоздать. Это осуществляется одной линией!

-webkit-transition: all 0.2s ease-in-out, width 0, height 0, top 0, left 0;
-moz-transition: all 0.2s ease-in-out, width 0, height 0, top 0, left 0;
-o-transition: all 0.2s ease-in-out, width 0, height 0, top 0, left 0;
transition: all 0.2s ease-in-out, width 0, height 0, top 0, left 0; 

Это работает в Chrome. Вы должны разделить свойства CSS запятой.

Вот рабочий пример: http://jsfiddle.net/H2jet/


6
Я пробую это в Chrome, и, похоже, у меня это не работает. Свойство allперехода, кажется, отменяет все остальные, несмотря ни на что.
animuson

2
Интересный. Думаю, я не тестировал его с другими свойствами. Когда я попробовал, color 0это сработало, но уж точно не работает background-position 0. У background 0меня даже нет результатов ... Вот jsFiddle, который я настроил из меню Gaming.SE. Честно говоря, я даже тестировал только background-positionсначала, потому что это то, что конкретно упоминается в вопросе, и это то, что я пытался изменить сам.
animuson

2
Раньше он работал у меня с хромом. Он по-прежнему работает в IE11, но на этой неделе свойство all переопределяет все, что будет позже.
cirrus

1
Как сказал @cirrus, Chrome больше не соблюдает нулевую продолжительность, но вы можете заставить его работать, давая вместо этого очень короткую продолжительность, например.1ms
GetFree

1
Это работает как в Chrome, так и в Firefox, если указана длительность, отличная от нуля.
Naisheel Verdhan 01

4

Попробуй это...

* {
    transition: all .2s linear;
    -webkit-transition: all .2s linear;
    -moz-transition: all .2s linear;
    -o-transition: all .2s linear;
}
a {
    -webkit-transition: background-position 1ms linear;
    -moz-transition: background-position 1ms linear;
    -o-transition: background-position 1ms linear;
    transition: background-position 1ms linear;
}

"попробуйте это" ответы только на код не самые лучшие. Лучше какое-нибудь объяснение того, что вы делаете.
random_user_name


2

Если кто-то ищет сокращенный способ добавить переход для всех свойств, кроме одного конкретного свойства с задержкой , имейте в виду , что есть различия даже между современными браузерами.

Простая демонстрация ниже показывает разницу. Посмотреть полный код

div:hover {
  width: 500px;
  height: 500px;
  border-radius: 0;
  transition: all 2s, border-radius 2s 4s;
}

Chrome "объединит" две анимации (как я и ожидал), как показано ниже:

введите описание изображения здесь

В то время как Safari «разделяет» это (чего нельзя ожидать):

введите описание изображения здесь

Более совместимый способ - назначить конкретный переход для определенного свойства, если у вас есть задержка для одного из них.


На самом деле. Это критическое понимание. Как ни крути, нужно указывать каждое свойство индивидуально, а не allполезно знать, что это единственный способ получить желаемое поведение в браузерах.
random_user_name 03

1

Пытаться:

-webkit-transition: all .2s linear, background-position 0;

Это сработало для меня с чем-то похожим ..


установка background-position на 0 не = удаление перехода от background-position. Не так ли?
Milche Patern

1
Это никогда не сработает. Повторно определяя свойство перехода впоследствии, вы полностью переопределяете предыдущее свойство перехода, как если бы оно никогда не существовало. Они не консолидируются.
animuson
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.