【问题标题】:IE7 and the CSS table-cell propertyIE7 和 CSS 表格单元格属性
【发布时间】:2010-09-19 22:20:33
【问题描述】:

所以我很喜欢我的应用程序在 Firefox 中运行良好,但随后我在 IE 中打开它并...不,请再试一次。

我遇到的问题是我使用 JavaScript 将 CSS 显示属性设置为 nonetable-cell

我最初使用的是display: block,但没有table-cell 属性,Firefox 让它变得很奇怪。

我很乐意这样做,而无需在 JavaScript 中添加 hack 来测试 IE。有什么建议吗?

谢谢。

【问题讨论】:

  • 有趣的是,你用一个 hack 的 firefox 然后寻找一个 IE hack..;)

标签: css cross-browser internet-explorer-7 css-tables


【解决方案1】:

IE7 也不支持display:inline-block;。一个明显的 hack 是 zoom: 1; *display: inline; 在你的 display:table-cell; 的 css 之后

【讨论】:

    【解决方案2】:

    我尝试了所有方法,发现所有跨浏览器的唯一方法是使用 Javascript/Jquery。这是一个干净的轻量级解决方案:click here

    【讨论】:

      【解决方案3】:

      用户无眼睑的条件cmets的代码示例,请发布

      "[if lt IE 8]" 仅在浏览器的 IE 低于 IE8 时才有效,因为 IE8 是正确的。使用条件 cmets 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 像 FireFox 一样使用 CSS。 IE7 现在使用 Table 和 TD & TR 标签看起来是一样的。在某些页面上,IE 8 的工作时间只有 20%,所以我使用了 [if lt IE 9]

      这也有助于解决 IE7 无法处理的垂直对齐问题。

      【讨论】:

        【解决方案4】:

        使用 inline-block 非常适合这种类型的东西。不,IE 6 和 IE 7 在技术上没有 display: inline-block,但您可以使用以下样式复制该行为:

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

        关键是“缩放:1”切换元素上的“hasLayout”属性,这会改变浏览器呈现块级元素的方式。内联块的唯一问题是您的边距不能小于 4px。

        【讨论】:

        • +100 非常好的答案。比我遇到的任何其他解决方案都好用!
        【解决方案5】:

        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>
        

        空值会导致样式恢复为默认值。此解决方案适用于所有主流浏览器。

        【讨论】:

        • 在 chrome 中可以设置为initial。 :)
        • initial 关键字被添加到 CSS3 中,根据规范,其行为与上述完全相同。
        • 我喜欢这些技巧 :)
        【解决方案6】:

        我已经使用 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 制作一个单独的 .js 并使用条件 cmets =/
        • @RaphaelDDL 感谢您的建议,是的,我必须创建自己的浏览器检测代码,至少可以检测 iOS、Android 或 Windows 等基本类型的系统,以及 Gecko/Mozilla 等一些主要浏览器, webkit、safari 和 ie。
        • 我还必须将整个内容包装到 中才能让 IE7 呈现表格
        【解决方案7】:

        我有同样的问题并使用过

        *float: left; 
        

        “*”表示仅限 IE

        【讨论】:

        • 准确地说,*(星号)破解地址为 IE 7 及以下版本。
        • * 是一个不错的技巧,但 float 不会为您提供均匀间隔的元素,而这正是您在表格中想要的。
        【解决方案8】:

        我已经使用 CSS 十多年了,但我从来没有使用过 display:table-cell 的机会,而且我使用条件 cmets 的唯一一次是在 IE6 中隐藏高级效果。

        我怀疑另一种方法会以本质上跨浏览器的方式解决您的问题。您能否打开一个单独的问题来描述您尝试实现的效果,并发布当前在 Firefox 中运行的 HTML 和 CSS?

        【讨论】:

          【解决方案9】:

          您永远不需要 Javascript 来测试 IE,使用 conditional comments

          您可以查看these guys 提出的用于在 IE 中处理类似表格的显示的解决方案。

          【讨论】:

            【解决方案10】:

            好吧,IE7 does not have display: table(-cell/-row) 所以你必须想出别的办法或做浏览器定位(我同意,这是不好的 hack)。作为一个快速修复(我不知道你想要实现什么,外观方面)你可以试试display: inline-block 看看它是什么样子的。

            也许想办法做display: block 并解决“Firefox 渲染它很奇怪”的问题?你能准确描述一下奇怪的渲染是什么意思吗?

            【讨论】:

            • 当您在 Firefox 中将其设置为阻止时,它会将表格单元格呈现在彼此之上,而不是并排。我会重写整个事情以使用 DIV,但我对此很懒惰,所以我只写了 sh**ty hack 代码。
            • 如果你正在做某种块级元素,你可以将它们设置为浮动“float:left”,这样在 Firefox 中它们将彼此相邻而不是成行堆叠。或者 "display: inline-block" 可能在这里工作,但在 IE7 中它只能用于通常是内联的元素,如 a 或 em。
            • IE7 不支持 display:inline-block;。一个明显的 hack 是 zoom: 1; *显示:内联;
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-15
            • 2012-09-18
            • 1970-01-01
            • 2019-02-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多