The <bdi> tag (bidirectional isolation) is one of the HTML5 elements. It is used to isolate a bidirectional text when a language with right-to-left directionality (such as Arabic or Hebrew) is used in line with left-to-right languages. Note, that the <bdi> tag does not physically turn the text, it only tells the browser that it should read the text in the opposite direction.
Bidirectional text can contain sequences of characters arranged right-to-left (RTL) and sequences of characters arranged left-to-right (LTR).To handle this, browsers use the Unicode Bidirectional Algorithm in which characters are given a certain directionality. Some characters (e.g. some punctuation and spaces) are treated as neutral, and their directionality depends on the directionality of their near characters.
In general, the bidirectional algorithm will work properly, and there won’t be a need to provide a special markup. However, sometimes the algorithm may need help. In such cases, <bdi> is used.
The <bdi> tag wraps a text span and works in the following ways:
- The directionality of text embedded in the <bdi> tag doesn’t affect the directionality of the surrounding text.
- The directionality of the surrounding text doesn't affect the directionality of text embedded in the <bdi> tag.
The <bdi> tag is similar to the older <bdo> tag. The <bdi> element isolates the contained text from the text around it, whereas <bdo> just reverses the direction. It is generally recommended to use <bdi> to prevent unexpected rendering problems that can arise with <bdo> .
The <bdi> tag comes in pairs. The content is written between the opening (<bdi>) and closing (</bdi>) tags.
Example of the HTML <bdi> tag:
<html> <head> <title>Title of the document</title> </head> <body> <h1> Example of using the bdi element </h1> <p dir="ltr"><bdi>أرمينيا جميلة</bdi> This sentence in Arabic is automatically displayed from right to left.</p> </body> </html>
How to style <bdi> tag?
Common properties to alter the visual weight/emphasis/size of text in <bdi> tag:
- CSS font-style property sets the style of the font. normal | italic | oblique | initial | inherit.
- CSS font-family property specifies a prioritized list of one or more font family names and/or generic family names for the selected element.
- CSS font-size property sets the size of the font.
- CSS font-weight property defines whether the font should be bold or thick.
- CSS text-transform property controls text case and capitalization.
- CSS text-decoration property specifies the decoration added to text, and is a shorthand property for text-decoration-line, text-decoration-color, text-decoration-style.
Coloring text in <bdi> tag:
- CSS color property describes the color of the text content and text decorations.
- CSS background-color property sets the background color of an element.
Text layout styles for <bdi> tag:
- CSS text-indent property specifies the indentation of the first line in a text block.
- CSS text-overflow property specifies how overflowed content that is not displayed should be signalled to the user.
- CSS white-space property specifies how white-space inside an element is handled.
- CSS word-break property specifies where the lines should be broken.
Other properties worth looking at for <bdi> tag:
- CSS text-shadow property adds shadow to text.
- CSS text-align-last property sets the alignment of the last line of the text.
- CSS line-height property specifies the height of a line.
- CSS letter-spacing property defines the spaces between letters/characters in a text.
- CSS word-spacing property sets the spacing between words.