การปรับขนาดช่องของ CSS

โค้ด 1 บรรทัดสำหรับองค์ประกอบการปรับขนาดอัตโนมัติที่มีเนื้อหาที่แก้ไขได้

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

เมื่อใช้ field-sizing คุณจะต้องใช้ CSS เพียงบรรทัดเดียวเพื่อเปิดใช้การปรับขนาดตามเนื้อหา รูปแบบการกำหนดขนาดตามเนื้อหานี้ยังใช้กับองค์ประกอบอื่นๆ นอกเหนือจาก textarea ได้ด้วย

textarea, select, input {
  field-sizing: content;
}

Browser Support

  • Chrome: 123.
  • Edge: 123.
  • Firefox: not supported.
  • Safari: 26.2.

Source

ข้อกำหนด | คำอธิบาย

ชอบวิดีโอแบบสั้นไหม

Wes Bos และ Jhey มีวิดีโอที่ยอดเยี่ยม บน Twitter ที่จะแนะนำให้คุณรู้จัก field-sizing

องค์ประกอบใดบ้างที่ได้รับผลกระทบจากขนาดฟิลด์

ต่อไปนี้คือรายการองค์ประกอบของ <form> ที่ field-sizing ทำงานด้วย พร้อมสรุปผลกระทบที่มีต่อแต่ละองค์ประกอบ

<textarea>

อินพุตจะยุบลงเป็น min-inline-size หรือให้พอดีกับตัวยึดตำแหน่ง

ขณะที่ผู้ใช้พิมพ์ ข้อความที่ป้อนจะขยายไปในทิศทางแบบอินไลน์จนกว่าจะถึง ขนาดอินไลน์สูงสุด จากนั้นข้อความจะขึ้นบรรทัดใหม่และขนาดบล็อกของ ข้อความที่ป้อนจะขยายให้พอดีกับบรรทัดใหม่

<select> และ <select multiple>

องค์ประกอบการเลือกจะหดลงเพื่อให้พอดีกับตัวเลือกที่เลือก

องค์ประกอบ Select ที่มีแอตทริบิวต์ multiple จะขยายให้พอดีกับตัวเลือกที่กว้างที่สุดและสูงเท่าที่จำเป็นเพื่อให้พอดีกับจำนวนตัวเลือก

<input type="text">, <input type="email"> และ <input type="number">

อินพุตจะยุบลงเป็น min-inline-size หรือให้พอดีกับตัวยึดตำแหน่ง

ขณะที่ผู้ใช้พิมพ์ ข้อความที่ป้อนจะขยายไปในทิศทางเดียวกันจนกว่าจะถึง max-inline-size จากนั้นค่าที่ป้อนจะถูกตัดออกเนื่องจากข้อความยาวเกินไป

<input type="file">

อินพุตจะยุบลงเป็นปุ่มและข้อความชื่อไฟล์ที่กรอกไว้ล่วงหน้า

เมื่ออัปโหลดไฟล์ อินพุตจะกว้างเท่าปุ่มบวกข้อความชื่อไฟล์

การดู การทดสอบ และการเปรียบเทียบผลลัพธ์

ต่อไปนี้คือตัวอย่างแบบอินเทอร์แอกทีฟและเรียบง่ายของลักษณะการทำงานก่อนและหลัง องค์ประกอบแต่ละฟอร์มที่ได้รับผลกระทบจาก field-sizing

ลองใช้ใน Codepen

ดูรายละเอียด

เมื่อใช้ [placeholder] ตัวยึดตำแหน่งจะกลายเป็นเนื้อหา เราได้กล่าวถึงเรื่องนี้ไปก่อนหน้านี้แล้ว แต่จะเน้นย้ำอีกครั้งที่นี่ เนื่องจากเป็นสิ่งสำคัญที่ควรทราบเมื่อจัดรูปแบบแบบฟอร์ม ตัวยึดตำแหน่งแบบยาวหรือสั้น จะเปลี่ยนขนาดโดยธรรมชาติของอินพุตที่มี field-sizing: content

ลองใช้ใน Codepen

การจัดการสไตล์ที่ว่างเปล่าและล้น

การใช้ field-sizing หมายความว่าคุณต้องดำเนินการเพิ่มเติม Ahmad Shadeed เรียกว่า "CSS เชิงรับ" ซึ่งมีเป้าหมายไม่ใช่การระบุอย่างชัดเจนว่าองค์ประกอบควรมีลักษณะหรือทำงานอย่างไร แต่เป็นการป้องกันไม่ให้องค์ประกอบมีลักษณะที่ไม่พึงประสงค์ ก่อนหน้านี้ อินพุตมีขนาดคงที่จำนวนหนึ่ง แต่หลังจากใช้ field-sizing: content แล้ว อินพุตอาจมีขนาดเล็กหรือใหญ่เกินไป

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

textarea {
  min-block-size: 3.5rlh;
  min-inline-size: 20ch;
  max-inline-size: 50ch;
}

select {
  min-inline-size: 5ch;
  min-block-size: 1.5lh;
}

input {
  min-inline-size: 7ch;
}

CSS นี้ใช้หน่วยสัมพัทธ์สำหรับการกำหนดขนาด หน่วย lh ใหม่เหมาะสำหรับขนาดบล็อกและ ch ใช้ได้ดีกับขนาดอินไลน์

ค่าเริ่มต้นของฟิลด์-ไซส์คืออะไร

ค่าเริ่มต้นของ field-sizing คือ fixed และยอมรับเฉพาะค่า 2 ค่าของ fixed หรือ content