CSS / JS解决方案:在挂起子元素时,更改父div

时间:2013-09-01 20:53:48

标签: javascript html css

我知道CSS是“级联”,但在这种情况下我希望效果提升。我对JS或CSS解决方案持开放态度,但说实话,我更喜欢使用最少代码或开销的解决方案。

当我将鼠标悬停在(子)字母上时,我想要为整个窗口更改整个背景颜色,而不仅仅是子元素。每个字母都包含在填充整个窗口(或正文)的父#word div中。

如果在css中存在类似下面的内容会很好:

#h:hover #word{
    background-color: rgba(0, 102, 0, .5);
}

但它不起作用。任何人都有任何想法??

HTML:

<div id="word">
    <h1><a id="h" class= "letter" href=#>H</a></h1>
    <h1><a class= "letter" href=#>E</a></h1>
    <h1><a class= "letter" href=#>L</a></h1>
    <h1><a class= "letter" href=#>L</a></h1>
    <h1><a class= "letter" href=#>O</a></h1>
</div>

CSS:

    body {
        /*font-family: 'Sigmar One', cursive;*/
        font-family: 'Chango', cursive;
        font-size: 115px;
        color: white;
        text-shadow: 5px 5px 5px #000;
        /* background-color: #0047b2 */
        width: 100%;
        height: 100%;
        margin: 0px;
        background: url(img/texture.png) repeat; 

    }

    #word {
        position:absolute; 
        height:100%; 
        width: 70%;
        display: table;
        padding: 0 15% 0 15%;
        background: rgba(0, 71, 178, .5);
    }

    h1 {
        display: table-cell;
        vertical-align: middle;
        text-align:center;
        height: 1em;

    }

    a {
        /*border: 1px solid black;*/
        display: inline-block;
        line-height: 100%;
        overflow: hidden;

    }

    a:visited, a:active {
        text-decoration: none;
        color: white;
        /*color: #E8E8E8;*/

    }

    a:link {
        text-decoration: none;
        color: white;
        text-shadow: 3px -3px 0px black, -2px 2px 5px #0056b2;

    }

    a:hover {
        text-shadow: 5px 5px 5px #000;
        color: white;
    }

    #h:hover #word{
        background-color: rgba(0, 102, 0, .5);
    }

    @media (max-width: 1330px){
        #word {
            width: 100%;
            padding: 0px;

        }
    }

小提琴: http://jsfiddle.net/SZ9ku/1/

5 个答案:

答案 0 :(得分:1)

解决方案可能是JS:

$(".letter").hover(function() {
    $(this).closest("#word").toggleClass("hovered")
});

这是一个小提琴:http://jsfiddle.net/zT9AS/2

答案 1 :(得分:0)

真;

#word #h:hover {
    background-color: rgba(0, 102, 0, .5); 
}

FALSE;

#h:hover #word{
    background-color: rgba(0, 102, 0, .5);
}

答案 2 :(得分:0)

没有jquery解决方案:

onload = function()
{
  var links = document.getElementsByTagName('a');
  for (var i = 0; i < links.length; ++i)
  {
    if (links[i].className == 'letter')
    {
      links[i].onmouseover = function() {
        document.getElementById('word').style.backgroundColor="#0000FF";
      };
      links[i].onmouseout = function() {
        document.getElementById('word').style.backgroundColor="#FFFFFF";
      };
    }
  }
}

答案 3 :(得分:0)

它可以在纯JS中完成,没有jQuery(我假设你不希望它,因为它不会是代码中那么轻),这是我能用的最好的:

var word = document.getElementsByClassName("letter");
for (i=0; i<word.length; i++) {
  word[i].addEventListener("mouseenter", function( event ) {
    parent = event.target.parentNode.parentNode;
    //whenever the mouse hovers over a letter this will be evaluated once 
    parent.style.backgroundColor = "green";
  });
  word[i].addEventListener("mouseout", function( event ) {
    parent = event.target.parentNode.parentNode;
    //whenever the mouse hovers over a letter this will be evaluated once 
    parent.style.backgroundColor = "";
  });
}

在这个小提琴中试试: http://jsfiddle.net/SZ9ku/17/

答案 4 :(得分:0)

在POJS中,添加以下内容

CSS

.wordBg {
    background: rgba(0, 102, 0, .5) !important;
}

的Javascript

var changeWordBg = (function (word) {
    return function (evt) {
        if (evt.target.classList.contains("letter")) {
            switch (evt.type) {
                case "mouseover":
                    word.classList.add("wordBg");
                    break;
                case "mouseout":
                    word.classList.remove("wordBg");
                    break;
                default:
            }
        }
    };
}(document.getElementById("word")));

document.body.addEventListener("mouseover", changeWordBg, false);
document.body.addEventListener("mouseout", changeWordBg, false);

jsfiddle