كيف تنشئ 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 لا يُعرض كتنسيق، فـ <b>hi</b> بين الوسمين يظهر كنص حرفي.
العرض وتغيير الحجم والتمدد التلقائي
تتيح المتصفحات للقارئ سحب الزاوية لتغيير حجم textarea. خاصية CSS resize تحد من ذلك، وwidth: 100% مع box-sizing: border-box تجعله يملأ حاويته بالضبط:
الأخير يعيد ضبط ارتفاعه ثم يضبطه على scrollHeight (ارتفاع محتواه وحشوه) مضافًا إليه حدوده، مع كل ضغطة مفتاح. اكتب فيه عدة أسطر: لن يُظهر شريط تمرير أبدًا. وresize: vertical هي القيمة الافتراضية الألطف: تحصل الإجابات الطويلة على مساحة، ولا يستطيع أحد سحب الحقل ليصبح أعرض من التخطيط.
متصفحات Chromium تستطيع التمدد التلقائي بـ CSS وحدها عبر field-sizing: content. المتصفحات التي لا تدعمها تتجاهل السطر وتحتفظ بالحجم العادي، فإضافتها آمنة، لكن أبقِ السكربت إن كان يجب أن يحصل كل القراء على الحقل المتمدد.
maxlength وعداد المحارف
maxlength توقف الإدخال عند عدد من المحارف. وحدها لا تعطي أي تنبيه، فلا يلاحظ القارئ إلا حين تتوقف الكتابة عن العمل. العداد يصلح ذلك:
aria-describedby تجعل قارئات الشاشة تقرأ العداد مع الحقل، وaria-live="polite" تعلن تغييراته بين ضغطات المفاتيح. وmaxlength يفرضها المتصفح فقط، لذلك يجب أن يتحقق الخادم من الطول أيضًا.
كسور الأسطر في النص المرسل
كسور الأسطر التي يكتبها القارئ تُرسل مع النص. في البيانات المرسلة يصبح كل منها زوجًا من محرفي العودة وتغذية السطر (%0D%0A في النموذج المرمَّز بترميز URL)، وهذا ما تتوقعه معظم الخوادم. ولعرض النص لاحقًا في صفحة مع كسور أسطره، إما أن تحوّلها إلى <br> عند الإخراج أو تنسّق العنصر بـ white-space: pre-line.
wrap="hard" (التي تحتاج إلى cols) تذهب أبعد: تُدرج أيضًا كسور أسطر حيث التف النص بصريًا، فيستقبل الخادم أسطرًا لا تتجاوز cols محرفًا. أما الافتراضية wrap="soft" فترسل فقط الكسور التي كتبها القارئ.
تنسيق textarea
يعطي Chrome وFirefox عناصر textarea خطًا أحادي المسافة بحجم نحو 13px، ولهذا يبدو textarea غالبًا غريبًا عن الصفحة. font: inherit تصلح ذلك. أبقِ نمط تركيز ظاهرًا إن غيّرت الحد:
يجب أن يصل نص placeholder إلى تباين مقروء، فالرمادي الفاتح الذي تستخدمه تصاميم كثيرة صعب القراءة. وكما في كل حقل، placeholder ليس تسمية: يختفي بمجرد أن يكتب القارئ. التسميات مشروحة في label في HTML.
أخطاء شائعة
<textarea value="...">. لا توجد سمةvalue، فضع النص بين الوسمين.- إزاحة النص الافتراضي مع شيفرة HTML. تصبح المسافات جزءًا من القيمة.
<textarea />ذاتي الإغلاق. ليس عنصرًا فارغًا، ومن دون</textarea>تُبتلع بقية الصفحة داخله كنص.- غياب
font: inherit، فيستخدم الحقل خطًا صغيرًا أحادي المسافة. 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 خطًا أحادي المسافة بحجم نحو 13px افتراضيًا. أضف font: inherit ليطابق بقية الصفحة.