Làm thế nào để có nhiều chuyển tiếp CSS trên một phần tử?


327

Đây là một câu hỏi khá đơn giản nhưng tôi không thể tìm thấy tài liệu rất tốt về các thuộc tính chuyển tiếp CSS. Đây là đoạn mã CSS:

    .nav a
{
    text-transform:uppercase;
    text-decoration:none;
    color:#d3d3d3;
    line-height:1.5 em;
    font-size:.8em;
    display:block;
    text-align:center;
    text-shadow: 0 -1.5em 0 rgba(255, 255, 255, 0.15);
    -webkit-transition: color .2s linear;
    -moz-transition: color .2s linear;
    -o-transition: color .2s linear;
    transition: color .2s linear;
    -webkit-transition: text-shadow .2s linear;
    -moz-transition: text-shadow .2s linear;
    -o-transition: text-shadow .2s linear;
    transition: text-shadow .2s linear;
}

.nav a:hover
{
    color:#F7931E;
    text-shadow: 0 1.5em 0 rgba(247, 147, 30, 0.15);
}

Như bạn có thể thấy, các thuộc tính chuyển tiếp được ghi đè lên nhau. Khi nó đứng, bóng văn bản sẽ hoạt hình, nhưng không phải màu sắc. Làm thế nào để tôi có được cả hai để đồng thời sinh động? Cảm ơn cho bất kỳ câu trả lời.


Đừng quên rằng đó transition: alllà lỗi rất lớn đối với safari / ipad: joelglovier.com/wr//
Oğuzhan Kahyaoğlu

Câu trả lời:


583

Thuộc tính chuyển tiếp được phân cách bằng dấu phẩy trong tất cả các trình duyệt hỗ trợ chuyển đổi:

.nav a {
  transition: color .2s, text-shadow .2s;
}

easelà chức năng thời gian mặc định, vì vậy bạn không phải chỉ định nó. Nếu bạn thực sự muốn linear, bạn sẽ cần chỉ định nó:

transition: color .2s linear, text-shadow .2s linear;

Điều này bắt đầu trở nên lặp đi lặp lại, vì vậy nếu bạn sẽ sử dụng cùng thời gian và chức năng thời gian trên nhiều thuộc tính thì tốt nhất nên tiếp tục và sử dụng các transition-*thuộc tính khác nhau thay vì tốc ký:

transition-property: color, text-shadow;
transition-duration: .2s;
transition-timing-function: linear;

11
Tôi giả sử vì biến đổi là một chuỗi trong đó thứ tự quan trọng, vì vậy cú pháp sẽ cảm thấy tốt nếu bạn sử dụng chuỗi chức năng, trong khi quá trình chuyển đổi đòi hỏi một danh sách không có thứ tự các yếu tố hoàn toàn độc lập, vì vậy dấu phẩy là phù hợp
mirichan

1
Như một nhận xét chung về các chuyển đổi trong CSS, người ta nên nhớ rằng việc có nhiều định nghĩa chuyển tiếp lần lượt sẽ không hoạt động và để thực hiện điều đó, chúng phải có cùng định nghĩa (như trong SA ở đây). Theo các quy tắc cơ bản của CSS, quy tắc "mới nhất" được áp dụng, do đó, nếu có nhiều định nghĩa trong các dòng riêng biệt, chỉ định nghĩa cuối cùng sẽ được áp dụng. FYI
TheCuBeMan

37

Bạn cũng có thể chỉ đơn giản là đáng kể với:

.nav a {
    -webkit-transition: all .2s;
}

44
Bạn thực sự có thể xóa 'tất cả' vì đó là mặc định trừ khi có quy định khác.
joshnh

13
+1 cho một điểm xuất sắc, nhưng tôi nghĩ thật hữu ích khi giữ nó ở đó, đặc biệt là sự nhất quán và hiểu biết giữa các đội.
XML

4
Coi chừng này! Nếu phát triển cho điện thoại di động, kết hợp với các yếu tố tăng tốc phần cứng, làm cho các thiết bị mới trở nên rối mắt và các thiết bị cũ không thể sử dụng được.
Ilya Karnaukhov

2
Cảm ơn, @ CanerŞahin. Bạn có thể cho chúng tôi bất kỳ tài liệu hoặc công cụ đo điểm chuẩn nào sẽ giúp mọi người hiểu được điểm này không? Ngoài ra, bạn có thấy bằng chứng cho thấy 'tất cả' tồi tệ hơn việc không sử dụng công cụ xác định nào không?
XML

3
@XML Cách giải thích có hai tác động tiêu cực. 1, Trình duyệt thêm tài nguyên bổ sung do sử dụng 'tất cả'. Trình duyệt sẽ lắng nghe chặt chẽ yếu tố đó để chờ đợi bất kỳ thay đổi nào kém hiệu quả hơn và có thể tạo ra các trang jank. 2, Có thể tạo hiệu ứng không mong muốn nếu nhà phát triển sau đó đặt màu nền sau đó sẽ được chuyển đổi mà có thể không được mong đợi hoặc yêu cầu.
Stefan Burt

29

Một cái gì đó như sau sẽ cho phép nhiều lần chuyển đổi cùng một lúc:

-webkit-transition: color .2s linear, text-shadow .2s linear;
   -moz-transition: color .2s linear, text-shadow .2s linear;
     -o-transition: color .2s linear, text-shadow .2s linear;
        transition: color .2s linear, text-shadow .2s linear;

Ví dụ: http://jsbin.com/omogaf/2


24

Nếu bạn làm cho tất cả các thuộc tính hoạt hình giống nhau, bạn có thể đặt riêng từng thuộc tính sẽ cho phép bạn không lặp lại mã.

 transition: all 2s;
 transition-property: color, text-shadow;

Có nhiều hơn về nó ở đây: tốc ký chuyển tiếp CSS với nhiều thuộc tính?

Tôi sẽ tránh sử dụng tất cả các thuộc tính (thuộc tính chuyển tiếp ghi đè 'tất cả'), vì bạn có thể kết thúc bằng hành vi không mong muốn và các lần truy cập hiệu suất không mong muốn.



1

Đây là một mixin LESS để chuyển đổi hai thuộc tính cùng một lúc:

.transition-two(@transition1, @transition1-duration, @transition2, @transition2-duration) {
 -webkit-transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
    -moz-transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
      -o-transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
          transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
}

autoprefixer thậm chí còn đẹp hơn!
viết lại

autoprefixer + bút stylus FTW.
Jason Lydon

1

Có thể thực hiện nhiều hiệu ứng chuyển tiếp với các giá trị khác nhau cho thời lượng, độ trễ và chức năng thời gian. Để phân chia các chuyển tiếp khác nhau sử dụng,

button{
  transition: background 1s ease-in-out 2s, width 2s linear;
  -webkit-transition: background 1s ease-in-out 2s, width 2s linear; /* Safari */
}

Tham khảo: https://kolosek.com/css-transition/


0

Cũng có thể tránh chỉ định các thuộc tính hoàn toàn.

#box {
  transition: 0.4s;
  position: absolute;
  border: 1px solid darkred;
  bottom: 20px; left: 20px;
  width: 200px; height: 200px;
  opacity: 0;
}

#box.on {
  opacity: 1;
  height: 300px;
  width: 500px;
 }
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.