2012-03-01 6 views
56

У меня есть форма, которая работает как страница настроек. Когда элементы формы изменены, они помечены как unsaved и имеют другой цвет границы. Когда форма сохраняется, они помечены как сохраненные с помощью другого цвета границы.Переход CSS при удалении класса

Я хочу, чтобы при сохранении формы граница постепенно уменьшалась.

Заказ будет идти:

<input type='text' class='unsaved' /> Not saved yet, border is yellow 
<input type='text' class='saved' /> Saved, so the border is green 
<input type='text' class='' />  Fade out if coming from class saved 

Если я могу получить переход CSS3 в огнь, когда класс saved удаляется, то она может исчезнуть, и все будет первоклассным. В настоящее время мне приходится вручную анимировать его (используя плагин, конечно), но он выглядит изменчивым, и я хотел бы переместить код в CSS3, чтобы он стал более плавным.

Мне нужно только это, чтобы работать в Chrome и Firefox 4+, хотя другим было бы хорошо.

CSS:

Вот ассоциированная CSS:

.unsaved { 
    border: 3px solid #FFA500; 
    padding: 0; 
} 
.saved { 
    border: 3px solid #0F0; 
    padding: 0; 
} 

Я хотел бы работать в следующем переходе (или нечто подобное):

border-color: rgba(0,0,0,0); 
-webkit-transition: border-color .25s ease-in; 
-moz-transition: border-color .25s ease-in; 
-o-transition: border-color .25s ease-in; 
transition: border-color .25s ease-in; 

Примечание:

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

+5

любые изменения с дисплея: none будет мгновенным –

+0

изменить 'unsaved' на' .unsaved'. Это класс, а не элемент. – hofnarwillie

+0

@hofnarwillie - исправлено; это была просто опечатка – tjameson

ответ

47

Переходы CSS работают, определяя два состояния для объекта с использованием CSS. В вашем случае вы определяете, как выглядит объект, когда он имеет класс "saved", и вы определяете, как он выглядит, когда он не имеет класса "saved" (это обычный вид). Когда вы удаляете класс "saved", он переходит в другое состояние в соответствии с настройками перехода для объекта без класса "saved".

Если для объекта применяются настройки перехода CSS (без класса "saved"), они будут применяться к обоим переходам.

Мы могли бы помочь более конкретно, если бы вы включили все соответствующие CSS, с которыми вы работаете, с предоставленным вами HTML-кодом.

Мое предположение о том, что ваши настройки CSS перехода применяются только к .saved, и поэтому при его удалении не существует элементов управления, чтобы указать параметр CSS. Вы можете добавить еще один класс ".fade", который вы оставляете на объекте все время, и вы можете указать свои настройки перехода CSS в этом классе, чтобы они всегда действовали.

+0

Я добавил свой CSS, как он сейчас стоит, и добавил переход, который я бы хотел. Я не уверен, что добавление класса «.fade» будет работать, потому что у него уже будут другие настройки «сохранены». Я попробую это, хотя и посмотрю, смогу ли я заставить его работать. Благодаря! – tjameson

+0

@tjameson - вам нужен класс на объекте, который идентифицирует его в состоянии после удаления '.saved'. Как бы то ни было, у вас нет переходов, определенных для этого состояния (поэтому у вас их нет). Кроме того, вы не включили CSS, который фактически определяет значимый переход. Вы перечислили некоторые переходы, но не показали, к каким классам они привязаны, и это ключ. Это будет лучше всего работать, если вы поместите его в jsFiddle, чтобы мы могли более легко играть с ним там, и мы действительно можем видеть, что делает и не работает. – jfriend00

+0

действительно полезный ответ, спасибо! –

8

В основном настроить ваш CSS как:

element { 
    border: 1px solid #fff; 
    -webkit-transition: border .5s linear; 
    -moz-transition: border .5s linear; 
} 

element .saved { 
    border: 1px solid transparent; 
} 
1

В моем случае я имел некоторые проблемы с переходом непрозрачности так это один исправить:

#dropdown { 
    transition:.6s opacity; 
} 
#dropdown.ns { 
    opacity:0; 
    transition:.6s all; 
} 
#dropdown.fade { 
    opacity:1; 
} 

Mouse Enter

$('#dropdown').removeClass('ns').addClass('fade'); 

Оставить мышь

$('#dropdown').addClass('ns').removeClass('fade'); 
12

Ответ @ jfriend00 помогает мне понять технику только для анимации удалить класс (не добавить). (transition: 2s linear all;). Это позволяет анимации, когда любой другой класс добавляется или удаляется по этому элементу. Но для отключения анимации при добавлении другого класса (и только для удаления анимации класса) нам нужно добавить transition: none; во второй класс.

Пример

CSS:

.issue { 
    background-color: lightblue; 
    transition: 2s linear all; 
} 

.recently-updated { 
    background-color: yellow; 
    transition: none; 
} 

HTML:

<div class="issue" onclick="addClass()">click me</div> 

JS (только нужно добавить класс):

var timeout = null; 

function addClass() { 
    $('.issue').addClass('recently-updated'); 
    if (timeout) { 
    clearTimeout(timeout); 
    timeout = null; 
    } 
    timeout = setTimeout(function() { 
    $('.issue').removeClass('recently-updated'); 
    }, 1000); 
} 

plunker этого примера.

С помощью этого кода будет удалено только удаление класса recently-updated.

+0

Кратко и хорошо объяснено. Спасибо – oodavid

+0

Вот что я могу ответить великим!Краткое, но точное объяснение, с простым, но исчерпывающим примером кода, ссылкой на рабочий плункер. Не мог просить больше! – FireAphis

Смежные вопросы