MikeとRobertcの役立つ投稿に感謝します。
HTMLに2つの要素があり、:hover
1つを上書きして、もう1つの要素のスタイルの変更をターゲットにする場合、2つの要素は親、子、兄弟のいずれかに直接関連付ける必要があります。これは、2つの要素が相互に1つであるか、どちらも同じ大きな要素内に含まれている必要があることを意味します。
ユーザーが自分のサイトを読み、:hover
強調表示された用語を読み進めるときに、ブラウザーの右側のボックスに定義を表示したいと思いました。したがって、「definition」要素を「text」要素内に表示したくありませんでした。
私はほとんどあきらめて、私のページにjavascriptを追加しましたが、これは将来の問題です!CSSとHTMLのバックsassに我慢して、必要な効果を実現するために要素をどこに配置する必要があるかを伝える必要はありません。最終的には妥協しました。
ファイル内の実際のHTML要素は、:hover
互いに有効なターゲットとなるようにネストするか、単一の要素に含める必要がありposition
ますが、css 属性を使用して、任意の場所に任意の要素を表示できます。私はposition:fixedを使用:hover
して、HTMLドキュメント内の場所に関係なく、ユーザーの画面上の必要な場所にアクションのターゲットを配置しました。
html:
<div id="explainBox" class="explainBox"> /*Common parent*/
<a class="defP" id="light" href="http://en.wikipedia.or/wiki/Light">Light /*highlighted term in text*/
</a> is as ubiquitous as it is mysterious. /*plain text*/
<div id="definitions"> /*Container for :hover-displayed definitions*/
<p class="def" id="light"> /*example definition entry*/ Light:
<br/>Short Answer: The type of energy you see
</p>
</div>
</div>
CSS:
/*read: "when user hovers over #light somewhere inside #explainBox
set display to inline-block for #light directly inside of #definitions.*/
#explainBox #light:hover~#definitions>#light {
display: inline-block;
}
.def {
display: none;
}
#definitions {
background-color: black;
position: fixed;
/*position attribute*/
top: 5em;
/*position attribute*/
right: 2em;
/*position attribute*/
width: 20em;
height: 30em;
border: 1px solid orange;
border-radius: 12px;
padding: 10px;
}
この例では、:hover
内の要素からのコマンドのターゲットは内にある#explainBox
か、内にある必要が#explainBox
あります#explainBox
。#definitionsに割り当てられた位置属性により、#explainBox
技術的にHTMLドキュメント内の不要な位置に配置されている場合でも、希望の場所(の外)に表示されます。
同じもの#id
を複数のHTML要素に使用することは不適切なフォームと見なされることを理解しています。ただし、この場合、のインスタンスは#light
、一意に#id
'dされた要素内のそれぞれの位置により、独立して記述できます。id
#light
この場合に繰り返さない理由はありますか?
~
'cubeはDOMのコンテナーの後ろのどこかにあり、親を共有する'の一般的な兄弟コンビ