ปรับขนาดกราฟิก SVG โดยใช้ CSS

เผยแพร่แล้ว: 2023-02-03

เมื่อพูดถึงการสร้างกราฟิกแบบเวคเตอร์สำหรับเว็บ มีรูปแบบเดียวเท่านั้นที่คุณจำเป็นต้องรู้: SVG และแม้ว่าจะสามารถสร้าง กราฟิก SVG อย่างง่าย โดยใช้โค้ดได้ แต่การทำงานกับกราฟิกเหล่านี้โดยใช้ CSS จะง่ายกว่ามาก ในบทความนี้ เราจะมาดูวิธีปรับขนาดกราฟิก SVG โดยใช้ CSS นอกจากนี้ เราจะกล่าวถึงประโยชน์บางประการของการใช้ SVG เหนือรูปแบบอื่นๆ เช่น PNG หรือ JPEG

การใช้กราฟิกแบบเวกเตอร์ (SVG) เพื่อปรับขนาด Amelia Bellamy-Royds แชร์คู่มือการปรับขนาด SVG อันยิ่งใหญ่ แม้ว่าการปรับขนาดกราฟิกแรสเตอร์จะยากกว่า แต่ก็มีศักยภาพที่จะเปิดโอกาสใหม่ๆ ผู้เริ่มต้นอาจพบว่าเป็นการยากที่จะเข้าใจวิธีทำให้พฤติกรรมเป็นไปตามที่พวกเขาต้องการ ภาพอนาสเตอร์ถูกกำหนดอย่างชัดเจนโดยอัตราส่วนกว้างยาว ซึ่งเป็นอัตราส่วนของความกว้างต่อความสูงในข้อความ หากคุณบังคับให้ภาพแรสเตอร์มีขนาดเล็กกว่าความสูงและความกว้างที่แท้จริง ภาพนั้นจะบิดเบี้ยว แต่ถ้าคุณบังคับให้มันใหญ่ขึ้น มันจะบิดเบี้ยว SVG ในบรรทัด จะถูกวาดตามขนาดที่ระบุโดยโค้ด โดยไม่คำนึงถึงขนาดแคนวาสที่ระบุในโค้ด

ViewBox ซึ่งเป็นส่วนสุดท้ายมีหน้าที่ในการออกแบบกราฟิกแบบเวกเตอร์ที่สามารถปรับขนาดได้ องค์ประกอบ viewBox เป็นส่วนประกอบขององค์ประกอบ >svg> ค่าคือรายการของตัวเลขสี่ตัวที่คั่นด้วยช่องว่างหรือเครื่องหมายจุลภาค ซึ่งแต่ละค่าแสดงถึงลักษณะที่แตกต่างกันของค่า x และ y กำหนดระบบพิกัดสำหรับมุมบนซ้ายของวิวพอร์ต จำนวนพิกเซล/พิกัดที่จะปรับขนาดเรียกว่าความสูง หากคุณระบุขนาดที่ไม่สอดคล้องกับอัตราส่วนภาพ รูปภาพจะไม่ถูกยืดหรือบิดเบี้ยว เป็นไปได้ที่จะจัดแนวภาพประเภทอื่นโดยใช้คุณสมบัติ CSS ที่พอดีกับวัตถุใหม่

คุณยังสามารถตั้งค่าการ รักษาRatioAspect=”ไม่มี” เพื่อปรับขนาดภาพของคุณให้มีขนาดเท่ากับภาพแรสเตอร์ คุณสามารถกำหนดความกว้างและความสูงของรูปภาพได้โดยใช้รูปภาพแรสเตอร์ และคุณยังสามารถกำหนดมาตราส่วนอื่นๆ ที่ตรงกับรูปภาพได้อีกด้วย sva สร้างข้อมูลด้วยกราฟิกแบบเวกเตอร์ได้อย่างไร มันซับซ้อนขึ้นเมื่อคุณอายุมากขึ้น หากคุณต้องการปรับขนาดภาพอัตโนมัติในไฟล์ *.img คุณควรพิจารณาใช้ * คุณสามารถเปลี่ยนอัตราส่วนกว้างยาวขององค์ประกอบได้โดยปรับความสูงและระยะขอบโดยใช้คุณสมบัติ CSS ต่างๆ เบราว์เซอร์อื่นๆ จะตั้งค่าขนาดเริ่มต้นของรูปภาพเป็น 300*150 โดยอัตโนมัติสำหรับรูปภาพที่มี viewBoxes โดยไม่ต้องระบุลักษณะการทำงาน

เป็นไปได้ที่จะปรับขนาดภาพให้พอดีกับ viewBox โดยใช้เบราว์เซอร์ Blink/Firefox ล่าสุด เบราว์เซอร์เหล่านี้จะใช้ขนาดเริ่มต้นเดียวกัน ไม่ว่าคุณจะระบุความสูงหรือความกว้างก็ตาม ตัวอย่างเช่น องค์ประกอบคอนเทนเนอร์เป็นวิธีการที่ง่ายที่สุดสำหรับ SVG แบบอินไลน์ เช่นเดียวกับองค์ประกอบอื่นๆ ที่ถูกแทนที่ ความสูงอย่างเป็นทางการจะเป็นศูนย์ในกราฟิกที่เป็น inline และ svg เมื่อค่า preservRatioAspect ถูกตั้งค่าเป็น true กราฟิกจะลดลงเหลืออะไรเลย แทนที่จะยืดกราฟิกของคุณ คุณควรเน้นให้กราฟิกยืดออกไปจนถึงพื้นที่ขยายที่คุณจัดไว้อย่างระมัดระวังสำหรับอัตราส่วนภาพที่เหมาะสม แอตทริบิวต์ของ viewBox และ preservationRatio มีความยืดหยุ่นสูง องค์ประกอบ <svg> ที่ซ้อนกัน ซึ่งแต่ละองค์ประกอบมีแอตทริบิวต์การปรับขนาดของตัวเอง สามารถใช้เพื่อแยกส่วนต่างๆ ของมาตราส่วนกราฟิกของคุณได้ วิธีนี้ช่วยให้คุณสร้างกราฟิกส่วนหัวที่ทั้งยาวและแบนพอที่จะใส่จอไวด์สกรีนได้โดยไม่สูงเกินไป

Svg สามารถปรับขนาดด้วย Css ได้หรือไม่?

Svg สามารถปรับขนาดด้วย Css ได้หรือไม่?
ภาพโดย: thesassway.com

คุณสามารถเปลี่ยนแอตทริบิวต์ความสูงและความกว้างของ *svg* ในไฟล์ *svg* ได้หากต้องการ คุณสามารถใช้กฎนี้เพื่อยกเลิกขนาดและอัตราส่วนกว้างยาวที่คุณระบุในโค้ดของคุณ รวมทั้งทำให้ส่วนอินไลน์ของ svg เป็นความสูงเริ่มต้น

เนื่องจากคุณสมบัติความกว้างและความสูงของ CSS ถูกตั้งค่าเป็นเท็จ คุณจึงปรับขนาด ภาพ SVG ไม่ได้ เนื่องจากไอคอนมีความสูงคงที่ในรูปร่าง การเพิ่มความกว้างของ img จะไม่ทำให้สูงขึ้นหากความสูงถูกจำกัด คุณสมบัติการแปลง CSS ช่วยให้คุณสามารถหมุน ปรับขนาด เอียง และแปลองค์ประกอบ ViewBox=0 0 ฉันไม่แน่ใจว่า [w] [h] ถูกต้องสำหรับ svgs บางตัว ฉันหมายถึง dubble zero ตัวเลขสองหลักแรกกำหนดตำแหน่งของไอคอนภายในกล่อง (ไม่ว่าจะเป็นความกว้างเต็มหรือเต็มความสูง) และไอคอนนั้นเป็นสี่เหลี่ยมจัตุรัสหรือไม่ (เนื่องจากไอคอนสี่เหลี่ยมจะทำงานก็ต่อเมื่อมีความกว้างเต็มหรือเต็มความสูง)

คุณสามารถทำได้หลายวิธี วิธีที่ง่ายที่สุดในการสร้าง SVG ใหม่ ที่มีขนาดคือการส่งออกเป็นรูปภาพ อาจจำเป็นต้องสร้างมิติข้อมูลเฉพาะ ซึ่งอาจใช้เวลานานและอาจไม่ได้รับการยอมรับจากทุกเบราว์เซอร์ หรือคุณสามารถใช้เครื่องมือสร้างการตอบสนอง SVG เครื่องมือนี้สร้างไฟล์ SVG ที่ตอบสนองโดยอัตโนมัติ ขึ้นอยู่กับขนาดของคุณและข้อความค้นหาสื่อใดๆ ที่คุณระบุ โดยไม่คำนึงถึงข้อความค้นหาสื่อของคุณ ตัวเลือกนี้เป็นตัวเลือกที่ดีหากคุณรู้ว่าคุณกำลังทำอะไรอยู่ แต่การนำไปใช้นั้นไม่ใช่เรื่องง่ายเสมอไป อย่างไรก็ตาม ตัวเลือกที่ดีที่สุดคือการใช้แอตทริบิวต์ที่ Illustrator CC รวมไว้ เช่น ความกว้างและความสูง หากคุณระบุขนาดอื่น SVG ของคุณจะตอบสนองในทุกเบราว์เซอร์เสมอ ขั้นตอนนี้ไม่จำเป็นต้องทำบนคอมพิวเตอร์หากคุณรีบร้อนหรือมี SVG จำนวนมาก คุณสามารถเริ่มส่งออกไฟล์ SVG ที่ตอบสนองได้ทันทีจาก Illustrator CC

ฉันจะเปลี่ยนความกว้างและความสูงของรูปภาพ Svg ได้อย่างไร

ฉันจะเปลี่ยนความกว้างและความสูงของรูปภาพ Svg ได้อย่างไร
ภาพโดย: imgur.com

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

มันสนุกมากที่จะเปลี่ยนรูปภาพให้กลายเป็นงานศิลปะชิ้นหนึ่ง มันไม่ง่ายเลย แต่มันก็คุ้มค่า คุณมีสองตัวเลือกในการปรับขนาดรูปภาพ SVG หากคุณต้องการเปลี่ยนขนาดหรือความสูงของไฟล์ XML ให้คลิกที่ป้ายกำกับ XML คุณสามารถเริ่มไฟล์ได้โดยใช้โปรแกรมแก้ไขข้อความ คุณควรเห็นบรรทัดโค้ดด้านล่าง CSS เป็นอีกทางเลือกหนึ่ง อย่างไรก็ตาม การระบุ ”'width” และ ”'height” จะไม่ทำให้คุณเปลี่ยนสถานการณ์

Svg สามารถยืดได้หรือไม่?

เมื่อสร้าง ภาพ SVG ที่มีความยาว คงที่ ภาพนั้นจะถูกประมวลผลในลักษณะเดียวกับภาพแรสเตอร์ที่มีขนาดเท่ากัน หากคุณใช้ CSS เพื่อขยาย SVG ของคุณให้มีอัตราส่วนภาพอื่น ตรวจสอบให้แน่ใจว่าคุณได้รวม

ความสำคัญของกราฟิกแบบเวกเตอร์ที่ปรับขนาดได้

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


รูปภาพ Svg สามารถปรับขนาดได้หรือไม่

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

สามารถครอบตัดและปรับขนาดรูปภาพได้โดยใช้ซอฟต์แวร์การครอบตัด เมื่อใช้ เอกสาร SVG สามารถทำได้ง่ายๆ ข้อมูลโค้ด CSS นี้จะถูกแทนที่ด้วยข้อมูลโค้ด SVG เราจะใช้แอตทริบิวต์ viewBox และ AspectRatio เพื่อครอบตัด ปรับขนาด และจัดตำแหน่งรูปภาพในบทความนี้ คุณจะไม่มีปัญหาในการใช้แอตทริบิวต์เหล่านี้ ดังนั้นอย่ากลัวที่จะลองใช้ คุณต้องการให้ผู้ใช้สามารถอัปโหลดภาพขนาดหรือสัดส่วนภาพใดก็ได้ที่ต้องการ การครอบตัดและปรับขนาดรูปภาพภายในกล่องพอดีทำได้ง่ายขึ้นด้วยคุณสมบัติพอดีวัตถุและตำแหน่งวัตถุ

เบราว์เซอร์ล่าสุดทั้งหมด รวมถึง Microsoft Edge 16 และ Opera Mini รองรับเบราว์เซอร์นี้ แม้ว่าเบราว์เซอร์ตัวหลังจะต้องใช้คำนำหน้า -o- สามารถใช้ PreserveAspectRatio เพื่อแก้ไขตำแหน่ง ขนาด และสเกลของ viewBox ได้ เช่นเดียวกับ object-fit และ object-position ตัวอย่างเช่น สมมติว่าเรามีสี่เหลี่ยมจัตุรัสและช่องมองภาพที่มีอัตราส่วนกว้างยาวต่างกัน (2:1) ในทางกลับกัน มาตราส่วนจะใช้เพื่อรักษาอัตราส่วนกว้างยาวของ viewBox ในขณะที่ลดขนาดลง และเนื้อหาบางส่วนจะถูกลบออก (ด้วยเหตุนี้เอฟเฟกต์การแบ่งส่วน) ประกอบด้วยค่า 19 ค่า ซึ่งรวมถึงไม่มีค่าที่กำหนดว่าแต่ละองค์ประกอบมีพื้นที่ว่างเท่าใด ลักษณะการทำงานเริ่มต้นของเบราว์เซอร์คือการวางตำแหน่งทั้งรูปภาพและ viewBox เพื่อให้มองเห็นได้อย่างสมบูรณ์จากวิวพอร์ตเมื่อแทนที่องค์ประกอบด้วยรูปภาพและจับคู่อัตราส่วนกว้างยาวของรูปภาพนั้นกับ viewBox การเปลี่ยนค่าของ keepAspectRatio สามารถช่วยให้คุณกำหนดได้ว่าส่วนใดของภาพที่เปลี่ยนแปลงขึ้นอยู่กับตำแหน่งและขนาดใน SVG

สามารถใช้ CSS object-fit และ object-position เพื่อครอบตัดและ ปรับขนาดภาพ คุณสามารถใช้คุณสมบัติเหล่านี้ได้เฉพาะใน ME Edge เวอร์ชันล่าสุด เช่นเดียวกับเบราว์เซอร์รุ่นใหม่ๆ เมื่อคุณเพิ่ม >svg ลงในรูปภาพ จะช่วยให้คุณให้การสนับสนุน Internet Explorer 9 ได้

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

Svg Transform=มาตราส่วน

การแปลงมาตราส่วนช่วยให้คุณปรับขนาด องค์ประกอบ SVG ของคุณได้ คุณสามารถเพิ่มหรือลดขนาดขององค์ประกอบได้โดยใช้จำนวนบวกหรือลบ การแปลงมาตราส่วนใช้พารามิเตอร์สองตัว: พิกัด x และพิกัด y

ฟังก์ชันการแปลงสามารถใช้เพื่อจัดการองค์ประกอบ SVG ได้ในลักษณะเดียวกับการแปลง HTML มีบางสิ่งที่ทำงานกับองค์ประกอบ SVG แตกต่างจากที่ทำกับองค์ประกอบ HTML ตัวอย่างเช่น เราไม่สามารถแปลฟังก์ชันโดยใช้ค่า % ได้ (ค่า % จะใช้ไม่ได้กับการแปลง CSS เช่นกัน) และเราไม่สามารถหมุนหรือเอียงมุมโดยใช้องศาได้ จุดที่องค์ประกอบ HTML สร้างพิกัดคือ 50% ของพิกัดองค์ประกอบ ใน กรณี SVG มีจุด 0 0 บนผืนผ้าใบ เมื่อเกิดการแปลงแบบหมุน ปรับขนาด หรือเอียง ผลลัพธ์จะแตกต่างกันตามจุดเริ่มต้นที่ต่างกัน เมื่อใช้การแปลงการแปลกับองค์ประกอบใดองค์ประกอบหนึ่งของเรา การแปลงจะเลื่อนตามไปด้วย

สำหรับองค์ประกอบ 2D เรามีฟังก์ชันการแปลสามแบบ: translateX(tx), translateY(ty) และ translate(tx[, ty) ในแต่ละกรณี ทิศทาง x และ y จะถูกใช้ตามที่ระบุโดยพิกัดระบบขององค์ประกอบ ฟังก์ชันการแปลที่สามจะย้ายองค์ประกอบด้วย tx ตามแกน x และ y การหมุนขององค์ประกอบและระบบพิกัดขององค์ประกอบนั้นเกี่ยวข้องกับองค์ประกอบที่มีจุดกำเนิดคงที่ ค่ามุมสามารถแสดงเป็นองศา (องศา) เรเดียน (เรเดียน) รอบ (เลี้ยว) หรือเกรเดียน (บัณฑิต) เรายังสามารถใช้ค่า calc() (เช่น บางอย่างเช่น 25turn – 30deg) แต่วิธีนี้ใช้ได้กับ Chrome 38/35 เท่านั้นในขณะนี้ ฟังก์ชันการหมุนสามารถทำได้ด้วยค่ามุม calc() ใน Firefox 59 และใหม่กว่า

หากเราตั้งค่านี้ใน CSS เราสามารถใช้พารามิเตอร์ x และ y เพื่อเลียนแบบการใช้งานได้ เมื่อใช้ แอตทริบิวต์การแปลง SVG องค์ประกอบและพิกัดระบบจะหมุนรอบจุดที่ระบุโดยอาร์กิวเมนต์ที่สองและสามของฟังก์ชัน Rotate() ในการย้อนกลับการหมุนในตัวอย่างนี้ ให้หมุน (-45 140 105) แทนที่จะหมุน (-45) เราเพียงแค่ระบุจุดคงที่ที่แตกต่างกันสำหรับการหมุนองค์ประกอบแต่ละครั้ง 90 องศาที่มุมล่างขวาและ 90 องศาที่มุมบนขวา ฉันจะรับเอฟเฟกต์เดียวกันกับการแปลง CSS ได้อย่างไร ในการหมุนครั้งแรก เป็นเรื่องง่ายที่จะตั้งค่าจุดกำเนิดการแปลงเป็นด้านล่างขวา แต่การหมุนครั้งที่สองจะเป็นอย่างไร หากเราล่ามโซ่อีกครั้งหลังจากที่หมุนไปแล้ว 90 องศา มันก็แค่วนซ้ำ

การแปลงมาตราส่วนถูกกำหนดโดยตำแหน่งของจุดกำเนิดของระบบในพิกัด ปัจจัยการปรับสเกลของ (-1, 1) จะขยายองค์ประกอบเมื่อย่อ ในขณะที่ปัจจัยการปรับสเกลที่อยู่นอกช่วง (-1, 1) จะขยายองค์ประกอบเมื่อย่อ Directional scaling ถูกกำหนดให้เป็นความแตกต่างของปัจจัย scaling ระหว่าง 1 และ 2 ด้วยเหตุนี้ เราจึงสามารถกำหนดทรานส์ฟอร์ม-ออริจินอลและเชนลิ่งทรานส์ฟอร์มในทั้งสองกรณี การหลงทางจะบิดเบือนองค์ประกอบในลักษณะเดียวกับการแปลและการหมุน โดยเปลี่ยนสี่เหลี่ยมเป็นวงกลมและวงกลมเป็นสี่เหลี่ยมด้านขนาน มุมเอียงถูกกำหนดให้เป็นมุมระหว่างตำแหน่งสุดท้ายและตำแหน่งเริ่มต้นของแกนหลังจากใช้การแปลงแล้ว ในช่วง [0*, 90*] ค่าของเครื่องหมายเดียวกันกับพิกัดที่ไม่เปลี่ยนแปลงในค่าเริ่มต้นจะถูกเพิ่มโดยเป็นผลมาจากมุมเอียงที่เป็นบวก

เมื่อทำการเอียงตามแกน x พิกัด x จะคงที่สำหรับจุดใดๆ ขององค์ประกอบของเรา ในขณะที่พิกัด y จะเปลี่ยนตามจำนวน d ขึ้นอยู่กับมุมเอียง เมื่อองค์ประกอบเอียง ผลลัพธ์จะถูกกำหนดโดยตำแหน่งที่จุดกำเนิดของระบบพิกัด การแปลงแบบเอียงสองครั้งในแกนเดียวกันจะให้ผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับที่มาของการแปลง กรณี HTML (ซ้าย) และกรณี SVG (ขวา) แสดงในรูปด้านบน แม้ว่าทั้งสองกรณีจะมีมุม 60 องศา เครื่องหมายของพิกัด y ที่มุมบนขวาจะแยกความแตกต่างออกจากกัน มุมซึ่งเป็นค่าหน่วยในคุณสมบัติการแปลง CSS ใช้เพื่อแปลงค่าเป็นการแปลง องศา (องศา), เรเดียน (Rads), เทิร์น (เทิร์น), และ เกรเดียน (Grads) สามารถแสดงเป็นค่าเหล่านี้ได้ หรืออาจรวมกับ calc() ในบางกรณี

การแปลงสามารถใช้เพื่อหมุน ปรับขนาด และเอียงองค์ประกอบได้ เช่นเดียวกับที่องค์ประกอบ HTML ทำได้ ตัวอย่างเช่น เราจะได้ผลลัพธ์เมื่อเราใช้การแปลงแบบต่อเนื่องเป็นค่าของแอตทริบิวต์ SVG ใน IE อย่างไรก็ตามมันน่าเกลียด เหตุใดจึงไม่มีวิธีที่คล่องตัวกว่านี้ในการทำเช่นนี้ ในโค้ดนี้ เรามีรูปร่างคล้ายรูปหลายเหลี่ยมสามแบบที่เรียกว่าดาว ในการสาธิตด้านล่าง คุณสามารถดูวิธีการวางตำแหน่งเทียบกับจุดกำเนิดของผืนผ้าใบ (0 0) ในโค้ดหรือโดยการเลื่อนคู่ x,y คุณจะพบว่าจุดใดตรงกับคู่ใด กล่าวอีกนัยหนึ่งคือเราต้องการให้ดาวแต่ละดวงหมุนในลักษณะที่แตกต่างกัน สมมติว่าพวกมันมีมุมแบบสุ่ม และดัชนีของพวกมันมีมุมเฉพาะ