使用单个事件连接多个元素

时间:2015-10-15 18:41:47

标签: css css3

是否可以使用CSS3将特定元素上的单个事件连接多个不同的元素?

以下是我的例子;阅读标题选择器中的注释。

CSS

#header {
    border-color: darkred;   /* change this along when .nav > li:hover {} */
    border-width: 0 0 3px;
}

.nav > li {
    background-color: darkred;
}

.nav > li:hover {
    background-color: red;
    /*border-bottom: 3px red;*/
}

HTML

<nav id="header" class="navbar navbar-default navbar-fixed-top">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
                    aria-expanded="false" aria-controls="navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">Example</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
            <ul class="nav navbar-nav">
                <li class="{{ nav_home }}"><a href="#">Home</a></li>
            </ul>
        </div>
    </div>
</nav>

2 个答案:

答案 0 :(得分:2)

你不能单独使用CSS,因为它没有祖先选择器。

但是,您可以通过提供#header相对定位并在列表末尾添加空li来伪造效果,其中#header的高度和宽度为li,但是负z-index。

为这些样式提供空.nav > li:last-of-type { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; background-color: transparent; }

.nav > li:hover ~ li:last-of-type {
  background-color: red;
}

并添加此样式:

#header {
  border-color: darkred;
  border-width: 0 0 3px;
  position: relative;
}

.nav > li {
  background-color: darkred;
}

.nav > li:hover {
  background-color: red;
}

.nav > li:hover ~ li:last-of-type {
  background-color: red;
}

.nav > li:last-of-type {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: -1;
  background-color: transparent;
}

<强>段:

<nav id="header" class="navbar navbar-default navbar-fixed-top">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">Konecranes Trainer</a>
    </div>
    <div id="navbar" class="collapse navbar-collapse">
      <ul class="nav navbar-nav">
        <li class="{{ nav_home }}"><a href="#">Home</a></li>
        <li></li>
      </ul>
    </div>
  </div>
</nav>
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /ci/
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

答案 1 :(得分:0)

不,当第二个元素是第一个元素的子元素时,css中唯一的更改控制是可能的。 这是可能的,因为li是DOM树中#header的孩子。

#header:hover li {
color: red;
}

但是在DOM树上,它将不受css控制。 你可以用javascript做到这一点。