जवाबों:
<body ontouchstart="">
...
</body>
केवल एक बार लागू किया गया, जैसा कि हर बटन तत्व के विपरीत था, पृष्ठ के सभी बटन को ठीक करने के लिए। वैकल्पिक रूप से आप ' Fastclick ' नामक इस छोटे JS लाइब्रेरी का उपयोग कर सकते हैं । यह स्पर्श उपकरणों पर क्लिक की घटनाओं को गति देता है और इस मुद्दे का भी ध्यान रखता है।
जैसा कि अन्य उत्तरों में कहा गया है, आईओएस सफारी :active
तब तक छद्म वर्ग को ट्रिगर नहीं करता है जब तक कि एक स्पर्श घटना तत्व से जुड़ी न हो, लेकिन अभी तक यह व्यवहार "जादुई" रहा है। मैं सफारी डेवलपर लाइब्रेरी पर इस छोटे ब्लर्ब के बारे में आया, जो इसे बताता है (जोर मेरा):
आप
-webkit-tap-highlight-color
डेस्कटॉप के समान व्यवहार करने के लिए बटन को कॉन्फ़िगर करने के लिए एक टच इवेंट सेट करने के साथ संयोजन में सीएसएस संपत्ति का उपयोग भी कर सकते हैं । IOS पर, माउस इवेंट्स इतनी जल्दी भेजे जाते हैं कि डाउन या एक्टिव स्टेट कभी प्राप्त नहीं होता है। इसलिए,:active
छद्म स्थिति को तभी ट्रिगर किया जाता है जब HTML तत्व पर एक टच ईवेंट सेट होता है- उदाहरण के लिए, जब ontouchstart तत्व पर निम्नानुसार सेट होता है:<button class="action" ontouchstart="" style="-webkit-tap-highlight-color: rgba(0,0,0,0);"> Testing Touch on iOS </button>
अब जब बटन को टैप किया जाता है और iOS पर रखा जाता है, तो बटन आसपास के पारदर्शी ग्रे रंग के दिखने के बिना निर्दिष्ट रंग में बदल जाता है।
दूसरे शब्दों में, एक ontouchstart
ईवेंट सेट करना (भले ही वह खाली हो) स्पष्ट रूप से ब्राउज़र को घटनाओं को छूने के लिए प्रतिक्रिया करने के लिए कह रहा है।
मेरी राय में, यह त्रुटिपूर्ण व्यवहार है, और संभवतया उस समय से पहले का है जब "मोबाइल" वेब मूल रूप से नगण्य था (लिंक स्क्रीन पर उन स्क्रीनशॉट पर एक नज़र डालें, जो मेरा मतलब है) और सब कुछ माउस उन्मुख था। यह ध्यान रखना दिलचस्प है कि अन्य, नए मोबाइल ब्राउज़र, जैसे कि एंड्रॉइड पर, डिस्प्ले: `सक्रिय 'छद्म स्थिति ठीक ठीक, बिना किसी हैक के जैसे कि iOS के लिए आवश्यक है।
(साइड-नोट: यदि आप iOS पर अपनी स्वयं की कस्टम शैलियों का उपयोग करना चाहते हैं, तो आप डिफ़ॉल्ट ग्रे ट्रांसलूसेंट बॉक्स को भी निष्क्रिय कर सकते हैं, जिसे iOS CSS संपत्ति :active
का उपयोग करके छद्म-स्थिति के स्थान पर उपयोग करता है -webkit-tap-highlight-color
, जैसा कि ऊपर लिंक किए गए पेज में बताया गया है) ।)
कुछ प्रयोग के बाद, तत्व ontouchstart
पर एक घटना को स्थापित करने का अपेक्षित समाधान <body>
जो सभी घटनाओं को छूता है, तो बुलबुला पूरी तरह से काम नहीं करता है। यदि पृष्ठ लोड होने पर व्यूपोर्ट में तत्व दिखाई देता है, तो यह ठीक काम करता है, लेकिन नीचे स्क्रॉल करना और व्यूपोर्ट से बाहर गए तत्व को टैप करना छद्म स्थिति को ट्रिगर नहीं करता है :active
, जैसे इसे करना चाहिए। तो, के बजाय
<!DOCTYPE html>
<html><body ontouchstart></body></html>
ईवेंट को बॉडी पर बॉब करने (jQuery का उपयोग करके) पर निर्भर करने के बजाय सभी तत्वों के लिए ईवेंट संलग्न करें:
$('body *').on('touchstart', function (){});
हालांकि, मुझे इसके प्रदर्शन निहितार्थों के बारे में जानकारी नहीं है, इसलिए सावधान रहें।
संपादित करें: इस समाधान के साथ एक गंभीर दोष है: यहां तक कि पृष्ठ को स्क्रॉल करते समय एक तत्व को छूने से :active
छद्म स्थिति सक्रिय हो जाएगी । संवेदनशीलता बहुत मजबूत है। एंड्रॉइड राज्य को दिखाए जाने से पहले एक बहुत छोटी देरी की शुरुआत करके इसे हल करता है, जो पृष्ठ स्क्रॉल किए जाने पर रद्द हो जाता है। इसके प्रकाश में, मैं केवल चुनिंदा तत्वों पर इसका उपयोग करने का सुझाव देता हूं। मेरे मामले में, मैं क्षेत्र में उपयोग के लिए एक वेब-ऐप विकसित कर रहा हूं जो मूल रूप से पृष्ठों को नेविगेट करने और कार्रवाई करने के लिए बटनों की एक सूची है। क्योंकि पूरे पृष्ठ में कुछ मामलों में बहुत अधिक बटन हैं, यह मेरे लिए काम नहीं करेगा। हालाँकि, आप :hover
इसके बदले भरने के लिए छद्म स्थिति सेट कर सकते हैं । डिफ़ॉल्ट ग्रे बॉक्स को अक्षम करने के बाद, यह पूरी तरह से काम करता है।
अपने <a> टैग में ontouchstart के लिए एक ईवेंट हैंडलर जोड़ें। यह CSS को जादुई रूप से काम करने का कारण बनता है।
<a ontouchstart="">Click me</a>
यह मेरे लिए काम करता है:
document.addEventListener("touchstart", function() {},false);
नोट: यदि आप यह ट्रिक करते हैं तो यह डिफ़ॉल्ट टैप-हाइलाइट रंग हटाने के लायक भी है मोबाइल सफारी निम्नलिखित सीएसएस नियम का उपयोग करके लागू होता है।
html {
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
8 दिसंबर 2016 तक, स्वीकृत उत्तर ( <body ontouchstart="">...</body>
) सफारी 10 (आईफोन 5 एस) पर मेरे लिए काम नहीं करता है: यह हैक केवल उन तत्वों के लिए काम करता है जो पृष्ठ लोड पर दिखाई देते थे।
हालाँकि, जोड़ना:
<script type='application/javascript'>
document.addEventListener("touchstart", function() {}, false);
</script>
करने के लिए head
, जिस तरह मैं चाहता हूँ काम नकारात्मक पक्ष के साथ है कि अब भी स्क्रॉल दौरान सभी स्पर्श ईवेंट को गति प्रदान करता है :active
छुआ तत्वों पर छद्म राज्य। (यदि यह आपके लिए एक समस्या है, तो आप FighterJet के :hover
समाधान पर विचार कर सकते हैं ।)
क्या आप सभी छद्म वर्गों या सिर्फ एक का उपयोग कर रहे हैं? यदि आप कम से कम दो का उपयोग कर रहे हैं, तो सुनिश्चित करें कि वे सही क्रम में हैं या वे सभी टूट गए हैं:
a:link
a:visited
a:hover
a:active
..उस क्रम में। इसके अलावा, यदि आप केवल उपयोग कर रहे हैं: सक्रिय, जोड़ें: लिंक, भले ही आप इसे स्टाइल न कर रहे हों।
मैंने एक उपकरण प्रकाशित किया है जो आपके लिए इस मुद्दे को हल करना चाहिए।
सतह पर समस्या सरल दिखती है, लेकिन वास्तव में स्पर्श और क्लिक व्यवहार को बड़े पैमाने पर अनुकूलित करने की आवश्यकता है, जिसमें टाइमआउट फ़ंक्शन और "जैसे कि क्या होता है जब आप लिंक की सूची स्क्रॉल करते हैं" या "जब आप लिंक दबाते हैं तब क्या होता है"। सक्रिय क्षेत्र से दूर माउस / उंगली ले जाएँ "
इसे एक ही बार में हल करना चाहिए: https://www.npmjs.com/package/active-touch
आपको या तो अपनी आवश्यकता होगी: सक्रिय शैलियों को .active वर्ग को सौंपा गया है या अपना स्वयं का वर्ग नाम चुनना है। डिफ़ॉल्ट रूप से स्क्रिप्ट सभी लिंक तत्वों के साथ काम करेगी, लेकिन आप इसे अपने स्वयं के चयनकर्ताओं के साथ लिख सकते हैं।
ईमानदार, उपयोगी प्रतिक्रिया और योगदान बहुत सराहना की!
मैंने इस उत्तर और इसके प्रकारों की कोशिश की , लेकिन कोई भी मज़बूती से काम नहीं कर रहा था (और मैं इस तरह के सामान के लिए 'जादू' पर भरोसा करना पसंद नहीं करता)। इसलिए मैंने इसके बजाय निम्नलिखित किया, जो कि सभी प्लेटफार्मों पर पूरी तरह से काम करता है, न कि केवल Apple:
:active
करने के लिए .active
।सभी प्रभावित तत्वों की सूची बनाई और इसे हटाने के लिए वर्ग और घटना संचालकों को pointerdown/mousedown/touchstart
लागू करने के लिए घटना संचालकों को जोड़ा । JQuery का उपयोग करना:.active
pointerup/mouseup/touchend
let controlActivationEvents = window.PointerEvent ? "pointerdown" : "touchstart mousedown";
let controlDeactivationEvents = window.PointerEvent ? "pointerup pointerleave" : "touchend mouseup mouseleave";
let clickableThings = '<comma separated list of selectors>';
$(clickableThings).on(controlActivationEvents,function (e) {
$(this).addClass('active');
}).on(controlDeactivationEvents, function (e) {
$(this).removeClass('active');
});
यह थोड़ा थकाऊ था, लेकिन अब मेरे पास एक समाधान है जो Apple OS संस्करणों के बीच टूटने के लिए कम असुरक्षित है। (और इस ब्रेकिंग की तरह कुछ की जरूरत कौन है?)
एक समाधान के :target
बजाय पर भरोसा करने के लिए है :active
:
<style>
a:target {
background-color: red;
}
</style>
<!-- snip -->
<a id="click-me" href="#click-me">Click me</a>
वर्तमान url द्वारा एंकर को लक्षित किए जाने पर शैली चालू हो जाएगी, जो मोबाइल पर भी मजबूत है। दोष यह है कि आपको url में एंकर को खाली करने के लिए एक अन्य लिंक की आवश्यकता है। पूरा उदाहरण:
a:target {
background-color: red;
}
<a id="click-me" href="#click-me">Click me</a>
<a id="clear" href="#">Clear</a>
इस प्रश्न से संबंधित कोई 100% नहीं है, लेकिन आप इसे प्राप्त करने के लिए सीएसएस सिबलिंग हैक का उपयोग कर सकते हैं
एचटीएमएल
<input tabindex="0" type="checkbox" id="145"/>
<label for="145"> info</label>
<span> sea</span>
एससीएसएस
input {
&:checked + label {
background-color: red;
}
}
यदि आप शुद्ध html / css टूलटिप का उपयोग करना चाहते हैं
span {
display: none;
}
input {
&:checked ~ span {
display: block;
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title></title>
<style>
a{color: red;}
a:hover{color: blue;}
</style>
</head>
<body>
<div class="main" role="main">
<a href="#">Hover</a>
</div>
</body>
</html>
ontouchstart
बिना जोड़ने के लिए पर्याप्त नहीं है=""
? (एचटीएमएल 5)