Cssのみを使用して別のクラスの要素にホバーするときに1つのクラスのcssを変更する方法はありますか?
何かのようなもの:
.item:hover .wrapper { /*some css*/ }
「ラッパー」のみが「アイテム」の中になく、それはどこか別の場所にあります。
私は本当にこれほど単純なものにjavascriptを使いたくありませんが、もし必要なら、どうすればいいでしょうか?これが私の失敗した試みです:
document.getElementsByClassName('item')[0].onmouseover="document.getElementsByClassName('wrapper')[0].style.background="url('some url')";";
各クラスの要素は1つだけです。テンプレートを作成したときにIDを使用しなかった理由がわからないが、それはまさにその方法であり、変更することはできない。
[編集]
メニューです。各メニュー要素には個別のクラスがあります。要素にカーソルを合わせると、サブメニューが右側にポップアップ表示されます。 「Inspect Element」ツールを使用すると、サブメニューがアクティブなときにWebサイトのHTML全体が変化することがわかります(つまり、サブメニューしかありません)。 「ラッパー」と呼ぶクラスには、サブメニューの背景を制御するcssがあります。 2つのクラスの間には、実際に関連性はありません。
子要素または兄弟要素を選択する場合を除き、現時点ではCSSでは不可能です(簡単で、他の回答で説明されています)。
それ以外の場合は、JavaScriptが必要です。 jQueryとAngularなどのフレームワークは、比較的簡単にこの問題に取り組むことができます。
[編集]
新しいCSS(4)セレクター :has() を使用すると、親要素/クラスをターゲットにできるようになり、近い将来にCSSのみのソリューションが実行可能になります!
ホバーされた要素が別の要素(E
)に影響を与える(F
)には、2つのアプローチがあります。
F
がE
の子要素、またはF
は、E
の後の兄弟(または兄弟の子孫)要素です(E
は、マークアップ/ DOMに表示されますbeforeF
):これらのオプションの最初を説明するには(F
の子孫/ E
):
.item:hover .wrapper {
color: #fff;
background-color: #000;
}
2番目のオプションを示すために、F
はE
の兄弟要素です。
.item:hover ~ .wrapper {
color: #fff;
background-color: #000;
}
この例では、.wrapper
が.item
の直接の兄弟である場合(2つの間に他の要素がない場合)、.item:hover + .wrapper
も使用できます。
参照:
.wrapperが.item内にあり、IE 6でないか、.itemがタグである場合、使用するCSSは正常に機能するはずです。提案する証拠はありますか?そうじゃない?
編集:
CSSだけでは、CSSに含まれていないものには影響しません。これを実現するには、次のようにメニューをフォーマットします。
<ul class="menu">
<li class="menuitem">
<a href="destination">menu text</a>
<ul class="menu">
<li class="menuitem">
<a href="destination">part of pull-out menu</a>
... etc ...
あなたのCSSは次のようになります:
.menu .menu {
display: none;
}
.menu .menuitem:hover .menu {
display: block;
float: left;
// likely need to set top & left
}
次のCSSを作成することでそれを行うことができます。ルートにホバーする場合に子クラスに影響を与えるために必要なCSSをここに置くことができます
.root:hover .child {
}