مرجع عناصر HTML : عنصر <bdi>
عنصر <bdi> در HTML به الگوریتم دو جهته مرورگر میگوید که با متنی که در آن قرار دارد، جدا از متن اطرافش رفتار کند. این عنصر به ویژه زمانی مفید است که یک وبسایت به صورت پویا متنی را وارد میکند و جهت متن درج شده را نمیداند.
متن دوطرفه متنی است که ممکن است شامل توالیهایی از کاراکترها باشد که از چپ به راست (LTR) مرتب شدهاند و توالیهایی از کاراکترها که از راست به چپ (RTL) مرتب شدهاند، مانند یک نقل قول عربی که در یک رشته انگلیسی جاسازی شده است. مرورگرها الگوریتم دوطرفه یونیکد را برای مدیریت این موضوع پیادهسازی میکنند. در این الگوریتم، به کاراکترها جهتگیری ضمنی داده میشود: به عنوان مثال، کاراکترهای لاتین به عنوان LTR در نظر گرفته میشوند در حالی که کاراکترهای عربی به عنوان RTL در نظر گرفته میشوند. برخی دیگر از کاراکترها (مانند فاصلهها و برخی علائم نگارشی) به عنوان خنثی در نظر گرفته میشوند و جهتگیری آنها بر اساس کاراکترهای اطرافشان تعیین میشود.
معمولاً الگوریتم دوطرفه بدون نیاز به ارائه هیچ نشانهگذاری خاصی توسط نویسنده، کار درست را انجام میدهد، اما گاهی اوقات، الگوریتم به کمک نیاز دارد. اینجاست که وارد عمل میشود.
- عنصر برای پوشش یک محدوده متن استفاده میشود و به الگوریتم دوطرفه دستور میدهد که با این متن به صورت جداگانه از محیط اطرافش رفتار کند. این به دو روش عمل میکند:
- جهتگیری متن جاسازی شده در بر جهتگیری متن اطراف آن تأثیر نمیگذارد. جهتگیری متن تعبیهشده در تحت تأثیر جهتگیری متن اطراف قرار نمیگیرد.
برای مثال، متنی مانند زیر را در نظر بگیرید:
اگر متن جاسازیشده (EMBEDDED-TEXT) از نوع چپ به راست (LTR) باشد، این کد به خوبی کار میکند. اما اگر متن جاسازیشده از نوع راست به چپ (RTL) باشد، آنگاه عدد ۱- به عنوان متن RTL در نظر گرفته میشود (زیرا از کاراکترهای خنثی و ضعیف تشکیل شده است). نتیجهی حاصل، نامفهوم خواهد بود:
اگر از قبل جهتگیری EMBEDDED-TEXT را میدانید، میتوانید این مشکل را با قرار دادن EMBEDDED-TEXT در یک با ویژگی dir که جهتگیری آن مشخص شده است، برطرف کنید. اما اگر جهتگیری را نمیدانید - مثلاً به این دلیل که EMBEDDED-TEXT از یک پایگاه داده خوانده میشود یا توسط کاربر وارد میشود - باید از برای جلوگیری از تأثیر جهتگیری EMBEDDED-TEXT بر محیط اطراف آن استفاده کنید.
اگرچه میتوان با استفاده از قانون CSS روی یا عنصر قالببندی متن دیگر، جلوه بصری مشابهی را به دست آورد، اما نویسندگان HTML نباید از این رویکرد استفاده کنند زیرا معنایی نیست و مرورگرها مجاز به نادیده گرفتن سبکبندی CSS هستند.
قرار دادن کاراکترها در همان تأثیر استفاده از را دارد، اما معنای آن کمتر واضح است.
مانند سایر عناصر HTML، این عنصر از ویژگیهای سراسری پشتیبانی میکند، با این تفاوت که ویژگی dir متفاوت از حالت عادی رفتار میکند: به طور پیشفرض روی auto تنظیم شده است، به این معنی که مقدار آن هرگز از عنصر والد به ارث نمیرسد. این بدان معناست که مگر اینکه مقدار rtl یا ltr را برای dir مشخص کنید، مرورگر بر اساس محتویات جهت صحیح استفاده را تعیین میکند.
این مثال برندگان یک مسابقه را فقط با استفاده از عناصر فهرست میکند. وقتی نامها فقط شامل متن LTR باشند، نتایج خوب به نظر میرسند:
این مثال برندگان یک مسابقه را فقط با استفاده از عناصر فهرست میکند و یکی از برندگان نامی متشکل از متن RTL دارد. در این حالت، -1 که شامل کاراکترهایی با جهتگیری خنثی یا ضعیف است، جهتگیری متن RTL را اتخاذ میکند و نتیجه مخدوش خواهد شد:
استفاده از bdi با متن LTR و RTL
این مثال برندگان یک مسابقه را با استفاده از عناصر فهرست میکند. این عناصر به مرورگر دستور میدهند که با نام، جدا از زمینه جاسازی آن رفتار کند، بنابراین خروجی مثال به درستی مرتب شده است:
| مشخصه | توضیحات |
|---|
| دسته بندی محتوا | Flow content, phrasing content, palpable content. |
| محتوای مجاز | Phrasing content. |
| حذف برچسب | هیچکدام، هر دو تگ شروع و پایان اجباری هستند. |
| والدین مجاز | هر عنصری که محتوای عبارتبندیشده را میپذیرد. |
| نقش ضمنی ARIA | generic |
| نقشهای مجاز ARIA | Any |
| رابط DOM | HTMLElement |