CSS unicode-bidi — порядок двонаправленого тексту


Властивість unicode-bidi задає напрямок відображення тексту.

Властивість unicode-bidi

Використовується разом з властивістю direction для підтримки декількох мов в одному документі.

Браузер інколи може не зрозуміти дві різні мови в одному документі і може відобразити одну з них неправильно, наприклад, арабську, яка має бути відображена справа наліво. Ця властивість примусово змушує браузер відображити текст в потрібному напрямку.

Наприклад, якщо блок контенту містить текст, який пишеться зліва направо, так і текст, який пишеться справа наліво, то бразер використовує складний алгоритм, щоб вирішити, як правильно його відображати. Властивість unicode-bidi вимикає застосування цього алгоритму і дозволяє розробнику самому керувати вставкою тексту.

автор: Svitlana

Загальний опис

автор: NagarD

Синтаксис

unicode-bidi: normal|embed|bidi-override|intitial|inherit;

Властивість unicode-bidi може отримувати 5 значень:

normal

Браузер самостійно визначає, як йому слід відображати текст на основі символів Unicode

автор: Svitlana

embed

Перевизначає параметри тексту, розташовуючи його, як зазначено у властивості direction

автор: Svitlana

bidi-override

Аналогічний embed, але ще й змінюється порядок символів в тексті на зворотній.

автор: Svitlana

initial

Встановлює властивість у значення без задання

автор: Svitlana

inherit

Вказує на спадковість властивості від свого батьківського елемента (якщо відповідна властивість встановлена).

автор: Svitlana

Значення без задання: normal
Наслідує: Так
Анімується: Ні
JavaScript синтаксис: object.style.unicodeBidi="bidi-override"

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
2 1 1.3 9.2 12 5.5
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1

Приклади

+ запропонувати свій приклад у пісочниці

bidi-override разом із direction: rtl примусово малює символи справа наліво — рядок читається задом наперед. Без override алгоритм двоспрямованого тексту сам вирішив би порядок.

HTML

<div class="over">Цей текст виведено у зворотному порядку.</div>
<div>А цей — звичайний.</div>

CSS

.over {
    direction: rtl;
    unicode-bidi: bidi-override;
}
автор: Svitlana

Ім'я справа наліво в українському реченні: без ізоляції двокрапка й число перестрибують, unicode-bidi: isolate це лікує.

HTML

<ul>
    <li>Учасник <span>עברית</span>: 90 балів — без ізоляції</li>
    <li>Учасник <span class="iso">עברית</span>: 90 балів — з isolate</li>
</ul>

CSS

li {
    margin-bottom: 8px;
    font-size: 18px;
}

span {
    padding: 0 2px;
    background: #ffe9b3;
}

.iso {
    unicode-bidi: isolate;
}
автор: NagarD

Значення у дії

HTML

<p>Цей приклад показує як працює властивість <code>unicode-bidi</code>. Спробуйте вимкнути/ввімкнути перемикач, щоб змінити відображення тексту нижче.</p>

<p>У цьому прикладі, ми можемо змінювати напрямок тексту та символів.</p>

<div class="inputs">
  <input id="normal" checked name="unicode-bidi" type="radio"/>
  <label for="normal">normal</label>
  <message for="normal">Браузер самостійно визначає, як йому слід відображати текст на основі символів Unicode.</message>
  
  <input id="bidi-override" name="unicode-bidi" type="radio"/>
  <label for="bidi-override">bidi-override</label>
  <message for="bidi-override">Змінюється порядок символів в тексті на зворотній.</message>
</div>

<p id="message">Браузер самостійно визначає, як йому слід відображати текст на основі символів Unicode.</p>

<hr>

<p id="block">Це текст. <br> Просто текст для прикладу.</p>

CSS

* {
  box-sizing: border-box;
  padding: 0;
}

body {
  font-family: sans-serif;
}

#block {
  font-size: 1.75em; 
  direction: rtl;
  unicode-bidi: normal;
}

message {
  display: none;
}

JS

const message = document.querySelector('#message');

document.querySelectorAll('.inputs input').forEach((el) => el.addEventListener('change', function () {

  var messageText = document.querySelector("message[for='" + this.id + "']");
  message.textContent = messageText?.textContent ?? '';

  document.querySelectorAll('#block').forEach((n) => n.style.setProperty('unicode-bidi', this.id));

}));
автор: Svitlana

Приклад використання

HTML

<h3>unicode-bidi: normal | embed | bidi-override</h3>
<div class="table">
    <div>
        <span class="to-mixed">Lorem ipsum dolor sit, amet consectetur adipisicing.</span>
        <p>unicode-bidi: normal</p>
    </div>
    <div>
        <span class="to-upright">Lorem ipsum dolor sit, amet consectetur adipisicing.</span>
        <p>unicode-bidi: embed</p>
    </div>
    <div>
        <span class="to-sideways">Lorem ipsum dolor sit, amet consectetur adipisicing.</span>
        <p>unicode-bidi: bidi-override</p>
    </div>
</div>

CSS

body{
    position: relative;
    margin: 0px;
    padding: 20px;
    font-family: "Arial";
    font-size: 18px;
}
h3{margin-top: 0px; color: #555; text-align: center;}
.table{
    display: table;
    width: 100%;
    height: 100%;
    min-height: 200px;
    position: relative;
    box-shadow: 0px 0px 2px #999;
}
.table div{
    display: table-cell;
    position: relative;
    background: white;
    vertical-align: middle;
    height: 300px;
    box-sizing: border-box;
    padding: 20px;
    text-align: center;
    box-shadow: inset 0px 0px 2px #999;
}
span{
    writing-mode: vertical-rl;
  unicode-bidi: bidi-override;

  display: inline-block;
  background: white;
  padding: 20px 15px;
  color: black;
  border: 1px dashed blue;
}
/*1*/
.to-mixed{
/*     direction: rtl; */
    unicode-bidi: normal;
}
.to-upright{
    direction: rtl;
    unicode-bidi: embed;
}
.to-sideways{
  direction: rtl;
  unicode-bidi: bidi-override;
}
автор: Svitlana

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід