متدهای Visibility
در زمان ساخت و اشکالزدایی UI، تکنیکهایی برای نمایش محتوا، پنهانسازی بصری، یا مخفیسازی کامل وجود دارد که باید با آنها آشنا باشید! این تکنیکها میتوانند در قابل دسترس بودن یا نبودن یک عنصر تأثیر مستقیم داشته باشند.
کلاسهای CSS مانند .visually-hidden یا .sr-only
کلاسهای سفارشی CSS مثل .visually-hidden یا .sr-only معمولاً برای افزودن محتوایی به کار میروند که بهصورت بصری دیده نمیشوند ولی توسط screen reader خوانده میشوند. نسخههای مدرن این کلاسها ترکیبی از ویژگیهایی مانند موقعیت مطلق، clip، margin منفی، overflow: hidden و غیره را به کار میگیرند.
در اینجا کلاس .sr-only در Tailwind:
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}استفاده از display: none در CSS
ویژگی display: none باعث مخفی شدن کامل محتوا برای همه میشود: کاربران کیبورد، screen reader، و کاربران بینا. فضای اشغالشده توسط عناصر با این ویژگی نیز بهطور کامل حذف میشود.
.custom-dropdown-panel {
display: none;
}
.custom-dropdown-panel.active {
display: flex;
}display: none یکی از ابزارهای کلیدی در UI است، ولی باید در نظر داشت که این ویژگی سایر ویژگیهای display مانند flex، grid یا block را خنثی میکند. همچنین بدون keyframe animation قابل انیمیشنسازی نیست.
استفاده از visibility: hidden در CSS
ویژگی visibility: hidden مشابه display: none باعث پنهان شدن محتوا میشود و دسترسی آن را از طریق کیبورد و screen reader نیز غیرفعال میکند، ولی برخلاف display: none فضای بصری آن را حفظ میکند. این ویژگی هم بدون keyframe animation قابل انیمیشنسازی نیست.
<div style="visibility: hidden;">
</div>استفاده از opacity: 0 در CSS
ویژگی opacity با display و visibility متفاوت است. این ویژگی محتوا را از لحاظ بصری نامرئی میکند ولی همچنان برای کیبورد و screen reader قابل دسترس باقی میماند. همچنین قابل انیمیشنسازی است.
<div style="opacity: 0;">
</div>ویژگی aria-hidden
هیچکدام از ویژگیهای ARIA بر روی نمایش بصری یا دسترسی از طریق کیبورد تأثیر ندارند. اما ویژگی aria-hidden باعث پنهان شدن محتوا از screen reader میشود. این ویژگی ممکن است باعث سردرگمی تیمها شود، چرا که اثر آن در ظاهر مشخص نیست.
<div aria-hidden="true">
<h1>This heading will be hidden from screen readers</h1>
<button>This button will still be focusable without `tabIndex="-1"`</button>
</div>ویژگی hidden در HTML
ویژگی hidden یکی از ویژگیهای داخلی HTML است و عملکردی مشابه display: none دارد. بنابراین دقیقاً همان اثر را خواهد داشت و میتواند توسط CSS بازنویسی شود.
<div hidden>
<button>This button is hidden also</button>
</div>