Пустая высота DIV IE7 - PullRequest
       10

Пустая высота DIV IE7

3 голосов
/ 20 июня 2011

ОБНОВЛЕНИЕ 1:

Я обнаружил, что при удалении width:100% из div я получаю результаты, которые я хочу, чтобы его промежуточные значения имели высоту 0, если они не содержат содержимого.Однако мне нужно, чтобы div имел ширину 100%, что по какой-то причине заставляет его иметь высоту без содержимого.

Вот jsfiddle проблемы.Вы увидите проблему, только если перейдете по следующей ссылке с IE7, может быть, на IE6 и ниже.

http://jsfiddle.net/RQeeg/2/

ОРИГИНАЛЬНЫЙ ВОПРОС:

У меня есть пустой div, который по какой-то причине имеет высоту.

В Chrome div не отображается вообще, если в нем нет содержимого.IE7, с другой стороны, показывает div, даже если у него нет содержимого.

Итак, я хочу, чтобы он имел высоту 0px, если он пустой, и автоматически корректировал его высоту, если у него есть содержимое.Что именно так и происходит, если ширина не равна 100%.

Ответы [ 4 ]

6 голосов
/ 20 июня 2011

Обновление после откровения, которое вы используете position: fixed:

Для поддержки IE7 здесь вы должны использовать два div s.Я вполне уверен, что нет никакого способа обойти это (если вы не хотите придерживаться одного div и использовать исправление JavaScript).

См .:
Без содержимого:http://jsfiddle.net/r3P8D/2/
С содержимым: http://jsfiddle.net/r3P8D/3/

Причина, по которой эта ошибка возникает, заключается в том, что после добавления определенных свойств, таких как width: <not auto> или position: fixed, вы запускаете hasLayoutэлемент .Как только вы запускаете hasLayout, эта ошибка возникает.

Поскольку вам требуется position: fixed ( .., который даже не работает в IE6 , но я отвлекся), естьнет способа избежать hasLayout, и, следовательно, нет способа избежать этой ошибки.

Итак, я дал вам лучший обходной путь, который я могу придумать.


Старый ответ:

Однако мне нужно, чтобы div имел ширину 100%

Просто не используйте width: 100%.

В этом случае div будет иметь значение по умолчанию width, равное auto, поэтому оно будет иметь «всю доступную ширину».width: auto это не то же самое , что и width: 100%, но для целей этого вопроса это выглядит одинаково визуально.

Проверьте это в Chrome и IE6 / 7 (без содержимого): http://jsfiddle.net/r3P8D/
Проверьте это в Chrome и IE6 / 7 (с содержимым): http://jsfiddle.net/r3P8D/1/

Насколько я понимаю, ваш вопрос, это именно то, что вы просите.

1 голос
/ 20 июня 2011

Это досадная ошибка IE.

Я думаю, что я обошел это в прошлом с:

div{
    overflow:hidden;
    min-height:0;
    display: inline;   
}

Демо здесь: http://jsfiddle.net/tomgrohl/YfbJt/

Если это повлияло на ваш макет, может быть лучше использовать класс, который добавляется при добавлении контента в div (если вы добавляете его динамически):

div
{
    height:0;
    overflow:hidden;    
}

div.active
{
    height: auto;
}
0 голосов
/ 20 июня 2011

Добавьте это в начало вашего CSS-файла:

/* http://meyerweb.com/eric/tools/css/reset/ 
   v2.0 | 20110126
   License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}

Это применяет стандартные правила к элементам и устраняет несоответствия между браузерами.


Если это все еще дает вамошибка, попробуйте добавить это под сбросом:

div{
width: 0px;
height: 0px;
}
0 голосов
/ 20 июня 2011

Я думаю, что IE 7 дает высоту по умолчанию, если вы не укажете значение.

Попробуйте установить высоту 0px.

...