Як додати кілька файлів шрифту для одного і того ж шрифту?


454

Я переглядаю сторінку MDC для правила CSS-шрифту @ font-face , але я не розумію одного. У мене є окремі файли для жирного , курсивного та жирного + курсивного . Як я можу вставити всі три файли в одне @font-faceправило? Наприклад, якщо у мене є:

@font-face {
    font-family: "DejaVu Sans";
    src: url("./fonts/DejaVuSans.ttf") format("ttf");
}
strong {
    font-family: "DejaVu Sans";
    font-weight: bold;
}

Браузер не буде знати, який шрифт використовувати для жирного шрифту (оскільки цей файл - DejaVuSansBold.ttf), тому він буде за замовчуванням для того, що я, мабуть, не хочу. Як я можу повідомити веб-переглядачу всі різні варіанти для певного шрифту?


Як розширення питання, якщо ми використовуємо ці шрифти в редакторах WYSIWYG, таких як TinyMCE, чи все ж нам потрібні Bold Italics? Незважаючи на те, що у TinyMCE є кнопки, щоб робити сміливі курсиви? Моя здогадка відповідь ТАК - адже вони взагалі шукають ці файли?
Нішант

Відповіді:


749

Здається, рішення полягає в тому, щоб додати кілька @font-faceправил, наприклад:

@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans.ttf");
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Bold.ttf");
    font-weight: bold;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Oblique.ttf");
    font-style: italic, oblique;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-BoldOblique.ttf");
    font-weight: bold;
    font-style: italic, oblique;
}

До речі, здається, що Google Chrome не знає про format("ttf")аргумент, тож ви можете пропустити це.

(Ця відповідь була правильною для специфікації CSS 2. CSS3 дозволяє використовувати лише один стиль шрифту, а не розділений комою список.)


130
Порядок важливий, сміливий / курсивний стиль повинен бути останнім.
Хто

8
Варто зазначити, що це не працює в IE8 (і нижче), навіть якщо ви використовуєте EOT. IE завантажить альтернативний шрифт, але він не використовуватиме його, замість цього він підробить жирний / курсивний звичайний шрифт. Крім того, Chrome 11, здається, не дає візуалізації шрифту, який є жирним та курсивним
JaffaTheCake

2
Цей приклад ідеально підходить для шрифтів, які мають окремий файл TTF для жирного та курсивного. Але що робити, якщо весь шрифт знаходиться в одному .ttf-файлі, і ви хочете використовувати жирний шрифт, як це працює?

2
Ця стаття чудово працює, пояснюючи, чому це працює. Основний уривок: "Зауважте, що властивість сімейства шрифтів - це однакова назва для всіх чотирьох шрифтів. Також стиль шрифту та вага шрифту відповідають тому, який є шрифт. Примітка. Нормальна вага повинна знаходитись у верхній частині списку! Ми не знайшли, що наказ після цього має значення ".
Дж. Сміт

13
У мене виникли проблеми з цим знімком на вбудованому браузері Android 4.4. Закінчилася зміна, font-style: italic, oblique;щоб, font-style: italic;здавалося, все виправити.
Хаві

59

Станом на CSS3, специфікація змінилася, дозволяючи отримати лише одну font-style. Список, відокремлений комами (за CSS2), буде розглядатися так, ніби він був normalі замінює будь-який попередній (за замовчуванням) запис. Це зробить визначені таким чином шрифти курсивом постійно.

@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans.ttf");
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Bold.ttf");
    font-weight: bold;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Oblique.ttf");
    font-style: italic;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-BoldOblique.ttf");
    font-weight: bold;
    font-style: italic;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Oblique.ttf");
    font-style: oblique;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-BoldOblique.ttf");
    font-weight: bold;
    font-style: oblique;
}

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


Я вважаю, що третій та четвертий шрифти названі неправильно, вони повинні мати "Italic" замість "Oblique".
Натан Меррілл

3
@NathanMerrill, як OP: I have separate files for bold, italic and bold + italic- Так є три різні файли. Ця відповідь виправляє прийняте в тому, що font-style: italic, oblique;воно більше не дійсне, але також, що відповідь використовував той самий файл для курсиву та косою. Проте варто зазначити, що файл ділиться у двох випадках.
Дурний фрік

18

Щоб коректно змінилася версія шрифту, мені довелося змінити порядок @ font-face у CSS.

@font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono-BoldOblique.ttf");
    font-weight: bold;
    font-style: italic, oblique;
}   
@font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono-Oblique.ttf");
    font-style: italic, oblique;
}
@font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono-Bold.ttf");
    font-weight: bold;
}
 @font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono.ttf");
}

Дуже корисний. +1
Містер Поліхірл

Що ви маєте на увазі під "зворотним порядком" ?
Nyxynyx

15

нині, 2017-12-17. Я не знаходжу жодного опису про необхідність замовлення Font-властивості у специфікації . І тест на хром завжди працює незалежно від порядку.

@font-face {
  font-family: 'Font Awesome 5 Free';
  font-weight: 900;
  src: url('#{$fa-font-path}/fa-solid-900.eot');
  src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
  url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
  url('#{$fa-font-path}/fa-solid-900.woff') format('woff'),
  url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'),
  url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
}

@font-face {
  font-family: 'Font Awesome 5 Free';
  font-weight: 400;
  src: url('#{$fa-font-path}/fa-regular-400.eot');
  src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
  url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
  url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
  url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
  url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
}

13

Якщо ви використовуєте шрифти Google, я б запропонував таке.

Якщо ви хочете, щоб шрифти запускалися з вашого localhost або сервера, вам потрібно завантажити файли.

Замість завантаження пакетів ttf у посиланнях для завантаження використовуйте пряме посилання, яке вони надають, наприклад:

http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,300italic,400italic,600italic

Вставте URL-адресу у свій веб-переглядач, і ви повинні отримати декларацію про шрифт, подібну до першого відповіді.

Відкрийте надані URL-адреси, завантажте та перейменуйте файли.

Наклейте оновлені декларації шрифту на обличчі відносними шляхами до файлів woff у вашому CSS, і ви закінчите.


3
/*
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# dejavu sans
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/*default version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans.ttf'); /* IE9 Compat Modes */
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'), /* Duplicated name with hyphen */
        url('dejavu/DejaVuSans.ttf') 
        format('truetype');
}
/*bold version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans-Bold.ttf'); 
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'),
        url('dejavu/DejaVuSans-Bold.ttf') 
        format('truetype');
    font-weight: bold;
}
/*italic version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans-Oblique.ttf'); 
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'),
        url('dejavu/DejaVuSans-Oblique.ttf') 
        format('truetype');
    font-style: italic;
}
/*bold italic version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans-BoldOblique.ttf'); 
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'),
        url('dejavu/DejaVuSans-BoldOblique.ttf') 
        format('truetype');
    font-weight: bold;
    font-style: italic;
}

1

Не забувайте, що для сміливого варіанту це так font-weight; для курсивного варіанту він єfont-style


Не дуже пов’язаний із проблемою @font-face, тому я намагаюся спростувати цю відповідь (але я не можу, мені не вистачає репутації)
FryingggPannn

так, це не відповідь на питання, а добре пам’ятати, застосовуючи відповіді. Проблема в розділі коментарів у відповіді вже є багато, тому ця порада буде похована
Окер

Добре, я цього не знав
FryingggPannn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.