یک ویژگی جدید CSS به نام text-box-trim در مرورگرهایی که از آن پشتیبانی میکنند عرضه شده است و به توسعهدهندگان اجازه میدهد پیچیدگیهای مربوط به line-height را که سالها بخش جداییناپذیر کارهای UI بوده، حذف کنند. این ویژگی با حذف پدینگهای نامرئی که بالای ارتفاع حروف بزرگ (cap height) و پایین خط پایه (baseline) قرار دارند، تراز عمودی متن را به سادگیِ تنظیم عرض یا رنگ میکند.
چرا این مشکل اهمیت داشت
هر تایپفیس دارای یک فضای «شبحوار» است: چند پیکسل بالای بلندترین حروف بزرگ و چند پیکسل زیر خطی که حروف روی آن قرار میگیرند. این فضا نامرئی است، اما باعث میشود برچسب یک دکمه به بالا یا پایین رانده شود، یک تیتر با لبهی یک آیکون همتراز نباشد و طراحان مجبور شوند برای جبران آن، از «اعداد جادویی» استفاده کنند. تیمها سیستمهای فاصلهگذاری کامل — شامل توکنهای طراحی (design tokens)، کلاسهای کاربردی (utility classes) و کتابخانههای کامپوننت — را بر اساس این تنظیمات ساختهاند، زیرا مرورگر راه مستقیمی برای حذف مستقیم پدینگ ارائه نمیداد.
راهکارهای قدیمی
قبل از text-box-trim توسعهدهندگان معمولاً:
- یک
line-heightسفارشی محاسبه میکردند تا سعی کنند فضای اضافی را متعادل کنند. - از حاشیههای منفی (negative margins) برای بالا یا پایین کشیدن متن استفاده میکردند.
- اعداد را از فایلهای طراحی کپی کرده و مستقیماً در CSS وارد میکردند.
این ترفندها کار میکنند، اما شکننده هستند. اگر فونت، وزن یا زبان را تغییر دهید، این اعداد از کار میافتند و منجر به عدم تراز شدن عناصر UI و ایجاد بار نگهداری در کل کد میشوند.
چگونه text-box-trim بازی را تغییر میدهد
ویژگی text-box-trim به مرورگر دستور میدهد که جعبه متن را دقیقاً بر اساس مرزهای گلیف (glyph bounds) برش دهد. این ویژگی مقادیری را میپذیرد که مشخص میکنند کدام لبهها باید برش داده شوند، در حالی که ویژگی مکمل آن یعنی text-box-edge لبه مرجع را برای ارتفاع حروف بزرگ (cap height) تعیین میکند. در عمل، تنظیمِ:
button { text-box-trim: both; text-box-edge: cap; }
باعث میشود بالای جعبه در ارتفاع cap height و پایین آن در خط پایه الفبایی (alphabetic baseline) قرار گیرد و پدینگهای خیالی حذف شوند. نتیجه، یک جعبه خطی است که دقیقاً با کاراکترهای قابل مشاهده مطابقت دارد؛ بنابراین تراز عمودی بدون محاسبات اضافی انجام میشود و آیکونها دقیقاً با حروف همتراز میشوند.
پشتیبانی مرورگرها – هنوز در مراحل اولیه، اما در حال رشد
پشتیبانی در حال حاضر محدود به تعداد انگشتشماری از مرورگرها است که این ویژگی را پشت پرچمهای آزمایشی (experimental flags) یا در آخرین نسخههای خود عرضه کردهاند. اکثر محیطهای عملیاتی همچنان از مسیر رندرینگ سنتی استفاده خواهند کرد، به این معنی که توسعهدهندگان به یک استراتژی کاهش تدریجی عملکرد (graceful degradation) نیاز دارند. خبر خوب این است که مرورگرهایی که از آن پشتیبانی میکنند نشان دادهاند که پیادهسازی آن پایدار است و مشخصات فنی آن برای استفاده عمومی تأیید شده است، بنابراین عرضه گستردهتر در راه است.
آنچه در خطر است
اگر پروژهای تا حد امکان از text-box-trim استفاده کند، پاداش فوری آن داشتن یک استایلشیت تمیزتر است. دیگر خبری از فرمولهای سفارشی line-height نیست، نه از حاشیههای منفی خبری هست و نه از ورودیهای توکن طراحی که صرفاً برای مقابله با فضای نامرئی ایجاد شدهاند. در درازمدت، سیستمهای طراحی میتوانند سادهتر شوند: یک توکن واحد برای «خط پایه متن» (text baseline) میتواند جایگزین مجموعهای از مقادیر «جابجایی عمودی» (vertical-offset) شود و کامپوننتهای UI در برابر تغییرات فونت مقاومتر میشوند.
برای تیمهایی که قبلاً سرمایهگذاری سنگینی روی راهکارهای موقت قدیمی (legacy hacks) کردهاند، هزینه تغییر بازدارنده نیست. از آنجایی که این ویژگی در سطح مدل جعبهای (box-model) کار میکند، میتوانید آن را فقط روی یک کامپوننت فعال کنید — مثلاً برچسب یک دکمه که نامناسب به نظر میرسد — و شاهد ناپدید شدن فاصله بدون دست زدن به بقیه چیدمان باشید. این رویکرد تدریجی به شما اجازه میدهد قبل از تعهد به یک مهاجرت کامل، مزایای آن را ارزیابی کنید.
جنبه منفی
بزرگترین مانع همچنان پوشش نامتوازن مرورگرها است. اگر مرورگر کاربر فاقد text-box-trim باشد، متن به مدل جعبهای پیشفرض باز میگردد و پدینگهای شبحوار دوباره ظاهر میشوند. بنابراین توسعهدهندگان باید یک استراتژی جایگزین (fallback) ارائه دهند، مانند حفظ تنظیمات line-height موجود برای مرورگرهای بدون پشتیبانی. ابزارهای توسعه (زنجیره ساخت، کتابخانههای CSS-in-JS، تولیدکنندههای توکن طراحی) نیز باید این ویژگی جدید را بشناسند؛ تا زمانی که این کار انجام نشود، ممکن است این ویژگی در بازرسیهای خودکار استایل نادیده گرفته شود.
آنچه باید در آینده زیر نظر داشت
- انتشار نسخههای مرورگر: اخبار مربوط به انتشار نسخههای جدید مرورگرهای اصلی را دنبال کنید تا متوجه شوید چه زمانی
text-box-trimرا به صورت پیشفرض فعال میکنند. - بهروزرسانی سیستمهای طراحی: تیمهایی که کتابخانههای توکن را مدیریت میکنند باید برنامهریزی برای یک توکن «خط پایه» (baseline) را شروع کنند که بتواند جایگزین توکنهای فعلی «جابجایی عمودی» (vertical-offset) شود.
- ابزارها: پیشپردازندههای CSS و ابزارهای لینتینگ (linting) در حال اضافه کردن پشتیبانی از این ویژگی هستند؛ بهروزرسانی زودهنگام این وابستگیها، انتقال را هموارتر میکند.
خلاصه کلام
text-box-trim سرانجام روشی بومی برای تراز کردن عمودی متن در اختیار پلتفرم وب قرار میدهد و نیاز به راهکارهای جایگزینِ پر از ترفند (hacks) را که سالها است استایلشیتها را شلوغ کردهاند، از بین میبرد. استفادهکنندگان اولیه میتوانند با پاکسازی یک کامپوننت واحد و اثبات بهبود بصری حاصل از آن، همزمان با گسترش پشتیبانی مرورگرها، کاربرد آن را افزایش دهند. نادیده گرفتن این قابلیت در حال حاضر به معنای ادامه دادن به نوشتن و نگهداری کدهای شکننده برای مشکلی است که مرورگر اکنون آماده حل کردن آن است.
