【问题标题】:Table cell loses border when css gradient filter is applied in IE8在 IE8 中应用 css 渐变过滤器时表格单元格失去边框
【发布时间】:2011-03-28 18:41:12
【问题描述】:

我发现同时应用css渐变滤镜时,表格单元格上的css边框丢失了。好像渐变效果覆盖了边框。

是浏览器的错误还是我在这里遗漏了什么?

样式定义如下:

.c7 {
    color: #000000;
    filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#c0c0c0',EndColorStr='#f0f0f0'); 
    border: #000000 1px solid;
    width: 100px;
    height: 30px;
}

[更新] 您可以应用不透明度过滤器并将其从 100 减少到 1,您可以看到边框是如何逐渐出现的。它证实了我的猜测,渐变效果显示在边框上。

【问题讨论】:

  • 很棒的发现。正如您所说,渐变会覆盖边框,因为如果您将边框设置得更大,渐变会扩展并覆盖它。我搜索了一个解决方案,但没有结果..希望有人知道一个技巧

标签: css internet-explorer-8


【解决方案1】:

我找到了解决方法,但您可能不喜欢它...

如果您在 IE 中以quirks mode 呈现边框,则边框呈现正常,只有在您使用兼容模式时才会被遮挡。在 IE8 中比较这两个页面:

单击兼容性视图按钮也有效,但我尝试使用 compatibility mode meta tags 获得相同结果的尝试没有成功。我尝试使用box-sizing,但也没有成功。我得出结论,让它按你想要的方式工作的唯一方法是强制 IE 进入 quirks 模式,但这可能会给布局带来很多其他问题,你最好添加一个包装元素来附加你的渐变背景。

【讨论】:

  • 无论是否在 IE8 中声明 DOCTYPE,我都会得到相同的结果。是魔法吗?
  • @Victor 我不知道,你得到了什么结果?
  • 我得到带边框的表格单元格,我注意到如果我在开发人员工具中使用 IE10 和设置 ie8 模式,它没有得到任何结果。为了在 IE 中正确测试带边框的渲染单元,我必须使用原始 ie8 而不设置浏览器模式。我得出的结论是IE9、IE10或IE11中的IE8和IE8浏览器模式不一样。
  • @Victor 很可能您的 IE8 处于兼容模式,如我的回答中所述
  • 是的,IE8 模式下的 IE10 呈现方式与 IE8 不同
【解决方案2】:

应用这个也可以:

position: relative;
z-index: -1;

【讨论】:

  • 这肯定会显示边框,但(对我而言)它会清除单元格内的所有内容;包括背景;
  • 只是位置:相对;是我所需要的。
  • +1:在 IE 6、7、8 和 9 中对我来说就像一个魅力。对 Chrome、Firefox 和 Safari Mobile 也无害。我需要z-index: -1; 让它在 IE8 中工作(没有它在其他地方也很好)。
  • 如果您正在处理表格单元格,这将不起作用。它会清除单元格(内容和渐变)。否则很好。
  • 对我来说,这获得了边框,并且单元格内容可见,但不读取点击。
【解决方案3】:

使用 DIV 来包含每个单元格中的内容。将渐变应用到 DIV 并将边框放在单元格上。渐变会限制在DIV,不会覆盖边框。

http://jsfiddle.net/WWCaj/1/

【讨论】:

  • 同意。唯一能在 IE8 上同时解决背景和边框问题的东西。
【解决方案4】:

使用位置:相对!重要;

它的工作正常......

【讨论】:

  • 我发现我不需要 !important,尽管它也可以使用。另请注意,这需要应用于 td 而不是表
【解决方案5】:

在 td 上:

  /* enough for IE9 */
  background-origin: padding-box;
  background-clip: padding-box;
  /* for IE8 */
  position: relative;

为我工作。

您也可能想尝试使用边框折叠,因为此错误在

之间的行为不同
  border-collapse: separate 

和

  border-collapse: collapse

【讨论】:

    【解决方案6】:

    在尝试了很多修复后,我得出的结论是,它根本不值得尝试使用过滤器 CSS。 quote from @mdo 是 Twitter 引导 css 的幕后推手:

    过滤器在 IE 中是危险的业务,尤其是 7 和 8。我宁愿不包括那些,因为对于过度使用它们的人来说,这将是巨大的性能损失。

    将 css 应用于 td 元素时遇到的问题:

    • position: relative 仅适用于 IE9,不适用于 IE8
    • z-index: -1 不适用于 td 元素
    • 如果您有过滤器,则必须将其关闭才能悬停
    • 我的表格有边框比在表格单元格上有渐变更好看

    【讨论】:

      【解决方案7】:

      我尝试了所有这些解决方案,但均未成功。因此,我将渐变放在 tr 中,然后决定使用 ::before 伪元素并在其上设置边框样式。但是,我什至没有为伪元素添加边框。以下就足够了。

       table thead {
          filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e9e9d9',GradientType=0 );
          -ms-filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e9e9d9',GradientType=0 );
      }
      table th { 
         background: none;
         border-right: 1px solid #a5a694; 
         background-clip: padding-box;
         position: relative!important; 
         z-index: 100;
      }
      table th:before {
          position: absolute;
          width: 100%;
          height: 100%;
          top: 0;
          left: 0;
          content: '';
      }
      

      但如果这不起作用,您还可以按照我最初的计划为伪类添加边框:

      table th:before {
          border-right: 1px solid #000000;
          position: absolute;
          width: 100%;
          height: 100%;
          top: 0;
          left: 0;
          content: '';
          z-index: 1000;
      }
      

      伪类很棒,我一直在使用它们,而且它们对浏览器的支持非常广泛,甚至在 IE8 中也是如此。

      【讨论】:

        猜你喜欢
        • 2012-04-23
        • 1970-01-01
        • 2012-03-24
        • 2013-03-19
        • 1970-01-01
        • 2011-01-04
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多