Vô hiệu hóa / tắt chuyển tiếp CSS3 được kế thừa


117

Vì vậy, tôi có các chuyển đổi css sau đây được gắn vào một phần tử:

a { 
     -webkit-transition:color 0.1s ease-in, background-color 0.1s ease-in ;  
     -moz-transition:color 0.1s ease-in, background-color 0.1s ease-in;  
     -o-transition:color 0.1s ease-in, background-color 0.1s ease-in;  
     transition:color 0.1s ease-in, background-color 0.1s ease-in; 
}

Có cách nào để vô hiệu hóa các chuyển tiếp được kế thừa trên một yếu tố cụ thể không?

a.tags { transition: none; } 

Dường như không làm được việc.

Câu trả lời:


166

Việc sử dụng transition: nonedường như được hỗ trợ (với một điều chỉnh cụ thể cho Opera) được cung cấp HTML sau:

<a href="#" class="transition">Content</a>
<a href="#" class="transition">Content</a>
<a href="#" class="noTransition">Content</a>
<a href="#" class="transition">Content</a>

... và CSS:

a {
    color: #f90;
    -webkit-transition:color 0.8s ease-in, background-color 0.1s ease-in ;  
    -moz-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    -o-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    transition:color 0.8s ease-in, background-color 0.1s ease-in; 
}
a:hover {
    color: #f00;
    -webkit-transition:color 0.8s ease-in, background-color 0.1s ease-in ;  
    -moz-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    -o-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    transition:color 0.8s ease-in, background-color 0.1s ease-in; 
}
a.noTransition {
    -moz-transition: none;
    -webkit-transition: none;
    -o-transition: color 0 ease-in;
    transition: none;
}

Bản demo của Fiddle .

Đã thử nghiệm với Chromium 12, Opera 11.x và Firefox 5 trên Ubuntu 11.04.

Sự thích ứng cụ thể với Opera là việc sử dụng -o-transition: color 0 ease-in;nhắm mục tiêu vào cùng một thuộc tính như được chỉ định trong các transitionquy tắc khác , nhưng đặt thời gian chuyển đổi thành 0, điều này ngăn chặn hiệu quả quá trình chuyển đổi không đáng chú ý. Việc sử dụng a.noTransitionbộ chọn chỉ đơn giản là cung cấp một bộ chọn cụ thể cho các phần tử mà không có chuyển tiếp.


Đã chỉnh sửa để lưu ý rằng câu trả lời của @ Frédéric Hamidi , sử dụngall (ít nhất là cho Opera) ngắn gọn hơn nhiều so với việc liệt kê ra từng tên thuộc tính riêng lẻ mà bạn không muốn chuyển đổi.

Bản cập nhật JS Fiddle đã cập nhật, hiển thị việc sử dụng alltrong Opera :-o-transition: all 0 none , sau khi tự xóa câu trả lời của @ Frédéric .


Ahh, tôi cần thêm các thẻ cụ thể của trình duyệt trước khi chuyển đổi. Xấu, chúc mừng!
Scotty

Cảm ơn cho opera không có thông tin chuyển tiếp.
pedro_sland

5
Opera thực sự nhàm chán với sự khác biệt này
Junior Mayhé

1
tại sao bạn không thể làm một cái gì đó như: quá trình chuyển đổi: màu sắc không, màu nền 0,1s dễ dàng;

26

Nếu bạn muốn vô hiệu hóa một thuộc tính chuyển tiếp, bạn có thể làm:

transition: color 0s;

(vì quá trình chuyển đổi 0 giây giống như không có quá trình chuyển đổi.)


Một stickler hiệu suất có thể vi phạm, nhưng điều này có vẻ hợp pháp để vô hiệu hóa một tài sản duy nhất.
doublejosh

Nó không hoạt động với tôi trong Chrome bây giờ. Điều này chỉ vô hiệu hóa tất cả các chuyển đổi kế thừa.
Đảo ngược

Bạn có thể đưa ra một ví dụ @Inversion
Will Madden

@WillMadden, ở đây jsfiddle.net/312bu8po thử trạng thái ban đầu và sau đó bỏ ghi chú dòng đã chuẩn bị trong css - quá trình chuyển đổi leftsẽ bị xóa.
Đảo ngược

2

Một cách khác để loại bỏ tất cả các chuyển đổi là với unsettừ khóa:

a.tags {
    transition: unset;
}

Trong trường hợp transition, unsettương đương với initial, vì transitionkhông phải là một tài sản được thừa kế:

a.tags {
    transition: initial;
}

Một người đọc biết unsetinitialcó thể nói rằng các giải pháp này là chính xác ngay lập tức, mà không phải suy nghĩ về cú pháp cụ thể của transition.


unset & ban đầu không được hỗ trợ tốt với IE
allenski

caniuse.com/#feat=css-unset-value - Có lẽ tôi sẽ đi với ban đầu nếu bạn cần hỗ trợ IE11.
Nick Middleweek

0

Bạn cũng có thể từ chối tất cả các chuyển đổi bên trong một phần tử có chứa:

CSS:

.noTrans *{
-moz-transition: none;
-webkit-transition: none;
-o-transition: color 0 ease-in;
transition: none;
}

HTML:

<a href="#">Content</a>
<a href="#">Content</a>
<div class="noTrans">
<a href="#">Content</a>
</div>
<a href="#">Content</a>

2
Hmm, tôi có lẽ sẽ không khuyên làm theo cách này. Quy tắc không áp dụng cho yếu tố bạn áp dụng lớp cho, chỉ trẻ em và áp dụng cho mọi trẻ em, ngay cả những trẻ không cần áp dụng quy tắc, điều này có thể dẫn đến các vấn đề về tính cụ thể và khả năng mở rộng hơn nữa.
Scotty

Đây là một giải pháp rất hữu ích đối với tôi gần đây để loại bỏ các chuyển đổi trên toàn cầu khỏi một yếu tố bản đồ của Google, điều này đã làm tăng thêm sự kỳ lạ cho hành vi bản đồ.
freeworlder

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.