Jump to content
  • 0

Как всегда, непонятный эффект в IE


AntonSubbota
 Share

Question

Глюк в следующем. Делаю див, в нем по углам размещаю 4 картинки - для эффекта сглаживаемых углов. Картинки размещаю фоном.

Во всех браузерах всё выглядит на ура.

Далее, помещаю в контейнер еще один блок. В итоге в ИЕ нижние углы смещаются на пиксель вверх.

В чем причина такого эффекта?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Документ без названия</title>
</head>

<body>

<div style="position:relative; width:728px; float:left; display:inline; background-color:#bdbfc1; padding:0px; margin:0px; border:1px solid red">
<div style="position:absolute; left:0px; top:0px; width:4px; height:4px; line-height:0; background:url(images/corner_tl.gif) no-repeat top left"></div>
<div style="position:absolute; left:0px; bottom:0px; width:4px; height:4px; line-height:0; background:url(images/corner_bl.gif) no-repeat bottom left"></div>
<div style="position:absolute; right:0px; top:0px; width:4px; height:4px; line-height:0; background:url(images/corner_tr.gif) no-repeat top right"></div>
<div style="position:absolute; right:0px; bottom:0px; width:4px; height:4px; line-height:0; background:url(images/corner_br.gif) no-repeat bottom right"></div>
<!--
<div style="position:relative; top:14px; left:14px; width:714px; height:133px; margin-bottom:14px;">

<div style="position:absolute; top:0px; left:0px; width:105px; height:133px; background-color:#a6a6a6">
<div style="position:absolute; left:11px; top:25px"><img src="images/logo.jpg" alt="" /></div>
</div>

</div>
-->
1<br />2<br />

</div>
</body>
</html>

То, что закомментировано - как раз и есть тот блок, что не любит ИЕ. Внимание на лишние св-ва не обращайте (типо float:left; display:online) не обращайте - код выдрал из контекста страницы.

Link to comment
Share on other sites

18 answers to this question

Recommended Posts

  • 0
Попробуй Зум:1, либо для ИЕ спецом пропиши на пиксель ниже

Насчет zoom:1 - где его вставить? Это валидно? А то стараюсь как можно валиднее написать код.

А если писать хаки для ИЕ... все это правильно, но понять бы, в чем причина... Раньше тоже писал условия для ИЕ, теперь хочу понять причину. Может, достаточно будет какого-нибудь свойства, чтобы это дело устранить...

Link to comment
Share on other sites

  • 0
Насчет zoom:1 - где его вставить? Это валидно? А то стараюсь как можно валиднее написать код.

А если писать хаки для ИЕ... все это правильно, но понять бы, в чем причина... Раньше тоже писал условия для ИЕ, теперь хочу понять причину. Может, достаточно будет какого-нибудь свойства, чтобы это дело устранить...

ИЕ вообще непонятный браузер сам по себе и стандарты он не поддерживает, точнее в полной мере, поэтому и Зуум спецом придумал для решения многих проблем. Пиши всё в условных комментах, и тогда всё будет валидно

Link to comment
Share on other sites

  • 0

Вроде у тя не в диве проблема. По идее у тя проблема в том, что ты используешь bottom: 0px; и right: 0px; в css для выравнивая и позиционирования уголков. При такой раскладке - обязательно в ie6 будет происходить смещение в 1px. Это от того, что ie6 ytdthyj трактует эти значения. Когда ширина/высота четная - все норм... Когда нет - появляются глюки. В твоем примере правое смещение не видно, т.к. задана ширина в width:728px; - четное кол-во. Если поставишь 100% - при ресайзе увидишь смещение в 1px. Тоже самое происходит и в bottom: 0px; - Но так как ты не можешь задать высоту - будет прыгать на 1px. Либо избавляйся от позиционирования - либо используй экспрешн для ie.

Хотя для right: ; решение есть и через css.

P.S. Если проблема именно в таком смещении - другого решения нету. Сам потратил на это не одну неделю)))

Link to comment
Share on other sites

  • 0
Про ширину - это я так сказал, к слову... У него ж проблемы с высотой)))

А, ну тогда да. А покажи свой экспрешн, который тебя спас от этой гадости, и если можешь, объясни его принцип работы :D

Link to comment
Share on other sites

  • 0
А, ну тогда да. А покажи свой экспрешн, который тебя спас от этой гадости, и если можешь, объясни его принцип работы :D

Вот этот:

_bottom: expression(parentNode.offsetHeight % 2 ? "-51px" : "-50px");

Дословно так:

"Если высота родителя делится на два без остатка (т.е. число четное) - тогда присваеваем высоту в '-51px'? иначе '-50px'"

Таким образом - если высота четная - одно значение - если нечетная - другое... Все.

Link to comment
Share on other sites

  • 0
Вот этот:

_bottom: expression(parentNode.offsetHeight % 2 ? "-51px" : "-50px");

Дословно так:

"Если высота родителя делится на два без остатка (т.е. число четное) - тогда присваеваем высоту в '-51px'? иначе '-50px'"

Таким образом - если высота четная - одно значение - если нечетная - другое... Все.

Отлично, спасибо.. где ты его откопал только, молодец, ради цели, я сейчас представил, как ты бедняга мучался :D

Link to comment
Share on other sites

  • 0
Отлично, спасибо.. где ты его откопал только, молодец, ради цели, я сейчас представил, как ты бедняга мучался :D

Зато у меня теперь есть универсальный блок на все случаи жизни - я теперь ток не знаю, где найти "чистый" скрипт для того, что бы сделать всплывающее окно(((

Link to comment
Share on other sites

  • 0
Зато у меня теперь есть универсальный блок на все случаи жизни - я теперь ток не знаю, где найти "чистый" скрипт для того, что бы сделать всплывающее окно(((

Хахаах, ну я думаю с твоей волей к победе такой скрипт будет найти не проблема :D

Link to comment
Share on other sites

  • 0
Хахаах, ну я думаю с твоей волей к победе такой скрипт будет найти не проблема :D

Проблема... ( Я хочу себе "чистый" скрипт. Идеальный код с некоторым кол-вом функций, специально для этой задачи - а везде вижу - с кучей ненужных функций и т.д.. В JS я нуб , так что даж не знаю, у кого просить помощи...(

Link to comment
Share on other sites

  • 0
Проблема... ( Я хочу себе "чистый" скрипт. Идеальный код с некоторым кол-вом функций, специально для этой задачи - а везде вижу - с кучей ненужных функций и т.д.. В JS я нуб , так что даж не знаю, у кого просить помощи...(

Если уж ты собрался использовать скрипт, и уже используешь экспрешаны, думаю, что пнг-фикс лишним не станет, а проблем поубавит. А про JS я сам Нуб, у меня даже в подписи доказательство моих слов, а так бы я тебе помог, даже с удовольствием :D

Link to comment
Share on other sites

  • 0
Вроде у тя не в диве проблема. По идее у тя проблема в том, что ты используешь bottom: 0px; и right: 0px; в css для выравнивая и позиционирования уголков. При такой раскладке - обязательно в ie6 будет происходить смещение в 1px. Это от того, что ie6 ytdthyj трактует эти значения. Когда ширина/высота четная - все норм... Когда нет - появляются глюки. В твоем примере правое смещение не видно, т.к. задана ширина в width:728px; - четное кол-во. Если поставишь 100% - при ресайзе увидишь смещение в 1px. Тоже самое происходит и в bottom: 0px; - Но так как ты не можешь задать высоту - будет прыгать на 1px. Либо избавляйся от позиционирования - либо используй экспрешн для ie.

Хотя для right: ; решение есть и через css.

P.S. Если проблема именно в таком смещении - другого решения нету. Сам потратил на это не одну неделю)))

Вот спасибо!!! Эти хитрости ИЕ столько времени отняли... Надеюсь, больше с ними придется редко встречаться. Еще раз спасибо за совет! Поправил высоту вложенного блока со с 133 на 134 - и, вуаля, ИЕ нормально все отобразил.

Link to comment
Share on other sites

  • 0
Вот спасибо!!! Эти хитрости ИЕ столько времени отняли... Надеюсь, больше с ними придется редко встречаться. Еще раз спасибо за совет! Поправил высоту вложенного блока со с 133 на 134 - и, вуаля, ИЕ нормально все отобразил.

Обращайся - тут большинство знает многие глюки и сходу скажет что с ними не так)))

Link to comment
Share on other sites

  • 0
Если уж ты собрался использовать скрипт, и уже используешь экспрешаны, думаю, что пнг-фикс лишним не станет, а проблем поубавит. А про JS я сам Нуб, у меня даже в подписи доказательство моих слов, а так бы я тебе помог, даже с удовольствием :D

Я в итоге себе в конце документа скрипт поставил, примерно такой:

если ИЕ

скрипт

смотрим на четность высоты вложенного блока. если нечетная, добавляем к высоте 1.

Вроде работает. :D

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy