2013-12-11 3 views
1

Это проблема, с которой я столкнулся с IE7. Во всех других (более новых) браузерах это хорошо видно ... почему position:relative; повлияли на float: right; или float: left;? Есть ли способ сохранить position: relative, не жертвуя функциональностью float?IE7 поплавки исчезают, когда их родительский элемент находится в положении: relative

JS скрипку: http://jsfiddle.net/uW7JV/2/

Без position: relative; enter image description here

С position: relative; (на красном поле) enter image description here

Еще более обрезается вниз версия: http://jsfiddle.net/uW7JV/4/

Интересно ... Удаление <div class="clearboth"></div> позволяет t он доволен показать. Тем не менее, мне нужна эта функциональность, поэтому я все еще ищу исправление. http://jsfiddle.net/uW7JV/9/

+0

Вам действительно нужен этот родственник: позиция? Поскольку IE7 ведет себя как более похожий на IE6 (я думаю, что это хуже), я думаю, вы должны установить внутри floatting tag также в относительном положении. position: relative делает reflow/refresh на экране, поэтому родитель перерисовывается, а не дочерние элементы, которые на самом деле не находятся в потоке ... floatting. (надеюсь, вы понимаете мой смысл) –

+0

В этом примере это не имеет значения, но мне это нужно для сайта, который я создаю. Внутри этого родителя есть больше, чем просто плавающие элементы. – allicarn

+1

в порядке, продолжайте играть под IE7 или 6 в стандартном режиме с относительным позиционированием и посмотрите, что я имею в виду при пересчете на экране. Если вы использовали код для IE6/7, вы могли бы перегрузить некоторый контент, который бы сменил hasloyout или нет, где относительное было средством для сохранения элементов на экране. Вы имеете дело со знаменитым haslayout там :) –

ответ

0

Вам необходимо добавить overflow: hidden в .column-wrapper, чтобы он обертывал своих плавающих детей. После этого вам не понадобится раздел .clearboth div и CSS.

Другой вопрос, который вам нужно решить, это ширина столбцов, так как box-sizing: border-box не поддерживается в IE7, вам нужно учитывать ваше заполнение при назначении width.

div { 
    padding: 5px 1%; 
} 
.column-wrapper { 
    background: orange; 
    position: relative; 
    overflow: hidden; 
} 

.main { 
    background: yellow; 
    float: right; 
    width: 64.6%; 
} 
.sidebar { 
    float: left; 
    background: green; 
    width: 31.3%; 
} 

DEMO: http://jsfiddle.net/myajouri/uW7JV/15/

Другой способ пойти об этом, чтобы использовать Clearfix hack

.clearfix { 
    zoom: 1; /* for IE6/7 */ 
} 

.clearfix:after { 
    content: ""; 
    display: table; 
    clear: both; 
} 

Затем добавьте clearfix класс .column-wrapper.

+0

Yup, я знаю проблему выбора размера коробки. Это было просто ради демонстрации. 'overflow: hidden;' не идеален, поскольку мне нужно, чтобы вещи «нависали» по плавающим столбцам. – allicarn

+0

В этом случае используйте 'zoom: 1', чтобы вызвать' hasLayout' в '.column-wrapper'. Я рекомендую использовать взлома Clearfix. Я уточню свой ответ. – myajouri

+0

вздох. почему я не думал о «zoom: 1» ... это похоже на IE 101. Я сохранил код как есть, и просто добавил его в div с 'position: relative;'. магия. Спасибо! – allicarn