CSS:在同一元素上同时应用:before和:after之后悬停不起作用

时间:2014-06-04 14:38:22

标签: html css html5 css3

应用:hover:before后,

:after无效。 我正在检查Chrome。 这是我的代码:

<style>
  * {
    margin: 0px;  
    padding: 0px;
    box-shadow: none;
  }

  body {
    background: black;
  }

  #demoBoard {
    position: relative;
    margin: 7px auto;
    width: 630px;
    height: 650px;
    background-color: grey;
    background-image: radial-gradient(152px at 324px 50%, black, grey 99%);
    opacity: 0.9;
    border-radius: 10%;
  }

  #demoBoard h2 {
    position: absolute;
    color: rgb(243, 100, 20);
    text-align: center;
    text-shadow: 2px 2px 2px black;
    top: 3px;
    left: 290px;
    -webkit-user-select: none;
  }
  #Gboard {
    position: absolute;
    width: 580px;
    height: 580px;
    background: rgba(0, 0, 0, 0.8);
    position: absolute;
    border: 5px solid crimson;
    box-shadow: 3px 3px 4px black;
    top: 34px;
    left: 18px;
  }

  #demoBoard:before {
    position: absolute;
    content: "";
    width: 628px;
    height: 648px;
    border-left: 1px solid rgb(41, 41, 51);
    border-right: 1px solid rgb(41, 41, 51);
    border-radius: 10%;
    box-shadow: inset 10px 10px 30px black;
    left: -1px;
  }

  #demoBoard:after {
    position: absolute;
    left: -1px;
    top: -2px;
    content: "";
    width: 631px;
    height: 651px;
    border-bottom: 1px solid rgb(41, 41, 51);
    border-top: 1px solid rgb(41, 41, 51);
    border-radius: 10%;
    box-shadow: inset -10px -10px 30px black;
  }

  #Gboard:hover {
    cursor: pointer;
  }

  #Gboard:active {
    box-shadow: 1px 1px 2px black;
    cursor: pointer;
  }

  #options {
    position: absolute;
    top: 200px;
    left: 180px;
    color: crimson;
    font: 20px bold;
    background: rgba(123, 123, 123, 0.4);
    border-radius: 10%;
    width: 250px;
    height: 300px;
  }

  #options:before {
    content: "";
    position: absolute;
    box-shadow: inset 14px 14px 35px black;
    border-radius: 10%;
    width: 250px;
    height: 300px;
  }

  #options:after {
    content: "";
    top: 2px;
    position: absolute;
    box-shadow: inset 0px -14px 35px black;
    border-radius: 10%;
    width: 250px;
    height: 300px;
  }

  #options p {
    position: absolute;
    top: 12px;
    left: 210px;
    color: crimson;
    font-size: 30px;
    text-shadow: 0px 1px 1px black;
  }

  #options p:hover {
    cursor: pointer;
  }

  #options ul {
    list-style: none;
    padding-top: 50px;
    padding-left: 50px;
    display: block;
  }

  #options ul li {
    padding-bottom: 2px;
    text-align: center;
    border-bottom: 1px solid black;
    width: 150px;
    height: 30px;
    text-align-last: right;
    line-height: 2;
    text-shadow: 0px 1px 1px black;
  }

  #options ul li:before {
    position: absolute;
    content: "";
    left: 50px;
    padding-bottom: 2px;
    text-align: center;
    border-bottom: 1px solid rgba(134, 94, 14, 0.5);
    width: 150px;
    height: 31px;
  }

  #options ul li:hover {
    cursor: pointer;
    padding-bottom: 5px;
    font-size: 22px;
  }

  #options ul li:hover:before {
    position: absolute;
    content: "";
    left: 50px;
    padding-bottom: 2px;
    text-align: center;
    border-bottom: 1px solid green;
    width: 150px;
    height: 31px;
  }
</style>

<div id="demoBoard">
    <h2>Demo</h2>
    <div id="Gboard"></div>
    <div id="options" class="menu">
        <p id="close">x</p>
        <ul>
            <li>Demo</li>
            <li>Demo</li>
            <li>Demo</li>
            <li>Demo</li>
            <li>Demo</li>
            <li>Test</li>

        </ul>

    </div>
</div>

:hover无法处理正在应用悬停的所有元素。 我不知道这段代码发生了什么。它正在进行我已经完成的其他一些测试。

2 个答案:

答案 0 :(得分:3)

这是因为在#demoBoard和#content之前和之前创建的内容放在链接的顶部,因此您无法将鼠标悬停在它们上面。

添加此项以更改链接的z-index,基本上将它们置于其他伪内容之上。

#options ul li { 
   position: relative;
   z-index: 2;
}

注意:如果你这样做,也要改变#options ul li:before和#options ul li:hover:before to&#34; 0&#34;的左值,因为它现在将相对于列表项。

答案 1 :(得分:2)

我给了<ul>以下样式:

position: relative;
z-index: 1;

它工作正常。很多元素都是绝对定位的,但它们的顺序没有定义。