При использовании библиотеки mootools и innerHTML или appendChild в интернет эксплорер возникает ошибка – страница не загружается и выдается ошибка – операция прервана.
Возникает это, потому что дочерний контейнер содержит скрипт, изменяющий родительский контейнер.
На сайте Microsoft об этой проблеме знают, но решения, кроме как использовать internet explorer 8 – не предлагают. Нам такой вариант не подходит, да и решение простое до безобразия – тегу script надо добавить defer="defer".
Таким образом мы говорим браузеру, что исполнять этот скрипт нужно после полной загрузки страницы.
Во всех предыдущих решениях предполагалось, что картинке .png или окружающему ее диву – будет присваиваться определенный класс.
Этот вариант – сам ищет все .png на странице и делает их прозрачными.
В нем лежит скрипт и картинка. Папку pngfix кидаем в корень (если будете переименовывать – в скрипте надо заменить первую строчку – путь до clear.gif).
И теперь – подключаем условными комментариями (чтобы не морочить голову другим браузерам) сам скрипт:
А этот способ уже для обладателей internet explorer 7 как браузера по умолчанию.
Качаем этот файлик: Multiple IE (10.4 mb).
В нем – набор браузеров internet explorer версий 3.5-6 для одновременной работы.
Собственно то, что очень круто помогает мне в работе и сильно экономит время. Эти программы показывают кусок кода того места, на которое вы навели мышку, а также его css свойства.
Т.к. браузер Opera я считаю извращенством, то пишу только для IE и FireFox, хотя для первого где-то видел подобное. IE: FireFox:
Конечно же их функционал не ограничен лишь просмотром css, но использую я их только для этого.
PNG-24 – отличный формат для веб, может передавать полупрозрачность. Но в internet explorer 6 прозрачности нет.
На помощь приходит следующий код: <i class="png"><img src="kartinka.png"></i> Как можно понять тут выводится сама png картинка, обернутая в тег <i>. Сам этот тег <i> можно заменить на что угодно, важно чтобы у него был прописан class="png".
Далее в css вставляем это: /*png in ie6 fix*/
* html .png
{
width: expression(this.firstChild.width);
filter: expression("progid:DXImageTransform.Microsoft.AlphaImageLoader(src=’"+
this.firstChild.src+"‘, sizingMethod=’image’)");
Достигается на самом деле довольно-таки легко. Берем прозрачный png, берем следующий код: <script type="text/javascript">
function fixPNG(element)
{
//Если браузер IE версии 5.5-6
if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent))
{
var src;
if (element.tagName==’IMG’) //Если текущий элемент картинка (тэг IMG)
{
if (/\.png$/.test(element.src)) //Если файл картинки имеет расширение PNG
{
src = element.src;
element.src = "/blank.gif"; //заменяем изображение прозрачным gif-ом
}
}
else //иначе, если это не картинка а другой элемент
{
//если у элемента задана фоновая картинка, то присваеваем значение свойства background-шmage переменной src
src = element.currentStyle.backgroundImage.match(/url\("(.+\.png)"\)/i);
if (src)
{
src = src[1]; //берем из значения свойства background-шmage только адрес картинки
element.runtimeStyle.backgroundImage="none"; //убираем фоновое изображение
}
}
//если, src не пуст, то нужно загрузить изображение с помощью фильтра AlphaImageLoader
if (src) element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=’" + src + "‘,sizingMethod=’scale’)";
}
}
</script> Вставляем ПЕРЕД следующим html: <div style=”background: url(some.png) no-repeat;” class=”someclass”><a href=”#”>Ссылка</a></div>
Или таким, если png вставляется не бекграундом: <div class=”someclass”><img src=”some.png” /></div>
Остается добавить в css следющее: .someclass {
filter:expression(fixPNG(this));
}
Все, теперь png во всех браузерах прозрачная!
Остается добавить – что если сверху png присутствуют какие-либо ссылки, или интерактивные поля (формы и т.п.), то они будут ниже картинки и не кликабельны, решается это просто, добавляется объекту, который нужно поставить выше position: relative;
На данном примере это выглядит так: .someclass a {
position: relative;
}
Проблема – не работают эти свойства в Internet Explorer 6 и ниже версий. Решений в интернете нашел много, но большинство вешали браузер, либо просто не работали. Что заметил, совместная попытка использования замены max-height и max-width – приведет к сносу башни у IE, и он попросту зависнет. Но, ближе к делу: max-width
#block {
max-width:100px;
width: expression(this.offsetWidth > 101?"100″:"this.offsetWidth");