DEFENSIVE CSS
امیرعطا فرجی
علیرضا بینش
REMEMBER TO WRAP YOUR FLEX.
>Ata! DEFENSIVE CSSهر روزه از flex برای پیادهسازی انواع چیدمانها استفاده میکنیم. اما گاهی اوقات بر اساس نیازهای زمان حال چیدمان را طراحی میکنیم و فکر آینده را نمیکنیم. در flex اگر تعداد فرزندها زیاد بشود ممکن است چیدمانمان به هم بریزد. با کد ساده flex-wrap: wrap; میتوانیم این مشکل را حل کنیم.
PREVENT IMAGE DISTORTION
>Ata! DEFENSIVE CSSعکسها از مهمترین المانهای هر وبسایتی هستند. اما ما کنترلی بر روی همه عکسهای وبسایت و Aspect Ratio آنها نداریم چون ممکن است از طرف کاربر آپلود شده باشند یا Back-end ما عکسهایی متفاوت نسبت به آنچه در ذهن داشتیم برایمان بفرستد. راحتترین و بهترین کار قرار دادن object-fit: cover; بر عکس مربوطه است.
DON'T
LET TEXT
WRAP OR OVERFL...
>Ata!
DEFENSIVE CSS
در دنیای ایدهآل، متنها همگی به اندازه مناسبی هستند و همگی در المانی که تعبیه شدهاند به خوبی جای میگیرند و از آن بیرون نمیزنند. اما در دنیای واقعی، ما باید آماده هر نوع متن با هر اندازهای باشیم. برای این بهتر است تا حدی که المان پدر اجازه میدهد تا متن بدون آن که بشکند یا بیرون از آن قرار بگیرد، متن را نشان بدهیم و بقیه آن را سه نقطه قرار بدهیم که با دستور text-overflow: ellipsis; قابل دستیابی میباشد.
SET BACKGROUND COLORS FOR IMAGES
>Ata! DEFENSIVE CSSبعضی وقتها ممکن است نوشتهای را روی عکس قرار بدهیم. این کار مشکلی ندارد ولی اگر عکس load نشود و رنگ نوشته با رنگ پسزمینه نزدیک باشد و یا حتی همرنگ باشد، آن موقع متن را به سختی میتوان خواند. میتوانیم با کد ساده background-color: white; این مشکل را حل کنیم.
INPUT ZOOM ON SAFARI
>Ata! DEFENSIVE CSS
مشکلی در مرورگر Safari گوشیها وجود دارد و آن هم این مورد است که وقتی بر inputای میزنیم تا اطلاعاتمان رو وارد کنیم، صفحه زوم میشه تا آن input در مرکز توجه کاربر باشد. مشکل از جایی شروع میشود که نمیتوانیم به عقب زوم کنیم. با اعمال سایز فونت ثابت
font-size: 16px;
این مشکل را میتوانیم حل کنیم.
HOVER ON MOBILE DEVICES
>Ata! DEFENSIVE CSSوقتی برای حالت hover استایلهایی را تعریف میکنیم، مخاطبمان از این کار کسانی هستند که از mouse یا trackpad استفاده میکنند. با موبایل هم حالت hover را با نیمه لمس کردن میشود فعال کرد اما نه تنها این فعال کردن خوب نیست بلکه میتواند به کاربر تجربه بدی بدهد. ما میتوانیم با @media (hover: hover){ // code } این مشکل را برطرف کنیم.
HIDDEN SCROLLBARS
>Alireza DEFENSIVE CSSبرای بعضی آیتمها که محتوای طولانی دارند بهتر است که scrollbar قرار بدهیم. اما ممکن است متن ما متغیر باشد، و همیشه scrollbar به کارمان نیاید و در این حالت scrollbar نباید نشان داده بشود. اگر از دستور overflow-y: auto; استفاده کنیم، فقط در صورت نیاز scrollbar نشان داده میشود.
STICKY GRIDS
>Alireza DEFENSIVE CSS
ممکن است وقتی کل چینش سایت را با grid انجام دادهاید، نیاز شده که قسمتی را sticky کنید، مثل منوی کناری. در این حالت خواهید دید که آن المان تمام ارتفاع کلی grid را میگیرد.
در این حالت باید با
align-self: start;
آن المان را از حالت پیش فرض stretch در بیاورید و به start تغییر بدهید.
WHY MY ::WEBKIT AND :MOZ DOESN'T WORK?
>Alireza DEFENSIVE CSS
بعضی وقتها از vendorهایی مثل webkit یا moz استفاده میکنیم. در این حالت ممکن است چند vendor را با هم انتخاب کنیم تا استایل مشابه را به آنها اعمال کنیم. اما این روش کار نمیکند و ممکن است اصلا بلافاصله متوجه نشوید و ساعتها درگیر این موضوع بشوید. راه درست این است که جدا انتخابشان کنیم.
::webkit {} :moz {}
MIND YOUR SCROLLBAR
>Alireza DEFENSIVE CSS
ممکن است صفحهای را با دقت زیادی طراحی کرده باشید ولی یادتان رفته باشد که scrollbarها هم فضا اشغال میکنند و موقعی که محتوا کمی زیاد شد و scrollbarها نشان داده شدند، چیدمان صفحهتان به هم خورده باشد. برای جلوگیری از این مشکل، کد
scrollbar-gutter: stable;
رو به المان مد نظرتون اضافه کنید تا برای scrollbar فضا رزرو کند.
AUTO-FILL
vs.
AUTO-FIT
>Alireza
DEFENSIVE CSS
ممکن است در حین ایجاد grid بین دو کلیدواژه auto-fill و auto-fit بمانیم و در آخر شانسی یکی را انتخاب کنیم. ممکن است بعد از چند وقت، چیدمان صفحهمان یک سری رفتارهایی از خود نشان بدهد که ندانیم از کجا ناشی میشوند. مثل المانهایی با عرض خیلی زیاد که میتواند نتیجه انتخاب نادرست ما باشد. به طور کلی اگر از
repeat(auto-fill, minmax(250px, 1fr));
استفاده کنیم کمتر چنین مشکلاتی پیش میآید.
SCROLL!
DON'T SCROLL!
>Alireza
DEFENSIVE CSS
ممکن است شما هم در سایتی صفحه modalای یا inputای که متن و محتوای طولانیای دارد و قابل scrollاست را میخوانید که scroll میکنید و به آخر میرسید و بعد آن صفحه اصلی شروع به scroll کردن میکند. این UX بدی میباشد و میتوانیم با کد
overscroll-behavior-y: contain;
این مشکل را برطرف کنیم.