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


109

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

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

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

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

มีวิธีดำเนินการโดยไม่แสดงรายการคุณสมบัติทั้งหมดหรือไม่?


1
สวัสดีฉันกำลังมองหาปัญหานี้ คุณได้รับคำตอบที่ยอมรับได้หรือไม่?
Milche Patern

คำตอบ:


144

นี่คือวิธีแก้ปัญหาที่ใช้ได้กับ Firefox:

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

ฉันทำการสาธิตเล็ก ๆ : http://jsfiddle.net/aWzwh/


3
ด้วยเหตุผลบางอย่าง1msไม่ได้ผลสำหรับฉัน แต่0ก็ทำ
Flimm

@Flimm คุณใช้เบราว์เซอร์อะไร แล้วคุณหมายถึงอะไร "ไม่ทำงาน" ไม่ได้เคลื่อนไหวอะไรเลยเหรอ
Felix Edelmann

1
สำหรับฉัน1msไม่ได้ผล แต่ 1ms noneทำ! @ericsoco 0msหรือ0sทำงานด้วย
BCoder

3
หน่วยเวลาต้องมีหน่วย ดังนั้น 0 จึงไม่ทำงานเหมือนกับ 4 จะไม่ทำงาน แต่ 4s จะทำงานเหมือนกับที่ 0s ทำงาน
ESR

2
ฉันค้นหาสิ่งนี้มานานแล้วขอบคุณ @FelixEdelmann !!
tatsu

17

หวังว่าจะไม่สายนะ ทำได้โดยใช้เพียงบรรทัดเดียว!

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

ที่ทำงานบน Chrome คุณต้องแยกคุณสมบัติ CSS ด้วยลูกน้ำ

นี่คือตัวอย่างการทำงาน: http://jsfiddle.net/H2jet/


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

2
น่าสนใจ. ฉันเดาว่าฉันไม่ได้ทดสอบกับคุณสมบัติอื่น ๆ เมื่อฉันลองcolor 0ใช้งานได้ แต่มันใช้ไม่ได้กับbackground-position 0. แม้background 0จะไม่มีผลลัพธ์สำหรับฉัน ... นี่คือ jsFiddle ที่ฉันปรับแต่งจากเมนู Gaming.SE พูดตามตรงฉันเพิ่งทดสอบbackground-positionในตอนแรกเพราะนั่นคือสิ่งที่คำถามกล่าวถึงโดยเฉพาะและเป็นคำถามที่ฉันพยายามเปลี่ยนแปลงตัวเอง
animuson

2
มันเคยทำงานกับ Chrome สำหรับฉัน ยังคงใช้งานได้ใน IE11 แต่ ณ สัปดาห์นี้คุณสมบัติทั้งหมดจะลบล้างสิ่งใด ๆ ในบรรทัดต่อไป
cirrus

1
ดังที่ @cirrus กล่าวว่า Chrome ไม่ใช้ระยะเวลา 0 วินาทีอีกต่อไป แต่คุณสามารถทำให้มันทำงานได้โดยใช้ระยะเวลาสั้น ๆ แทนเช่น.1ms
GetFree

1
สิ่งนี้ใช้ได้ทั้งบน Chrome และ Firefox หากระบุช่วงเวลาที่ไม่ใช่ศูนย์วินาที
Naisheel Verdhan

4

ลองนี่ ...

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

คำตอบแบบโค้ดเท่านั้นไม่ใช่คำตอบที่ดีที่สุด คำอธิบายที่ดีกว่าคือสิ่งที่คุณกำลังทำ
random_user_name


2

สำหรับใครก็ตามที่มองหาวิธีชวเลขในการเพิ่มการเปลี่ยนแปลงสำหรับคุณสมบัติทั้งหมดยกเว้นคุณสมบัติเฉพาะหนึ่งรายการที่มีความล่าช้าโปรดทราบว่าเบราว์เซอร์สมัยใหม่มีความแตกต่างกัน

การสาธิตง่ายๆด้านล่างแสดงความแตกต่าง ตรวจสอบรหัสแบบเต็ม

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

Chrome จะ "รวม" แอนิเมชั่นทั้งสอง (ซึ่งเป็นไปตามที่ฉันคาดหวังไว้) ดังต่อไปนี้:

ป้อนคำอธิบายภาพที่นี่

ในขณะที่ Safari "แยก" มัน (ซึ่งอาจไม่คาดคิด):

ป้อนคำอธิบายภาพที่นี่

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


แน่นอน. นี่คือความเข้าใจที่สำคัญ ในฐานะที่เป็นคนง่อยจะต้องระบุคุณสมบัติแต่ละรายการทีละรายการแทนที่จะallเป็นประโยชน์ที่จะทราบว่าเป็นวิธีเดียวที่จะได้รับพฤติกรรมที่ต้องการในเบราว์เซอร์
random_user_name

1

ลอง:

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

สิ่งนี้ได้ผลสำหรับฉันในสิ่งที่คล้ายกัน ..


การแก้ไขตำแหน่งพื้นหลังเป็น 0 ไม่ใช่ = เพื่อลบการเปลี่ยนจากตำแหน่งพื้นหลัง ไม่ใช่เหรอ?
Milche Patern

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