Cảm ơn rất nhiều đến Mike và Robertc vì những bài viết hữu ích của họ!
Nếu bạn có hai yếu tố trong HTML của mình và bạn muốn :hover
vượt qua một và nhắm mục tiêu thay đổi kiểu trong hai yếu tố kia thì hai yếu tố phải liên quan trực tiếp - cha mẹ, con cái hoặc anh chị em. Điều này có nghĩa là hai phần tử phải là một trong phần tử kia hoặc cả hai phải được chứa trong cùng một phần tử lớn hơn.
Tôi muốn hiển thị các định nghĩa trong một hộp ở phía bên phải của trình duyệt khi người dùng của tôi đọc qua trang web của tôi và :hover
các điều khoản được tô sáng; do đó, tôi không muốn phần tử 'định nghĩa' được hiển thị bên trong phần tử 'văn bản'.
Tôi gần như đã bỏ cuộc và chỉ thêm javascript vào trang của mình, nhưng đây là tương lai nguy hiểm đấy! Chúng ta không cần phải đưa ra thông tin ngược từ CSS và HTML cho chúng ta biết nơi chúng ta phải đặt các yếu tố của mình để đạt được các hiệu ứng mà chúng ta muốn! Cuối cùng chúng tôi đã thỏa hiệp.
Mặc dù các phần tử HTML thực tế trong tệp phải được lồng hoặc chứa trong một phần tử để trở thành :hover
mục tiêu hợp lệ cho nhau, position
thuộc tính css có thể được sử dụng để hiển thị bất kỳ phần tử nào bạn muốn. Tôi đã sử dụng vị trí: cố định để đặt mục tiêu cho :hover
hành động của mình , nơi tôi muốn nó trên màn hình của người dùng bất kể vị trí của nó trong tài liệu HTML.
Các 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>
Các 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;
}
Trong ví dụ này, mục tiêu của một :hover
lệnh từ một phần tử bên trong #explainBox
phải hoặc #explainBox
hoặc bên trong #explainBox
. Các thuộc tính vị trí được gán cho #def địnhs buộc nó xuất hiện ở vị trí mong muốn (bên ngoài #explainBox
) mặc dù về mặt kỹ thuật nằm ở vị trí không mong muốn trong tài liệu HTML.
Tôi hiểu rằng nó được coi là hình thức xấu để sử dụng giống nhau #id
cho nhiều hơn một yếu tố HTML; tuy nhiên, trong trường hợp này, các trường hợp #light
có thể được mô tả độc lập do vị trí tương ứng của chúng trong #id
các phần tử duy nhất . Có bất kỳ lý do để không lặp lại id
#light
trong trường hợp này?
~
cho 'khối lập phương ở đâu đó sau container trong DOM và chia sẻ cha mẹ'