Почему уменьшилась ширина дочернего элемента процентной ширины в абсолютно позиционированном родительском элементе Internet Explorer 7?
У меня есть абсолютно позиционированный объект, div
содержащий несколько дочерних элементов, один из которых является относительно позиционированным div
. Когда я использую для percentage-based width
дочернего элемента div
, он сворачивается в 0 width
IE7, но не в Firefox или Safari.
Если пользуюсь pixel width
, работает. Если родительский элемент расположен относительно друг друга, процентная ширина дочернего элемента работает.
- Что-то мне здесь не хватает?
- Есть ли что-то простое решение, кроме
pixel-based width
ребенка? - Есть ли в спецификации CSS область, которая охватывает это?
Ответов (7)7
Вот пример кода. Я думаю, это то, что вы ищете. Следующий код отображается точно так же в Firefox 3 (mac) и IE7.
#absdiv {
position: absolute;
left: 100px;
top: 100px;
width: 80%;
height: 60%;
background: #999;
}
#pctchild {
width: 60%;
height: 40%;
background: #CCC;
}
#reldiv {
position: relative;
left: 20px;
top: 20px;
height: 25px;
width: 40%;
background: red;
}
<div id="absdiv">
<div id="reldiv"></div>
<div id="pctchild"></div>
</div>
IE до 8 имеет временной аспект своей блочной модели, который, в первую очередь, создает проблему с процентной шириной. В вашем случае здесь абсолютно позиционированный div
по умолчанию не имеет ширины. Его ширина будет рассчитана на основе ширины в пикселях его содержимого и будет рассчитана после визуализации содержимого. Итак, в этот момент IE встречает и отображает ваш относительно позиционированный div
родительский элемент, имеющий ширину 0, поэтому он сам сворачивается до 0.
Если вы хотите более подробно обсудить это вместе с множеством рабочих примеров, загляните сюда .
Почему дочерний элемент с процентной шириной в абсолютно позиционированном родительском элементе не работает в IE7?
Потому что это Internet Explorer.
Что-то мне здесь не хватает?
То есть, чтобы повысить осведомленность ваших коллег / клиентов о том, что IE плох.
Есть ли простое решение, кроме ширины в пикселях для ребенка?
Используйте em
единицы измерения, поскольку они более полезны при создании жидких макетов, поскольку вы можете использовать их для заполнения и полей, а также для размеров шрифта. Таким образом, ваше пустое пространство увеличивается и уменьшается пропорционально вашему тексту, если его размер изменяется (что действительно вам нужно). Я не думаю, что проценты дают лучший контроль, чем em; ничто не мешает вам указать сотые доли ems (0,01 em), и браузер будет интерпретировать их так, как считает нужным.
Есть ли в спецификации CSS область, которая охватывает это?
Нет, насколько я помню, em
в CSS 1.0 были предназначены только для размеров шрифтов.