איך יוצרים textarea
<textarea> הוא שדה טקסט ליותר משורה אחת: הודעות, תגובות, תיאורים. rows קובע את הגובה הגלוי שלו בשורות. הקלידו כמה שורות ולחצו על Send:
שני דברים שונים מ-<input>: textarea צריך תגית סגירה, והטקסט ההתחלתי שלו נכתב בין התגיות ולא במאפיין value. ה-name שלו נשלח עם הטקסט כערך, כולל ירידות השורה.
המאפיינים של textarea
| מאפיין | מה עושה |
|---|---|
name | המפתח שתחתיו הטקסט נשלח |
rows | גובה גלוי בשורות (ברירת מחדל 2) |
cols | רוחב גלוי בתווים (ברירת מחדל 20); width של CSS בדרך כלל עדיף |
placeholder | רמז שמוצג כל עוד השדה ריק |
maxlength, minlength | מגבלות אורך בתווים |
required | אסור שיהיה ריק |
readonly | אפשר לבחור ולהעתיק, לא לערוך; עדיין נשלח |
disabled | אי אפשר להשתמש בו; לא נשלח |
wrap | soft (ברירת מחדל) או hard, ראו בהמשך |
spellcheck | true או false |
טקסט ברירת המחדל נכתב בין התגיות
כל מה שבין <textarea> ל-</textarea> הוא הטקסט ההתחלתי, בדיוק כפי שנכתב: כולל רווחים, טאבים וירידות שורה. רק ירידת שורה אחת מיד אחרי תגית הפתיחה מוזנחת. זה הופך הזחה למלכודת:
ה-textarea השני מתחיל בארבעה רווחים ונגמר בירידת שורה ועוד שניים, וכולם הקורא צריך למחוק. כתבו את טקסט ברירת המחדל צמוד לתגיות.
HTML בתוך textarea לא מוצג כ-HTML; <b>hi</b> בין התגיות מופיע כטקסט מילולי.
רוחב, שינוי גודל וגדילה אוטומטית
דפדפנים מאפשרים לקורא לגרור את הפינה כדי לשנות גודל של textarea. resize של CSS מגביל את זה, ו-width: 100% עם box-sizing: border-box גורם לו למלא בדיוק את המיכל שלו:
האחרון מאפס את הגובה שלו ואז קובע אותו ל-scrollHeight (הגובה של התוכן וה-padding שלו) ועוד הגבולות שלו, בכל הקשה. הקלידו בו כמה שורות: הוא אף פעם לא מציג פס גלילה. resize: vertical היא ברירת המחדל הידידותית ביותר: לתשובות ארוכות יש מקום, ואף אחד לא יכול למשוך את השדה לרוחב מעבר לפריסה.
דפדפני Chromium יכולים לעשות את הגדילה האוטומטית ב-CSS בלבד עם field-sizing: content. דפדפנים שלא תומכים בזה מתעלמים מהשורה ושומרים על הגודל הרגיל, כך שבטוח להוסיף אותה, אבל השאירו את הסקריפט אם כל קורא צריך לקבל את התיבה שגדלה.
maxlength ומונה תווים
maxlength עוצר את הקלט במספר מסוים של תווים. לבדו הוא לא נותן שום אזהרה, כך שהקורא שם לב רק כשההקלדה מפסיקה לעבוד. מונה פותר את זה:
aria-describedby גורם לקוראי מסך להקריא את המונה יחד עם השדה, ו-aria-live="polite" מכריז על שינויים בו בין הקשות. maxlength נאכף רק על ידי הדפדפן, ולכן השרת צריך לבדוק את האורך גם כן.
ירידות שורה בטקסט שנשלח
ירידות השורה של הקורא נשלחות עם הטקסט. בנתונים שנשלחים כל אחת הופכת לזוג של carriage return ו-line feed (%0D%0A בטופס מקודד כ-URL), וזה מה שרוב השרתים מצפים לו. כדי להציג את הטקסט בעמוד מאוחר יותר עם ירידות השורה שלו, המירו אותן ל-<br> בפלט או עצבו את האלמנט עם white-space: pre-line.
wrap="hard" (שדורש cols) הולך רחוק יותר: הוא גם מוסיף ירידות שורה במקומות שבהם הטקסט נשבר חזותית, כך שהשרת מקבל שורות שאינן ארוכות מ-cols תווים. ברירת המחדל, wrap="soft", שולחת רק את ירידות השורה שהקורא הקליד.
עיצוב textarea
Chrome ו-Firefox נותנים ל-textarea גופן monospace בגודל של כ-13px, ולכן textarea נראה לעיתים קרובות לא במקום. font: inherit מתקן את זה. אם משנים את הגבול, שמרו על סגנון פוקוס גלוי:
טקסט ה-placeholder צריך להגיע לניגודיות קריאה; האפור הבהיר שעיצובים רבים משתמשים בו קשה לקריאה. וכמו בכל שדה, ה-placeholder אינו תווית: הוא נעלם ברגע שהקורא מקליד. תוויות מוסברות ב-HTML label.
טעויות נפוצות
<textarea value="...">. אין מאפייןvalue; שימו את הטקסט בין התגיות.- הזחת טקסט ברירת המחדל יחד עם ה-HTML. הרווחים הופכים לחלק מהערך.
<textarea />שסוגר את עצמו. זה לא אלמנט ריק; בלי</textarea>, שאר העמוד נבלע לתוכו כטקסט.- אין
font: inherit, ולכן השדה משתמש בגופן monospace קטן. resize: noneעם גובה קבוע קטן. תשובות ארוכות נתקעות בתיבה זעירה עם גלילה.- להסתמך רק על
maxlength. בדקו את האורך גם בשרת.
שאלות נפוצות
איך יוצרים textarea ב-HTML?
כתבו <textarea name="message" rows="4"></textarea> בתוך טופס, עם <label>. בניגוד ל-<input>, יש לו תגית סגירה, וכל מה שבין התגיות הוא הטקסט ההתחלתי.
איך קובעים ערך ברירת מחדל ל-textarea?
שימו את הטקסט בין התגיות: <textarea name="bio">Hello</textarea>. ל-textarea אין מאפיין value ב-HTML. ב-JavaScript, קראו והגדירו את textarea.value.
איך מונעים שינוי גודל של textarea?
הגדירו resize: none ב-CSS. resize: vertical בדרך כלל ידידותי יותר: הקורא עדיין יכול להגביה אותו לטקסט ארוך, אבל לא יכול לשבור את הפריסה בכך שימשוך אותו לרוחב.
איך מגבילים את מספר התווים ב-textarea?
הוסיפו maxlength="280". הדפדפן מפסיק לקבל קלט באורך הזה. הציגו לידו מונה שמתעדכן באירוע input, כדי שהקורא יידע כמה מקום נשאר, ובדקו את האורך גם בשרת.
למה ה-textarea שלי משתמש בגופן אחר?
Chrome ו-Firefox נותנים ל-textarea גופן monospace בגודל של כ-13px כברירת מחדל. הוסיפו font: inherit כדי שיתאים לשאר העמוד.