2012-12-13 20 views
6

पर बच्चे छवि के पीछे छिपे माता-पिता पर छद्म तत्व आईई 8 में, माता-पिता के बच्चों के पीछे बहने वाले पेसुडो तत्व का पृष्ठभूमि रंग क्यों है? पाठ सामने बहता है, लेकिन पृष्ठभूमि रंग नहीं है। जेड-इंडेक्स किसी की मदद नहीं कर रहा था।आईई 8

मैं यह निर्धारित करने में सक्षम नहीं हूं कि यह IE8 में एक बग है या नहीं। ऐसा लगता है कि यह एक बहुत ही सामान्य उपयोग-मामला होता, लेकिन मुझे उससे संबंधित कई ब्लॉग पोस्ट या SO प्रश्न नहीं मिल सका।

http://jsfiddle.net/VAg2E/

<div id="parent"> 
     <img src="http://placehold.it/200x200"> 
    </div> 


    #parent{ padding: 20px; } 
    #parent:before{ 
     content: 'Behind the image'; 
     position: absolute; 
     top: 0; 
     left: 0; 
     width: 100px; 
     height: 100px; 
     background-color: red; 
    } 

संपादित करें: A related Stack Overflow Question about Stacking Order

+0

हाय रॉबर्ट के लिए सक्षम करने के लिए देने के लिए याद है, क्या तुमने कभी एक काम के आसपास इस समस्या के लिए मिला? –

+0

मुझे ईमानदारी से याद नहीं है - लेकिन मुझे नहीं लगता कि मैंने – Robert

उत्तर

6

यह निश्चित रूप से IE8 में एक बग है; चूंकि आपका :before छद्म-तत्व स्थित है, इसे एक नया स्टैकिंग संदर्भ बनाना चाहिए और हमेशा imgunless you give it a negative z-index के शीर्ष पर खींचा जाना चाहिए (फिर भी, पूरे तत्व को इसके पीछे खींचा जाना चाहिए, न केवल इसकी पृष्ठभूमि)।

यह समस्या :before और :after छद्म-तत्वों के बीच स्टैकिंग और img जैसे तत्वों को प्रतिस्थापित करने के लिए विशिष्ट प्रतीत होती है। ऐसा लगता है कि IE8 स्टैकिंग के मामले में अलग-अलग सामग्री को प्रतिस्थापित कर रहा है, लेकिन जो भी हो रहा है, यह निश्चित रूप से कल्पना के अनुरूप नहीं है।

जैसा कि आप शायद जानते हैं, यह IE9 में तय है।

+0

यह वास्तव में अजीब लगता है कि टेक्स्ट आगे बढ़ेगा, और केवल पृष्ठभूमि पीछे होगा। – Robert

+0

@ रॉबर्ट: मुझे लगता है कि आईई छवि को एक वंशज इनलाइन बॉक्स की पृष्ठभूमि के रूप में देख रहा है, और एक ही स्टैक्लिंग संदर्भ में एक इनलाइन तत्व के रूप में पूरी तरह से स्थित छद्म तत्व है, जो उन्हें [कुछ सुंदर काउंटर-अंतर्ज्ञानी स्टैकिंग नियमों के अधीन करता है) केवल नज़दीकी परीक्षा के बाद ही समझना शुरू करें] (http://stackoverflow.com/questions/11088176/before-pseudo-element-stacking-order-issue/11088328#11088328) ... सिवाय इसके कि यह नियम पूरी तरह से गलत तरीके से लागू कर रहा है। – BoltClock

+0

यदि मैं उस लिंक को समझता हूं, और आईई 8 छवि को पृष्ठभूमि परत के रूप में चित्रित कर रहा है, तो इसका उपयोग करके: छवि के सामने पृष्ठभूमि को पेंट करना चाहिए, लेकिन हां, यह अभी भी पीछे है। – Robert

0

IE8 केवल तभी <!DOCTYPE> घोषित किया जाता है pseudos का समर्थन करता है। Source

#parent { padding: 20px; z-index: 2; } 
    #parent:before { 
     content: 'Behind the image'; 
     position: absolute; 
     top: 0; 
     left: 0; 
     width: 100px; 
     height: 100px; 
     background-color: red; 
     z-index: -1; 
    }​ 
+0

किया है, हालांकि सही है, यह यहां वर्णित मुद्दा नहीं है, डॉक्ट टाइप को जेएसफ़िल्ड (और जिस साइट पर मैं काम कर रहा हूं) में घोषित किया गया है, और छद्म तत्व प्रस्तुत करता है, लेकिन छद्म तत्व की पृष्ठभूमि बच्चों की छवियों के पीछे बहती है। – Robert

+1

'स्थिति बदलना: पूर्ण 'स्थिति में: सापेक्ष' ने इसे ठीक किया है। – bobthyasian

+0

स्थिति के साथ: रिश्तेदार; यह तत्व को सामने प्रस्तुत करता है, लेकिन यह अभी भी लेआउट प्रवाह का हिस्सा बना हुआ है। – Robert

2

आपका सटीक एक ही मुद्दा है, केवल एक चीज जो आप कर सकते हैं वह सीएसएस और z-index के माध्यम से स्टैकिंग ऑर्डर को मजबूर करती है। एकमात्र पकड़ यह है कि z-index मूल तत्व से शुरू होने वाले बच्चे तत्व पर रखा गया है, इसलिए आप #parent-element {z-index: 2} और #child-element {z-index: 1} के रूप में उचित तर्क आदेश करने में सक्षम नहीं होंगे, के लिए z-index को केवल एक अलग स्टैक ऑर्डर के रूप में स्तर 1 पर सेट किया जाएगा#parent-element के अंदर।

आप अब भी z-index#child-element के लिए -1 मान के साथ सेट कर सकते हैं, यह केवल पूरे #parent-element स्टैकिंग ऑर्डर को वापस ले जाएगा।

तो संक्षिप्त करने के लिए:

#parent-element { z-index: 99;} /* or any arbitrary number fitting */ 
#child-element {z-index: -1;} 

इसके अलावा दोनों तत्वों एक position: relative/absolute स्टैकिंग क्रम z-index