CSS min(), max() และ clamp()

ดูวิธีควบคุมขนาดองค์ประกอบ รักษาระยะห่างที่เหมาะสม และนำแบบอักษรแบบยืดหยุ่นไปใช้โดยใช้ฟังก์ชัน CSS ที่รองรับได้ดี

เมื่อการออกแบบที่ปรับเปลี่ยนตามอุปกรณ์มีความซับซ้อนมากขึ้น CSS ก็พัฒนาอย่างต่อเนื่องเพื่อให้ผู้เขียนควบคุมสิ่งต่างๆ ได้มากขึ้น ฟังก์ชัน min(), max() และ clamp() ซึ่งตอนนี้เบราว์เซอร์สมัยใหม่ทั้งหมดรองรับแล้ว เป็นหนึ่งในเครื่องมือล่าสุดที่ช่วยให้การสร้างเว็บไซต์และแอปมีความยืดหยุ่นและตอบสนองได้ดียิ่งขึ้น คุณสามารถใช้ฟังก์ชันเหล่านี้เพื่อควบคุมขนาดและการปรับขนาดองค์ประกอบ รักษาระยะห่างระหว่างองค์ประกอบ และสร้างแบบอักษรที่ยืดหยุ่นและลื่นไหล

ฟังก์ชันคณิตศาสตร์ calc(), min(), max() และ clamp() อนุญาตให้ใช้นิพจน์ทางคณิตศาสตร์ที่มีการดำเนินการบวก (+), ลบ (-), คูณ (*) และหาร (/) เป็นค่าคอมโพเนนต์

ค่าและหน่วย CSS ระดับ 4

การสนับสนุนเบราว์เซอร์

min()

การรองรับเบราว์เซอร์

  • Chrome: 79
  • Edge: 79
  • Firefox: 75
  • Safari: 11.1

แหล่งที่มา

max()

การรองรับเบราว์เซอร์

  • Chrome: 79
  • Edge: 79
  • Firefox: 75
  • Safari: 11.1

แหล่งที่มา

clamp()

การรองรับเบราว์เซอร์

  • Chrome: 79
  • Edge: 79
  • Firefox: 75
  • Safari: 13.1

แหล่งที่มา

การใช้งาน

คุณสามารถใช้ min(), max() และ clamp() ทางด้านขวาของนิพจน์ CSS ใดก็ได้ที่เหมาะ สำหรับ min() และ max() คุณต้องระบุรายการค่าอาร์กิวเมนต์ แล้วเบราว์เซอร์จะระบุค่าที่เล็กที่สุดหรือใหญ่ที่สุด เช่น ในกรณีของ width: min(1rem, 50%, 10vw) เบราว์เซอร์จะคำนวณว่าหน่วยแบบสัมพัทธ์ใดมีขนาดเล็กที่สุด แล้วใช้ค่านั้นสำหรับความกว้างขององค์ประกอบ

ฟังก์ชัน min() จะเลือกค่าต่ำสุดจากรายการตัวเลือกในการสาธิต Codepen นี้

ฟังก์ชัน max() ทําสิ่งเดียวกันสําหรับค่าสูงสุด

ฟังก์ชัน max() จะเลือกค่าจากรายการตัวเลือกในเดโม Codepen นี้

หากต้องการใช้ clamp() ให้ป้อนค่า 3 ค่า ได้แก่ ค่าต่ำสุด ค่าที่เหมาะสมที่จะคำนวณ และค่าสูงสุด

ฟังก์ชัน clamp() จะเก็บค่าไว้ระหว่างค่าต่ำสุดและสูงสุดที่ระบุในการสาธิต Codepen นี้

คุณใช้ฟังก์ชันเหล่านี้ได้ทุกที่ที่อนุญาต <length>, <frequency>, <angle>, <time>, <percentage>, <number> หรือ <integer> คุณจะใช้สัญลักษณ์เหล่านี้เดี่ยวๆ (เช่น font-size: max(0.5vw, 50%, 2rem)) ร่วมกับ calc() (เช่น font-size: max(calc(0.5vw - 1em), 2rem)) หรือใช้ร่วมกัน (เช่น font-size: max(min(0.5vw, 1em), 2rem)) ก็ได้

ตัวอย่างวิธีใช้ฟังก์ชันดังกล่าวมีดังนี้

ความกว้างที่เหมาะเจาะ

หนังสือองค์ประกอบของสไตล์การพิมพ์โดย Robert Bringhurst ระบุว่า "โดยทั่วไปแล้ว บรรทัดที่มีความยาว 45-75 อักขระถือเป็นความยาวที่พอดีสำหรับหน้าแบบคอลัมน์เดียวที่ตั้งค่าแบบอักษรที่มีขีดด้านบนและด้านล่างในขนาดข้อความ"

หากต้องการให้บล็อกข้อความมีความกว้างระหว่าง 45 ถึง 75 อักขระ ให้ใช้ clamp() และ ch (การเลื่อนอักขระแบบกว้าง 0) ดังนี้

p {
  width: clamp(45ch, 50%, 75ch);
}

วิธีนี้ช่วยให้เบราว์เซอร์กำหนดความกว้างของย่อหน้าได้ ซึ่งจะตั้งค่าความกว้างเป็น 50% โดยค่าเริ่มต้น หาก 50% น้อยกว่า 45ch ระบบจะใช้ 45ch เป็นความกว้างแทน และหาก 50% กว้างกว่า 75ch ระบบจะใช้ 75ch

ใช้ฟังก์ชัน clamp() เพื่อตั้งค่าความกว้างขั้นต่ำและสูงสุด ดูเดโมใน Codepen

นอกจากนี้ คุณยังแบ่งข้อมูลออกเป็นส่วนๆ ได้โดยใช้เพียง min() หรือ max() หากต้องการให้องค์ประกอบมีความกว้าง 50% เสมอและไม่กว้างเกิน 75ch ในหน้าจอที่ใหญ่ขึ้น ให้ใช้ width: min(75ch, 50%); เพื่อกำหนดขนาดสูงสุด

ใช้ฟังก์ชัน min() เพื่อตั้งค่าความกว้างสูงสุด

ในทํานองเดียวกัน คุณสามารถกําหนดขนาดขั้นต่ำสําหรับข้อความที่อ่านออกได้โดยใช้ฟังก์ชัน max() ดังตัวอย่างใน width: max(45ch, 50%); ในกรณีนี้ เบราว์เซอร์จะเลือกค่าที่มากกว่า ซึ่งหมายความว่าองค์ประกอบต้องกว้าง 45ch ขึ้นไป

ใช้ฟังก์ชัน max() เพื่อตั้งค่าความกว้างขั้นต่ำ

จัดการการเว้นวรรค

นอกจากนี้ คุณยังใช้ max() เพื่อกำหนดขนาดการถ่วงขั้นต่ำได้ด้วย ตัวอย่างนี้มาจากกลเม็ด CSS ซึ่งผู้อ่าน Caluã de Lacerda Pataca ได้แชร์ไอเดียว่า "ให้องค์ประกอบมีระยะห่างจากขอบเพิ่มเติม" ในหน้าจอขนาดใหญ่ แต่คงระยะห่างระหว่างขอบขั้นต่ำไว้บนหน้าจอขนาดเล็ก หากต้องการทำเช่นนี้ ให้ใช้ calc() หรือ max() และลบระยะห่างจากขอบขั้นต่ำออกจากองค์ประกอบทั้ง 2 ด้าน: calc((100vw - var(--contentWidth)) / 2) หรือ max(2rem, 50vw - var(--contentWidth) / 2) ในสไตล์ชีต ข้อมูลควรมีลักษณะดังนี้

footer {
  padding: var(--blockPadding) max(2rem, 50vw - var(--contentWidth) / 2);
}
ตั้งค่าระยะห่างจากขอบขั้นต่ำของคอมโพเนนต์โดยใช้ฟังก์ชัน max() ดูเดโมใน Codepen

การจัดวางแบบยืดหยุ่น

Mike Riethmeuller เป็นผู้ทำให้เทคนิคการใช้ฟังก์ชัน clamp() เพื่อกำหนดขนาดแบบอักษรขั้นต่ำ ขนาดแบบอักษรสูงสุด และอนุญาตให้ปรับขนาดระหว่างขนาดเหล่านั้นเป็นที่นิยม เพื่อเปิดใช้การจัดรูปแบบแบบยืดหยุ่น

ใช้ clamp() เพื่อสร้างแบบอักษรที่ยืดหยุ่น ดูเดโมใน Codepen

ก่อนหน้านี้ clamp(), การออกแบบการปรับขนาดแบบอักษรต้องใช้สตริงสไตล์ที่ซับซ้อน ตอนนี้คุณก็ปล่อยให้เบราว์เซอร์ทำงานให้คุณได้ ตั้งค่าขนาดแบบอักษรขั้นต่ำที่ยอมรับได้ (เช่น 1.5rem สำหรับชื่อหนึ่งๆ) ขนาดสูงสุด (เช่น 3rem) และขนาดที่เหมาะสม (เช่น 5vw) ตอนนี้คุณมีการออกแบบตัวอักษรที่ปรับขนาดตามความกว้างของวิวพอร์ตของหน้าเว็บจนกว่าจะถึงขีดจำกัดต่ำสุดและสูงสุดโดยใช้โค้ดเพียงเล็กน้อย

p {
  font-size: clamp(1.5rem, 5vw, 3rem);
}

แหล่งข้อมูลเพิ่มเติม

ภาพหน้าปกจาก @yer_a_wizard ใน Unป้องกัน