CSS writing-mode — вертикальний напрямок тексту


Властивість writing-mode визначає, чи текст буде розташований горизонтально чи вертикально.

автор: Svitlana

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

автор: NagarD

Синтаксис

writing-mode: horizontal-tb | vertical-rl | vertical-lr;

Властивість writing-mode може отримувати 3 значень:

horizontal-tb

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

автор: Svitlana

vertical-rl

Вміст блоку розташований вертикально зверху вниз, горизонтально справа наліво. Наступна вертикальна лінія розташована ліворуч від попереднього рядка.

автор: Svitlana

vertical-lr

Вміст блоку розташований вертикально зверху вниз, горизонтально зліва направо. Наступна вертикальна лінія розташована праворуч від попереднього рядка.

автор: Svitlana

Значення без задання: horizontal-tb
Наслідує: Так
Анімується: Ні
JavaScript синтаксис: object.style.writingMode

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
48 41 10.1 35 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
48 48 41 10.3

Приклади

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

vertical-rl кладе рядки вертикально: текст іде згори донизу, а наступні рядки лягають лівіше (справа наліво).

HTML

<p class="v">Вертикальний рядок: згори донизу.</p>
<p>Звичайний горизонтальний абзац для порівняння.</p>

CSS

.v {
    writing-mode: vertical-rl;
    height: 200px;
}
автор: Svitlana

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

HTML

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

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

<div class="inputs">
  <input id="horizontal-tb" checked name="writing-mode" type="radio"/>
  <label for="horizontal-tb">horizontal-tb</label>
  <message for="horizontal-tb">Вміст блоку розташований горизонтально зліва направо, вертикально зверху вниз. Наступна горизонтальна лінія розташована під попередньою лінією.</message>
  
  <input id="vertical-rl" name="writing-mode" type="radio"/>
  <label for="vertical-rl">vertical-rl</label>
  <message for="vertical-rl">Вміст блоку розташований вертикально зверху вниз, горизонтально справа наліво. Наступна вертикальна лінія розташована ліворуч від попереднього рядка.</message>
  
  <input id="vertical-lr" name="writing-mode" type="radio"/>
  <label for="vertical-lr">vertical-lr</label>
  <message for="vertical-lr">Вміст блоку розташований вертикально зверху вниз, горизонтально зліва направо. Наступна вертикальна лінія розташована праворуч від попереднього рядка.</message>
</div>

<p id="message">Вміст блоку розташований горизонтально зліва направо, вертикально зверху вниз. Наступна горизонтальна лінія розташована під попередньою лінією.</p>

<hr>

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

CSS

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

body {
  font-family: sans-serif;
}

#block {
  font-size: 1.75em; 
  writing-mode: horizontal-tb;
}

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('writing-mode', this.id));

}));
автор: Svitlana

Три однакові підписи. writing-mode: vertical-rl повертає рядок і реально звужує блок; додавання text-orientation: upright ставить літери сторч; transform: rotate() лише малює текст повернутим — коробка лишається широкою, і підпис вилазить за неї.

HTML

<div class="row">
  <div class="cell v">Вертикально</div>
  <div class="cell v up">Вертикально</div>
  <div class="cell rot"><span>Вертикально</span></div>
</div>
<p>сірим показано справжні коробки елементів</p>

CSS

body {
  font-family: sans-serif;
  font-size: 15px;
  padding: 12px;
}

p {
  margin-top: 18px;
  font-family: monospace;
  color: #444;
}

.row {
  display: flex;
  gap: 12px;
  align-items: flex-start;
}

.cell {
  height: 170px;
  padding: 8px;
  background-color: #dde4ef;
  border: 1px solid #4a6fa5;
}

.v {
  writing-mode: vertical-rl;
}

.up {
  writing-mode: vertical-rl;
  text-orientation: upright;
}

.rot span {
  display: inline-block;
  transform: rotate(90deg);
  transform-origin: left top;
}
автор: NagarD

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

HTML

<h3>writing-mode: horizontal-tb | vertical-rl | vertical-lr;</h3>
<div class="table">
    <div>
        <span class="horizontal-tb">Зразок<br> тексту.</span>
        <p>writing-mode: horizontal-tb</p>
    </div>
    <div>
        <span class="vertical-rl">Зразок<br> тексту.</span>
        <p>writing-mode: vertical-rl</p>
    </div>
    <div>
        <span class="vertical-lr">Зразок<br> тексту.</span>
        <p>writing-mode: vertical-lr</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{
  display: inline-block;
  background: white;
  padding: 20px 15px;
  color: black;
  border: 1px dashed blue;
}

.horizontal-tb{
    riting-mode: horizontal-tb
}
.vertical-rl{
    writing-mode: vertical-rl;
}
.vertical-lr{
   writing-mode: vertical-lr;
}
автор: 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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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