2010-10-14 1 views
0

У меня есть следующий код:Как мне заставить IE правильно перемещать элемент после изменения размера брата по вертикали?

<nav id='tab_links'> 
    <a href='#view1'>One</a> 
    <a href='#view2'>Two</a> 
</nav> 
<div id='container'> 
    <div id='view1'>Short Content</div> 
    <div id='view2'>Much longer content</div> 
</div> 
<footer> 
<input type='submit' /> 
</footer> 

и следующие стили:

#view2 { display: none; } 
#footer { display: block; clear: both; text-align: right; } 
#footer * { display: inline-block; text-align: center; } 

я использую следующие JQuery обменивать мнения:

$('#tab_links a').click(function() { 
    var tabToShow = $($(this).attr('href')); 
    var otherTabs = tabToShow.siblings(); 
    tabToShow.show(); 
    otherTabs.hide(); 
}); 

Когда я выгрузить view1 содержание для содержания view2, нижний колонтитул остается там, где он был, паря над серединой нового контента. Если я наведите указатель мыши на содержимое нижнего колонтитула, он скачет на место. Если я затем верну его обратно на view1, нижний колонтитул снова останется там, где он был для view2, что намного ниже конца container.

Какие стили можно применить, чтобы IE переместил нижний колонтитул соответствующим образом? Я пробовал все следующие, в различных комбинациях:

  • применяются clearfix к #container
  • применяются clearfix к #footer
  • применяются height: auto к #container
  • применяются height: 30px к #footer input
  • применять widgth: 100px к #footer input
+0

Я также попытался добавить ''

внутри '# container'. Это также не может подтолкнуть нижний колонтитул вниз, когда содержимое расширяется (или поднимает его, когда оно сжимается). Это заставляет меня подозревать, что это не проблема с поплавком. –

+0

Я также попытался связать события hide/show, которые переключают представления. '$ ('# view1'). hide (0, function() {$ ('# view2'). show();});' ведет себя так же, как $ ('# view1'). hide(); $ ('# view2'). show(); ' –

+0

Эта проблема, кажется, очень * тесно связана: https://forum.jquery.com/topic/force-ie-redraw (увы, это неразрешено) –

ответ

0

Иногда простой «переполнение: авто; ширина:. авто;»наносится на #container решит проблему

Смотреть это: http://www.atbskate.com/trusktr/2010/03/05/clearing-floats-with-the-overflowauto-css-property/

Или это: http://www.quirksmode.org/css/clearing.html

Было ли это решение вашей проблемы

+0

Печально , это, похоже, не проблема, которую я испытываю.Сами представления не плавают (хотя у них есть некоторый контент, который плавает). –

+0

hmmmm ... Вы сказали, что в #views есть некоторый плавающий контент ... Возможно, примените предложенное исправление к div # view1 и # view2 (и к любому другому содержимому, в котором есть плавающие элементы внутри него)? – trusktr

+0

... чтобы все они расширялись. – trusktr

1

Решение есть? рассматривать его как проблему jQuery вместо проблемы с CSS.

Сначала определите функцию forceRedraw на элементах jQuery, которая просто устанавливает класс элемента в его существующий класс:

jQuery.fn.extend({ 
    forceRedraw: function() { 
    jQuery(this).each(function() { 
     this.className = this.className; 
    }); 
    } 
}); 

Затем, при замене мнения:

$('#view1').hide(); 
$('#view2').show(); 
$('#footer').forceRedraw(); 

(Это решение было предложено на jQuery forums)

+0

Спасибо, это сработало для меня! – Kelly