IE7 и свойство CSS table-cell

Так что мне просто нравится, когда мое приложение отлично работает в Firefox, но затем я открываю его в IE и ... Нет, попробуйте еще раз.

Проблема, с которой я столкнулся, заключается в том, что я устанавливаю для свойства отображения CSS значение none или table-cell с помощью JavaScript.

Изначально я использовал display: block, но Firefox странно отображал его без свойства table-cell.

Я хотел бы сделать это, не добавляя взлома в JavaScript для тестирования IE. Какие-либо предложения?

Спасибо.

Забавно, вы используете хак для Firefox, а затем ищете хак для IE ..;)

NibblyPig 06.04.2010 19:43
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
32
1
86 455
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Что ж, IE7 не имеет display: table(-cell/-row), так что вам придется придумать что-то еще или настроить таргетинг на браузер (что я согласен, это плохой взлом). В качестве быстрого исправления (я не знаю, чего вы пытаетесь достичь с точки зрения внешнего вида) вы можете попробовать display: inline-block и посмотреть, как он выглядит.

Может быть, придумать способ сделать display: block и вместо этого решить проблему «Firefox делает это странно»? Можете ли вы точно описать, что вы имеете в виду под странным рендерингом?

Когда вы устанавливаете блокировку в Firefox, ячейки таблицы отображаются друг на друге, а не бок о бок. Я бы переписал все это, чтобы вместо этого использовать DIV, но я слишком ленив для этого, поэтому вместо этого я просто написал дерьмовый код взлома.

Ryan Smith 30.10.2008 05:26

Если вы создаете какие-либо элементы блочного уровня, вы можете настроить их как float: left, чтобы в Firefox они складывались рядом друг с другом, а не рядами. Или "display: inline-block" может работать здесь, но в IE7 его можно использовать только для элементов, которые обычно являются встроенными, например a или em.

joelhardi 30.10.2008 05:30

IE7 не поддерживает <code> display: inline-block; </code>. Очевидный взлом: <code> zoom: 1; * display: inline; </code>

Phill Healey 19.05.2014 23:15

Вам никогда не понадобится Javascript для тестирования IE, используйте условные комментарии.

Вы можете посмотреть на решение, которое эти парни придумал для обработки табличного отображения в IE.

Я использую CSS более десяти лет, и у меня никогда не было возможности использовать display: table-cell, и я использую условные комментарии только для того, чтобы скрыть расширенные эффекты от IE6.

Я подозреваю, что другой подход решит вашу проблему внутренне кроссбраузерным способом. Можете ли вы открыть отдельный вопрос, описывающий эффект, которого вы пытаетесь достичь, и опубликовать HTML и CSS, которые в настоящее время работают в Firefox?

Ответ принят как подходящий

Хороший способ решить эту проблему, установив значение display на '':

<script type = "text/javascript">
<!--
function toggle( elemntId ) {
    if (document.getElementById( elemntId ).style.display != 'none') {
        document.getElementById( elemntId ).style.display = 'none';
    } else {
        document.getElementById( elemntId ).style.display = '';
    }
    return true;
}
//-->
</script>

Пустое значение приводит к тому, что стиль возвращается к значению по умолчанию. Это решение работает во всех основных браузерах.

В хроме можно установить initial. :)

Shaz 17.04.2011 05:16

ключевое слово initial добавляется в CSS3 и ведет себя точно так же, как указано выше, в соответствии со спецификациями.

Jacco 17.04.2011 13:16

Обожаю такие хаки :)

Tarik 07.12.2011 22:49

У меня была такая же проблема, и я использовал

*float: left; 

"*" обозначает только IE

Если быть точным, взлом * (звездочка) предназначен для IE 7 и ниже.

viam0Zah 23.11.2009 12:22

* - хороший трюк, но float не даст вам равномерно распределенных элементов, а это то, что вам нужно в таблице.

Benubird 22.12.2010 14:30

Я решил это с помощью jQuery:

$(document).ready(function(){
  if ($.browser.msie && $.browser.version == 7)
  {
    $(".tablecell").wrap("<td />");
    $(".tablerow").wrap("<tr />");
    $(".table").wrapInner("<table />");
  }
});

в приведенном выше сценарии предполагается, что у вас есть div, использующие такие стили, как:

<style>
.table     { display: table; }
.tablerow  { display: table-row; }
.tablecell { display: table-cell; }
</style>

@andy magoon, есть ли такое решение без свойства .browser, которое теперь устарело jQuery? Или просто создание нашего собственного кода обнаружения браузера - единственное решение?

raphie 01.09.2012 23:24

@raphie Сделайте отдельные .js и используйте условные комментарии = /

RaphaelDDL 05.06.2013 23:46

@RaphaelDDL, спасибо за предложение, да, мне пришлось создать свой собственный код обнаружения браузера, по крайней мере, для обнаружения базовых типов систем, таких как iOS, Android или Windows, и некоторых основных браузеров, таких как Gecko / Mozilla, webkit, safari и т.

raphie 13.06.2013 04:50

Мне также пришлось обернуть все это в <tbody />, чтобы IE7 отображал таблицу

mediafreakch 26.11.2013 19:57

Использование встроенного блока хорошо подходит для такого рода вещей. Нет, IE 6 и IE 7 технически не имеют display: inline-block, но вы можете воспроизвести поведение с помощью следующих стилей:

div.show-ib {
    display: inline-block;
    *zoom: 1;
    *display: inline;
}

Ключ к этому - «zoom: 1» переключает свойство «hasLayout» на элементе, которое изменяет способ отображения браузером элемента уровня блока. Единственная проблема со встроенным блоком - у вас не может быть поля меньше 4 пикселей.

+100 Очень хороший ответ. Работает намного лучше, чем любое другое решение, с которым я сталкивался!

KristianB 31.01.2014 15:35

Пример кода для условных комментариев, которые любезно опубликовал пользователь.

«[if lt IE 8]» работает, только если браузер IE ниже IE8, потому что IE8 делает это правильно. С условными комментариями IE7 размещает DIV красиво по горизонтали ... HTML:

 <div class = "container">
    <!--[if lt IE 8 ]><table><tr><![endif]--> 
    <!--[if lt IE 8 ]><td><![endif]-->
    <div class = "link"><a href = "en.html">English</a></div>
    <!--[if lt IE 8 ]></td><![endif]-->
    <!--[if lt IE 8 ]><td><![endif]-->
    <div tabindex = "0" class = "thumb"><img src = "pictures\pic.jpg" /></div>
    <!--[if lt IE 8 ]></td><![endif]-->
    <!--[if lt IE 8 ]><td><![endif]-->
    <div class = "link"><a href = "de.html">Deutsch</a></div>
    <!--[if lt IE 8 ]></td><![endif]-->
    <!--[if lt IE 8 ]></tr></table><![endif]-->
</div> 

Мой CSS

.link {
 display:table-cell;
 vertical-align:middle;
 }
 div.container {
 margin: 0 auto;
 display:table;
 }
 .thumb {
 display:table-cell;
 float: left;
 text-align: center;
 }

IE 8 и 9 Работают с CSS так же, как и FireFox. IE7 теперь выглядит так же, используя теги Table и TD & TR. На некоторых страницах IE 8 работал только 20% времени, поэтому я использовал [if lt IE 9]

Это также помогает сгладить проблемы с вертикальным выравниванием, с которыми IE7 не может справиться.

Я пробовал все, и единственный способ, которым я обнаружил, что все это кроссбраузерно, - это использовать Javascript / Jquery. Это чистое легкое решение: кликните сюда

IE7 также не поддерживает display:inline-block;. Очевидный взлом - zoom: 1; *display: inline; после вашего CSS для display:table-cell;

Другие вопросы по теме