Можно ли отключить сглаживание в CSS при использовании @ font-face с пиксельными шрифтами?

Я хочу использовать в Интернете пиксельный шрифт. Я включаю его с помощью @ font-face, однако все браузеры применяют к шрифту сглаживание. Кажется, я не могу найти правило CSS, чтобы отключить это, может ли кто-нибудь придумать другой способ отключения сглаживания?


person Samuel    schedule 18.11.2009    source источник


Ответы (6)


Рендеринг шрифтов выполняется операционной системой и браузером, поэтому я считаю, что с CSS мало что можно сделать. В обсуждении могут быть некоторые предлагаемые правила CSS (я видел упоминание "font-smooth" или что-то в этом роде), но ничего в CSS3, насколько мне известно, и определенно ничего в CSS2.

person keithjgrant    schedule 18.11.2009
comment
Спасибо, примерно то, что я понял. - person Samuel; 18.11.2009

Этот вопрос старый, поэтому просто хотел дать обновление.

На основе caniuse.com для него есть свойство CSS, но оно было удалено из спецификации CSS3. Черновики. Так что это нестандартное решение. Некоторые браузеры Webkit, Firefox и Opera поддерживают его, но это несовместимо. В основном это работает для пользователей настольных компьютеров и Mac OS.

-webkit-font-smoothing: none || antialiased || subpixel-antialiased
-moz-osx-font-smoothing: auto || inherit || unset || grayscale
font-smoothing: auto || inherit || unset || grayscale
person Oriol    schedule 16.04.2015
comment
Вот страница документации для font-smooth: developer.mozilla. org / en-US / docs / Web / CSS / font-smooth (включает диаграмму совместимости). 10 августа 2020 г. в формате UTC я протестировал <p style="-webkit-font-smoothing: none; -moz-osx-font-smoothing: unset; font-smoothing: unset; font-smooth: never; filter: contrast(1);">turn off anti aliasing in html text</p> с программным обеспечением Mozilla/5.0 (Linux; Android 4.4.3; KFTHWI) AppleWebKit/537.36 (KHTML, like Gecko) Silk/81.2.16 like Chrome/81.0.4044.138 Safari/537.36 на htmledit.squarefree.com - к сожалению, не вышло (у текста по-прежнему сглаживание было). - person Rublacava; 10.08.2020

Сегодня у меня была аналогичная проблема, и кажется, что хотя font-smooth не работает в современном Firefox *, добавление некоторого фильтра делает:

filter: contrast(1);

Тем не менее, отключение сглаживания с помощью фильтра кажется немного хакерским. Между прочим, это не вызывает полного отключения сглаживания, просто заставляет его применять как-то иначе, чтобы растровые шрифты отображались правильно. С другой стороны, это нарушает рендеринг не растровых шрифтов.

* Протестировано на Fixedsys из http://doir.ir/fixedsys/demo.html, на Iceweasel 38.40.0 в Debian 8.

person jaboja    schedule 21.01.2017

Я не думаю, что в css есть опция сглаживания. Вместо этого попробуйте cufon: https://github.com/sorccu/cufon/wiki/about

Его довольно легко использовать, и он очень хорошо отображает ваши пиксельные шрифты. Возможно, вас заинтересует Pxfon Шона Инмана: http://shauninman.com/archive/2009/04/17/pxr_cufon_pxfon

person Vlad the Impala    schedule 18.11.2009
comment
Это действительно хорошо отображается, но выделение текста ужасно, и становится очень очевидно, что это не обычный шрифт. См. Пример здесь: pixel-portraits.com/pxfon - person Trevor Hickey; 14.03.2015

Большинство пиксельных шрифтов просто не будут работать должным образом, если вы используете их с кратным размером 8 пунктов (8, 16, 24 и т. Д.).

Если вы работаете с неправильным размером шрифта, вы получите псевдонимы / нечеткие символы.

Проверь это...

http://www.fontsquirrel.com/fonts/list/style/Pixel

... это может помочь;)

person flanagan    schedule 01.02.2011

Да, это возможно.

Я тоже это искал. И в конце концов я нашел решение в другом потоке stackoverflow (Как получить crispEdges для текста SVG ?), чтобы отключить сглаживание текста (отключить сглаживание) для SVG, но это решение также работает для обычных элементов HTML.

Хитрость заключается в использовании фильтра SVG, который затем можно добавить к любому элементу HTML, чтобы сделать что-нибудь хрустящим.

  1. Сначала нам нужно определить фильтр, чтобы мы могли использовать его внутри нашего CSS.
<svg class="offscreen" width="0" height="0" xmlns="http://www.w3.org/2000/svg">
    <defs>
        <filter id="crispify">
            <feComponentTransfer>
                <feFuncA type="discrete" tableValues="0 1"/>
            </feComponentTransfer>
        </filter>
    </defs>
</svg>
  1. Добавьте фильтр к элементу HTML, который содержит только текст. Если у него есть цвет фона, он не работает.
p {
    filter: url(#crispify);
}
  1. лишние вещи: вы, вероятно, захотите скрыть элемент SVG, поэтому добавьте его в CSS
.offscreen {
    position: absolute;
    left: -100000px;
    top: auto;
    width: 1px;
    height: 1px;
    overflow: hidden;
}
  1. Другое дело: если белый цвет выглядит странно, измените цвет на черный и инвертируйте его с помощью другого фильтра, чтобы ваш код выглядел так:
p {
  filter: url(#crispify) invert(1);
}
  1. Обратите внимание: я не знаю, будет ли это работать со всеми браузерами, но он работает в Chrome, Edge и Firefox.
person nathnolt    schedule 16.03.2021