代码之家  ›  专栏  ›  技术社区  ›  Kathryn Crawford

ul元素上的伪元素在IE11中不起作用

  •  0
  • Kathryn Crawford  · 技术社区  · 6 年前

    我有一个菜单,设置了一个伪元素作为背景色。之所以需要伪元素,是因为虽然菜单本身不是全宽的,但背景需要是全宽的。我设置了一个我认为非常简单的元素。

    这是我的html和注释

    <div class="primary-menu">
      <nav class="menu-primary-menu-container">
        <ul id="menu-primary-menu" class="menu">
          <li id="menu-item-7031" class="first-menu-item menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-7031">
            //hovering this li triggers the sub-menu visibility, the pseudo element is also lined up to this element
            <a href="#">Solutions</a>
            <ul class="sub-menu">
              //pseudo element should show up here
              <li id="menu-item-8916" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8916"><a href="#">Solutions Overview</a></li>
              <li id="menu-item-7787" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7787"><a href="#">Data Lake</a></li>
              <li id="menu-item-7541" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-7541"><a href="#">Real-Time Analytics</a></li>
              <li id="menu-item-7540" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-7540"><a href="#">Cloud Data Integration</a>
                <ul class="sub-menu">
                  <li id="menu-item-7854" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-7854"><a href="#">Data Integration into Azure</a>
                    <ul class="sub-menu">
                      <li id="menu-item-8393" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8393"><a href="#">Azure FAQ</a></li>
                      <li id="menu-item-8394" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8394"><a href="#">Getting Started with Azure</a></li>
                    </ul>
                  </li>
                  <li id="menu-item-7853" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-7853"><a href="#">Data Integration into AWS</a>
                    <ul class="sub-menu">
                      <li id="menu-item-11470" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-11470"><a href="#">Getting Started with AWS</a></li>
                    </ul>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </nav>
    </div>
    

    以及相关CSS

    @media (min-width: 768px)
      .primary-menu .menu-primary-menu-container #menu-primary-menu > li {
        margin: 0 15px;
        position: relative;
      }
    }
    
      .primary-menu #menu-primary-menu > li > .sub-menu:before {
        -ms-flex-item-align: center;
        -ms-grid-row-align: center;
        align-self: center;
        background: rgba(255, 255, 255, 0.9);
        box-shadow: 0 4px 4px rgba(0, 0, 0, 0.2);
        content: "";
        display: block;
        height: 470px;
        position: absolute;
        top: -1rem;
        width: calc(100vw + 1400px);
        z-index: -1;
      }
    

    在IE11中,伪元素的属性都被划掉并应用于。before元素应从中派生的子菜单ul。我添加了一个显示:block;属性per the suggestion here ,但这无助于解决我的问题。

    这就是我检查元素时在IE11中显示的内容。

    enter image description here

    I have a working code pen here which also displays the issue.

    1 回复  |  直到 6 年前
        1
  •  1
  •   muecas    6 年前

    根据我的经验,你不能检查 ::after ::before 对于IE,所有属性都被划掉了,只是因为在某种程度上,它们不属于所选元素本身,而是属于其pesudo。

    我发现,使其看起来像其他浏览器的唯一方法是更改样式的某些属性值 ::之前 :

    header .wrapper .primary-menu #menu-primary-menu > li > .sub-menu::before {
        -ms-flex-item-align: center;
        -ms-grid-row-align: center;
        align-self: center;
        background: rgba(255, 255, 255, 0.9);
        box-shadow: 0 4px 4px rgba(0, 0, 0, 0.2);
        content: "";
        display: block;
        height: 470px;
        position: absolute;
        top: -1rem;
        /* Set width to auto */
        width: auto;
        z-index: -1;
        /* Make a huge overflow (i doesn't have to be that big) */
        right: -9999px;
        left: -9999px;
    }
    

    希望有帮助。