2019 तक उत्तर:
सबसे अच्छा तरीका (वास्तव में एकमात्र तरीका *) केवल सीएसएस का उपयोग करके एक वास्तविक क्लिक ईवेंट का अनुकरण करना है (केवल एक तत्व पर मँडरा या एक तत्व को सक्रिय करने के लिए, जहां आपके पास माउसअप नहीं है ) चेकबॉक्स हैक का उपयोग करना है। यह लेबल की विशेषता के माध्यम label
से एक <input type="checkbox">
तत्व को संलग्न करके काम करता है for=""
।
इस सुविधा में व्यापक ब्राउज़र समर्थन है ( :checked
छद्म वर्ग IE9 + है)।
एक करने के लिए एक ही मूल्य लागू <input>
की आईडी विशेषता और एक साथ <label>
की for=""
विशेषता है, और आप फिर से शैली के लिए ब्राउज़र के साथ क्लिक पर लेबल बता सकते हैं :checked
छद्म वर्ग, वास्तव करने के लिए धन्यवाद कि एक लेबल पर क्लिक जाँच करेगा और सही का निशान हटाएँ "संबद्ध" <input type="checkbox">
।
* आप के माध्यम से एक "चयनित" घटना अनुकरण कर सकते हैं :active
या :focus
(एक बटन सामान्य रूप से है कि उदाहरण के लिए IE7 + में छद्म वर्ग 50px
चौड़ा, आप इसकी चौड़ाई जबकि बदल सकते हैं active
: #btnControl:active { width: 75px; }
), लेकिन उन सच नहीं कर रहे हैं घटनाओं "क्लिक"। वे पूरे समय "लाइव" होते हैं जब तत्व का चयन किया जाता है (जैसे कि Tabआपके कीबोर्ड के साथ बिंग), जो कि एक सच्चे क्लिक इवेंट से थोड़ा अलग होता है, जो आमतौर पर - पर कार्रवाई करता है mouseUp
।
चेकबॉक्स हैक का मूल डेमो (जो आप पूछ रहे हैं उसके लिए मूल कोड संरचना):
label {
display: block;
background: lightgrey;
width: 100px;
height: 100px;
}
#demo:checked + label {
background: blue;
color: white;
}
<input type="checkbox" id="demo"/>
<label for="demo">I'm a square. Click me.</label>
यहाँ मैंने अपने मार्कअप में इनपुट के ठीक बाद लेबल पोस्ट किया है। यह इतना है कि मैं केवल उस लेबल का चयन करने के लिए आसन्न भाई चयनकर्ता ( +कुंजी) का उपयोग कर सकता हूं जो तुरंत मेरे #demo
चेकबॉक्स का अनुसरण करता है । चूँकि :checked
छद्म वर्ग चेकबॉक्स पर लागू होता है, #demo:checked + label
केवल चेकबॉक्स की जाँच होने पर ही लागू होगा।
क्लिक पर छवि को पुन: आकार देने के लिए डेमो, जो आप पूछ रहे हैं:
#btnControl {
display: none;
}
#btnControl:checked + label > img {
width: 70px;
height: 74px;
}
<input type="checkbox" id="btnControl"/>
<label class="btn" for="btnControl"><img src="http://placekitten.com/200/140" id="btnLeft" /></label>
इसके साथ ही किया जा रहा है ने कहा, है कुछ बुरी खबर। क्योंकि एक लेबल एक समय में केवल एक फॉर्म नियंत्रण से जुड़ा हो सकता है , इसका मतलब है कि आप केवल <label></label>
टैग के अंदर एक बटन नहीं छोड़ सकते हैं और इसे एक दिन कह सकते हैं। हालाँकि, हम लेबल देखने के लिए कुछ सीएसएस का उपयोग कर सकते हैं और एचटीएमएल बटन कैसे दिखता है और व्यवहार करते हैं, यह काफी करीब से व्यवहार करता है।
एक बटन क्लिक की नकल करने के लिए डेमो, जो आप पूछ रहे हैं, उससे ऊपर और उससे परे:
#btnControl {
display: none;
}
.btn {
width: 60px;
height: 20px;
background: silver;
border-radius: 5px;
padding: 1px 3px;
box-shadow: 1px 1px 1px #000;
display: block;
text-align: center;
background-image: linear-gradient(to bottom, #f4f5f5, #dfdddd);
font-family: arial;
font-size: 12px;
line-height:20px;
}
.btn:hover {
background-image: linear-gradient(to bottom, #c3e3fa, #a5defb);
}
.btn:active {
margin-left: 1px 1px 0;
box-shadow: -1px -1px 1px #000;
outline: 1px solid black;
-moz-outline-radius: 5px;
background-image: linear-gradient(to top, #f4f5f5, #dfdddd);
}
#btnControl:checked + label {
width: 70px;
height: 74px;
line-height: 74px;
}
<input type="checkbox" id="btnControl"/>
<label class="btn" for="btnControl">Click me!</label>
इस डेमो में अधिकांश CSS लेबल तत्व को स्टाइल करने के लिए है। यदि आपको वास्तव में एक बटन की आवश्यकता नहीं है , और कोई भी पुराना तत्व पर्याप्त होगा, तो आप इस डेमो में लगभग सभी शैलियों को हटा सकते हैं, ऊपर मेरे दूसरे डेमो के समान।
तुम भी, पर ध्यान देंगे मैं वहाँ में एक उपसर्ग संपत्ति है -moz-outline-radius
। कुछ समय पहले, मोज़िला ने फ़ायरफ़ॉक्स में इस भयानक गैर-विशिष्ट संपत्ति को जोड़ा, लेकिन वेबकीट के लोगों ने फैसला किया कि वे इसे दुर्भाग्य से जोड़ने नहीं जा रहे हैं । इसलिए सीएसएस की उस पंक्ति पर विचार करें जो फ़ायरफ़ॉक्स का उपयोग करने वाले लोगों के लिए एक प्रगतिशील वृद्धि है।
:active
माउस नीचे होने पर काम करता है। आप जो करने की कोशिश कर रहे हैं, उसके आधार पर, आप CSS4 के छद्म वर्ग का उपयोग करके इसे बनाने में सक्षम हो सकते हैं:target
।