Jump to content
  • 0

Table + position: absolute + height = ...


SelenIT
 Share

Question

Тестовый пример безобразия: http://jsfiddle.net/SYhDr/1/

Задача элементарная: нужно отпозиционировать табличку к правому краю и растянуть на определенный процент контейнера заранее неизвестной ширины и высоты. Казалось бы, проблем нет: при абс. позиционировании 100% высоты всегда известны (это фактическая высота containing block'а — предка с position: relative), подставляй числа и радуйся. С обычным дивом так и выходит. Но с табличкой ожидаемый результат получается только в Опере и... IE8. Хром 19, Сафари 5.1.5 и Огнехвост 12 в один голос отказываются растягивать табличку на заданную высоту, а в IE9 и вовсе происходит леденящий душу маразм. Причем пунктом 17.5.3 спеки (как пытаются мозилловцы в этом баге, явно родственном), тут не отбиться: высота таблицы-то — вот она, 20%! Кстати, из комментов к тому же багу явствует, что как минимум в 7-й версии Огнехвост вёл себя так же, как Опера (к сожалению, прямо сейчас проверить не могу).

Неужели такой баг во всех новых браузерах, кроме Оперы? Или я не понимаю чего-то сильно неочевидного, но очень важного, в спеке?

Заранее спасибо за любые подсказки и наводки!

P.S. Поведению IE9 придает особую пикантность влияние top: c ненулевым значением всё немножко иначе (хотя гориз. позиционирование, увы, менее бредовым не стало)...

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Кстати, Opera в этом плане действительно молодец, мало того она способна даже на такое :) Было бы здорово, если бы и другие были способны на такие же фичибаги.

А по сабжу, к сожалению, придумался только лишь такой костыль :(

  • Like 1
Link to comment
Share on other sites

  • 0

P.S. Поведению IE9 придает особую пикантность влияние top: c ненулевым значением всё немножко иначе (хотя гориз. позиционирование, увы, менее бредовым не стало)...

Порадовало)

Link to comment
Share on other sites

  • 0

А по сабжу, к сожалению, придумался только лишь такой костыль

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

_http://jsfiddle.net/SYhDr/10/

IE 9 как-то странно позиционирует, в этом случае, таблицу, если ставить ее относительно right/bottom(если left/top, то нормально) и если у нее процентная ширина/высота. То есть, если позиционировать относительно left/top или задавать фиксированные размеры ширины/высоты, то, вроде, работает нормально. Закономерность этого бага заметна при изменениях количества контента внутри ячейки: таблица, насколько я понял, пытается позиционироваться относительно длины контента, а не ширины самой таблицы... :mellow:

П.С. В IE10 не смотрел - нету. Что бы в полной мере иметь возможность управлять сложной таблицей, всегда приходиться задавать размеры для ее контейнера...(

  • Like 1
Link to comment
Share on other sites

  • 0
насколько я понял, пытается позиционироваться относительно длины контента, а не ширины самой таблицы...

Больше всего на то похоже. Вероятно, где-то «дооптимизировались». Аналогичная беда есть и с высотой ячеек (см. «ложка дегтя» здесь).

Link to comment
Share on other sites

  • 0

В превью IE11 обе баги тоже остались, увы. Но для высоты позиционированной таблички нашлось лекарство — display: block. А совсем забавно, что в первоначальном коде top: 0 и top: 0% работают по-разному...

Link to comment
Share on other sites

  • 0

У таблиц вообще много глюков с отображением в разных браузерах. например если ячейка рилейтив, а слой внутри абсолют - его нельзя спозиционировать в фаерфоксе (наверное именно эта проблема и описана в первом посте). Кстати разрабы знают об этом и считают, что так и надо, не собираясь ничего исправлять.

Edited by Zverushka
Link to comment
Share on other sites

  • 0

Насчет Fx - они всё-таки считают это багом и понемногу фиксят. Теперь хотя бы относительно table можно позиционировать, раньше и этого не было... с 31-й версии уже пофиксили.

Edited by SelenIT
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy