2012-03-01 73 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將立即 – 2012-07-26 22:05:10

+0

將'unsaved'改爲'.unsaved'。這是一個階級,而不是一個元素。 – hofnarwillie 2013-10-01 16:33:04

+0

@hofnarwillie - fixed;這只是一個錯字 – tjameson 2013-10-01 20:06:48

回答

47

通過使用CSS定義對象的兩個狀態,CSS轉換工作。在你的情況下,你可以定義物體在具有類"saved"時的外觀,並且當它沒有類"saved"(這是正常的樣子)時定義它的外觀。當您刪除類"saved"時,它將根據沒有"saved"類的對象的過渡設置過渡到其他狀態。

如果CSS轉換設置應用於對象(不包含"saved"類),則它們將應用於這兩個轉換。

如果您將所用的所有相關CSS都包含在您提供的HTML中,我們可以提供更具體的幫助。

從我看你的HTML的猜測是,你的過渡CSS設置只適用於.saved,因此當你刪除它時,沒有控件可以指定CSS設置。您可能需要添加另一個類別".fade",您始終可以在對象上留下,並且您可以在該類上指定CSS轉換設置,以便始終有效。

+0

我添加了我的CSS,因爲它目前的狀態,並添加了我想要的轉換。我不確定添加'.fade'類是否會起作用,因爲它已經具有「已保存」的其他設置。儘管如此,我會盡力,看看我是否能夠實現它。謝謝! – tjameson 2012-03-01 01:26:10

+0

@tjameson - 在'.saved'被移除之後,您需要在該對象上標識該對象的類。事實上,您沒有爲該狀態定義的轉換(這就是爲什麼您不能獲得)。此外,您還沒有包含任何實際定義了有意義轉換的CSS。您列出了一些轉換,但未顯示它們所附的哪些類,這是關鍵。如果你把它放在一個jsFiddle中,這會最好,所以我們可以更容易地在那裏玩它,並且我們可以真正看到什麼是和不能工作。 – jfriend00 2012-03-01 01:35:44

+0

真的很有幫助,謝謝! – 2015-10-28 06:40:24

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; 
} 

鼠標進入

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

小鼠假期

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

@ jfriend00的回答有助於我理解僅動畫的技巧刪除類(不是添加)。

「基本」類應具有transition屬性(如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); 
} 

0本例的。

使用此代碼只有刪除recently-updated類將動畫。

+0

簡潔和很好的解釋。謝謝 – oodavid 2016-03-01 08:49:35

+0

這是我可以很好的回答!一個簡短而精確的解釋,用一個簡單但徹底的代碼示例,鏈接到一個工作的重擊者。不能要求更多! – FireAphis 2016-07-10 07:45:29