การเปลี่ยนชวเลข CSS ด้วยคุณสมบัติหลายอย่างหรือไม่


519

ฉันดูเหมือนจะไม่พบไวยากรณ์ที่ถูกต้องสำหรับชอร์ตเทตการเปลี่ยน CSS ที่มีคุณสมบัติหลายอย่าง นี่ไม่ได้ทำอะไรเลย:

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

ฉันเพิ่มคลาสการแสดงด้วยจาวาสคริปต์ องค์ประกอบจะสูงขึ้นและมองเห็นได้ แต่ไม่เปลี่ยน ทดสอบใน Chrome, FF และ Safari ล่าสุด

ผมทำอะไรผิดหรือเปล่า?

แก้ไข: เพื่อให้ชัดเจนฉันกำลังมองหาเวอร์ชันย่อเพื่อปรับขนาด CSS ของฉันลง มันป่องพอกับคำนำหน้าผู้ขายทั้งหมด ขยายตัวอย่างรหัสด้วย


2
ตรวจสอบเอกสารนี้ developer.mozilla.org/en/CSS/CSS_transitions
websymphony

3
คุณเปลี่ยนค่าความสูงและความทึบได้จริงหรือไม่? มิฉะนั้นพวกเขาจะไม่เปลี่ยนแปลง
yunzen

ฉันไม่คุ้นเคยกับการเปลี่ยน CSS มากเกินไป - มี.5sค่าสองเท่าหลังจากopacityตั้งใจหรือไม่
BoltClock

เอกสารไม่ได้ให้ตัวอย่างสำหรับการใช้เวอร์ชันชวเลขกับคุณสมบัติหลาย ๆ ความสูงเปลี่ยนจาก 0 ถึง 200px, ความทึบจาก 0 เป็น 1 .5 วินาทีที่สองคือความล่าช้าในการเปลี่ยนความทึบ ฉันต้องการองค์ประกอบที่จะเติบโตในระดับสูงและเมื่อเสร็จแล้วก็จางหายไป
Gregory Bolkenstijn

2
อ่าใช่ค่าความล่าช้า
BoltClock

คำตอบ:


752

ไวยากรณ์:

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

โปรดทราบว่าระยะเวลาต้องมาก่อนการหน่วงเวลาหากระบุหลัง

การเปลี่ยนแปลงส่วนบุคคลรวมกันในการประกาศชวเลข:

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

หรือเพียงแค่เปลี่ยนพวกเขาทั้งหมด:

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

นี่คือตัวอย่างที่ตรงไปตรงมา นี่เป็นอีกหนึ่งที่มีคุณสมบัติความล่าช้า


แก้ไข:transitionระบุไว้ก่อนหน้านี้ที่นี่มีความสามารถและเป็นที่รู้จักในประเด็นที่เกี่ยวข้องกับ นำออกเพื่อความสะดวกในการอ่าน

ด้านล่างบรรทัด: เพียงใช้มัน ธรรมชาติของคุณสมบัตินี้ไม่ทำลายสำหรับแอพพลิเคชั่นทั้งหมด

หากคุณยังต้องการความมั่นใจโปรดดูที่http://caniuse.com/css-transitions


1
คุณเคยลองสิ่งนี้หรือไม่? มันไม่ทำงานสำหรับฉัน ฉันยังไม่สามารถใช้คุณสมบัติทั้งหมดได้เนื่องจากฉันมีความล่าช้าในคุณสมบัติที่สอง
Gregory Bolkenstijn

3
มีประสิทธิภาพ / หน่วยความจำ / ความหมายอื่น ๆ ที่ใช้allแทนรายการคุณสมบัติเฉพาะหรือไม่ เช่นถ้าฉันวางแผนที่จะเปลี่ยนbackgroundและใช้colorเท่านั้น - ฉันควรระบุทั้งสองอย่างหรือดีกว่าใช้allหรือไม่ นอกจากนี้ - เนื่องจาก IE6-9 ไม่รองรับการเปลี่ยนและ IE10 สนับสนุนการไม่ได้เตรียมการ - มีข้อเสีย / ข้อเสียรวมถึงms-transition:คำสั่งหรือไม่?
mattstuehler

9
มีผลกระทบต่อประสิทธิภาพอย่างแน่นอนเมื่อเปลี่ยนคุณสมบัติทั้งหมดแทนที่จะเป็นเพียงคุณสมบัติที่คุณต้องการ มันอาจทำให้เกิดความเสียหายร้ายแรงหากคุณมีองค์ประกอบหลายอย่างเปลี่ยนคุณสมบัติทั้งหมดไปพร้อม ๆ กัน เกี่ยวกับms-transitionผมไม่ทราบว่าด้วยเหตุผลใด ๆ ในขณะนี้ว่า IE10 จะออกทำไมทุกคนจะยังคงใช้แทนมาตรฐานms-transition transitionมันจะไม่ทำให้เกิดปัญหาใด ๆ ที่จะมีทั้งสองอย่าง แต่โดยเฉพาะอย่างยิ่งในสไตล์ชีทการเปลี่ยนแปลงที่หนักหน่วงให้ขยาย CSS ของคุณ ที่สำคัญขนาดไฟล์จะเป็นที่นิยม
Rémi Breton

3
ฉันมีปัญหาเดียวกันและปรากฏว่าการใช้ "การเปลี่ยนแปลง: ความทึบ 1s .5s, ความสูงสูงสุด. 5s 0" ไม่ทำงานในขณะที่ "การเปลี่ยนแปลง: ความทึบแสง 1s .5s, ความสูงสูงสุด 0.5 วินาที 0 วินาที" ครั้งแรกที่ฉันเห็นหน่วยที่จำเป็นสำหรับค่าศูนย์ใน css!
mlarcher

5
เป็นค่าชี้ให้เห็นว่าการใช้ 'ทั้งหมด' ช้ากว่าการระบุคุณสมบัติที่เฉพาะเจาะจง
นาธาน

433

หากคุณมีคุณสมบัติเฉพาะหลายประการที่คุณต้องการเปลี่ยนในลักษณะเดียวกัน (เพราะคุณมีคุณสมบัติบางอย่างที่คุณไม่ต้องการเปลี่ยนกล่าวโดยเฉพาะopacity) ตัวเลือกอื่นคือทำสิ่งนี้ (คำนำหน้าตัดออกเพื่อความกระชับ):

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

การประกาศครั้งที่สองจะแทนที่allในการประกาศชวเลขและข้างบนและทำให้รหัสสั้นกระชับ (บางครั้ง) มากกว่า

/* 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>

การสาธิต


4
สิ่งนี้มีประโยชน์! ไม่ใช่เพียงเพราะการtransition-propertyแทนที่ แต่ยังเป็นเพราะตัวอย่างเช่นtransition-delayจะต้องมีการระบุหลังจากชวเลข (อย่างน้อยใน webkit) กล่าวอีกนัยหนึ่งชวเลขหมายถึงtransition-delayของ 0 และทำให้ความล่าช้าแบบสแตนด์อโลนก่อนที่ชวเลขจะตั้งค่ากลับเป็น 0
duncanwilcox

@duncanwilcox คุณสามารถทำได้transition: [props] [duration] [easing] [delay] ในทุกเบราว์เซอร์ที่ทันสมัย
Jason

9
ชอบคำตอบนี้มากกว่าคำตอบที่ยอมรับ
Erutan409

3
น่ารัก! ชอบวิธีการ!
wasddd_

36

ฉันทำงานกับสิ่งนี้:

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

นี่คือสิ่งที่ฉันกำลังมองหา - จดชวเลขสำหรับคุณสมบัติหลาย ๆ อย่าง ขอบคุณ!
Adam Moisa

2

ด้วยการหน่วงเวลา. 5s ในการเปลี่ยนคุณสมบัติความทึบองค์ประกอบจะโปร่งใสอย่างสมบูรณ์ (และมองไม่เห็น) ตลอดเวลาที่ความสูงกำลังเปลี่ยน ดังนั้นสิ่งเดียวที่คุณจะเห็นก็คือความทึบเปลี่ยนไป ดังนั้นคุณจะได้รับผลเช่นเดียวกับการออกจากความสูงออกไป:

"การเปลี่ยนแปลง: ความทึบแสง. 5s .5s;"

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


สิ่งนี้ไม่ได้ผลเช่นกันเนื่องจากความสูงจะอยู่ที่ 0 ระหว่างการเปลี่ยนความทึบ
Xesau

0

สิ่งนี้ช่วยให้ฉันเข้าใจ / เพรียวลมเฉพาะสิ่งที่ฉันต้องการในการเคลื่อนไหว

// 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
  }
}

~ สิ่งนี้ใช้สำหรับคุณสมบัติการเปลี่ยนภาพทั้งหมด (ระยะเวลา, ช่วงเปลี่ยนจังหวะ - ฟังก์ชั่น, ฯลฯ ) ภายในคลาส '.base'


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