برنامه نویسی

طراحی خود را با دستگاه تاشو سازگار کنید

معرفی

روش فکر کردن در مورد طراحی یک برنامه کاربردی هرگز ساده نبوده است.
چگونه اطلاعات را به درستی به کاربر نشان دهیم؟ چگونه طراحی را دلپذیر و آسان برای استفاده کنیم؟ چگونه رابط را با اندازه های مختلف تطبیق دهیم؟ سوالات تکراری هستند که باید هنگام ایجاد یک رابط کاربری پرسیده شوند.

در طول سال ها، فناوری به پیشرفت خود ادامه داده است و رویکرد طراحی Desktop First به سرعت با رویکرد Mobile First جایگزین شده است.

در سپتامبر 2020 سامسونگ اولین دستگاه تاشو را عرضه کرد: گلکسی فولد. این انتشار یک نوع کاملاً جدید از صفحه نمایش یک بار دیگر رویکرد طراحی را که تا آن زمان داشتیم بر هم زد. رویکرد Mobile First دیگر کافی نیست، توسعه دهندگان و طراحان باید نوع جدیدی از صفحه نمایش را در نظر بگیرند.

عصر طراحی واکنشگرا دوباره تکامل یافته است.

بنابراین چگونه برنامه خود را به این نوع صفحه نمایش پاسخگو کنیم؟ چگونه می توان طرح بندی های مختلف صفحه نمایش تاشو را در نظر گرفت؟

هدف این مقاله پاسخ به این سوالات و ارائه اطلاعات لازم برای ایجاد طراحی واکنشگرا در دستگاه تاشو است.

اخطار: ویژگی‌های شرح‌داده‌شده در این مقاله هنوز آزمایشی هستند، ممکن است در آینده تغییر کنند و فقط در پشت پرچم در دسترس هستند: ویژگی‌های پلتفرم وب آزمایشی کروم.

وضعیت دستگاه تاشو

طرح شکسته

چندین حالت ممکن با دستگاه های تاشو وجود دارد. این وضعیت ها عمدتاً به زاویه تمایل بستگی دارد.

چند مثال برای درک بهتر:

  • زاویه 0 مربوط به یک دستگاه بسته است
  • زاویه 140 مربوط به یک لپ تاپ یا دستگاه کتابی شکل است
  • زاویه 185 مربوط به یک دستگاه کاملاً باز است

بنابراین، جاوا اسکریپت و APIهای css باید تمام این تغییرات و همچنین سناریوهای آینده را نیز در نظر بگیرند.
نباید از این نکته غافل شد که فردا یک دستگاه می تواند در محور افقی و در عین حال در محور عمودی تا شود.

بخش های Viewport

به طور پیش فرض، اگر امکان داشتن دستگاهی با دو یا چند صفحه نمایش را در نظر نگیریم، ممکن است طراحی اپلیکیشن ما “شکسته” شود.
اما شکستگی یعنی چه؟ خوب، می تواند مانند سایتی که در حال خواندن این مقاله در آن هستید، خراب شود.

توضیحات تصویر

این تصویر به خوبی واقعیت داشتن طرح شکسته را نشان می دهد. این شبیه سازی روی سطح دوتایی انجام شد. تاشوی این دستگاه برخی از کلمات، حروف و غیره را پنهان می کند.

برای حل این مشکل و گفتن به مرورگر برای قرار دادن عناصر، یک پرسش رسانه جدید در دسترس است: viewport-segments
این درخواست رسانه به دو صورت رد می شود:

  • افقی-نمای-بخش ها
  • عمودی-نمای-بخش

چرا دو نوع؟ خوب، صرفاً به این دلیل که دستگاه شما می تواند به دو روش مختلف جهت دهی شود:

اگر دستگاه در حالت افقی قرار گرفته باشد، این به طور طبیعی به این معنی است که دستگاه دارای 1 یا چند صفحه در محور افقی است. پرس و جوی رسانه ای که باید استفاده شود، مربوط به محور افقی خواهد بود.

@media(horizontal-viewports-segments /**number of screen**/){}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر دستگاه در حالت عمودی قرار گرفته باشد، برخلاف حالت افقی، دستگاه دارای 1 یا چند صفحه در محور عمودی است. پرس و جو رسانه ای که باید استفاده شود، همان پرسشی خواهد بود که به محور عمودی مرتبط است.

@media(vertical-viewports-segments /**number of screen**/){}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک مثال در تصویر گویاتر خواهد بود.

نمودار از Microsoft Edge Explainers.

در مورد سطح دوتایی، اگر دستگاه در حالت افقی جهت یابی شود، درخواست رسانه به صورت زیر نوشته می شود:

@media(horizontal-viewport-segments 2) {}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برعکس، اگر سطح دوتایی در حالت عمودی جهت‌گیری شود، پرسش رسانه به این صورت نوشته می‌شود:

@media(vertical-viewport-segments 2) {}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در خود پرس و جو رسانه ای بخش های دید به طراحی اپلیکیشن کمکی نمی کند. این رسانه برای شناسایی تعداد صفحاتی که برنامه در آنها نمایش داده می شود استفاده می شود.

برای اینکه بتوانیم عناصر طراحی مختلف برنامه خود را در اطراف “فولد” به درستی قرار دهیم، شش متغیر محیطی جدید ایجاد شده است.

متغیر محیط ها

متغیرهای محیطی در CSS به شما این امکان را می‌دهند که نفوذهای ناخوشایند دستگاه را در سبک‌های خود فاکتور بگیرید.

بیایید آیفون‌های نسخه X را مثال بزنیم. همه این تلفن‌ها دارای یک بریدگی هستند که می‌تواند طراحی برنامه شما را خراب کند.
برای قرار دادن صحیح عناصر در اطراف این بریدگی، متغیرهای محیطی ایجاد شده است. این مورد برای مثال متغیر محیطی است امن-منطقه ورودی-بالا.

در مورد دستگاه های تاشو، 6 متغیر محیطی جدید ظاهر می شود:

  • viewport-segment-width
  • viewport-segment-height
  • viewport-segment-top
  • viewport-segment-right
  • viewport-segment-bottom
  • viewport-segment-left

این کلمات کلیدی باید در تابع env() استفاده شوند. متغیرهای محیط css مانند ویژگی های سفارشی رفتار می کنند، به این معنی که در صورتی که متغیر محیطی وجود نداشته باشد، می توان یک مقدار اضافی به تابع env به عنوان مقدار برگشتی ارسال کرد.

متغیرهای محیطی عمدتاً بر اساس viewport هستند. بنابراین لازم است یک متا تگ در صفحه اصلی HTML اضافه کنید.

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای استفاده از متغیر محیطی دستگاه تاشو، نحو به شرح زیر است:

env(viewport-segment-width x y, /** fallback value **/)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

x شاخص صفحه در محور افقی و y شاخص صفحه در محور عمودی است.

به عنوان مثال، اگر بخواهیم اندازه صفحه دوم را در محور افقی بازیابی کنیم، نحو به صورت زیر خواهد بود.

width: env(viewport-segment-width 1 0)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نمودار همیشه بیشتر از یک سخنرانی طولانی نشان می دهد

نمودار برای Microsoft Edge Explainers

با این متغیرهای محیطی، بسیاری از امکانات طراحی در دسترس ما است.

برای مثال می‌توانیم یک تصویر ثابت و روی صفحه‌ای دیگر یک متن طولانی قابل پیمایش قرار دهیم.

بیا کدش رو بزاریم 🙂

<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="index.css">
    <title>Document</title>
  </head>

  <body>
    <main>
      <aside>
        <img alt="foldable device image" src="./foldable_screen.jpeg" />
      </aside>
      <article>
        Long scrollable text ...
      </article>
  </body>
</html>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

html {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

body {
  margin: 0;
  padding: 0;
}

main {
  display: flex;
  height: 100%;
  width: 100%;
}

@media (horizontal-viewport-segments: 2) and (vertical-viewport-segments: 1) {
  aside img  {
    position: absolute;
    height: 100%;
    width: env(viewport-segment-width 0 0);
    top: env(viewport-segment-top 0 0);
  }
  main article {
    position: absolute;
    box-sizing: border-box;
    padding-left: 1rem;
    height: 100%;
    overflow: auto;
    left: env(viewport-segment-left 1 0);
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دو خط

  • عرض: env(viewport-segment-width 0 0)
  • top: env(viewport-segment-top 0 0)
    به شما امکان می دهد موقعیت تصویر و اندازه آن را مشخص کنید. در مورد ما، من می خواهم تصویر را در کل صفحه اول قرار دهم.

خط چپ: env(viewport-segment-left 1 0) اجازه دهید متن در کل صفحه دوم قرار گیرد. برای زیبایی شناسی بصری، padding-left ویژگی اجازه می دهد تا متن را از تاشو جابجا کنید.

نتیجه به شرح زیر است:

توضیحات تصویر

واکنش به تغییر اندازه یا رویدادهای تغییر وضعیت بدن

گاهی اوقات ممکن است بخواهیم برخی از منطق جاوا اسکریپت را بسته به وضعیت متفاوت دستگاه درک کنیم، یا بخواهیم به تغییر اندازه واکنش نشان دهیم.

برای این جاواسیپت به ما این امکان را می دهد که به راحتی تعداد صفحه نمایش دستگاه را بازیابی کنیم

window.addEventListener(() => {
 console.log(window.visualViewport.segments);
/**
If no segments this seems that the foldable device is closed.
If one or more segements window.visualViewport.segments is an array
**/
})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

می خواهید با این API های شگفت انگیز بازی کنید

ابتدا در فلگ های کروم فعال کنید

  • جاوا اسکریپت تجربی
  • ویژگی های پلتفرم وب آزمایشی
  • Device Posture API

پرچم های کروم برای فعال کردن

در کنسول chrome devtools به قسمت تنظیمات بروید سپس به پنل آزمایشات بروید و گزینه را فعال کنید شبیه سازی: پشتیبانی از حالت صفحه نمایش دوگانه

ابزارهای توسعه کروم

شما آماده حرکت هستید، اکنون می توانید هنگام تقلید از یک دستگاه تلفن همراه، دستگاه suface duo یا galexy fold را انتخاب کنید 😉

نتیجه

آیا صفحه نمایش های تاشو نسل بعدی موبایل هستند؟ هنوز خیلی زود است که بگوییم. بنابراین برای یک توسعه‌دهنده وب بسیار مهم است که ذهن خود را باز نگه دارد و طراحی برنامه‌اش را کدنویسی کند تا با هر آنچه که آینده ممکن است به همراه داشته باشد، سازگار باشد. این چیزی است که طراحی واکنشگرا ارائه می دهد.

طراحی واکنش گرا مجموعه ای از تکنیک های عملی را به شما ارائه می دهد اما همچنین ذهنی باز را به شما ارائه می دهد که به شما امکان می دهد برنامه های خود را برای وب فردا تطبیق دهید.

منبع

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا