Велика подяка Майку та Роберту за їх корисні пости!
Якщо у вашому HTML є два елементи, і ви хочете перейти :hoverна один та націлити на зміну стилю, в іншому два елементи повинні бути безпосередньо пов’язані - батьки, діти чи брати і сестри. Це означає, що два елементи або повинні бути один усередині іншого, або обидва повинні міститись в межах одного більшого елемента.
Я хотів відобразити визначення у вікні праворуч браузера, коли мої користувачі читали на моєму веб-сайті та :hoverза допомогою виділених термінів; тому я не хотів, щоб елемент 'визначення' відображався всередині елемента 'текст'.
Я майже відмовився і просто додав JavaScript на свою сторінку, але це майбутнє, бовтайте це! Нам не доведеться миритися із зворотним sass від CSS та HTML, що вказує нам, де ми повинні розмістити наші елементи для досягнення бажаних ефектів! Врешті-решт ми пішли на компроміс.
Хоча фактичні елементи HTML у файлі повинні бути або вкладеними, або міститися в одному елементі, щоб бути дійсними :hoverцілями один для одного, positionатрибут css може використовуватися для відображення будь-якого елемента, де завгодно. Я використовував позицію: фіксований, щоб розмістити ціль моєї :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можуть бути описані незалежно через їх відповідні позиції в унікально #idd-елементах. Чи є причина, щоб не повторити це id #lightв цьому випадку?
~для "куб десь після контейнера в DOM і ділиться з батьком"