Велика подяка Майку та Роберту за їх корисні пости!
Якщо у вашому 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
можуть бути описані незалежно через їх відповідні позиції в унікально #id
d-елементах. Чи є причина, щоб не повторити це id
#light
в цьому випадку?
~
для "куб десь після контейнера в DOM і ділиться з батьком"