Chrome در حال آزمایش دو API است، Device Posture API و Viewport Segments Enumeration API، که بهعنوان نسخه آزمایشی اصلی از Chrome 125 در دسترس هستند. اینها در مجموع به عنوان APIهای تاشو شناخته میشوند که برای کمک به توسعهدهندگان برای هدف قرار دادن دستگاههای تاشو طراحی شدهاند. این پست این API ها را معرفی می کند و اطلاعاتی در مورد نحوه شروع آزمایش آنها ارائه می دهد.
عمدتاً دو عامل فیزیکی متفاوت وجود دارد: دستگاههایی با یک صفحه نمایش منعطف (بدون درز) و دستگاههایی با دو صفحه (با درز، که به عنوان دستگاههای صفحهنمایش دوگانه نیز شناخته میشوند).
این دستگاه ها چالش ها و فرصت هایی را در اختیار توسعه دهندگان قرار می دهند. آنها راه های بیشتری را برای مشاهده محتوا ارائه می دهند. برای مثال، یک کاربر ممکن است یک دستگاه بدون درز مانند یک کتاب را در دست بگیرد و سپس به استفاده از آن مانند یک تبلت با صفحهنمایش تخت تغییر کند. دستگاههای دارای دو صفحهنمایش دارای اتصال فیزیکی بین صفحهنمایشها هستند که ممکن است نیاز به حسابگیری داشته باشند.
این API های جدید راه هایی را برای توسعه دهندگان فراهم می کند تا تجربیات کاربری بهتری را برای این دستگاه ها فراهم کنند. هر API به دو طریق، از طریق CSS و جاوا اسکریپت، موارد اولیه پلتفرم وب مورد نیاز را در معرض دید قرار می دهد.
Device Posture API
دستگاههای تاشو قابلیتهایی دارند که به آنها اجازه میدهد وضعیت خود یا وضعیت فیزیکی دستگاه را تغییر دهند. آنها می توانند فاکتور شکل خود را تغییر دهند و به نویسندگان محتوا اجازه می دهد تا تجربه کاربری متفاوتی را ارائه دهند، و این APIهای جدید اطمینان حاصل می کنند که محتوای وب می تواند به حالت های مختلف تاشو واکنش نشان دهد.
دو حالت دستگاه وجود دارد که یک دستگاه می تواند در آن قرار گیرد:
-
folded
: وضعیت لپ تاپ یا کتاب.
-
continuous
: صفحه نمایش تخت، تبلت یا حتی منحنی بدون درز.
CSS
مشخصات Device Posture API یک ویژگی رسانه ای جدید CSS را تعریف می کند - وضعیت دستگاه . این ویژگی رسانه ای به مجموعه ای از وضعیت های ثابت حل می شود. این وضعیت ها شامل تعدادی مقادیر از پیش تعریف شده است که هر یک وضعیت فیزیکی دستگاه را در بر می گیرد.
مقادیر ویژگی device-posture
با توضیحات قبلی وضعیت های ممکن مطابقت دارد:
-
folded
-
continuous
اگر دستگاههای جدیدی به بازار بیایند، وضعیتهای جدید میتوانند در آینده اضافه شوند.
مثال ها:
/* Using the device in a 'book' posture. */
@media (device-posture: folded) { ... }
/* Using the device in a 'flat' posture, or any typical device like a laptop or
desktop device. */
@media (device-posture: continuous) { ... }
جاوا اسکریپت
برای پرس و جو از وضعیت یک دستگاه، یک شی DevicePosture
جدید در دسترس است.
const { type } = navigator.devicePosture;
console.log(`The current device is of type ${type}.`);
برای واکنش به تغییرات وضعیت دستگاه، مانند باز کردن کامل دستگاه توسط کاربر و در نتیجه حرکت از folded
به continuous
، در رویدادهای change
مشترک شوید.
navigator.devicePosture.addEventListener('change', (e) => {
console.log(`The device posture changed to type ${e.type}`);
});
Viewport Segments API
بخش های viewport متغیرهای محیطی CSS هستند که موقعیت و ابعاد یک منطقه منطقی مجزا از viewport را تعریف می کنند. بخشهای Viewport زمانی ایجاد میشوند که درگاه دید توسط یک یا چند ویژگی سختافزاری (مانند یک تا یا یک لولا بین نمایشگرهای جداگانه) که به عنوان یک تقسیمکننده عمل میکنند، تقسیم میشود. بخش ها نواحی از درگاه دید هستند که نویسنده می تواند آنها را از نظر منطقی متمایز کند.
CSS
تعداد تقسیمبندیهای منطقی از طریق دو ویژگی رسانه جدید، که در مشخصات CSS Media Queries Level 5 تعریف شدهاند، نشان داده میشوند: vertical-viewport-segments
و horizontal-viewport-segments
. آنها به تعداد بخش هایی که viewport به آن تقسیم شده است، تعیین می کنند.
علاوه بر این، متغیرهای محیطی جدیدی برای پرس و جوی ابعاد هر تقسیم منطقی اضافه شده است. این متغیرها عبارتند از:
-
env(viewport-segment-width xy)
-
env(viewport-segment-height xy)
-
env(viewport-segment-top xy)
-
env(viewport-segment-left xy)
-
env(viewport-segment-bottom xy)
-
env(viewport-segment-right xy)
هر متغیر دارای دو بعد است که به ترتیب موقعیت x و y را در شبکه دو بعدی ایجاد شده توسط ویژگی های سخت افزاری جداکننده بخش ها نشان می دهد.
قطعه کد زیر یک مثال ساده از ایجاد یک UX تقسیم شده است که در آن دو بخش محتوا (col1 و col2) در هر طرف فولد داریم.
<style>
/* Segments are laid out horizontally. */
@media (horizontal-viewport-segments: 2) {
#segment-css-container {
flex-direction: row;
}
#col1 {
display: flex;
flex: 0 0 env(viewport-segment-right 0 0);
background-color: steelblue;
}
#fold {
width: calc(env(viewport-segment-left 1 0) - env(viewport-segment-right 0 0));
background-color: black;
height: 100%;
}
#col2 {
display: flex;
background-color: green;
}
}
/* Segments are laid out vertically. */
@media (vertical-viewport-segments: 2) {
#segment-css-container {
flex-direction: column;
}
#col1 {
display: flex;
flex: 0 0 env(viewport-segment-bottom 0 0);
background-color: pink;
}
#fold {
width: 100%;
height: calc(env(viewport-segment-top 0 1) - env(viewport-segment-bottom 0 0));
background-color: black;
}
#col2 {
display: flex;
background-color: seagreen;
}
}
</style>
<div id="segment-css-container">
<div id="col1"></div>
<div id="fold"></div>
<div id="col2"></div>
</div>
عکسهای زیر نشان میدهند که تجربه در یک دستگاه فیزیکی چگونه به نظر میرسد.
جاوا اسکریپت
برای به دست آوردن تعداد بخشهای viewport، ورودی segments
را در visualViewport
بررسی کنید.
const segments = window.visualViewport.segments;
console.log('The viewport has the following segments:', segments);
هر ورودی در آرایه segments
هر بخش منطقی از viewport را با یک DOMArray
که مختصات و اندازه را توصیف می کند، نشان می دهد. فیلد segments
یک عکس فوری از وضعیت داده شده هنگام پرس و جو است، برای دریافت مقادیر به روز شده باید به تغییرات وضعیت بدن گوش دهید یا اندازه رویدادها را تغییر دهید و ویژگی segments
را درخواست کنید.
APIهای تاشو را امتحان کنید
APIهای تاشو در نسخه آزمایشی اصلی از Chrome 125 تا Chrome 128 در دسترس هستند. برای اطلاعات پسزمینه درباره آزمایشهای اولیه ، به شروع کار با آزمایشهای اصلی مراجعه کنید.
برای آزمایش محلی، APIهای تاشو را میتوان با پرچمگذاری ویژگیهای پلتفرم وب آزمایشی در chrome://flags/#enable-experimental-web-platform-features
فعال کرد. همچنین میتوان با اجرای Chrome از خط فرمان با --enable-experimental-web-platform-features
آن را فعال کرد.
دموها
برای دموها، به مخزن دمو مراجعه کنید. اگر دستگاه فیزیکی برای آزمایش ندارید، میتوانید دستگاه شبیهسازی شده Galaxy Z Fold 5 یا Asus Zenbook Fold را در Chrome DevTools انتخاب کنید و بین Continuous و Folded حرکت کنید. شما همچنین می توانید لولا را در صورت لزوم تجسم کنید.
لینک های مرتبط
- Device Posture API
- Viewport Segments API