קביעת גודל של שדה ב-CSS

שורת קוד אחת לאלמנטים לשינוי גודל אוטומטי עם תוכן שניתן לערוך.

בלי field-sizing, כדי ליצור שדה קלט בגודל טוב היה צריך לנחש את הגודל הממוצע של קלט בשדה הטקסט, או להשתמש ב-JavaScript כדי לספור תווים ולהגדיל את הגובה או הרוחב של האלמנט בזמן שהמשתמש הזין טקסט. במילים אחרות, זה לא היה קל, ונטייה לשגיאות בניסיון לעקוב אחרי התוכן שמשתמש הזין.

ב-field-sizing נדרשת שורה אחת של CSS כדי לאפשר שינוי גודל על סמך התוכן. הסגנון הזה של מידות מבוססות תוכן מתאים גם ליותר מאזור טקסט.

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

מפרט | הסבר

רוצה סרטונים קצרים?

ל-Wes Bos ול-Jhey יש סרטון נהדר ב-Twitter שבו אנחנו מציגים לך את field-sizing.

אילו רכיבים מושפעים משינוי הגודל של השדות?

הנה רשימה של רכיבי <form> ש-field-sizing עובד עליהם, עם סיכום של ההשפעות על כל אחד מהם.

<textarea>

הקלט מתכווץ ל-min-inline-size או להתאמה ל-placeholder.

כשמשתמשים מקלידים, הקלט גדל בכיוון השורה עד לגודל המקסימלי בתוך השורה. בשלב הזה, הטקסט גולש וגודל הבלוק של הקלט גדל כך שיתאים לשורה החדשה.

הפקודה <select> והפקודה <select multiple>

הרכיב שנבחר מתכווץ כדי שיתאים לאפשרות שנבחרה.

בחירה עם המאפיין multiple הולכת וגדלה כדי להתאים לאפשרות הרחבה ביותר ולאורך זמן, בהתאם למספר האפשרויות.

<input type="text">, <input type="email"> ו-<input type="number">

הקלט מתכווץ ל-min-inline-size או להתאמה ל-placeholder.

כשמשתמשים מקלידים, הקלט גדל בכיוון מוטבע עד שהוא מגיע ל-max-inline-size, ואז גלישת ה-overflow מקצרת את ערך הקלט.

<input type="file">

הקלט מתכווץ עד ללחצן ולטקסט של שם הקובץ שמולא מראש.

כשמעלים קובץ, הקלט נעשה ברוחב של הלחצן ושל שם הקובץ.

הצגה, בדיקה והשוואה של תוצאות

הנה דוגמה אינטראקטיבית ומינימלית להתנהגות לפני ואחרי של כל רכיב טופס, כפי שהיא מושפעת מ-field-sizing.

להתנסות ב-Codepen

מבט קרוב יותר

כשמשתמשים ב-[placeholder], ה-placeholder הופך לתוכן. זה כבר הוזכר כאן, אבל קראנו את זה כאן, כי חשוב לדעת מתי לעצב טופס. 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, והוא מקבל רק את שני הערכים fixed או content.