พร็อพเพอร์ตี้ transform ช่วยให้คุณใช้การเปลี่ยนรูปแบบหลายรายการตามลำดับที่ระบุได้ แต่การเปลี่ยนแปลงการเปลี่ยนรูปแบบรายการเดียวจะต้องระบุเชนการเปลี่ยนรูปแบบทั้งหมดอีกครั้ง ซึ่งทำให้การสร้างภาพเคลื่อนไหวหรือการเปลี่ยนรูปแบบการเปลี่ยนรูปแบบเดียวเป็นเรื่องยาก
พร็อพเพอร์ตี้การเปลี่ยนรูปแบบ CSS แต่ละรายการ (translate, rotate และ scale) ช่วยให้คุณใช้การเปลี่ยนรูปแบบแยกต่างหากจากพร็อพเพอร์ตี้ transform ได้ วิธีนี้ช่วยให้ลบล้างการเปลี่ยนรูปแบบรายการเดียวได้ง่ายขึ้น เช่น ใน :hover
รายละเอียดการติดตั้งใช้งานที่สำคัญ
ระบบจะใช้พร็อพเพอร์ตี้การเปลี่ยนรูปแบบแต่ละรายการตามลำดับที่กำหนดไว้เสมอ ไม่ว่าจะอยู่ในลำดับใดใน CSS ดังนี้
translaterotatescaletransform(ใช้ล่าสุด)
หากต้องการลำดับที่แตกต่างออกไป (เช่น ปรับขนาดก่อนหมุน) คุณต้องใช้ฟังก์ชันพร็อพเพอร์ตี้ transform ต่อไป
ฟังก์ชันการเปลี่ยนรูปแบบจะไม่ลบล้างพร็อพเพอร์ตี้การเปลี่ยนรูปแบบแต่ละรายการ กล่าวคือ scale: 2; transform: scale(3); จะปรับขนาดเพิ่มขึ้น 2 เท่าก่อน แล้วจึงเพิ่มขึ้นอีก 3 เท่า รวมเป็น 6 เท่า
การป้องกันการเปลี่ยนแปลงที่ไม่คาดคิดในบริบทการซ้อนและบล็อกที่มีอยู่
พร็อพเพอร์ตี้ transform และพร็อพเพอร์ตี้การเปลี่ยนรูปแบบแต่ละรายการจะส่งผลต่อเลย์เอาต์และการแสดงผลของหน้าเว็บ และอาจทำให้เกิดลักษณะการทำงานที่ไม่คาดคิดกับดัชนีลำดับ Z หรือการกำหนดตำแหน่ง Anchor บังคับ: หากองค์ประกอบอาจมีการใช้การเปลี่ยนรูปแบบเป็นส่วนหนึ่งของการเปลี่ยนแปลงสถานะ เช่น :hover หรือการเปลี่ยนภาพหรือภาพเคลื่อนไหว ให้ใช้การเปลี่ยนรูปแบบเอกลักษณ์กับองค์ประกอบพื้นฐาน วิธีนี้ช่วยให้มั่นใจว่าบริบทการซ้อนและการจำกัดขอบเขตขององค์ประกอบจะไม่เปลี่ยนแปลงเมื่อใช้การเปลี่ยนรูปแบบ
.element{
/* MANDATORY: Apply identity transformations for properties that will
change on state changes (like :hover). This prevents unexpected layout
or z-index shifts caused by creating a new stacking context only on hover. */
translate: 0px;
rotate: 0deg;
scale: 1;
}
.element:hover{
translate: 10px 10px;
rotate: 20deg;
scale: 0.8;
}
ภาพเคลื่อนไหวและการเปลี่ยนภาพแบบอิสระ
ประโยชน์หลักคือความสามารถในการกำหนดภาพเคลื่อนไหวหรือการเปลี่ยนภาพที่ทับซ้อนกันซึ่งกำหนดเป้าหมายพร็อพเพอร์ตี้ที่แตกต่างกันโดยไม่ขัดแย้งกัน
.card {
/* Define independent animations that don't overwrite each other */
animation: float 3s infinite ease-in-out;
/* Transition only the scale property for hover states */
transition: scale 0.3s ease;
/* Establish the base scale to prevent a sudden stacking context shift when transitioning on hover. */
scale: 1;
}
.card:hover {
/* Only the scale changes; the 'float' animation (translate) continues uninterrupted */
scale: 1.05;
}
@keyframes float {
0%, 100% { translate: 0 0; }
50% { translate: 0 -10px; }
}
กลยุทธ์สำรอง
สำหรับเบราว์เซอร์ที่ไม่รองรับพร็อพเพอร์ตี้การเปลี่ยนรูปแบบแต่ละรายการ ให้ใช้พร็อพเพอร์ตี้ transform แบบเดิม โปรดทราบว่าวิธีนี้กำหนดให้ต้องประกาศสแต็กการเปลี่ยนรูปแบบทั้งหมดอีกครั้งหากต้องการแก้ไขส่วนหนึ่งในสถานะอื่น
.element {
/* Base transform */
transform: translate(100px, 0) rotate(45deg);
/* Specify the identity for the scale property. */
scale: 1;
}
@supports not (translate: 0px) {
.element:hover {
/* Fallback: Must repeat translate and rotate even if only scale changes */
transform: translate(100px, 0) rotate(45deg) scale(1.1);
}
}
@supports (translate: 0px) {
.element:hover {
/* Modern: Only declare the change */
scale: 1.1;
}
}