จะมีการเปลี่ยน CSS หลายรายการในองค์ประกอบได้อย่างไร


327

เป็นคำถามที่ค่อนข้างตรงไปตรงมา แต่ฉันไม่สามารถหาเอกสารที่ดีเกี่ยวกับคุณสมบัติการเปลี่ยน CSS ได้ นี่คือตัวอย่าง 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);
}

อย่างที่คุณเห็นคุณสมบัติการเปลี่ยนแปลงกำลังเขียนทับกัน เงาของข้อความจะเคลื่อนไหว แต่ไม่ใช่สี ฉันจะทำให้ทั้งคู่เคลื่อนไหวพร้อมกันได้อย่างไร ขอบคุณสำหรับคำตอบใด ๆ


อย่าลืมว่าtransition: allเป็นรถสำหรับซาฟารี / ipad: joelglovier.com/writing/ …
OğuzhanKahyaoğlu

คำตอบ:


583

คุณสมบัติการเปลี่ยนแปลงถูกคั่นด้วยจุลภาคในเบราว์เซอร์ทั้งหมดที่รองรับการเปลี่ยน:

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

easeเป็นฟังก์ชันกำหนดเวลาเริ่มต้นดังนั้นคุณไม่จำเป็นต้องระบุ หากคุณต้องการจริงๆlinearคุณจะต้องระบุ:

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

สิ่งนี้เริ่มที่จะได้รับซ้ำ ๆ ดังนั้นถ้าคุณกำลังจะใช้เวลาและฟังก์ชั่นการจับเวลาข้ามคุณสมบัติหลาย ๆ อย่างดีที่สุดที่จะไปข้างหน้าและใช้transition-*คุณสมบัติต่างๆแทนการจดชวเลข:

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

11
ฉันสมมติว่าการแปลงเป็นห่วงโซ่ที่ลำดับมีความสำคัญดังนั้นไวยากรณ์จึงรู้สึกดีถ้าคุณคุ้นเคยกับการผูกมัดการทำงานในขณะที่การเปลี่ยนแปลงจำเป็นต้องมีรายการองค์ประกอบอิสระทั้งหมดที่ไม่มีการเรียงลำดับดังนั้นจุลภาคจึงเหมาะสม
mirichan

1
ตามความคิดเห็นทั่วไปเกี่ยวกับการเปลี่ยนใน CSS เราควรจำไว้ว่าการมีหลายคำนิยามการเปลี่ยนแปลงหนึ่งคำหลังจากนั้นจะไม่ทำงานและเพื่อให้บรรลุว่าสิ่งเหล่านี้ต้องอยู่ในคำจำกัดความเดียวกัน (เช่นเดียวกับ SA ที่นี่) โดยกฎพื้นฐานของ CSS จะใช้กฎ "ล่าสุด" ดังนั้นหากมีคำจำกัดความหลายคำในบรรทัดแยกกันเฉพาะคำจำกัดความสุดท้ายเท่านั้นที่จะถูกนำไปใช้ FYI
TheCuBeMan

37

คุณสามารถใช้:

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

44
คุณสามารถลบ 'ทั้งหมด' ตามที่เป็นค่าเริ่มต้นเว้นแต่จะระบุไว้เป็นอย่างอื่น
joshnh

13
+1 สำหรับจุดที่ยอดเยี่ยม แต่ฉันคิดว่าเป็นประโยชน์อย่างชัดเจนที่จะเก็บไว้ที่นั่นโดยเฉพาะอย่างยิ่งสำหรับความสอดคล้องและความเข้าใจในทีม
XML

4
ระวังสิ่งนี้! หากการพัฒนาสำหรับโทรศัพท์มือถือรวมกับองค์ประกอบที่เร่งด้วยฮาร์ดแวร์ทำให้อุปกรณ์ใหม่มีความผิดพลาดและอุปกรณ์เก่าไม่สามารถใช้งานได้
Ilya Karnaukhov

2
ขอบคุณ @ CanerŞahin คุณสามารถให้เอกสารหรือเครื่องมือเปรียบเทียบกับเราที่จะช่วยให้ผู้คนเข้าใจประเด็นนี้ได้หรือไม่? นอกจากนี้คุณเห็นหลักฐานที่แสดงว่า 'ทั้งหมด' แย่กว่าการใช้ตัวระบุใด ๆ เลยหรือไม่
XML

3
@XML วิธีการอธิบายมีสองผลกระทบเชิงลบ 1, เบราว์เซอร์เพิ่มทรัพยากรเพิ่มเติมเนื่องจากการใช้ 'ทั้งหมด' เบราว์เซอร์จะรับฟังอย่างใกล้ชิดกับองค์ประกอบนั้นที่รอการเปลี่ยนแปลงใด ๆ ที่มีประสิทธิภาพน้อยกว่าและสามารถสร้างหน้าเว็บที่ต้องการได้ 2, สามารถสร้างเอฟเฟกต์ที่ไม่คาดคิดได้ในภายหลังหากผู้พัฒนาใส่สีพื้นหลังซึ่งจะถูกเปลี่ยนซึ่งอาจไม่ได้คาดหวังหรือต้องการ
สเตฟานเบิร์ต

29

สิ่งต่อไปนี้จะอนุญาตให้มีการเปลี่ยนหลายครั้งพร้อมกัน:

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

ตัวอย่าง: http://jsbin.com/omogaf/2


24

หากคุณทำให้คุณสมบัติทั้งหมดเป็นภาพเคลื่อนไหวเหมือนกันคุณสามารถตั้งค่าแต่ละรายการแยกกันซึ่งจะทำให้คุณไม่ต้องทำซ้ำรหัส

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

มีอะไรเพิ่มเติมเกี่ยวกับที่นี่: การเปลี่ยน CSS ชวเลขและคุณสมบัติหลายอย่าง?

ฉันจะหลีกเลี่ยงการใช้คุณสมบัติทั้งหมด (การเปลี่ยนแปลงคุณสมบัติจะเขียนทับ 'ทั้งหมด') เนื่องจากคุณสามารถจบลงด้วยพฤติกรรมที่ไม่พึงประสงค์และประสิทธิภาพที่ไม่คาดคิด



1

นี่คือ LESS mixin สำหรับการเปลี่ยนสองคุณสมบัติในครั้งเดียว:

.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 ยิ่งกว่า!
เขียนใหม่

autoprefixer + stylus FTW
Jason Lydon

1

เป็นไปได้ที่จะทำการตั้งค่าช่วงการเปลี่ยนภาพหลายครั้งด้วยค่าที่แตกต่างกันสำหรับฟังก์ชั่นระยะเวลาความล่าช้าและเวลา ในการแยกช่วงการเปลี่ยนภาพที่แตกต่างกันให้ใช้,

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

การอ้างอิง: https://kolosek.com/css-transition/


0

นอกจากนี้ยังเป็นไปได้ที่จะหลีกเลี่ยงการระบุคุณสมบัติทั้งหมด

#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;
 }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.