2012-01-03 3 views
2

Я использую код jQuery для установки div в вычисленной позиции с использованием margin-top (а не верхнего), который отлично работает во всех браузерах, кроме IE8. (он работает в IE6 и IE7).margin-top, установленный через jQuery в IE8, не обновляется

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

Вот тело HTML:

<body> 
<div class="menu_header"></div> 
<div class="main_content"></div> 
</body>  

Вот код CSS:

.menu_header 
{ 
position:relative; 
background-color:red; 
margin-left:auto; 
margin-right:auto; 
width:950px; 
height:50px; 
} 
.main_content 
{ 
position:relative; 
margin-top:0px; 
width:950px; 
height:500px; 
background-color:black; 
margin-left:auto; 
margin-right:auto; 
} 

И, наконец, вот Код jQuery.

$(document).ready(function(){ 
$(".main_content").css("margin-top","100px"); 
}) 

Ну, если вы пытаетесь предыдущие коды в IE8 вы будете иметь первый DIV (.menu_header) расположены правильно, НО второй DIV (.main_content) не будет иметь каких-либо полей. Я думал, что jQuery вообще не обновляет HTML/CSS и что исходное значение 0px все еще действует, поэтому я проверил с помощью инструментов разработчика в IE8, и я узнал, что код CSS обновлен (встроенный CSS) но все же верхний марж не показывает.

Как я уже сказал, я узнал в Интернете, что это была известная ошибка IE8, которая произошла по разным причинам (например, крах, сбрасываемый с помощью набора div для плавания и других объяснений в зависимости от содержимого «CSS»), но Я изначально был частью кода jQuery, который заставлял меня задаться вопросом, что это за ошибка, потому что ни одно из объяснений не может соответствовать этому?!

То, что я имел в исходном коде JQuery есть несколько строк, которые я сводится к следующему для ясности:

$(document).ready(function(){ 
$(".main_content").css("margin-top","100px"); 
$(window).resize(function(){$(".main_content").css("margin-top","100px");}) 
}) 

Ну, в этом коде, как вы, возможно, заметили, имеется дополнительная line (3-я строка), которая устанавливает верхний край, когда пользователь изменяет размер браузера и MAGICALLY, когда пользователь изменяет размер браузера, обновляет маржу и отображает правильно, но все еще не работает, когда документ готов (вторая строка)!

Я продолжал играть (да, на данный момент это стало игрой, потому что Microsoft не может быть так серьезно!), И я заметил, что в коде HTML, если я добавлю <p>some text</p> или <span>some text</span> или любой элемент с содержимое, после div, проблема не возникает, и маржа обновляется правильно.

Итак, в основном, я не ищу обходные пути, так как у меня есть два, которые должны добавить div с содержимым и установить его высоту в 0 и переполненный: скрытый, чтобы он не изменял дизайн веб-сайта или добавляя <p>&nbsp</p> после дива.

Я просто надеюсь, что кто-то может объяснить мне, почему обновление поля не работает, когда документ готов, когда он выполняется при изменении размера(), и почему добавление некоторого HTML после того, как div решает проблему и есть ли какие-либо другие решения что может быть еще проще, чем тот, который у меня есть?

+0

Пробовали ли вы присоединение его к '$ (окно) .load()', а также ? '' содержит 'img'? также jsfiddle, чтобы играть с поможет – mreq

+0

Я создал новые файлы HTML/CSS/JS только с приведенным здесь кодом (и ничего, кроме раздела заголовка HTML, которое здесь отсутствует), и проблема точно такая же, как описано. Использование '$ (window) .load()' не решает проблему. Как я уже сказал, встроенный CSS обновляется при проверке с помощью отладчика, что означает, что событие ready() запущено правильно, а код jQuery работал, но даже если он установлен в встроенном CSS скриптом jQuery, поля не отображаются вообще , –

+0

Это может быть проблема css. Попробуйте установить «margin-bottom» на предыдущем элементе (.menu-header) вместо «margin-top» следующим образом. Если вы настаиваете на стилизации .main-content, попробуйте 'padding' – mreq

ответ

1

Это всего лишь один из тех вещей IE.

IE игнорирует margin-top, вы должны применить margin-bottom к предыдущему элементу или использовать padding.

Если вы все еще ищете, почему, я бы попробовать добавить некоторые height к .main_content, плавучие и очищая ее, и т.д ...

+0

Спасибо за внимание Марека. Похоже, я не получу никаких других ответов, и я не буду знать, почему IE8 ведет себя таким образом. По крайней мере, у меня есть два способа обхода, к которым вы добавили третий, который будет делать пока. –