font-synthesis в CSS — заборона підробки жирного й курсиву


Властивість font-synthesis дає змогу вказати, чи може браузер дозволяти синтезувати жирний або косий шрифт, коли для цієї мети сімейство шрифтів не має спеціального гліфа.

Властивість font-synthesis є однією із властивостей, введених у CSS3, для того, щоб увімкнути різні функції, пов'язані з шрифтами, які можуть покращити зовнішній вигляд тексту на сторінці. Властивість дозволяє відключити поведінку користувацького агента за умов синтезу жирних та / або похилих шрифтів, коли у сімейства шрифтів немає жирних або похилих облич для гліфів.

На прикладі вище, для тексту застосований шрифт, який не має гліфів для похилих символів. Тому, як ми бачимо у першому рядку, він стає курсивним. Але для другого рядка ми застосували властивість font-synthesis зі значенням none, що відключило можливість браузера автоматично перетворити символи й залишило їх у нормальному вигляді.

Багато шрифтів включають жирний і курсивний варіанти кожного шрифту. Якщо сімейство шрифтів не включає їх, браузер синтезує процес. Властивість font-synthesis може бути використано для чіткої вказівки браузера не робити цього.

автор: Svitlana

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

автор: NagarD

Синтаксис

font-synthesis: none | [ weight || style ]

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

none

Заборонити всі синтетичні обличчя.

автор: Svitlana

weight

Вказує, що браузеру дозволено синтезувати жирний текст.

автор: Svitlana

style

Вказує, що браузеру дозволено синтезувати курсивний текст.

автор: Svitlana

Значення без задання: weight style
Наслідує: Так
Анімується: Ні
JavaScript синтаксис: object.style.fontSynthesis = '';

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
97 34 9 83 97 —
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
97 97 34 9

Приклади

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

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

HTML

<p>Значення без задання.</p>
<p class="no">Відключаємо синтез.</p>

CSS

p {
  font-style: oblique;
  font-size: 2.8em;
}

.no {
  font-synthesis: none;
}
автор: Svitlana

Коли у шрифту немає справжніх жирного або курсивного накреслень, браузер «домальовує» їх сам. font-synthesis: none це забороняє — у другому рядку b та i можуть виглядати звичайним накресленням. Різниця залежить від того, який шрифт cursive у твоїй системі.

HTML

<p class="syn"><b>Жирний</b> і <i>курсив</i> — синтез дозволено.</p>
<p class="none"><b>Жирний</b> і <i>курсив</i> — синтез заборонено.</p>

CSS

p {
    font-family: cursive;
    font-size: 22px;
}

.none {
    font-synthesis: none;
}
автор: Svitlana

Родина OneFace оголошена через @font-face з одним-єдиним накресленням (файл береться з системи, без мережі). Ліворуч браузеру дозволено підробляти, праворуч — заборонено: жирний, курсив і капітель зникають, бо справжніх накреслень у родини немає. Останній ряд — той самий текст звичайним sans-serif, у якого жирний і курсив справжні: там заборона не міняє нічого.

HTML

<div class="pair">
    <p class="one bold">Товщину підроблено: font-weight 700</p>
    <p class="one bold nosyn">Заборонено: font-synthesis none</p>
</div>

<div class="pair">
    <p class="one ital">Курсив підроблено: font-style italic</p>
    <p class="one ital nosyn">Заборонено: font-synthesis none</p>
</div>

<div class="pair">
    <p class="one caps">Капітель підроблено: small-caps</p>
    <p class="one caps nocaps">Заборонено: font-synthesis-small-caps none</p>
</div>

<div class="pair sys">
    <p class="bold">Системний шрифт, жирний справжній</p>
    <p class="bold nosyn">Той самий, із font-synthesis: none</p>
</div>

CSS

@font-face {
    font-family: OneFace;
    src: local("DejaVu Sans"), local("Liberation Sans"), local("Arial"),
         local("Helvetica Neue"), local("Roboto"), local("Segoe UI");
    font-weight: 400;
    font-style: normal;
}

.pair {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-bottom: 10px;
    padding: 8px;
    background: #eef1f5;
    border-left: 4px solid #2f6fd0;
}

.pair p {
    flex: 1 1 260px;
    margin: 0;
    font-size: 20px;
}

.sys {
    border-left-color: #8a94a6;
}

.sys p {
    font-family: system-ui, sans-serif;
}

.one {
    font-family: OneFace, sans-serif;
}

.bold {
    font-weight: 700;
}

.ital {
    font-style: italic;
}

.caps {
    font-variant-caps: small-caps;
}

.nosyn {
    font-synthesis: none;
}

.nocaps {
    font-synthesis-small-caps: none;
}
автор: NagarD

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

HTML

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

<div class="inputs">
  <input id="none" checked name="font-synthesis" type="radio"/>
  <label for="none">none</label>
  <message for="none">Заборонити всі синтетичні обличчя.</message>
  
  <input id="weight" name="font-synthesis" type="radio"/>
  <label for="weight">weight</label>
  <message for="weight">Вказує, що браузеру дозволено синтезувати жирний текст.</message>
    
  <input id="style" name="font-synthesis" type="radio"/>
  <label for="style">style</label>
  <message for="style">Вказує, що браузеру дозволено синтезувати курсивний текст.</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: 3.5em; 
  text-align: center;
  font-synthesis: none;
}

message {
  display: none;
}

JS

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

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

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

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

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

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