在 IE8 中将 cssPIE 用于 js 选项卡内容不呈现

Posted

技术标签:

【中文标题】在 IE8 中将 cssPIE 用于 js 选项卡内容不呈现【英文标题】:Using cssPIE for js tab content in IE8 not rendering 【发布时间】:2012-11-26 01:25:47 【问题描述】:

我创建了一个选项卡和选项卡内容动画。单击选项卡时,相应的选项卡内容会显示在下方,而其他选项卡则隐藏,非常简单且工作正常。我遇到的问题是 IE78 中的 border-radius 渲染。我将 cssPIE.htc 用于可能受这些 css3 属性影响的任何 css。这适用于页面上未使用 jQuery 操作的静态内容,但对于诸如选项卡之类的动态内容,我相信内容的 css 需要 -pie-watch-ancestors: n 属性.这样做之后,仍然没有结果。下面是我的代码(CSS、html 和 jQuery)以及 chrome 和 IE8 之间区别的屏幕截图。任何帮助都会很棒。

更新:我可以通过让选项卡内容离开页面,然后将活动选项卡内容放回左侧:0 来解决此问题,以便它始终显示并且永远不会重新呈现。 **与此同时,这里是小提琴,发疯:tab fiddle

Chrome 屏幕截图

IE8 损坏截图 您可能会注意到:没有边框、没有背景和没有背景图片(小彩色框)。

与标签内容相关的 CSS

    .tabContent 
    position:absolute;
    display:none;
    background-color:White;
    background-image: url(/includes/images/home_phase2/colored_boxes_small.png);
    background-repeat: no-repeat;
    background-position: 98% 90%;
    border-left:1px solid #772981;
    border-right:1px solid #772981;
    border-bottom:1px solid #772981;
    width:945px;
    margin-top:1px;
    margin-left:-1px;
    z-index:9999;

    -webkit-border-top-left-radius: 0;
    -moz-border-radius-topleft: 0;
    border-top-left-radius: 0;
    behavior: url("/includes/css/PIE.htc");
    -pie-watch-ancestors: true;


    .roundedCorners 
    border-radius:7px;
    -webkit-border-radius: 7px;
    -moz-border-radius: 7px;
    behavior: url("/includes/css/PIE.htc");

jQuery(document.load 预期)

$('.tabContent').click(function (event) 
    event.stopPropagation();
);

tabLnk.each(function () 
    $(this).attr("href", "javascript: void(0)")
);

tabLnk.click(function (event) 

    event.stopPropagation();
    var $this = $(this);
    var hideActive = $('.active').parent().index();

    if ($this.hasClass('active')) 
        $this.removeClass('active');
        $('.tabContent_wrapper .tabContent:eq(' + hideActive + ')').hide();
     else 
        $('.tabLnk').removeClass('active');
        $this.addClass('active');
        var showActive = $('.active').parent().index();
        $('.tabContent_wrapper').show();
        var activeContent = $('.tabContent_wrapper .tabContent:eq(' + showActive + ')');
        activeContent.show();
        activeContent.siblings().hide();
    

    if ($('.tab_wrapper li a').slice(1, 3).hasClass('active')) 
        $('.tabContent').slice(1, 3).addClass('borderTopLeftTabContent');
    
);

【问题讨论】:

你能把示例代码粘贴到jsfiddle.net 或jsbin.com 上吗?这对我们调试有很大帮助。谢谢。 确定@Sk8erPeter,让我设置一下 你的小提琴似乎不起作用...... 让我到处钓鱼,看看我能为你做什么,kniebel先生 对于任何难以查看他的小提琴内容的人(如果您收到“403 Forbidden”错误),请打开控制台和/或单击以在新选项卡中打开每个图像,然后然后回到他的小提琴,它应该可以正常工作 【参考方案1】:

尝试添加

position: relative

.roundCorners 

听起来很有趣,但遇到了同样的问题,可能会有所帮助。

编辑:

同样适用于:

.tabContent 

【讨论】:

.roundCorners 在前端添加到许多具有 .tabContent 的元素,即 position:absolute。你是说 position:absolute 在我的标签内容上不起作用吗? 我已经尝试过绝对位置,但运气不佳。另一方面,我知道相对位置有效。还是没有运气? 仍然没有运气,我想我知道为什么。 cssPIE 应该适用于除静态之外的任何位置。我相信原因是因为我的 js 正在切换内容的显示,导致边框无法呈现。我可以通过让标签内容离开页面来解决这个问题,然后将活动的内容放回左侧:0,以便它始终显示并且永远不会重新渲染..【参考方案2】:

好的,经过长时间的尝试,我设法做到了。最后我通过圆角tabContent_wrapper解决了它。

以下是我所做的简短总结:

    从每个 tabContent div 中删除了圆角,添加到 tabContent_wrapperclearfix 类添加到所有tabContent div,在CSS 代码中定义clearfix 类 将PIE.htc 添加到roundedCorners 由于 CSS3PIE 角向roundedCorners 添加了一些填充... 添加位置:相对; z-index:10;roundedCorners 注释掉了tabContentposition:absolute; 隐藏tabContent_wrapper,因为有一个2px 填充,当其中不显示任何内容时看起来很难看 删除了$('.tabContent_wrapper').show();前面的评论标志,现在需要;当我们再次点击活动选项卡时输入$('.tabContent_wrapper').hide();(不要让丑陋的空内容显示有边框)

这是完整的代码(使用http://jsbeautifier.org/ 格式化后):

<!DOCTYPE html>
<html>  
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <meta charset=utf-8 />
    <title>Tabs...</title>
    <style>
      .roundedCorners 
        padding:2px;
        border-radius:7px;
        -webkit-border-radius: 7px;
        -moz-border-radius: 7px;
        /* New stuffs */
        behavior: url(PIE.htc);
        position:relative;
        z-index:10;
      
      .tabHome_wrapper 
        margin-bottom:-1px;
      
      .tab_wrapper 
        position:relative;
        height:25px;
        margin-left:-1px;
      
      .tab_wrapper ul li 
        display:inline-block;
        padding-right:20px;
        overflow:hidden;
        width:132px;
        height:25px;
      
      .tab_wrapper ul > li:first-child a 
        -webkit-border-bottom-left-radius: 7px;
        -moz-border-radius-bottomleft: 7px;
        border-radius: 0 0 0 7px;
      
      .tabLnk 
        position:absolute;
        background-image:url('http://i.imgur.com/PkR4W.png');
        background-position: -132px 1px;
        background-repeat:no-repeat;
        width:132px;
        height:25px;
        margin-top:1px;
        z-index:9999;
        font-size: 15px;
        text-align: center;
        line-height: 25px;
        color: White !important;
        text-decoration: none;
      
      .borderTopLeftTabContent 
        border-radius: 7px 7px 7px 7px !important;
      
      .tabLnk.active 
        width:130px;
        background-position:-1px 1px;
        -webkit-border-bottom-left-radius: 0px !important;
        -moz-border-radius-bottomleft: 0px !important;
        border-bottom-left-radius: 0px !important;
        color: #833889 !important;
      
      .tabLnk:hover, .tabLnk:focus 
        text-decoration: none;
      
      .tabLnk:visited 
        color: White;
      
      .hideContent 
        left:-99999px;
      
      .tabContent_wrapper 
        /* new stuffs */
        width:945px;
        margin-top:1px;
        margin-left:-1px;
        border:1px solid #772981;
        /*
        border-top:0px;
        */

        /* hide it first because of the 2 pixel roundedCorner padding */
        display:none;
      

      .tabContent 
        /*
        position:absolute;
        */

        display:none;
        background-color:White;
        background-image: url('http://i.imgur.com/yyhGR.png');
        background-repeat: no-repeat;
        background-position: 98% 90%;

        /* moved to tabContent_wrapper, this z-index is not needed now */
        /* 
          border-left:1px solid #772981;
          border-right:1px solid #772981;
          border-bottom:1px solid #772981;
          width:945px;
          margin-top:1px;
          margin-left:-1px;
          z-index:9999;
        */

        -webkit-border-top-left-radius: 0;
        -moz-border-radius-topleft: 0;
        border-top-left-radius: 0;
      

      .tabContent_img 
        float: left;
        width:290px;
        height:155px;
        padding: 20px 20px 10px 15px;
      

      .tabContent_description 
        padding: 32px 140px 20px 0px;
        width:450px;
        float:right;
        font-size: 14px;
        color: gray;
      

      .tabContent_description p:first-child 
        padding-bottom: 10px;
      

      .lblTabTxt 
        color: white;
        padding-left: 3px;
        top: 5px;
        position: relative;
      

      .lblTabTxt:hover 
        text-decoration: none;
      

      /* Pete... clearfix from Drupal */
      /**
       * Markup free clearing.
       *
       * @see http://perishablepress.com/press/2009/12/06/new-clearfix-hack
       */
      .clearfix:after 
        content:".";
        display: block;
        height: 0;
        clear: both;
        visibility: hidden;
      
      /* IE6 */
      * html .clearfix 
        height: 1%;
      
      /* IE7 */
      *:first-child + html .clearfix 
        min-height: 1%;
      
    </style>

    <script type="text/javascript">
      $(document).ready(function () 

        var tabLnk = $('.tabLnk');

        $('.tabContent').click(function (event) 
          event.stopPropagation();
        );

        tabLnk.each(function () 
          $(this).attr("href", "javascript: void(0)")
        );

        tabLnk.click(function (event) 

          event.stopPropagation();
          var $this = $(this);
          var hideActive = $('.active').parent().index();

          if ($this.hasClass('active')) 
            $this.removeClass('active');
            $('.tabContent_wrapper .tabContent:eq(' + hideActive + ')').hide();
            // hide tabContent_wrapper too (when empty, it would look ugly because of the 2px padding)
            $('.tabContent_wrapper').hide();
           else 
            $('.tabLnk').removeClass('active');
            $this.addClass('active');
            var showActive = $('.active').parent().index();
            $('.tabContent_wrapper').show();
            var activeContent = $('.tabContent_wrapper .tabContent:eq(' + showActive + ')');
            activeContent.show();
            activeContent.siblings().hide();
          

          if ($('.tab_wrapper li a').slice(1, 3).hasClass('active')) 
            $('.tabContent').slice(1, 3).addClass('borderTopLeftTabContent');
          
        );

      );
    </script>
  </head>

  <body>
    <div id="ctl00_cphBody_pnltabWrapper" class="tabHome_wrapper">
      <div id="tabArea" class="tab_wrapper">
        <ul>
          <li> <a class="tabLnk" href="javascript: void(0)">
                Administrators
                </a>

          </li>
          <li> <a class="tabLnk" href="javascript: void(0)">
                Teachers
                </a>
          </li>
          <li> <a class="tabLnk" href="javascript: void(0)">
                Technologists
                </a>
          </li>
        </ul>
      </div>
      <div id="tabContentArea" class="tabContent_wrapper roundedCorners">
        <div class="tabContent clearfix" style="display: none;">
          <div class="tabContent_img">
            <img src="http://i.imgur.com/zJJmn.png"  
            >
          </div>
          <div class="tabContent_description">
            <p> <strong><span style="COLOR: #4b0082">Administrators</span> </strong></p>
            <p>a aliquet dolor gravida. Sed auctor imperdiet lacus vel vulputate.venenatis
              mauris, a dignissim elit fringilla ac. Quisque malesuada dapibus venenatis.
              Aliquam volutpat ante id diam auctor eu volutpat massa sem et augue. Vestibulum
              tortor lacus, venenatis sed ultricies ac, porta et ligula. Duis consectetur
              Mauris fringilla massa ac sem tristique consectetur. Aliquam varius, lacus
              vel sollicitudin congue, elit erat luctus mauris, Lorem ipsum dolor sit
              amet, consectetur adipiscing elit. Quisque posuere nunc lacinia diam ornare
              a ullamcorper nulla egestas.</p>
          </div>
        </div>
        <div class="tabContent borderTopLeftTabContent clearfix" style="display: none;">
          <div class="tabContent_img">
            <img src="http://i.imgur.com/zJJmn.png"  
            >
          </div>
          <div class="tabContent_description">
            <p><strong><span style="COLOR: #4b0082">Teachers</span></strong></p>
            <p>CONTENT&nbsp;CONTENT CONTENT CONTENT CONTENT CONTENT CONTENT CONTENT CONTENT
              CONTENT CONTENT CONTENT CONTENT</p>
          </div>
        </div>
        <div class="tabContent borderTopLeftTabContent clearfix" style="display: none;">
          <div class="tabContent_img">
            <img src="http://i.imgur.com/zJJmn.png"  
            >
          </div>
          <div class="tabContent_description">
            <p> <strong><span style="COLOR: #4b0082">Technologists </span></strong></p>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut malesuada,
              nulla eu viverra iaculis, nibh ipsum rhoncus risus, sit amet porta sapien
              elit id turpis. Donec eu nibh diam. Ut placerat vulputate ligula, ut mattis
              odio adipiscing id. Nullam vel arcu est. Praesent vitae porta metus. Cras
              auctor sem non nisi aliquet ultricies. Suspendisse potenti. Curabitur gravida
              eleifend aliquam. Fusce consequat cursus eros sit amet hendrerit. Curabitur
              quam nibh, auctor id dictum non, dapibus sit amet libero.</p>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>

部分截图:

    默认情况下,不打开任何选项卡: 第一个标签打开: 第二个标签打开: 第三个标签打开:

当然,您必须控制上边框,以免在活动标签下显示边框。 让我知道这是否有帮助。

【讨论】:

非常详细的答案,这是我的第二个选择,但我可能会包含一些 css 更改。我将选项卡内容定位在页面之外,以便在单击时不会重新呈现选项卡内容。我也可以替代选项卡内容包装器。感谢您的帮助

以上是关于在 IE8 中将 cssPIE 用于 js 选项卡内容不呈现的主要内容,如果未能解决你的问题,请参考以下文章

IE8 如何 不显示 选项 卡,直接在任务显示 各个页面?

我们如何在反应原生版本 .61 中将动画添加到底部选项卡图标

是否可以使用Javascript在IE8中生成虚拟keyboardEvent(选项卡)

TabbedPage 选项卡图标不适用于字体真棒

如何在服务器端渲染中将样式应用于 Next.js 中的 HTML?

在材料ui选项卡组件中将选项卡设置为活动