FontForge: При сохранении шрифта из ttf в woff2, теряется вес
@font-face {
font-family: 'Open Sans';
src: url(./f_latin.ttf) format('truetype');
}
body {
font-family: 'Open Sans';
}
Использую программу FontForge, исходный формат ttf, необходимо сохранить шрифт в woff2.
Собственно, столкнулся с тем, что после преобразования в формат woff2, перестает работать font-weight.
Результат с woff2:
@font-face {
font-family: 'Open Sans';
src: url(./test.woff2) format('woff2');
}
body {
font-family: 'Open Sans';
}
Видно что даже шрифт немного изменился. Он по прежнему применяется, но непонятно почему он меняется и перестает работать диапазон насыщенности от 350 до 700.
Я только начинаю осваиваться, пытаться работать со шрифтами. Для себя выбрал программу FontForge, возможно есть лучший вариант. но этот бесплатный. Подскажите если что...
Не знаю как загрузить архив с исходным шрифтом, загрузил на яндекс диск: https://disk.yandex.ru/d/kyRk7H2CZ0G35A
Там всего 1 файл шрифта ttf.
Просто, открыл файл, далее Файл -> сохранить как шрифт. Ничего не меняя, сохраняю. И на выходе получаю другое отображение шрифта без возможности контролировать вес.

https://ru.stackoverflow.com/posts/1618024/edit#
@font-face {
font-family: 'Open Sans';
font-display: swap;
src: url(./f_latin.ttf) format('truetype');
}
* {
position: relative;
margin:0;
outline: none;
box-sizing:border-box;
-webkit-tap-highlight-color: transparent;
}
body {
display: flex;
gap:10px;
margin:10px;
height:400px;
> div {
border: 1px solid #000;
> p {
padding: 10px;
}
}
}
<html lang="ru-RU">
<head>
</head>
<body>
<div style="font-family: 'Open Sans';">
<p style='font-weight: 700; font-size:20px;'>weight-700/size-20: Test Test Test Test</p>
<p style='font-weight: 670; font-size:19px;'>weight-670/size-19: Test Test Test Test</p>
<p style='font-weight: 550; font-size:18px;'>weight-550/size-18: Test Test Test Test</p>
<p style='font-weight: 400; font-size:16px;'>weight-400/size-16: Test Test Test Test</p>
<p style='font-weight: 300; font-size:14px;'>weight-300/size-14: Test Test Test Test</p>
</div>
</body>
</html>
Ответы (2 шт):
В официальном репозитории OpenSans:
OpenSans-Bold.ttf
OpenSans-ExtraBold.ttf
OpenSans-Light.ttf
OpenSans-Regular.ttf
OpenSans-SemiBold.ttf
[Начертания/гарнитуры убраны, хотя они есть (Condensed/Italic), суть не в этом, что бы список не "распух", Condensed/Italic - убраны]
Суть следующая, этот шрифт имеет 5 [строго пять] весов, не имеет промежуточных. И на самом деле этот шрифт - это пять жёстких файлов, на пять весов.
Нужно посмотреть соответствие численных весов в самих [пяти] файлах шрифтов, т.е. построить соответствие тому, что указано в файлах, типа такого:
OpenSans-Bold 700?
OpenSans-ExtraBold 800? 900?
OpenSans-Light 300? 200?
OpenSans-Regular 400?
OpenSans-SemiBold 500? 600?
Далее зная числа - нужно использовать строго эти числа весов, строго из файлов шрифтов.
Далее собираете [настраиваете] css под один единый font-face, где описаны пять файлов и веса.
Или же собираете [настраиваете] css под пять font-face, но в каждом из них по одному файлу.
Иначе говоря, шрифт так построен. Для каждого веса - строго свой файл шрифта. Т.е. если файл шрифта regular, то к нему нельзя применять вес bold, можно применять вес regular т.е. например 400. А он точно 400? См. в сам файл шрифта regular. Итд итп.
С конвертацией в woff/woff2 обычно проблем нет. А вот с описанием шрифта, или пачки файлов шрифтов в font-face - как раз проблема есть. Изначально соберите корректный font-face [или 5 font-face] под пять файлов весов. Затем можно экспериментировать с woff/woff2.
П.с.: Второй способ построения font-face предпочтительней. Потому что в итоге [в конечном коде] вес не трогается [не используется] вообще. Иначе говоря конечный код, это [примеры]:
body {
font-family: 'OpenSans Light';
}
body {
font-family: 'OpenSans Regular';
}
body {
font-family: 'OpenSans SemiBold';
}
Пример с вашим div, у вас:
<div style="font-family: 'Open Sans';">
<p style='font-weight: 700; font-size:20px;'>weight-700/size-20: Test Test</p>
<p style='font-weight: 670; font-size:19px;'>weight-670/size-19: Test Test</p>
<p style='font-weight: 550; font-size:18px;'>weight-550/size-18: Test Test</p>
<p style='font-weight: 400; font-size:16px;'>weight-400/size-16: Test Test</p>
<p style='font-weight: 300; font-size:14px;'>weight-300/size-14: Test Test</p>
</div>
Но сильно лучше сделать вот так, на это нужны 5 font-face:
<div>
<p style="font-family:'OpenSans ExtraBold'; font-size:20px;">weight-800?/size-20: Test Test</p>
<p style="font-family:'OpenSans Bold'; font-size:19px;">weight-700?/size-19: Test Test</p>
<p style="font-family:'OpenSans SemiBold'; font-size:18px;">weight-500?/size-18: Test Test</p>
<p style="font-family:'OpenSans Regular'; font-size:16px;">weight-400?/size-16: Test Test</p>
<p style="font-family:'OpenSans Light'; font-size:14px;">weight-300?/size-14: Test Test</p>
</div>
@InterceptorTSK Вы тут написали, полную дичь ... 1) в файле стилей вы 3 раза переопредяете родительский шрифт для корневого тега body - глупость 2) для примера правильно, но так писать не надо, лучше сделать привязку к классам или тегам 3) Вы создали 5 семейств шрифтов для браузера, это будет работать - но с точки зрения обработки браузера это совершенно разные шрифты. Это всё можно сократить до "Open Sans" правильно указав путь для каждой жирности. То что Figma или Photoshop отображает - это для дизайнера, а не для нормального верстальщика. Вообщем оно должно выглядить как-то так
@font-face {
font-family: 'Open Sans';
/* src: url('/fonts/OpenSans-Regular.woff2') format('woff2'); тут пишите ваш локальный адресс к семейству */
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Open Sans';
/* src: url('/fonts/OpenSans-Bold.woff2') format('woff2'); тут пишите ваш локальный адресс к семейству */
font-weight: 700;
font-style: normal;
font-display: swap;
}
/* И тд. для каждого веса который вам нужен. + стиливые если надо Я подключил гугловские для примера */
body {
font-family: 'Open Sans', sans-serif;
}
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap" rel="stylesheet">
<div>
<p style='font-weight: 700; font-size:20px;'>weight-700/size-20: Test Test Test Test</p>
<p style='font-weight: 670; font-size:19px;'>weight-670/size-19: Test Test Test Test</p>
<p style='font-weight: 550; font-size:18px;'>weight-550/size-18: Test Test Test Test</p>
<p style='font-weight: 400; font-size:16px;'>weight-400/size-16: Test Test Test Test</p>
<p style='font-weight: 300; font-size:14px;'>weight-300/size-14: Test Test Test Test</p>
</div>
возможно автор вопроса просто не правильно подключает шрифты... а я попался на его замечание что у него возникают проблемы именно при переходи с одного формата на другой.
Ещё маленькое примечание, обычно жирность шрифтов кратна 100... От 100 до 900, если они заданны. И то что вы тут понаписывали 670 550 каждый браузер будет обрабатывать по своему... - тот кто это написал или очень понимает что делает, или полный профан. Есть конечно переменные (variable) шрифты, у которых можно задавать плавную жирность (вес) от 100 до 900 Open Sans Variable там просто пишут диапазон font-weight: 100 900; но это явно не тема данного вопроса.

