همزمان با بارگذاری فونت وب، اکنون میتوانید مقیاس آن را تنظیم کنید تا اندازه فونت سند عادی شود و از تغییر طرح هنگام جابجایی بین فونتها جلوگیری شود.
به دموی زیر توجه کنید که در آن font-size برابر با 64px است و تنها تفاوت بین هر یک از این هدرها font-family است. مثالهای سمت چپ تنظیم نشدهاند و اندازه نهایی ناهماهنگی دارند. مثالهای سمت راست size-adjust استفاده میکنند تا مطمئن شوند که 64px اندازه نهایی ثابتی است.
این پست به بررسی یک توصیفگر جدید فونت در CSS به نام size-adjust میپردازد. همچنین چند روش برای اصلاح و نرمالسازی اندازه فونتها برای تجربه کاربری روانتر، سیستمهای طراحی سازگار و طرحبندی صفحه قابل پیشبینیتر را نشان میدهد. یکی از موارد استفاده مهم، بهینهسازی رندر فونت وب برای جلوگیری از تغییر چیدمان تجمعی (CLS) است.
در اینجا یک دموی تعاملی از فضای مسئله ارائه شده است. سعی کنید فونت را با منوی کشویی تغییر دهید و مشاهده کنید:
- تفاوت ارتفاع در نتایج.
- تغییرات بصری نامطلوب در محتوا.
- جابجایی مناطق هدف تعاملی (منوی کشویی به اطراف میپرد!).
نحوه تغییر اندازه فونتها با استفاده از size-adjust
مقدمهای بر سینتکس:
@font-face {
font-family: "Adjusted Typeface";
size-adjust: 150%;
src: url(some/path/to/typeface.woff2) format('woff2');
}
- یک فونت سفارشی با نام
Adjusted Typefaceایجاد میکند. - با استفاده از
size-adjust، اندازه هر گلیف را تا ۱۵۰٪ اندازه پیشفرض آن افزایش میدهد. - فقط روی یک فونت وارد شده تأثیر میگذارد.
از فونت سفارشی بالا به این شکل استفاده کنید:
h1 {
font-family: "Adjusted Typeface";
}
کاهش CLS با تعویض فونت یکپارچه
در گیف زیر، به مثالهای سمت چپ و نحوهی تغییر فونت توجه کنید. این فقط یک مثال کوچک با یک عنصر تیتر است و مشکل آن بسیار قابل توجه است.
برای بهبود رندر فونت، یک تکنیک عالی تعویض فونت است. ابتدا یک فونت سیستمی با بارگذاری سریع را برای نمایش محتوا رندر کنید، سپس وقتی بارگذاری فونت وب تمام شد، آن را با یک فونت وب عوض کنید. این کار بهترین مزایای هر دو حالت را به شما میدهد: محتوا در اسرع وقت قابل مشاهده است و شما یک صفحه با استایل زیبا دریافت میکنید بدون اینکه وقت کاربر را برای محتوا تلف کنید. با این حال، مشکل این است که گاهی اوقات وقتی فونت وب بارگذاری میشود، کل صفحه را تغییر میدهد زیرا در اندازه ارتفاع کادر کمی متفاوت ارائه میشود.
با قرار دادن size-adjust در قانون @font-face ، یک تنظیم سراسری برای فونت face ایجاد میشود. زمانبندی صحیح این تنظیم منجر به حداقل تغییر بصری و یک تعویض یکپارچه میشود. برای ایجاد یک تعویض یکپارچه، تنظیم را دستی انجام دهید یا از این ماشین حساب تنظیم اندازه توسط Malte Ubl استفاده کنید.
@font-face دریافت کنید. در ابتدای این پست، مشکل اندازه فونت با آزمون و خطا حل شد. size-adjust در کد منبع تغییر داده شد تا همان هدر در Cookie و Arial همان 64px را که Press Start 2P به طور طبیعی رندر میکرد، نمایش دهد. من دو فونت را با اندازه فونت هدف تراز کردم.
@font-face {
font-family: 'Adjusted Arial';
size-adjust: 86%;
src: local(Arial);
}
@font-face {
font-family: 'Cookie';
size-adjust: 90.25%;
src: url(...woff2) format('woff2');
}
کالیبره کردن فونتها
شما به عنوان نویسنده، هدف(های) کالیبراسیون را برای نرمالسازی مقیاس فونت تعیین میکنید. میتوانید نرمالسازی را روی Times، Arial یا یک فونت سیستم انجام دهید، سپس فونتهای سفارشی را برای مطابقت تنظیم کنید. یا میتوانید فونتهای محلی را برای مطابقت با آنچه دانلود میکنید، تنظیم کنید.
استراتژیهایی برای کالیبراسیون size-adjust :
- هدف از راه دور:
فونتهای محلی را با فونتهای دانلود شده تطبیق دهید. - هدف محلی:
فونتهای دانلود شده را با فونتهای هدف محلی تنظیم کنید.
مثال ۱: هدف از راه دور
قطعه کد زیر را در نظر بگیرید که یک فونت محلی موجود را طوری تنظیم میکند که اندازه آن با یک فونت سفارشی src از راه دور مطابقت داشته باشد. یک فونت سفارشی از راه دور، شاید یک فونت برند، هدف کالیبراسیون است:
@font-face {
font-family: "Adjusted Regular Arial For Brand";
src: local(Arial);
size-adjust: 90%;
}
@font-face {
font-family: "Rad Brand";
src: url(some/path/to/a.woff2) format('woff2');
}
html {
font-family: "Rad Brand", "Adjusted Regular Arial For Brand";
}
در این مثال، فونت محلی Arial در انتظار بارگذاری یک فونت سفارشی، برای یک تعویض بینقص، تنظیم میشود.
این استراتژی این مزیت را دارد که به طراحان و توسعهدهندگان فونت یکسانی برای اندازه و تایپوگرافی ارائه میدهد. برند هدف کالیبراسیون است. این خبر بسیار خوبی برای سیستمهای طراحی است.
هدف قرار دادن یک فونت برند، نحوهی کار ماشین حساب Malte را نیز مشخص میکند. یک فونت گوگل را انتخاب کنید و ماشین حساب محاسبه میکند که چگونه Arial را برای تعویض یکپارچه با آن تنظیم کند. در اینجا مثالی از Roboto CSS از ماشین حساب آورده شده است، که در آن Arial بارگذاری شده و "Roboto-fallback" نامگذاری شده است:
@font-face {
font-family: "Roboto-fallback";
size-adjust: 100.06%;
src: local("Arial");
}
برای ایجاد یک تنظیم کاملاً چند پلتفرمی، به مثال زیر مراجعه کنید که دو فونت جایگزین محلی تنظیمشده را در انتظار فونت برند ارائه میدهد.
@font-face {
font-family: "Roboto-fallback-1";
size-adjust: 100.06%;
src: local("Arial");
}
@font-face {
font-family: "Roboto-fallback-2";
size-adjust: 99.94%;
src: local("Arimo");
}
@font-face {
font-family: "Roboto Regular";
src: url(some/path/to/roboto.woff2) format('woff2');
}
html {
font-family: "Roboto Regular", "Roboto-fallback-1", "Roboto-fallback-2";
}
مثال ۲: هدف محلی
قطعه کد زیر را در نظر بگیرید که فونت سفارشی یک برند را برای مطابقت با Arial تنظیم میکند:
@font-face {
font-family: "Rad Brand - Adjusted For Arial";
src: url(some/path/to/a.woff2) format('woff2');
size-adjust: 110%;
}
html {
font-family: "Rad Brand - Adjusted For Arial", Arial;
}
این استراتژی این مزیت را دارد که بدون هیچ گونه تنظیماتی رندر میشود، سپس هر فونت ورودی را برای مطابقت تنظیم میکند.
تنظیم دقیقتر با ascent-override ، descent-override و line-gap-override
اگر مقیاسبندی عمومی گلیفها برای طراحی یا استراتژیهای بارگذاری شما کافی نیست، در اینجا چند گزینه تنظیم دقیقتر وجود دارد که در کنار size-adjust کار میکنند. ویژگیهای ascent-override ، descent-override و line-gap-override در حال حاضر در Chromium 87+ و Firefox 89+ پیادهسازی شدهاند.

ascent-override
توصیفگر ascent-override ارتفاع فونت را نسبت به خط پایه مشخص میکند.
@font-face {
font-family: "Ascent Adjusted Arial Bold";
src: local(Arial Bold);
ascent-override: 71%;
}
تیتر قرمز (تنظیم نشده) بالای حروف بزرگ A و O خود فضای خالی دارد، در حالی که تیتر آبی تنظیم شده است تا ارتفاع بالای آن کاملاً با کادر اطراف متن هماهنگ شود.
descent-override
توصیفگر descent-override ارتفاع زیر خط پایه فونت را تعریف میکند.
@font-face {
font-family: "Ascent Adjusted Arial Bold";
src: local(Arial Bold);
descent-override: 0%;
}
تیتر قرمز (اصلاح نشده) زیر خطوط پایه D و O خود فضای خالی دارد، در حالی که تیتر آبی تنظیم شده است، بنابراین حروف آن به طور محکم روی خط پایه قرار میگیرند.
line-gap-override
توصیفگر line-gap-override معیار line-gap را برای فونت تعریف میکند. این، line-gap یا leading خارجی توصیه شده برای فونت است.
@font-face {
font-family: "Line Gap Adjusted Arial";
src: local(Arial);
line-gap-override: 50%;
}
تیتر قرمز (اصلاح نشده) فاقد قابلیت line-gap-override است، اساساً روی 0% قرار دارد، در حالی که تیتر آبی ۵۰٪ تنظیم شده و به همین ترتیب فضای بالا و پایین حروف ایجاد شده است.
همه چیز را کنار هم قرار دادن
هر یک از این overrideها یک روش اضافی برای حذف موارد اضافی از کادر محدودکننده متن امن وب ارائه میدهند. میتوانید کادر متن را برای نمایش دقیق تنظیم کنید.
نتیجهگیری
ویژگی @font-face size-adjust CSS روشی هیجانانگیز برای سفارشیسازی کادر محدودکننده متن در طرحبندیهای وب شماست تا تجربه تعویض فونت را بهبود بخشد و از تغییر طرحبندی برای کاربران شما جلوگیری کند. برای کسب اطلاعات بیشتر، این منابع را بررسی کنید:
- مشخصات فونتهای CSS سطح ۵
- تنظیم اندازه در MDN
- مولد @font-face برای جابجایی روان
- تغییر چیدمان تجمعی (CLS) در web.dev
- روشی جدید برای کاهش تأثیر بارگذاری فونت: توصیفگرهای فونت CSS
عکس از کریستین استرند در Unsplash