2015-04-13 8 views
10

मैं एक स्क्रीन उत्पन्न करने की कोशिश कर रहा था जिसमें :before और :after छद्म तत्वों का उपयोग किया जाता है, लेकिन मुझे आश्चर्य है कि ऐसी कार्यक्षमता वास्तव में संभव है या नहीं।एक छद्म तत्व को घुमाने पर, अन्य छद्म तत्व प्रकट होते हैं?

मेरे पास एक रैपर div है जो एक इनपुट के चारों ओर लपेटा गया है (इस रैपर पर pseudo element एस के लिए अनुमति देता है)।

कुछ की तरह:

+-----------------------------------+ 
| +-------------------------------+ | 
| |        | | <-- wrapper div 
| +-------------------------------+ <-- input element 
+-----------------------------------+ 

हालांकि, मैं एक छद्म तत्व div के बाद तैनात करने के लिए देख रहा था।

+-----------------------------------++-------+ 
| +-------------------------------+ | |¯¯¯| | 
| |        | | / | 
| +-------------------------------+ | ! |<--pseudo element 
+-----------------------------------++-------+ 

मैं इस छद्म तत्व को होवर करने में सक्षम होना चाहता था, और दूसरा छद्म तत्व दिखाई देता है।

.wrap { 
 
    position: relative; 
 
    height: 30px; 
 
    width: 200px; 
 
    display: inline-block; 
 
} 
 
.wrap input { 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    height: 100%; 
 
    width: 100%; 
 
} 
 
.wrap:after { 
 
    content: "?"; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 100%; 
 
    height: 30px; 
 
    width: 30px; 
 
    font-size: 30px; 
 
    text-align: center; 
 
} 
 
.wrap:before { 
 
    content: ""; 
 
    position: absolute; 
 
    top: 100%; 
 
    left: 0; 
 
    height: 60px; 
 
    width: 100%; 
 
    background: tomato; 
 
    opacity:0.2; 
 
}
<div class="wrap"> 
 
    <input placeholder="input element" type="text" /> 
 
</div>


ऊपर टुकड़ा डिजाइन से, वहाँ :before तत्व अपनी अपारदर्शिता बदलने जब मैं केवल :after तत्व मंडराना करने का एक तरीका है, और नहीं wrap div ही (ध्यान दें : एचटीएमएल नहीं बदला जा सकता है, इसलिए यह सवाल क्यों है)?


मैं की तरह कुछ उपयोग करने की कोशिश: 90% के लिए इनपुट की चौड़ाई बदलने के बाद

.wrap:not(input):hover:before{ 

, लेकिन यह एक फर्क

+2

छद्म तत्वों को सरल चयनकर्ताओं के रूप में गिनने के लिए एक दिलचस्प मामला है ताकि कोई '.wrap: has (:: after: hover) :: पहले' जैसा कुछ कर सके। लेकिन हां ... – BoltClock

+0

@ बोल्टक्लॉक है :: :: होवर 'चयनकर्ता स्तर 4 में मान्य है? अगर मुझे सही याद है, छद्म तत्वों में छद्म-वर्ग नहीं हो सकते हैं ... –

+3

@ हाशम कोलामी: यह स्तर 4 में है। यह छद्म तत्व और छद्म वर्ग दोनों पर निर्भर करता है - कुछ संयोजन संभव हैं जबकि अन्य नहीं हैं।Http://dev.w3.org/csswg/selectors-4/#pseudo-elements देखें, जो कहता है "छद्म-तत्व फीचर रहित हैं, और इसलिए किसी अन्य चयनकर्ता द्वारा मिलान नहीं किया जा सकता है। वे व्याख्या को प्रभावित नहीं करते हैं स्ट्रक्चरल छद्म-वर्गों का मूल्यांकन किया जाता है, जिनका मूल्यांकन केवल वास्तविक तत्वों पर आधारित होता है। अन्य छद्म-वर्ग * * छद्म-तत्वों से मिलान कर सकते हैं, अन्यथा निर्दिष्ट किए जाने तक। " – BoltClock

उत्तर

1

यह क्योंकि छद्म तत्वों नहीं हैं 'असली' तत्वों, इसका मतलब है कि (वर्तमान में) इस तरह से इस्तेमाल नहीं किया जा सकता है। इसके बजाए, 'असली' तत्व का उपयोग करने के लिए इसकी अनुमति होगी, और इसलिए मैंने एक अवधि तत्व का उपयोग करना चुना है जब तक कि यह सुविधा लागू नहीं हो सकती है या नहीं।

वर्तमान कार्यान्वयन प्रदर्शित करता है:

input { 
 
    position: relative; 
 
    display: inline-block; 
 
    height: 30px; 
 
    vertical-align: top; 
 
} 
 
span { 
 
    position: relative; 
 
    height: 30px; 
 
    width: 30px; 
 
    display: inline-block; 
 
    text-align: center; 
 
    border-radius: 50%; 
 
    font-size: 25px; 
 
    line-height: 30px; 
 
    background: tomato; 
 
} 
 
span:after { 
 
    content: "A Question Mark"; 
 
    position: relative; 
 
    display: inline-block; 
 
    top: 0; 
 
    left: 0; 
 
    height: 60px; 
 
    width: 100px; 
 
    background: tomato; 
 
    opacity: 0; 
 
    transition: all 0.8s; 
 
    font-size: 16px; 
 
} 
 
span:hover:after { 
 
    opacity: 1; 
 
}
<input placeholder="input element" type="text" /> 
 
<span>?</span>

मेरे प्रिय छद्म तत्व डिजाइन की निराशा को बहुत।

1

नहीं किया मैं जानता हूँ कि यह वास्तव में आप क्या पूछा नहीं है लेकिन जब तक सीएसएस माता-पिता का चयन नहीं कर सकता है (यह आ रहा है) आप केवल एक और एचटीएमएल तत्व जोड़ सकते हैं:

<div class="wrap"> 
    <div class="inner_wrap"> 
     <input placeholder="input element" type="text" /> 
    </div> 
</div> 

सीएसएस:

.wrap { 
    position: relative; 
    height: 30px; 
    width: 200px; 
    display: inline-block; 
} 
.wrap input { 
    position: absolute; 
    top: 0; 
    left: 0; 
    height: 100%; 
    width: 100%; 
} 
.wrap:after { 
    content: "?"; 
    position: absolute; 
    top: 0; 
    left: 100%; 
    height: 30px; 
    width: 30px; 
    font-size: 30px; 
    text-align: center; 
} 
.inner_wrap:before { 
    content: ""; 
    position: absolute; 
    top: 100%; 
    left: 0; 
    height: 60px; 
    width: 100%; 
    background: tomato; 
    opacity:0.2; 
    display:none; 
} 
.wrap:hover .inner_wrap:before{ 
    display:block; 
} 
.wrap .inner_wrap:hover:before{ 
    display:none; 
} 

http://fiddle.jshell.net/0vwn1w9t/

संबंधित मुद्दे