Кроссбраузерная проблема CSS, div не заполняет контейнер в IE9, переполняется в Firefox

Я работаю над таблицей, в которой есть ячейки, требующие фона с пониженной непрозрачностью, а текст сверху не зависит от фона. Содержимое ячеек является динамическим.

http://jsfiddle.net/6zszm/3/

В IE9 (не тестировалось в других версиях IE) фон обрезается в содержимом диапазона. В firefox фон зашкаливает и переливается в правый нижний угол. В хроме это работает как шарм.

Некоторые похожие вопросы, которые не совсем охватывают это: Как сделать ‹div› заполнить ‹td› height Кто-то предлагает высоту 1px для td - у меня это не сработало, ничего не изменилось. Я также предпочел бы не использовать JS для решения этой проблемы.

Еще одна связанная с этим проблема: ошибка абсолютного позиционирования CSS в IE9. IE9, это работало в режиме совместимости, но не без него. <код>


person Alex    schedule 29.06.2012    source источник
comment
Какая совместимость браузера вам нужна? IE8? IE7?   -  person Per Salbark    schedule 29.06.2012
comment
Теоретически все вышеперечисленное и IE6, но у меня пока не было возможности их протестировать.   -  person Alex    schedule 29.06.2012
comment
Вероятно, я смогу разработать решение, которое означало бы, что пользователи IE6 будут получать прерывисто мигающий розовый фон в каждой ячейке... это поможет? ;) .. в основном, если вам нужно поддерживать это далеко назад, вы можете использовать только прозрачные изображения PNG (конечно, с хаком PNGFix).   -  person Pebbl    schedule 29.06.2012


Ответы (2)


Это действительно кажется невозможным — если только вы специально не определите ширину и высоту каждой ячейки, что противоречит цели использования таблицы.

Возможные решения...

RGBA

Предполагая, что вы собираетесь использовать фоновые цвета, вы всегда можете использовать background-color: rgba(200,200,200,0.5) с откатом к сплошным цветам, если это не сработает. Поддержка RGBA есть во всех популярных браузерах, однако она не работает в IE8 и ниже...

Прозрачные PNG

Очевидный простой способ — вернуться к использованию прозрачных PNG, но тогда это зависит от того, что цвета, которые вы используете, являются предопределенными и довольно жесткими.

Используйте -moz-элемент

Другим безумным решением заставить FireFox работать (если вы используете фоновые изображения, а не цвета) было бы использование возможности background: moz-element(). Здесь вы создаете скрытые элементы на своей странице с каждой разной непрозрачностью, которая вам может потребоваться, и ссылаетесь на них в качестве фона через идентификатор. Например:

<div id="image1" style="background: url(image1.jpg); opacity: 0.5;"></div>

Затем укажите это на элементе, на котором вы хотите, чтобы фон отображался:

<td style="background: -moz-element(#image1);"></td>

Однако я не ручаюсь за этот метод, он довольно неэлегантен и специфичен для браузера. Tbh Я очень удивлен, обнаружив, что эту проблему действительно нельзя решить (особенно в FF), используя старые абсолютные и относительные трюки.

Не используйте таблицы

Более широкое решение, поддерживаемое браузером, состоит в том, чтобы отказаться от использования таблиц и воссоздать структуру таблицы, используя старые добрые элементы div и числа с плавающей запятой. Единственная проблема с этим решением заключается в том, что вам снова придется определять большую часть ширины и высоты, и вы не сможете добиться вертикального выравнивания ячеек, если не откажетесь от чего-то еще более экспериментального, например FlexBox.

person Pebbl    schedule 29.06.2012
comment
Похоже, что в этом случае подойдут PNG, но я очень ценю все варианты. Безумно познавательно, спасибо! - person Alex; 30.06.2012
comment
@Alex Алекс, хех, не беспокойтесь ... Думаю, я был немного ошеломлен тем, что это было непросто решить. То, как FireFox ведет себя при размещении абсолютно позиционированного элемента внутри относительно позиционированного TD, действительно очень странно, совсем не ожидаемо... - person Pebbl; 30.06.2012

Вы можете попробовать работать с фреймворком CSS, например LESS или Blueprint. Большинство фреймворков имеют фоновый код, благодаря которому ваш стиль выглядит одинаково во всех браузерах, даже если обычно требуется настройка.

person StoicJester    schedule 29.06.2012
comment
У вас есть пример? Я знаю, что в LESS есть CSS-переменные, а Blueprint помогает вам обойти палитру основных задач, но я не видел такой поддержки ни в одном из них. - person Chris Moschini; 29.06.2012
comment
@Chris Самый заметный из них, о котором я могу думать, - это закругленные углы. Обычно это достаточное количество строк кода, если вы действительно хотите, чтобы он работал во всех браузерах, поскольку некоторые из них требуют использования ваших собственных изображений, а другие — нет. Функция LESS для закругленных краев определяет, какой браузер используется для вас, и устанавливает правильные команды стиля. Я прочитал некоторый код LESS, и многие функции, которые я прочитал, начинаются с операторов switch, чтобы определить, какой браузер используется, и определенные условия, применяемые к стилю в каждом случае. - person StoicJester; 29.06.2012