เทคนิคการทำ CSS3 Transform,Transition เบื้องต้น สำหรับ CSS Animate Designer มือใหม่

เทคนิคการทำ CSS3 Transform,Transition เบื้องต้น สำหรับ CSS Animate Designer มือใหม่

 ปัจจุบันในระดับบริษัท ห้างร้าน เริ่มมี แผนกเขียน CSS HTML แยกออกจาก Interface Design อื่นๆ แต่สำหรับบางบริษัท ยังทำแบบ All-in-one ก็เป็นอันเข้าใจว่า อาจจะด้วยความเบี้ยน้อยแต่หอยใหญ่ ก็ว่ากันไป

 

มองย้อนกลับไปข้างหลังแล้ว เรามามองโค้งแบบลูกยิงไกลของ โรนัลโด้ บ้าง ว่า ในอนาคตอันใกล้ ใกล้ นี้ ในเรื่องราวของการเขียน CSS HTML มันจะแปลกแปร่งออกไปจากเผ่าพันธุ์เดิมดั้ง ดั่งเคยเป็นมายังไงบ้าง

 

พูดถึงเรื่องของ Browsers แล้ว ถึงแม้ว่า IE ยังครองส่วนแบ่งการตลาดข้างมากเอาไว้ได้ แต่เมื่อมองย้อนไปยัง ตลาดอื่นๆ ไม่ว่าจะ สามารถโฟน หรือ แทบเล็ด นั้น Apple จองเอาไว้แล้ว และตลาดมีท่าจะโตขึ้นเรื่อยๆ ซะด้วย

 

ในฐานะ ที่เรายุ่งเกี่ยวอยู่กับบราวเซอร์ เราจึงเห็น Webkit ซึ่งเป็น ฟันเฟืองหลักของ Browser อย่าง Safari และ Chrome เดินหน้าใส่เกียร์ห้า แทบจะอัพเดทกันเดือนต่อเดือนเลยทีเดียว เพื่อทำให้รองรับคุณสมบัติใหม่ๆ ของ CSS3 และ HTML5 (ขอเกริ่นไว้นิดหนึ่งนะครับ ว่า CSS4 และ HTML6 เริ่มวางแผนพัฒนาแล้ว) ในขณะที่เจ้า ไทรเด้น เพิ่งจะ ทำขอบโค้งมนได้ ใน IE9 ทาง Webkit เขาทำหน้าเว็บกลายร่างเป็นหุ่นยนต์ไปเรียบร้อย

 

อย่าลืมนะครับว่า บางคนเขาเขียนเว็บให้แสดงผลใน iPhone กะ iPad เท่านั้น เขาจะมาสนใจใยดี IE กันทำไมอีก

 

แต่สุดท้ายแล้ว IE ก็คงเดินตามแบบทอดน่องมาทันกันเหมือนเดิม แต่เมื่อไหร่นั้น ก็ค่อยมาว่ากันอีกที

 

CSS3 มี Transform และ Transition เพื่อเอามาทำงานเกี่ยวกับการเคลื่อนไหวโดยเฉพาะ ซึ่งก่อนหน้านี้ เราอาศัย Java script เข้าช่วย ด้วยไลบารี่ของ jQuery แต่ ในอนาคต เราไม่จำเป็นต้องเอา jQuery มาทำการเคลื่อนที่ เคลื่อนไหวให้กับของที่อยู่ในหน้าเว็บอีกแล้ว เอาไปจัดการในเรื่อง ระบบ ข้อมูลโน่นเลยดีกว่า เพราะ CSS3 จะดึงอะไรก็ตามที่เกี่ยวกับ UI ที่ Java script ทำอยู่ออกมาให้หมด ให้สมกับคำว่าเป็นภาษา Presentation อย่างแท้จริง

 

เมื่อเวลานั้นมาถึง สิ่งที่จะตามมาร้อยเปอร์เซนต์ คือ ต้องทำความเข้าใจการเขียนโค้ด CSS ใหม่ ซึ่งมันไม่ใช่แค่แสดงผลถูกต้อง มันต้อง เคลื่อนไหวอย่างถูกต้อง ด้วย

 

เดือนก่อนหน้านี้ ผมลองเล่นเรื่อง Transform และ Transition ตอนนั้นผมยังไม่คิดว่ามันจะไม่เป็นปัญหาของพวกเขียน CSS HTML แบบ อนุรักษ์นิยม แต่ พอมาวันนี้ผมคิดว่า มันจะเป็นปัญหาแน่นอน

 

หลังจากที่เรามี CSS Designer แล้ว อีกไม่นานเกินรอ อาชีพนี้ จะเกิดตำแหน่งงานใหม่มาอีก 1 ตำแหน่งคือ CSS Motion Editor Designer หรือเรียกแบบบ้านๆ ว่า มือตัดต่อภาค CSS การตัดต่องานแบบนี้ ไม่มีเครื่องมือช่วยเหมือนตอนที่เราตัดต่อหนัง ตัดต่อ วิดีโอ เป็นการ ตัดต่อด้วย CSS ล้วนๆ

 

 ไม่ว่าจะช้า หรือเร็ว สุดท้ายแล้ว CSS Designer ส่วนใหญ่ก็คงต้องเดินไปถึงจุดนั้นอยู่ดี จุดนั้นในที่นี้ ผมหมายถึงเรื่องของ CSS3 และการทำ Animation ตามท้องเรื่อง เว้นเสียแต่ว่า “ไม่มีความจำเป็นใดใด” ที่ต้องทำ เอาเป็นว่านำเสนอไว้เผื่อเกิดความจำเป็นก็แล้วกันนะครับ แม้ว่ามันจะ ขาดๆ เกินๆ บ้าๆ บวมๆ ก็ตาม

 

 

คำสั่งพื้นฐานของ Animation ใน CSS3 มีดังนี้

 

animation-name คือ การตั้งชื่อให้กับรูปแบบการแสดงการเคลื่อนไหว

animation-duration คือ ระยะเวลาของการเคลื่อนไหว จาก ต้นทาง ไป ปลายทาง

animation-timing-function คือ รูปแบบการเล่นใน 1 รอบของการเคลื่อนไหวของ keyframe

animation-iteration-count คือ การทำซ้ำ เช่น จะให้ทำกี่รอบ หรือ infinite คือ วนไม่หยุด

animation-direction คือ การสั่งทิศทางการเล่น เช่น จาก 1 ถึง 10 หรือจะให้เล่นถอยหลัง จาก 10 มา 1

animation-delay คือ จะให้เริ่มทำทันที หรือ ดีเลย์ ตามเวลาที่กำหนด เช่น ถ้าเรากดปุ่มแล้วต้องการให้ animation ที่เราสั่งงานเริ่มเล่นเมื่อเวลาผ่านไปหลังจากกดปุ่ม 2 วินาที เราสามารถกำหนดได้ใน animation-delay โดยค่าเริ่มต้นคือ 0 ซึ่งเป็นการสั่งให้เล่นทันที

animation คือ shorthand property หรือการเขียนแบบย่อ โดยการใส่ค่าควรเรียงลำดับจาก || || || || ||

เมื่อเรารู้แล้วว่า คำสั่งของแต่ละอย่างมันคืออะไรบ้าง ต่อไปมาดูการใช้คำสั่งต่างๆ นั้นในตัวอย่างกัน

 

หลักการทำงานของ CSS3 Animations ก็คือ 1. สร้าง Animation name และ 2. Add Keyframe ซึ่งเมื่อเราสร้าง Animation name แล้ว เราสามารถที่จะเพิ่มคำสั่งให้ animation ที่เราสร้างขึ้นมานั้น ทำงานในรูปแบบต่างๆ ด้วยคำสั่งที่เราต้องการ เช่น ในตัวอย่าง

 

.container>div:nth-child(1) {

    -webkit-animation: night 40s linear infinite;/*สำหรับสั่งงาน -Webkit-*/

    animation: night 40s linear  infinite; /*ใช้งานจริง*/

}

 

เพื่อไม่ให้เป็นการสร้างความสับสน ตัวอย่างด้านล่าง ผมจะยกมาเฉพาะ คำสั่งที่มี Prefix -webkit- นะครับ

 

จากคำสั่งด้านบน .container>div:nth-child(1) {...} อ่านว่า : div ที่เป็นลูกคนที่ 1 ของแม่ที่มี class เป็นประเภท container ให้กระทำการ …

 

-webkit-animation: night 40s linear infinite;

การเขียนโค้ด แบบ shorthand ด้านบนนั้น แยกออกมาเป็น แบบเต็มๆ ได้โดยอ้างอิงตามกฎที่ถูกกำหนดมา เป็นไปได้ควรเรียงลำดับจาก || || || || || ถ้าเราไม่มีค่าใด ที่ต้องสั่งเราก็ไม่จำเป็นต้องสั่งเข้ามา

 

ผมเริ่มสั่งงานจาก animation-name = night, animation-duration = 40 วินาที, animation-timing-function = linear, animation-iteration-count = infinite คือ ให้ animation นี้ มีชื่อว่า night ให้แสดงในหนึ่งรอบเป็นเวลา 40 วินาที รูปแบบการเชื่อมต่อระหว่างรอบของ animation นั้นให้เป็นแบบ linear และจำนวนการวนรอบแสดงผลคือ ไม่จำกัด (infinite)

 

ค่าพื้นฐานของคำสั่ง มีดังนี้

 

animation-name

 

การตั้งชื่อให้กับ Animation ตั้งยังไงก็ได้ ให้ดูความเหมาะสมของงานนะครับ

 

animation-duration

 

ระยะเวลาเล่นใน 1 รอบ ให้ใส่เป็นวินาที

 

animation-timing-function

 

คือรูปแบบการเชื่อมต่อของ animation ในแต่ละรอบ

 

ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier

 

ค่าพื้นฐานที่ W3C ให้มาคือ ease

 

animation-iteration-count

 

คือ จำนวนรอบที่ต้องการให้แสดง ให้สั่งโดยการใส่เป็นตัวเลข เช่นอยากให้วน 10 รอบก็ใส่ เลข 10 และถ้าอยากให้วนจนเมากันไปข้างก็ใส่ infinite

 

ค่าพื้นฐานที่ W3C ให้มาคือ 1

 

animation-direction

 

คือการสั่งทิศทางการเคลื่อนไหว มี normal | alternate ซึ่งค่าพื้นฐานคือ normal

 

animation-delay

 

คือ คำสั่งเริ่มการทำงาน หรือจะให้ ดีเลย์ ค่าพื้นฐานคือ เริ่มเลย โดยการสั่งให้สั่งเป็นวินาที

 

การ Add Keyframes ให้กับ Animation

 

เราสามารถที่จะสร้างรูปแบบการเคลื่อนไหวให้แก่ Object ก่อน หรือ สร้าง Keyframes ขึ้นมาก่อนก็ได้ แล้วแต่ความถนัดส่วนบุคคล โดยในที่นี้ ผม add keyframes เข้าไปทีหลัง การเคลื่อนไหวของ ของ แต่ละอย่างนั้น จะเริ่มนับจากจุด เริ่ม ไปยังจุด สิ้นสุด โดยที่เราเป็นคนกำหนดเอง เราสามารถกำหนดว่า เริ่มจาก A ไปยัง B ให้ใช้ A เป็นจุดที่ 0% และ B เป็นจุดที่ 100% ของการเดินทาง โดยในระหว่างทางที่เดินนั้น เราสามารถเพิ่มคำสั่งงาน Animation ได้อีกใน Keyframes นั้นๆ

 

จากโค้ด ตัวอย่าง ที่ผมสั่งงาน Animation named Night

 

@-webkit-keyframes night {

     0%

    {

        background-position: 0px 0;

    }

    50% {

        background-position: -1000px 0;

    }

    100%

    {

        background-position: -2000px 0;

    }

}

 

คือ จุดที่ 0% นั้น ผมให้ background-position: อยู่ที่ตำแหน่ง 0 0; พอไปถึงที่ 50% เปลี่ยนเป็น -1000px 0; คือ พื้นหลังนั้น เดินจากทางขวาย้อนมาทางซ้าย จนถึง 100% ที่ -2000px 0; ปรากฏการณ์นี้คือ พื้นหลัง วิ่งได้

 

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

 

สังเกตได้ว่า ผมเขียน div เอาไว้สองตัว เพื่อสับขาหลอกการแสดงผล ความกว้างของภาพพื้นหลังนั้นคือ 2000px โดยที่ div ทั้งสองตัวนั้น อยู่ นิ่งๆ สิ่งที่วิ่งไม่ใช่ div แต่เป็น พื้นหลัง (background) ต่างหากที่วิ่ง โดยพื้นหลังของทั้งสอง div นั้นมีการเคลื่อนไหวที่ แปรผกผันกัน จึงทำให้การเคลื่อนไหวลงตัวพอดี

 

@-webkit-keyframes night {

     0%

    {

        background-position: 0px 0;

    }

    50% {

        background-position: -1000px 0;

    }

    100%

    {

        background-position: -2000px 0;

    }

}

@-webkit-keyframes night2 {

     0%

    {

        background-position:  2000px 0;

    }

    50% {

        background-position: 1000px 0;

    }

    100%

    {

        background-position: 0px 0;

    }

}

 

ดูเหมือนจะยุ่งยาก นะครับแต่จริงๆ มันง่ายครับ ง่ายกว่าเขียน HTML เยอะเลย

 

 

ขอบคุณเนื้อหา :

 

ไอทีจีเนียส เอ็นจิเนียริ่ง (IT Genius Engineering) ให้บริการด้านไอทีครบวงจร ทั้งงานด้านการอบรม (Training) สัมมนา รับงานเขียนโปรแกรม เว็บไซต์ แอพพลิเคชั่น งานออกแบบกราฟิก และงานด้าน E-Marketing ที่กำลังได้รับความนิยมในปัจจุบัน ทั้ง SEO , PPC , และ Social media marketting

ติดต่อเราเพื่อสอบถามผลิตภัณฑ์ ขอราคา หรือปรึกษาเรื่องไอที ได้เลยค่ะ

Line : @itgenius (มี @ ด้านหน้า) หรือ https://lin.ee/xoFlBFe
Facebook : https://www.facebook.com/itgeniusonline
Tel : 02-570-8449 มือถือ 088-807-9770 และ 092-841-7931
Email : contact@itgenius.co.th
user
โดย Admin ITGenius
เข้าชม 8,500 ครั้ง

คำค้นหา : เทคนิคการทำ CSS3TransformTransitionCSS Animate Designeranimation-directionanimation-delayการเขียนโค้ดการเขียนโค้ด แบบ shorthandAnimation ใน CSS3