CSS: एक तत्व होवर, कई तत्वों के लिए प्रभाव?


84

मैं अपने मँडरा मुद्दे के लिए एक विधि की तलाश कर रहा हूँ।

<div class="section">

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

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

</div>

अब, दोनों वर्गों, छवि और परत, की सीमाएं हैं। सामान्य और होवर के लिए दोनों का रंग अलग है। क्या इसे बनाने का कोई तरीका है, इसलिए अगर मैं लेयर क्लास को हॉवर करता हूं, तो लेयर और इमेज क्लास दोनों की बॉर्डर कलर सक्रिय है? और वाइस वर्सा?

जवाबों:


191

इसके लिए आपको जावास्क्रिप्ट की आवश्यकता नहीं है।

कुछ सीएसएस करेंगे। यहाँ एक उदाहरण है:

<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
ओके, यहाँ विजेता है !! :) मुझे नहीं पता था कि अगर मेरे पास कुछ है: मंडराना, मैं उस सफेद तत्व को जारी रख सकता हूं! (कुछ: होवर। सेकंड) .. हर दिन आप कुछ नया सीखते हैं .. धन्यवाद x10
मार्को

6
क्या होगा यदि दो डिव (एक को हॉवर ओवर और एक को दिखाने के लिए) एक ही तत्काल पैरेंट डिव के भीतर नहीं हैं?
bikashg

3
जहां तक ​​आपको जाने की जरूरत है, आप संरचना को ऊपर ले जा सकते हैं, या आप दोनों के माता-पिता होने के लिए एक आइटम जोड़ सकते हैं। हालांकि कभी-कभी, यदि उनके पास कुछ भी सामान्य नहीं है, तो आपको जावास्क्रिप्ट का सहारा लेना होगा।
corymathews

2
जब मैं उसी div के दूसरे चाइल्ड एलिमेंट को मँडराता हूँ, तो मैं div के एक चाइल्ड एलिमेंट को कैसे बदलूँगा?
कोस

धन्यवाद! मैं जावास्क्रिप्ट का उपयोग कर रहा था और इस सीएसएस ने बेहतर काम किया। कभी-कभी हमारे विचार से यह आसान होता है।
यानिके २०'१२ को .:२३

11

यह मेरे लिए फ़ायरफ़ॉक्स और क्रोम और 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>

... आप IE6 के साथ भी इसका परीक्षण करना चाहते हैं (मुझे यकीन नहीं है कि यह वहां काम करेगा)।


वास्तव में यह IE8 में काम कर सकता है, ऐसा लगता है। Doctype को जोड़ने से फर्क पड़ा। तो वहाँ - एक शुद्ध सीएसएस समाधान। ;)
स्टीव वॉर्थम

10

मुझे लगता है कि आपके लिए सबसे अच्छा विकल्प एक और div द्वारा दोनों divs को जोड़ना है। फिर आप इसे सीएसएस द्वारा निम्नलिखित तरीके से बना सकते हैं:

<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

यह हासिल करना मुश्किल नहीं है, लेकिन आपको जावास्क्रिप्ट onmouseoverफ़ंक्शन का उपयोग करने की आवश्यकता है । Pseudoscript:

<div class = "अनुभाग">

<div class = "image"> <img src = "myImage.jpg" onmouseover = "। layer {बॉर्डर: 1px सॉलिड ब्लैक;} .image {बॉर्डर: 1px सॉलिड ब्लैक;}" /> </ div>;

<div class = "layer"> लोरम इप्सम </ div>

</ Div>

अपने खुद के रंगों का उपयोग करें। आप माउस कमांड में जावास्क्रिप्ट कार्यों को भी संदर्भित कर सकते हैं।


1
एक और उदाहरण के रूप में तत्व एक के बजाय वर्ग सीएसएस परिवर्तन का उपयोग करने के लिए।
डीवीके

यह भी काम कर रहा है, धन्यवाद! मैं सिर्फ इनलाइन कोडिंग से बचने की कोशिश करता हूं जितना मैं कर सकता हूं ..;)
मार्को

3

मुझे लगता है कि यह पूरा करने के लिए आपको जावास्क्रिप्ट का उपयोग करने की आवश्यकता होगी।

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');
        }
    );
});

मूल्यों और तत्व आईडी के अनुसार समायोजित करें :)


अच्छा है, वास्तव में अच्छा है! यदि मेरे पास एक ही वर्ग के नाम के लिए कई खंड हैं तो क्या होगा? अब मैंने कोशिश की है कि चार सफेद समान वर्ग नामों के लिए और जब मैं एक को हॉवर करता हूं, तो वे सभी बदल जाते हैं ?? क्या मुझे सभी वर्गों के सामने रनिंग नंबर बनाना चाहिए? क्या jquery में वाइल्डकार्ड किसी भी मानवता का समर्थन करता है? (ठीक है, मैं इसके लिए बस गूगल की कोशिश करता हूं!)) धन्यवाद ..
मार्को

0

या

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

नोट पेरेंट एलिमेंट स्थिति केवल बच्चे के एलिमेंट स्टेट को प्रभावित कर सकती है ताकि आप उपयोग कर सकें:

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

लेकिन आप नहीं कर सकते हैं का उपयोग करें

.layer:hover + .image {
  background-color: #0CF;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.