IE теряет ClearType
Я испытываю что-то действительно странное!
У меня есть div, который я скрываю с JS (jQuery).
Вот так:
$('#myDiv').hide();
Затем, когда я делаю fadeIn следующим образом:
$("#myDiv").fadeIn('slow');
тогда текст теряет ClearType в IE, но не в FF. Если я пойду с переключением instade fadeIn, тогда все будет хорошо.
Что такое IE и есть ли какие-либо решения для него, потому что это выглядит ужасно.
(У меня есть ClearType, поскольку вы, возможно, понимаете на этом этапе)
Ответы
Ответ 1
Быстрый поиск по теме показывает следующее:
jQuery fadeIn/fadeOut IE cleartype glitch
Проблема заключается в том, что атрибут "фильтр" CSS не удаляется автоматически. Самое простое решение для этой проблемы будет удалять его вручную:
$('#myDiv').fadeIn('slow', function() {
this.style.removeAttribute('filter');
});
Как объясняется выше в блоге, это довольно грязное решение.
Отрывок из сообщения в блоге, включая решение для очистки:
Это означает, что каждый раз, когда мы хотите вытеснить элемент, нам нужно удалить атрибут фильтра, который делает наш код грязным.
Простое, более элегантное решение обернуть .fadeIn() и .fadeOut() с пользовательским функции через интерфейс плагина JQuery. Код был бы точно то же самое, но вместо прямого вызова функции затухания, мы называем обертка. Например:
$('#node').customFadeOut('slow', function() {
//no more fiddling with attributes here
});
Итак, как вы это делаете? Просто включить следующий код после вас включить библиотеку jQuery для добавлена функциональность.
(function($) {
$.fn.customFadeIn = function(speed, callback) {
$(this).fadeIn(speed, function() {
if(jQuery.browser.msie)
$(this).get(0).style.removeAttribute('filter');
if(callback != undefined)
callback();
});
};
$.fn.customFadeOut = function(speed, callback) {
$(this).fadeOut(speed, function() {
if(jQuery.browser.msie)
$(this).get(0).style.removeAttribute('filter');
if(callback != undefined)
callback();
});
};
})(jQuery);
Ответ 2
Один из способов - установить фоновый цвет на div (обычно) белый.
Ответ 3
Когда в IE применяется fade, он применяет его (по крайней мере через jquery) класс dxtransform, который заставит его терять любые эффекты сглаживания, пока его непрозрачность не вернется к одному.
Ответ 4
Мне удалось вывести несколько "общее" решение. removeAttribute не работает, если непрозрачность находится между 0 и 1, поэтому следующее решение для двух центов:
Поместите этот код сразу после первой строки определения метода анимации jQuery (jquery.x.x.x.js)
animate: function( prop, speed, easing, callback ) {
var optall = jQuery.speed(speed, easing, callback);
/*
* IE rendering anti-aliasing text fix.
*/
// fix START
var old_complete_callback = optall.complete;
optall = jQuery.extend( optall, {complete: function(){
if (jQuery.browser.msie) {
var alpha = $(this).css('opacity');
if(alpha == 1 || alpha == 0) {
this.style.removeAttribute('filter');
}
}
if (jQuery.isFunction(old_complete_callback)) {
old_complete_callback.call(this);
}
}
});
// fix END
...
Надеюсь, это поможет...
Ответ 5
Мне удалось вывести несколько "общее" решение. removeAttribute не работает, если непрозрачность находится между 0 и 1, поэтому следующее решение для двух центов:
Поместите этот код сразу после первой строки определения метода анимации jQuery (jquery.x.x.x.js)
animate: function( prop, speed, easing, callback ) {
var optall = jQuery.speed(speed, easing, callback);
/*
* IE rendering anti-aliasing text fix.
*/
// fix START
var old_complete_callback = optall.complete;
optall = jQuery.extend( optall, {complete: function(){
if (jQuery.browser.msie) {
var alpha = $(this).css('opacity');
if(alpha == 1 || alpha == 0) {
this.style.removeAttribute('filter');
}
}
if (jQuery.isFunction(old_complete_callback)) {
old_complete_callback.call(this);
}
}});
// fix END
...
Надеюсь, это поможет...
Ответ 6
Я читал, что Firefox 2 использует свой собственный движок рендеринга текста, когда применяется непрозрачность (по крайней мере, на Mac). Иногда это выглядит странно.
Я сражался с этим CSS (и он вообще не влияет на производительность)
body {
-moz-opacity: 0.99;
}
Это может работать и в IE. О, но вам нужно использовать свойство IE filter
.
Ответ 7
Хорошо, вот мое худшее решение:
<head>
<script>
$(function() {
$(document.body).fadeIn(0);
});
</script>
</head>
<body>
<script>
$(document.body).hide();
</script>
body text
</body>
Немедленно скрыть тело и угаснуть его, когда документ будет завершен. Затем вы по существу отключите cleartype.
Oh и ПОЖАЛУЙСТА, не делайте этого никому. Или, если это действительно имеет смысл для вас, тогда хорошо его протестируйте. Просто помните, что вы не увидите ничего, пока не будет загружена вся DOM. Я также видел некоторые странные графические сбои.