: सीएसएस छद्म वर्ग या कुछ इसी तरह का स्पर्श?


85

मैं एक बटन बनाने की कोशिश कर रहा हूं, जैसे कि जब उपयोगकर्ता उस पर क्लिक करता है, तो वह अपनी शैली को बदल देता है जबकि माउस बटन को दबाए रखा जाता है। मैं यह भी चाहता हूं कि यदि मोबाइल ब्राउज़र में इसे छुआ जाए तो यह इसी तरह से अपनी शैली को बदल सकता है। मेरे लिए स्पष्ट रूप से स्पष्ट बात सीएसएस का उपयोग करना था: सक्रिय छद्म वर्ग, लेकिन यह काम नहीं किया। मैंने कोशिश की: फोकस, और यह भी काम नहीं किया। मैंने कोशिश की: मंडराना, और यह काम करने लगा, लेकिन मैंने अपनी उंगली बटन से हटाने के बाद शैली को रखा। ये सभी अवलोकन एक iPhone 4 और एक Droid 2 पर थे।

क्या मोबाइल ब्राउज़र (iPhone, iPad, Android, और उम्मीद है कि दूसरों) पर प्रभाव को दोहराने का कोई तरीका है? अभी के लिए, मैं कुछ इस तरह कर रहा हूँ:

<style type="text/css">
    #testButton {
        background: #dddddd;
    }
    #testButton:active, #testButton.active {
        background: #aaaaaa;
    }
</style>

...

<button type="button" id="testButton">test</button>

...

<script type='text/javascript' src='http://code.jquery.com/jquery-1.6.1.min.js'></script>
<script type='text/javascript'>
    $("*").live("touchstart", function() {
      $(this).addClass("active");
    }).live("touchend", function() {
      $(this).removeClass("active");
    });
</script>

: सक्रिय छद्म वर्ग डेस्कटॉप ब्राउज़रों के लिए है, और सक्रिय वर्ग स्पर्श ब्राउज़रों के लिए है।

अगर जावास्क्रिप्ट को शामिल किए बिना मैं इसे करने का एक सरल तरीका है, तो सोच रहा हूं।


2
लगभग हर टच ब्राउज़र चीजों को संभालता है जैसे / hoverऔर अलग mousedown- mouseupअलग, उन सभी को समायोजित करना मुश्किल है।
चाड

एंड्रॉइड और आईओएस दोनों में: टचस्टार्ट,: टचमोव,: टचेंड, और: टचस्कैनल स्यूडोसक्लस है जिसे आप उपयोग कर सकते हैं।
पॉल हैनबरी

2
मैं के लिए शैलियों की स्थापना की कोशिश की: टचस्टार्ट और: टचेंड छद्म वर्ग और वे iPhone या Droid पर काम नहीं किया। @ पाओल हनबरी, क्या आप सुनिश्चित हैं कि आप सीएसएस छद्म कक्षाओं को जावास्क्रिप्ट घटनाओं के साथ भ्रमित नहीं कर रहे हैं?
इलायस ज़मरिया

1
@ mikez302 - मुझे लगता है कि आपका अधिकार। plugins.jquery.com/plugin-tags/touchstart
डग चैंबरलेन

2
मुझे लगता है कि यह एक जवाब के रूप में प्रस्तुत करना मूर्खतापूर्ण होगा, लेकिन वास्तव में, उत्तर "नहीं है, यह संभव नहीं है, आपको जावास्क्रिप्ट का उपयोग करना होगा।" आप जो पूछ रहे हैं वह CSS2 या CSS3 का हिस्सा नहीं है। मुझे लगता है कि तथ्य यह है कि: सक्रिय काम नहीं करता है एक उपयोगकर्ता-एजेंट समस्या है जो आप संभावित रूप से आईओएस और एंड्रॉइड ब्राउज़र में बग के रूप में रिपोर्ट कर सकते हैं, लेकिन बस अपनी एंड-यूज़र समस्या को हल करने के लिए ... हाँ, आपको जेएस का उपयोग करना होगा । तुम ontouchstart समर्थन के लिए एक जाँच में अपने संगतता कोड लपेट सकता है ।
joelhardi

जवाबों:


49

:touchW3C विनिर्देशों में ऐसी कोई बात नहीं है , http://www.w3.org/TR/CSS2/selector.html#pseudo-class-selectors

:active काम करना चाहिए, मुझे लगता है।

सही ढंग से कार्य करने के लिए :active/ :hoverछद्म वर्ग पर आदेश महत्वपूर्ण है।

यहाँ उस उपरोक्त लिंक से एक उद्धरण दिया गया है

उपयोगकर्ता क्रियाओं के जवाब में इंटरएक्टिव उपयोगकर्ता एजेंट कभी-कभी रेंडरिंग को बदलते हैं। सीएसएस सामान्य मामलों के लिए तीन छद्म कक्षाएं प्रदान करता है:

  • उपयोगकर्ता द्वारा एक तत्व (कुछ पॉइंटिंग डिवाइस के साथ) नामित करते समय: होवर छद्म वर्ग लागू होता है, लेकिन इसे सक्रिय नहीं करता है। उदाहरण के लिए, विज़ुअल यूजर एजेंट इस छद्म वर्ग को लागू कर सकता है, जब कर्सर (माउस पॉइंटर) तत्व द्वारा उत्पन्न बॉक्स पर हो जाता है। इंटरैक्टिव मीडिया का समर्थन नहीं करने वाले उपयोगकर्ता एजेंटों को इस छद्म वर्ग का समर्थन करने की आवश्यकता नहीं है। इंटरैक्टिव मीडिया का समर्थन करने वाले कुछ अनुरूपण एजेंट इस छद्म वर्ग (जैसे, पेन डिवाइस) का समर्थन करने में सक्षम नहीं हो सकते हैं।
  • : सक्रिय छद्म वर्ग लागू होता है, जबकि एक तत्व उपयोगकर्ता द्वारा सक्रिय किया जा रहा है। उदाहरण के लिए, जिस समय उपयोगकर्ता माउस बटन दबाता है और उसे छोड़ता है।
  • फोकस: छद्म वर्ग लागू होता है, जबकि एक तत्व में फोकस होता है (कीबोर्ड ईवेंट या पाठ इनपुट के अन्य रूपों को स्वीकार करता है)।

9
मुझे पता था कि ऐसा कुछ नहीं है: स्पर्श। मैं सोच रहा था कि क्या ऐसा ही कुछ था। : सक्रिय उचित लग रहा था, लेकिन यह मेरे परीक्षणों में काम नहीं आया।
एलियास ज़मरिया

@ mikez302 - मुझे लगा कि आप जानते हैं कि मैं अपने स्रोत का हवाला देना चाहता था। मैं आपसे सहमत हूं मुझे ऐसा कोई कारण नहीं दिखता है जो काम नहीं करेगा, आदेश के बारे में मेरी बात के अलावा अन्य बहुत महत्वपूर्ण है। मैंने देखा कि किसी ने IOS और Android के लिए सीएसएस छद्म चयनकर्ताओं के बारे में कुछ पोस्ट किया था, लेकिन मैं उन प्रौद्योगिकियों से बात नहीं कर सकता था।
डग चैंबरलेन

मैंने अपने उदाहरण में लगभग: सक्रिय और: होवर नियमों को स्विच किया और यह कुछ भी करने के लिए प्रतीत नहीं हुआ।
एलियास ज़मरिया

36
@ mikez302: छद्म पत्र का उपयोग करें :active। यह काम करना चाहिए, लेकिन कुछ ब्राउज़रों में आप एक छोटे हैक की जरूरत है यह काम कर रहे हैं: करने के लिए एक ईवेंट हैंडलर देते हैं touchstart: शरीर पर घटना (पूर्व <body ontouchstart="">)
gion_13

5
बस आखिरी उत्तर में @ mikez302 टिप्पणी पर संपर्क करने के लिए, उनके HTML5 मोबाइल बॉयलरप्लेट में एक साफ-सुथरा फिक्स है जो इस लेख के लिंक देता है - alxgbsn.co.uk/2011/10/17/…
Giles Butler

19

चूंकि मोबाइल हॉवर प्रतिक्रिया नहीं देता है, मैं चाहता हूं कि एक उपयोगकर्ता के रूप में, जब कोई लिंक टैप किया जाता है, तो तत्काल प्रतिक्रिया देखें। मैंने देखा कि -webkit-tap-highlight-colorप्रतिक्रिया करने के लिए सबसे तेज है (व्यक्तिपरक)।

निम्नलिखित को अपने शरीर में जोड़ें और आपके लिंक का एक नल प्रभाव होगा।

body {
    -webkit-tap-highlight-color: #ccc;
}

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

@ एड्म यप, मैं उसके आस-पास काम नहीं कर सकता था जैसा कि मुझे याद है लेकिन यह केवल एक सेकंड के एक अंश के लिए किया जा रहा है मेरे लिए एक सौदा बहुत बड़ा नहीं था, खासकर यह कि यह उपयोगकर्ता को फीडबैक प्राप्त करने देगा जो उसने क्लिक किया (जो समय के इस अंश के दौरान उनके लिए क्या मायने रखता है)
अब्दो

मुझे वास्तव में मिला: सक्रिय छद्म शैलियों को अंत में काम करने के लिए एक फ़ंक्शन को एक खाली कॉलबैक के साथ document.ontouchstart घटना (jQuery के माध्यम से) के लिए बाध्य करके।
एडम

एक बुरा विचार नहीं है :-) मैं इस उद्देश्य के लिए पूरी तरह से जावास्क्रिप्ट से बच रहा था।
Abdo

2
बस यह साझा -webkit-tap-highlight-colorकरना एक गैर मानक सीएसएस विशेषता है , मैं :activeइसके बजाय उपयोग कर रहा हूं , यह वास्तव में फिट बैठता है और समझ में आता है।
रिकार्डो फोर्न्स

0

मुझे मोबाइल टचस्क्रीन बटन स्टाइल करने में परेशानी हो रही थी। यह आपकी होवर-स्टिक / सक्रिय बटन समस्याओं को ठीक करेगा।

body, html {
  width: 600px;
}
p {
  font-size: 20px;
}

button {
  border: none;
  width: 200px;
  height: 60px;
  border-radius: 30px;
  background: #00aeff;
  font-size: 20px;
}

button:active {
  background: black;
  color: white;
}

.delayed {
  transition: all 0.2s;
  transition-delay: 300ms;
}

.delayed:active {
  transition: none;
}
<h1>Sticky styles for better touch screen buttons!</h1>

<button>Normal button</button>

<button class="delayed"><a href="https://www.google.com"/>Delayed style</a></button>

<p>The CSS :active psuedo style is displayed between the time when a user touches down (when finger contacts screen) on a element to the time when the touch up (when finger leaves the screen) occures.   With a typical touch-screen tap interaction, the time of which the :active psuedo style is displayed can be very small resulting in the :active state not showing or being missed by the user entirely.  This can cause issues with users not undertanding if their button presses have actually reigstered or not.</p>

<p>Having the the :active styling stick around for a few hundred more milliseconds after touch up would would improve user understanding when they have interacted with a button.</p>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.