Làm cách nào để áp dụng chuyển tiếp CSS3 cho tất cả các thuộc tính ngoại trừ vị trí nền?


108

Tôi muốn áp dụng một quá trình chuyển đổi CSS cho tất cả các thuộc tính ngoài vị trí nền. Tôi đã cố gắng làm theo cách này:

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

Đầu tiên, tôi đặt tất cả các thuộc tính thành chuyển tiếp và sau đó tôi cố gắng ghi đè chỉ chuyển đổi cho thuộc tính vị trí nền.

Tuy nhiên, điều này dường như cũng đặt lại tất cả các thuộc tính khác - vì vậy về cơ bản không có quá trình chuyển đổi nào dường như xảy ra nữa.

Có cách nào để làm điều này mà không cần liệt kê tất cả các thuộc tính không?


1
Xin chào, tôi thực sự đang tìm kiếm vấn đề này. Bạn có nhận được câu trả lời chấp nhận được không?
Milche Patern

Câu trả lời:


143

Đây là một giải pháp cũng hoạt động trên Firefox:

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

Tôi đã tạo một bản demo nhỏ: http://jsfiddle.net/aWzwh/


3
Vì một số lý do 1mskhông làm việc cho tôi, nhưng 0đã làm.
Flimm,

@Flimm, bạn đang sử dụng trình duyệt nào vậy? Và bạn có nghĩa là gì với "không hoạt động", không hoạt ảnh bất cứ điều gì?
Felix Edelmann

1
Đối với tôi 1msđã không làm việc, nhưng 1ms noneđã làm! @ericsoco 0mshoặc 0shoạt động, quá.
BCoder

3
Đơn vị thời gian PHẢI có một đơn vị. Vì vậy, 0 không hoạt động giống như 4 sẽ không hoạt động, nhưng 4s sẽ hoạt động giống như 0 sẽ hoạt động.
ESR

2
Tôi đã tìm kiếm cái này rất lâu rồi, cảm ơn bạn, @FelixEdelmann !!
tatsu

17

Mong là không muộn. Nó được hoàn thành chỉ bằng một dòng!

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

Điều đó hoạt động trên Chrome. Bạn phải phân tách các thuộc tính CSS bằng dấu phẩy.

Đây là một ví dụ hoạt động: http://jsfiddle.net/H2jet/


6
Tôi đang thử điều này trên Chrome và nó có vẻ không hiệu quả với tôi. Thuộc tính allchuyển tiếp dường như ghi đè tất cả các thuộc tính khác bất kể điều gì.
animuson

2
Hấp dẫn. Tôi đoán tôi đã không thử nghiệm nó với các thuộc tính khác. Khi tôi thử color 0nó hoạt động, nhưng nó chắc chắn không hoạt động background-position 0. Thậm chí background 0không tạo ra kết quả nào cho tôi ... Đây là jsFiddle tôi đã thiết lập từ menu Gaming.SE. Thành thật mà nói, tôi thậm chí chỉ thử nghiệm background-positionban đầu vì đó là những gì câu hỏi đề cập cụ thể và là câu hỏi tôi đang cố gắng thay đổi bản thân.
animuson

2
Nó từng hoạt động trên chrome đối với tôi. Nó vẫn hoạt động trong IE11 nhưng kể từ tuần này, tất cả thuộc tính hiện ghi đè bất kỳ thứ gì sau đó trên dòng.
ti

1
Như @cirrus nói, Chrome không tôn vinh một thời gian thứ hai 0 nữa, nhưng bạn có thể làm cho nó hoạt đưa ra một thời gian rất ngắn thay vào đó, giống như.1ms
GetFree

1
Điều này hoạt động trên cả Chrome và Firefox nếu thời lượng khác 0 giây được cung cấp.
Naisheel Verdhan

4

Thử cái này...

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

"thử cái này" câu trả lời chỉ có mã không phải là tốt nhất. Tốt hơn là một số lời giải thích về những gì bạn đang làm.
random_user_name


2

Đối với bất kỳ ai đang tìm kiếm một cách viết tắt, để thêm chuyển tiếp cho tất cả các thuộc tính ngoại trừ một thuộc tính cụ thể có độ trễ , hãy lưu ý rằng có sự khác biệt giữa các trình duyệt hiện đại.

Một bản demo đơn giản dưới đây cho thấy sự khác biệt. Kiểm tra mã đầy đủ

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

Chrome sẽ "kết hợp" hai hoạt ảnh (giống như tôi mong đợi), như bên dưới:

nhập mô tả hình ảnh ở đây

Trong khi Safari "tách" nó (điều này có thể không được mong đợi):

nhập mô tả hình ảnh ở đây

Một cách tương thích hơn là bạn chỉ định quá trình chuyển đổi cụ thể cho thuộc tính cụ thể, nếu bạn có độ trễ cho một trong số chúng.


Thật. Đây là cái nhìn sâu sắc. Vì khập khiễng là phải chỉ định từng thuộc tính riêng lẻ thay vì phải chỉ định all, sẽ hữu ích khi biết rằng đó là cách duy nhất để có được hành vi mong muốn trên các trình duyệt.
random_user_name

1

Thử:

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

Điều này đã làm việc cho tôi về một cái gì đó tương tự ..


sửa vị trí nền thành 0 không phải = để loại bỏ quá trình chuyển đổi từ vị trí nền. Phải không?
Milche Patern

1
Điều này không bao giờ có thể hoạt động. Bằng cách xác định lại thuộc tính chuyển đổi sau đó, bạn hoàn toàn ghi đè thuộc tính chuyển đổi trước đó, như thể nó chưa từng tồn tại. Chúng không được hợp nhất.
animuson
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.