Большое спасибо Майку и Роберту за их полезные посты!
Если у вас есть два элемента в вашем HTML, и вы хотите :hover
над одним и нацелить изменение стиля в другом, эти два элемента должны бытьнапрямую связаны - родители, дети или братья и сестры.Это означает, что два элемента либо должны быть один внутри другого, либо оба должны содержаться в одном и том же элементе большего размера.
Я хотел отобразить определения в поле справа от браузера, когда мои пользователи читали мой сайт и :hover
поверх выделенных терминов;поэтому я не хотел, чтобы элемент 'definition' отображался внутри элемента 'text'.
Я почти сдался и просто добавил javascript на свою страницу, но это будущее, черт возьми!Нам не нужно мириться с тем, что back sass из CSS и HTML говорит нам, где мы должны разместить наши элементы для достижения желаемого эффекта!В итоге мы скомпрометировали.
Хотя фактические элементы HTML в файле должны быть либо вложенными, либо содержаться в одном элементе, чтобы действительные значения :hover
были нацелены друг на друга, атрибут css position
может быть использован для отображения любого элемента, где вы хотите.Я использовал 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
в этом случае?