Методы сглаживания шрифтов? рендеринг тени текста в Chrome 14.0.833.0 или выше

РЕДАКТИРОВАТЬ:

Сейчас мы находимся в Chrome 19, и это до сих пор не исправлено. Просто пояснение: это происходит в Chrome на Windows, а не на Linux или Mac. Я думаю, что это имеет отношение к Cleartype. Google, пожалуйста, исправьте это.

Я использую CSS3 text-shadow эмулировать сглаживание шрифтов IE9 в других браузерах. По сути, я просто установил текстовую тень текста контейнера на фон контейнера. Вы можете увидеть поведение, установив text-shadow на элементе шрифта большего размера, чем Chrome 14.0.833. Текст выглядит гладким. Удалите текстовую тень, и шрифт выглядит неровным. Однако в Chrome 14.0.833 (UPDATE: в 14.0.834 он также "сломан") это больше не работает. Свойство text-shadow по-прежнему работает, но не так, как раньше. Вы можете увидеть поведение здесь (просто загрузите его с помощью различных версий Chrome). Кажется, что в старых Chromes тень текста начиналась внутри текста лишь немного, а затем растягивалась - возможно, поэтому хак text-shadow работал, В более новом Chrome кажется, что тень от текста начинается сразу за текстом, поэтому она не будет работать. Посмотрите, что я имею в виду здесь.

Мой вопрос в основном: это ошибка? Какое поведение ожидается, если либо? Есть ли какие-либо другие обходные пути, которые я могу использовать?

Спецификация W3C, похоже, не говорит о предполагаемом поведении, хотя я и видел, что, возможно, мне следует использовать текстовую схему (что вроде не поддерживается, что противоречит цели)

6 ответов

Решение

Ну, я понял это, Сорта. Раздражает, так как я назначил награду, но что угодно. Я вполне уверен, что это не ошибка, и это ожидаемое поведение - тем более, что мы видели еще несколько итераций Chrome, и он остался прежним. Несколько разных методов работы. Я немного написал для своего блога, вы можете увидеть полную статью здесь, но вот основная часть этого:

Сначала я попробовал -webkit-text-stroke:1px #000 где #000 цвет текста. Но этот стиль предназначен для использования там, где цвет текста отличается от обводки, для приятного наброска текста. Когда оба цвета одного цвета, это выглядит... странно. Я не уверен почему; Я не эксперт по визуализации шрифтов. Вы можете увидеть поведение на картинке после статьи.

Далее я попробовал простой text-shadow:#000 0 0 1px где #000 тот же цвет, что и текст. Из-за той же проблемы с Chrome 14.0.833+ шрифт выглядит несколько неровно. Однако это лучше, чем просто текст.

Далее я попробовал объединить две попытки выше. Это выглядит немного лучше, но оно набирает объем текста, поскольку по существу добавляет 2 пикселя к осмысленности текста.

Наконец, я попытался применить две тени для текста: text-shadow:#000 0 1px 1px,#000 0 -1px 1px >> где #000 цвет текста. Для этого применяются две текстовые тени, одна из которых слегка отталкивается, а другая - вверх. Таким образом, тень текста покрывает неровные края. Это немного набирает текст, но определенно сглаживает его.

В зависимости от размера вашего текста, различные методы работают. Меньший (но все еще зубчатый) текст может использовать текстовую тень, больший текст может использовать метод тени / обводки, а очень большой текст может использовать метод двойной тени. Конечно, чем больше текст, тем меньше заметных лишних пикселей. Вы можете увидеть все различные методы здесь

Хорошо, я потратил немало времени на это, и вот к чему это сводится: это ошибка.

Прежде всего, -webkit-font-smoothing:antialiased; работает только для Mac, а не Windows.

Я нахожусь на Windows7, я создал многоуровневое изображение Pixlr со снимками экрана JSfiddle, который я сделал, у которого было 4 различных элемента с различной текстовой тенью, примененной к каждому. Вы можете ясно видеть, что текстовая тень изменилась с Chrome13 и Chrome 14.0.835. Мне пришлось переключаться между каналом Beta и Dev пару раз, потому что я все испортил, удалил и т.д.

Загрузите многослойный файл изображения Pixlr, из которого я сделал:

http://dl.dropbox.com/u/7353877/Chrome-text-shadow-v13-v14_0_835.pxd

Затем перейдите на http://pixlr.com/editor/ и выберите, чтобы открыть файл с компьютера, открыть файл. Теперь в Pixlr увеличьте масштаб до четырех строк текста, на панели слоев в верхнем слое установите флажок и снимите этот флажок, затем проверьте его снова, делайте это снова и снова и смотрите, насколько радикальным является изменение текста-тени.

Это должно быть представлено как ошибка. Ссылка на эту страницу может быть использована, чтобы показать эффект, если это необходимо.

JSfiddle (JSfiddle, который я использовал на скриншотах) http://jsfiddle.net/nicktheandroid/Xkp9q/

Я положил кусок пирога в микроволновку полтора часа назад.... холодно:(

text-shadow: transparent 0px 0px 0px, #000 1px 2px 1px;

ИЛИ ЖЕ

text-shadow: transparent 0px 0px 0px, rgba(0,0,0, 0.75) 1px 2px 1px;

Протестировано и отлично работает в разных версиях Opera, Chrome, Safari & Firefox.

-webkit-font-smoothing:antialiased; 

может работать на тебя

ДА! Я нашел решение этой проблемы. Это странно, но это работает для меня.

Итак, чтобы это сработало, поместите этот стиль на элемент, который вы хотите сгладить:

-webkit-border-bottom-left-radius: 1px;
text-shadow: 0px 0px 1px rgba(0, 0, 0, 0.01);
overflow: hidden;

Я поместил образец HTML-файла только с этим стилем, чтобы вы могли быстро проверить его.

Именно так многие веб-шрифты (Google Webfonts, а также высокопрофессиональные шрифты из Typekit и т. Д.) Выглядели в Firefox (слева) и Google Chrome (справа) в системах Windows (и, в конечном счете, в других местах). Я не шучу! Чтобы уточнить это: единственным браузером, который полностью испортил Google Webfonts, был браузер Google Chrome. Насколько это больное? В 2013 году браузер Opera переключил свой движок рендеринга на webkit (= движок рендеринга в Chrome), поэтому эта проблема существует и в Opera.

больше: http://www.dev-metal.com/fix-ugly-font-rendering-google-chrome/

Другие вопросы по тегам