Tốc ký chuyển tiếp CSS với nhiều thuộc tính?


519

Tôi dường như không thể tìm thấy cú pháp chính xác cho tốc chuyển tiếp CSS với nhiều thuộc tính. Điều này không làm gì cả:

.element {
  -webkit-transition: height .5s, opacity .5s .5s;
     -moz-transition: height .5s, opacity .5s .5s;
      -ms-transition: height .5s, opacity .5s .5s;
          transition: height .5s, opacity .5s .5s;
  height: 0;
  opacity: 0;
  overflow: 0;
}
.element.show {
  height: 200px;
  opacity: 1;
}

Tôi thêm lớp hiển thị với javascript. Các yếu tố trở nên cao hơn và có thể nhìn thấy, nó chỉ không chuyển tiếp. Thử nghiệm trong Chrome, FF và Safari mới nhất.

Tôi đang làm gì sai?

EDIT: Để rõ ràng, tôi đang tìm phiên bản tốc ký để thu nhỏ CSS của tôi. Nó đủ lớn với tất cả các tiền tố của nhà cung cấp. Cũng mở rộng mã ví dụ.



3
Bạn có thực sự thay đổi các giá trị về chiều cao và độ mờ?
Mặt

Tôi không rành về chuyển tiếp CSS - các .5sgiá trị kép sau khi opacitydự định?
BoltClock

Tài liệu này không đưa ra ví dụ cho việc sử dụng phiên bản tốc ký với nhiều thuộc tính. Chiều cao thay đổi từ 0 đến 200px, độ mờ từ 0 đến 1. .5 giây thứ hai là độ trễ khi chuyển đổi độ mờ. Tôi muốn một yếu tố tăng trưởng chiều cao và khi nó kết thúc, hãy làm mờ dần nó đi.
Gregory Bolkenstijn

2
À đúng rồi, giá trị độ trễ.
BoltClock

Câu trả lời:


752

Cú pháp:

transition: <property> || <duration> || <timing-function> || <delay> [, ...];

Lưu ý rằng thời lượng phải đến trước độ trễ, nếu sau này được chỉ định.

Chuyển tiếp cá nhân kết hợp trong tuyên bố tốc ký:

-webkit-transition: height 0.3s ease-out, opacity 0.3s ease 0.5s;
-moz-transition: height 0.3s ease-out, opacity 0.3s ease 0.5s;
-o-transition: height 0.3s ease-out, opacity 0.3s ease 0.5s;
transition: height 0.3s ease-out, opacity 0.3s ease 0.5s;

Hoặc chỉ chuyển đổi tất cả:

-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;

Đây là một ví dụ đơn giản . Đây là một cái khác với tài sản chậm trễ .


Chỉnh sửa: trước đây được liệt kê ở đây là sự tương thích và các vấn đề đã biết liên quan transition. Loại bỏ để dễ đọc.

Dòng dưới cùng: chỉ cần sử dụng nó. Bản chất của tài sản này là không phá vỡ đối với tất cả các ứng dụng và khả năng tương thích hiện cao hơn 94% trên toàn cầu.

Nếu bạn vẫn muốn chắc chắn, hãy tham khảo http://caniuse.com/css-transitions


1
Bạn đã thử điều này? Nó không làm việc cho tôi. Tôi cũng không thể sử dụng tất cả các tài sản vì tôi có một sự chậm trễ trên tài sản thứ hai.
Gregory Bolkenstijn

3
Có bất kỳ hiệu suất / bộ nhớ / ý nghĩa khác để sử dụng allthay vì liệt kê các thuộc tính cụ thể? Ví dụ: nếu tôi dự định chuyển đổi backgroundcolorchỉ - tôi nên chỉ định cả hai hay chỉ sử dụng all? Ngoài ra - do IE6-9 không hỗ trợ chuyển đổi và IE10 hỗ trợ chúng không được chuẩn bị - có bất kỳ nhược điểm / nhược điểm nào trong việc bao gồm các ms-transition:chỉ thị không?
mattstuehler

9
Chắc chắn có một tác động hiệu suất khi chuyển đổi tất cả các thuộc tính thay vì chỉ đơn giản là một trong những bạn cần. Nó có thể gây ra thiệt hại nghiêm trọng nếu bạn có nhiều yếu tố chuyển đổi tất cả các thuộc tính cùng một lúc. Về ms-transition, tôi không biết bất kỳ lý do nào, bây giờ IE10 đã ra mắt, tại sao mọi người vẫn sẽ sử dụng ms-transitionthay vì tiêu chuẩn transition. Nó sẽ không gây ra bất kỳ rắc rối nào khi có cả hai, nhưng nó sẽ, đặc biệt là trên biểu định kiểu nặng chuyển đổi, làm phồng CSS của bạn. Quan trọng hơn, kích thước tập tin cũng sẽ có một hit.
Rémi Breton

3
Tôi có cùng một vấn đề và có vẻ như sử dụng "quá trình chuyển đổi: độ mờ 1s .5s, chiều cao tối đa .5s 0" không hoạt động trong khi "quá trình: độ mờ 1s .5s, chiều cao tối đa .5s 0s" là. Lần đầu tiên tôi thấy một đơn vị cần thiết cho giá trị 0 trong css!
mlarcher

5
Thật đáng để chỉ ra rằng việc sử dụng 'tất cả' chậm hơn so với việc chỉ định các thuộc tính cụ thể.
Nathan

433

Nếu bạn có một số thuộc tính cụ thể mà bạn muốn chuyển đổi theo cùng một cách (vì bạn cũng có một số thuộc tính mà bạn đặc biệt không muốn chuyển đổi, giả sử opacity), một tùy chọn khác là thực hiện một cái gì đó như thế này (tiền tố bỏ qua cho ngắn gọn):

.myclass {
    transition: all 200ms ease;
    transition-property: box-shadow, height, width, background, font-size;
}

Tuyên bố thứ hai ghi đè lên phần allkhai báo tốc ký phía trên nó và làm cho (đôi khi) mã ngắn gọn hơn.

/* prefixes omitted for brevity */
.box {
    height: 100px;
    width: 100px;
    background: red;
    box-shadow: red 0 0 5px 1px;
    transition: all 500ms ease;
    /*note: not transitioning width */
    transition-property: height, background, box-shadow;
}

.box:hover {
  height: 50px;
  width: 50px;
  box-shadow: blue 0 0 10px 3px;
  background: blue;
}
<p>Hover box for demo</p>
<div class="box"></div>

Bản giới thiệu


4
Điều này rất hữu ích! Không chỉ vì transition-propertyghi đè, mà còn vì ví dụ transition-delaycần được chỉ định sau tốc ký (ít nhất là trong webkit). Nói cách khác, tốc ký này hàm ý transition-delay0 và đặt độ trễ độc lập trước khi tốc ký đặt lại về 0.
duncanwilcox

@duncanwilcox bạn có thể làm transition: [props] [duration] [easing] [delay] trong mọi trình duyệt hiện đại
Jason

9
Thích câu trả lời này NHIỀU hơn câu trả lời được chấp nhận.
Erutan409

3
đáng yêu! thực sự thích cách tiếp cận!
wasddd_

36

Tôi làm việc với điều này:

element{
   transition : height 3s ease-out, width 5s ease-in;
}

Đây là những gì tôi đang tìm kiếm - tốc ký cho nhiều thuộc tính. Cảm ơn!
Adam Moisa

2

Bằng cách có độ trễ 0,5 giây khi chuyển đổi thuộc tính độ mờ, phần tử sẽ hoàn toàn trong suốt (và do đó không nhìn thấy được) trong toàn bộ thời gian chiều cao của nó đang chuyển đổi. Vì vậy, điều duy nhất bạn thực sự sẽ thấy là độ mờ thay đổi. Vì vậy, bạn sẽ nhận được hiệu ứng tương tự như để thuộc tính chiều cao ra khỏi quá trình chuyển đổi:

"chuyển tiếp: độ mờ .5s .5s;"

Đó có phải là những gì bạn muốn? Nếu không, và bạn muốn xem quá trình chuyển đổi chiều cao, bạn không thể có độ mờ bằng 0 trong toàn bộ thời gian mà nó đang chuyển đổi.


Điều này cũng không hoạt động, vì chiều cao sẽ ở mức 0 trong quá trình chuyển đổi độ mờ.
Xesau

0

Điều này giúp tôi hiểu / sắp xếp hợp lý, chỉ những gì tôi cần để làm động:

// SCSS - Multiple Animation: Properties | durations | etc.
// on hover, animate div (width/opacity) - from: {0px, 0} to: {100vw, 1}

.base {
  max-width: 0vw;
  opacity: 0;

  transition-property: max-width, opacity; // relative order
  transition-duration: 2s, 4s; // effects relatively ordered animation properties
  transition-delay: 6s; // effects delay of all animation properties
  animation-timing-function: ease;

  &:hover {
    max-width: 100vw;
    opacity: 1;

    transition-duration: 5s; // effects duration of all aniomation properties
    transition-delay: 2s, 7s; // effects relatively ordered animation properties
  }
}

~ Điều này áp dụng cho tất cả các thuộc tính chuyển đổi (thời lượng, chức năng chuyển thời gian, v.v.) trong lớp '.base'


-4

Tôi nghĩ rằng làm việc với điều này:

element{
   transition: all .3s;
   -webkit-transition: all .3s;
   -moz-transition: all .3s;
   -o-transition: all .3s;
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.