CSS: Di chuột một phần tử, hiệu ứng cho nhiều phần tử?


83

Tôi đang tìm một phương pháp cho vấn đề di chuột của mình.

<div class="section">

<div class="image"><img src="myImage.jpg" /></div>

<div class="layer">Lorem Ipsum</div>

</div>

Bây giờ, cả hai lớp, hình ảnh và lớp, đều có đường viền. Cả hai đều có màu khác nhau cho bình thường và di chuột. Có cách nào để làm cho nó, vì vậy nếu tôi di chuột qua lớp lớp, cả màu đường viền di chuột của lớp và lớp hình ảnh đều hoạt động? Và ngược lại?

Câu trả lời:


188

Bạn không cần JavaScript cho việc này.

Một số CSS sẽ làm điều đó. Đây là một ví dụ:

<html>
  <style type="text/css">
    .section { background:#ccc; }
    .layer { background:#ddd; }
    .section:hover img { border:2px solid #333; }
    .section:hover .layer { border:2px solid #F90; }
  </style>
</head>
<body>
  <div class="section">
    <img src="myImage.jpg" />
    <div class="layer">Lorem Ipsum</div>
  </div>
</body>
</html>


12
Okey, đây là người chiến thắng !! :) Tôi đã không biết rằng nếu tôi có một cái gì đó: di chuột, tôi có thể tiếp tục điều đó bất kỳ phần tử khác! (somthing: hover .second) .. Mỗi ngày bạn đều học được điều gì đó mới .. Cảm ơn x10
Marko

6
Điều gì sẽ xảy ra nếu hai div (một để di chuột qua và một để hiển thị) không nằm trong cùng một div mẹ ngay lập tức?
bikashg 16/10/11

3
bạn có thể đi lên cấu trúc bao nhiêu tùy ý hoặc bạn có thể thêm một mục để làm cha của cả hai. Tuy nhiên, đôi khi nếu chúng không có điểm chung, bạn sẽ phải dùng đến javascript.
corymathews

2
Tôi sẽ làm thế nào về việc thay đổi một phần tử con của một div khi di chuột qua một phần tử con khác của cùng một div?
Cos

Cảm ơn! Tôi đã sử dụng javascript và CSS này hoạt động tốt hơn. Đôi khi nó dễ dàng hơn chúng ta nghĩ.
yanike

11

Điều này đã làm việc cho tôi trong Firefox và Chrome và IE8 ...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html>
    <head>
        <style type="text/css">
        div.section:hover div.image, div.section:hover div.layer {
            border: solid 1px red;
        }
        </style>
    </head>
    <body>
        <div class="section">
            <div class="image"><img src="myImage.jpg" /></div>
            <div class="layer">Lorem Ipsum</div>
        </div>
    </body>
</html>

... bạn cũng có thể muốn kiểm tra điều này với IE6 (tôi không chắc liệu nó có hoạt động ở đó không).


Trên thực tế, nó có thể hoạt động trong IE8. Thêm Doctype đã tạo ra sự khác biệt. Vì vậy, có - một giải pháp CSS thuần túy. ;)
Steve Wortham 22/09/09

10

Tôi nghĩ lựa chọn tốt nhất cho bạn là bao gồm cả hai div bởi một div khác. Sau đó, bạn có thể tạo nó bằng CSS theo cách sau:

<html>
<head>
<style>
  div.both:hover .image { border: 1px solid blue }
  div.both:hover .layer { border: 1px solid blue }
</style>
</head>

<body>
<div class="section">

<div class="both">
  <div class="image"><img src="myImage.jpg" /></div>
  <div class="layer">Lorem Ipsum</div>
</div>

</div>
</body>
</html>

8

Điều này không khó để đạt được, nhưng bạn cần sử dụng onmouseoverhàm javascript . Pseudoscript:

<div class = "section">

<div class = "image"> <img src = "myImage.jpg" onmouseover = ". layer {border: 1px solid black;} .image {border: 1px solid black;}" /> </div>

<div class = "layer"> Lorem Ipsum </div>

</div>

Sử dụng màu sắc của riêng bạn. Bạn cũng có thể tham khảo các hàm javascript trong lệnh di chuột qua.


1
+1 để sử dụng thay đổi CSS lớp thay vì một phần tử như một ví dụ khác.
DVK

Điều này cũng đang hoạt động, cảm ơn! Tôi chỉ cố gắng tránh inline mã hóa càng nhiều tôi có thể ..;)
Marko

3

Tôi nghĩ rằng bạn cần phải sử dụng JavaScript để thực hiện điều này.

jQuery:

$(function(){
   $("#innerContainer").hover(
        function(){
            $("#innerContainer").css('border-color','#FFF');
            $("#outerContainer").css('border-color','#FFF');
        },
        function(){
            $("#innerContainer").css('border-color','#000');
            $("#outerContainer").css('border-color','#000');
        }
    );
});

Điều chỉnh các giá trị và id phần tử cho phù hợp :)


Đẹp, thực sự tốt! Còn nếu tôi có nhiều phần cho các tên lớp giống nhau thì sao? Bây giờ tôi đã thử điều đó cho bốn tên lớp giống nhau và khi tôi di chuột qua một tên, tất cả những tên đó đều thay đổi ?? Tôi có nên chạy số trước tất cả các phần không? Jquery có hỗ trợ ký tự đại diện anykind không? (okey, tôi chỉ thử google cho nó!;)) Cảm ơn ..
Marko

0

HOẶC LÀ

.section:hover > div {
  background-color: #0CF;
}

LƯU Ý Trạng thái phần tử mẹ chỉ có thể ảnh hưởng đến trạng thái phần tử con nên bạn có thể sử dụng:

.image:hover + .layer {
  background-color: #0CF;
}
.image:hover {
  background-color: #0CF;
}

nhưng bạn không thể sử dụng

.layer:hover + .image {
  background-color: #0CF;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.