【问题标题】:z-index ordering not correctly rendering in IEz-index 排序在 IE 中未正确呈现
【发布时间】:2016-01-28 16:04:02
【问题描述】:

目前,我正在制作一个手风琴表,它会淡出并展开以显示选定的行,以显示其中包含的内容。在大多数情况下,我已经能够让事情顺利进行,没有任何问题。我对内容在 IE 中的显示方式有疑问。

第一张图片是想要的效果,它是当前在 Firefox 和 Chrome 中呈现的效果。

此图像不是预期的效果以及它当前在 Chrome(和 IE)中的呈现方式。

我尝试了几件涉及调整 z-index 的事情,但都没有奏效。我目前的测试代码可以在这里找到:Codepen

(function() {
  'use strict';

  function _classCallCheck(instance, Constructor) {
    if (!(instance instanceof Constructor)) {
      throw new TypeError('Cannot call a class as a function');
    }
  }

  function setMargins($table) {
    var w = $table.innerWidth();
    $table.find('.pad').each(function(i, ele) {
      $(ele).css({
        width: (w - ($table.data('tableW') | 0)) / 2
      });
    });
    $table.find('.details .content').each(function(i, ele) {
      var $ele = $(ele);
      var innerW = $ele.innerWidth();
      $ele.css({
        left: (w - innerW) / 2
      });
    });
  }
  var collapseTable = function() {
    function collapseTable($table, tableW) {
      _classCallCheck(this, collapseTable);
      if (!$table instanceof jQuery)
        $table = $($table);
      this.$table = $table;
      if (tableW | 0)
        $table.data('tableW', tableW);
      var scope = this;
      this.$table.on('click', '.collapser', function() {
        scope.collapse();
      });
      this.$table.on('click', '.row', function() {
        scope.collapse();
        var $this = $(this);
        var $details = $this.prev();
        var h = $($details.children('td')[0]).innerHeight();
        if (!$details.find('.content'))
          return;
        $details.addClass('open');
        $this.addClass('open');
        $this.css({
          height: h,
          padding: 0
        });
      });
      this.$table.find('.row').each(function(i, ele) {
        var $ele = $(ele);
        $ele.data('h', $ele.innerHeight());
        $ele.height($ele.innerHeight());
      });
      $(window).on('resize', function() {
        setMargins(this.$table);
      }.bind(this));
      setMargins(this.$table);
      this.$table.show();
    }
    collapseTable.prototype.collapse = function collapse() {
      this.$table.find('.open').each(function(i, ele) {
        var $this = $(ele);
        $this.removeClass('open').addClass('closed');
        $this.height($this.data('h'));
      });
    };
    return collapseTable;
  }();
  window.collapseTable = collapseTable;
}());

var t = new collapseTable($('.collapseTable'), 500);
body {
  background-color: lightblue;
}
.collapseTable {
  display: none;
  width: 90%;
  margin-left: auto;
  margin-right: auto;
  border-radius: 4px;
  overflow: hidden;
  background-color: grey;
}
.collapseTable table {
  position: relative;
  width: 100%;
  border-collapse: collapse;
  empty-cells: show;
}
.collapseTable .details {
  position: absolute;
  width: 100%;
}
.collapseTable .row {
  position: relative;
  background-color: #fff;
  opacity: .99;
  transition: all .5s ease;
}
.collapseTable .row.open {
  opacity: 0;
  color: transparent;
  visibility: hidden;
}
.collapseTable .details .content {
  position: relative;
  left: 30px;
  margin: 1em 0;
  width: 300px;
  background: blue;
  opacity: .99;
  padding: 4em;
}
.collapseTable .details {
  align-content: center;
  vertical-align: middle;
  opacity: 0;
  transition: all .5s ease;
}
.collapseTable .details.open {
  opacity: 1;
  background-color: grey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="collapseTable">
  <table>
    <tr class="details">
      <td>
        <div class="content collapser">
          <pre>
          f asdfs ;lkfdsja  fas
          
          f sa
          sfda 
          sdaf 
          dsaf
          sdaf 
          sd fa 
          ds
           fa
           d
          </pre>
        </div>
      </td>
    </tr>
    <tr class="row closed">
      <td class="pad"></td>
      <td>
        asf
      </td>
      <td>
        asf2
      </td>
      <td>
        asf2
      </td>
      <td>
        asf2
      </td>
      <td class="pad"></td>
    </tr>
    <tr class="details">
      <td>
        <div class="content">
          <pre>
          sf sd ksd sda
           fsd
            fds
             sd
             af d
             as 
             dfa 
             sdf 
             sa
              fds
              
          </pre>
        </div>
      </td>
    </tr>
    <tr class="row closed">
      <td class="pad"></td>
      <td>
        hgf
      </td>
      <td>
        hgf
      </td>
      <td>
        asf2
      </td>
      <td>
        asf2
      </td>
      <td class="pad"></td>
    </tr>
    <tr class="details">
      <td>
        <div class="content">
          <pre>
          sf sd ksd sda
           fsd
            fds
             sd
             af d
             as 
             dfa 
             sdf 
             sa
              fds
              
          </pre>
        </div>
      </td>
    </tr>
    <tr class="row closed">
      <td class="pad"></td>
      <td>
        hgf
      </td>
      <td>
        hgf
      </td>
      <td>
        asf2
      </td>
      <td>
        asf2
      </td>
      <td class="pad"></td>
    </tr>
    <tr class="details">
      <td>
        <div class="content">
          <pre>
          sf sd ksd sda
           fsd
            fds
             sd
             af d
             as 
             dfa 
             sdf 
             sa
              fds
              
          </pre>
        </div>
      </td>
    </tr>
    <tr class="row closed">
      <td class="pad"></td>
      <td>
        hgf
      </td>
      <td>
        hgf
      </td>
      <td>
        asf2
      </td>
      <td>
        asf2
      </td>
      <td class="pad"></td>
    </tr>
  </table>
</div>

编辑: 我成功纠正了 Chrome 中的问题,但它在 IE 中仍然无法正确呈现。

【问题讨论】:

  • 我注意到不久前z-index: -1 只隐藏在 Firefox 中...在 z-index=1 的前面设置一个不透明的阻止程序并将 -1 更改为 0。
  • 关于如何以跨浏览器工作的方式实现相同效果的任何想法?
  • @dandavis 谢谢,我会试一试。
  • @dandavis 实际上,阻止程序不会仍然阻止我的其他行吗? =/...不幸的是,这并不能完全实现我的目标。
  • 如果您将其他的设为 2 或 3 或 100 或其他任何值,则不会。简而言之,将所有内容向上移动 2,然后添加您的拦截器。

标签: javascript jquery html css firefox


【解决方案1】:

如果您在“.collapseTable .open.details”类中添加“background-color:grey”,那么我希望它可以跨浏览器工作。

【讨论】:

  • 不确定这应该如何帮助任何事情。表格的背景已经是灰色的。问题是在动画过程中,内容显示在表格下方的行上方,这是不需要的。将背景设置为灰色会完全隐藏较低的表格行,直到动画完成(不希望覆盖在它们上面)。
  • 对不起,我忘了提到你必须在 ".collapseTable .details .content{" 类中添加 z-index:5。请立即尝试。
  • 这样做似乎并不能解决任何问题。它只是最终将较低的行隐藏在内容后面。想要的效果是当 div 扩展到内容的高度时,内容隐藏在较低的行后面。
猜你喜欢
  • 2012-01-27
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2016-01-06
  • 2017-06-28
  • 1970-01-01
  • 2011-08-14
相关资源
最近更新 更多