কীভাবে সরিয়ে / উপেক্ষা করবেন: টাচ ডিভাইসে সিএসএস শৈলীটি হোভার করুন


141

:hoverযদি কোনও স্পর্শ ডিভাইসের মাধ্যমে কোনও ব্যবহারকারী আমাদের ওয়েবসাইটটিতে যান তবে আমি সমস্ত সিএসএস ঘোষণাকে উপেক্ষা করতে চাই । কারণ :hoverসিএসএস অর্থবোধ করে না, এবং এমনকি যদি কোনও ট্যাবলেট ক্লিক / ট্যাপে এটি ট্রিগার করে তবে এটি বিঘ্নিত হতে পারে কারণ এটি উপাদান ফোকাস হারিয়ে না দেওয়া পর্যন্ত এটি স্থির থাকতে পারে। সত্যি কথা বলতে, আমি জানি না কেন স্পর্শ ডিভাইসগুলি :hoverপ্রথমে ট্রিগার করার প্রয়োজনীয়তা অনুভব করে - তবে এটি বাস্তবতা, সুতরাং এই সমস্যাটিও বাস্তবতা।

a:hover {
   color:blue;
   border-color:green;
   // etc. > ignore all at once for touch devices
}

সুতরাং, (কীভাবে) আমি :hoverস্পর্শ ডিভাইসগুলি ঘোষণার পরে সমস্ত সিএসএস ঘোষণাগুলি একবারে ( প্রত্যেকেরই অজানা না করে) সরিয়ে / উপেক্ষা করতে পারি ?



1
আমি পিএইচপি সমাধানের সাথে এটি পেয়েছি যেখানে আমি আবিষ্কার করেছি যে ডিভাইসটি ডিভাইসটি মোবাইল কিনা এবং তার ভিত্তিতে বিভিন্ন পরিবর্তনের সাথে সঠিক স্টাইলশিটটি ব্যবহার করি। যদিও এটি আপনার প্রশ্নের উত্তর দেয় না। আপনি সম্ভাব্যভাবে @ মিডিয়া ক্যোয়ারী ব্যবহার করতে পারেন তবে ফোন এবং ট্যাবলেটগুলির পুরো এইচডি রেজোলিউশন থাকলে তা কাজ করার গ্যারান্টিযুক্ত নয়।
টমফर्थ

উত্তর:


171

tl; dr এটি ব্যবহার করুন: https://jsfiddle.net/57tmy8j3/

কেন বা কী কী বিকল্প রয়েছে তা যদি আপনি আগ্রহী হন তবে পড়ুন।

তাত্ক্ষণিকভাবে - অপসারণ: জেএস ব্যবহার করে শৈলীগুলি হোভার করুন

আপনি :hoverজাভাস্ক্রিপ্ট ব্যবহার করে সমস্ত সিএসএস বিধি মুছে ফেলতে পারেন । এটি সিএসএস স্পর্শ না করা এবং এমনকি পুরানো ব্রাউজারগুলির সাথে সামঞ্জস্যপূর্ণ হওয়ার সুবিধা রয়েছে।

function hasTouch() {
  return 'ontouchstart' in document.documentElement
         || navigator.maxTouchPoints > 0
         || navigator.msMaxTouchPoints > 0;
}

if (hasTouch()) { // remove all the :hover stylesheets
  try { // prevent exception on browsers not supporting DOM styleSheets properly
    for (var si in document.styleSheets) {
      var styleSheet = document.styleSheets[si];
      if (!styleSheet.rules) continue;

      for (var ri = styleSheet.rules.length - 1; ri >= 0; ri--) {
        if (!styleSheet.rules[ri].selectorText) continue;

        if (styleSheet.rules[ri].selectorText.match(':hover')) {
          styleSheet.deleteRule(ri);
        }
      }
    }
  } catch (ex) {}
}

সীমাবদ্ধতা: স্টাইলশিটগুলি অবশ্যই একই ডোমেনে হোস্ট করা উচিত (যার অর্থ কোনও সিডিএন নেই)। সারফেস বা আইপ্যাড প্রো এর মতো মিশ্র মাউস এবং টাচ ডিভাইসে হভারগুলি অক্ষম করে যা ইউএক্সকে ব্যথা করে।

সিএসএস-কেবল - মিডিয়া ক্যোয়ারী ব্যবহার করুন

আপনার সমস্তগুলি রাখুন @media: একটি ব্লকে নিয়ম করুন :

@media (hover: hover) {
  a:hover { color: blue; }
}

বা বিকল্পভাবে, আপনার সমস্ত হোভার নিয়ম ওভাররাইড করুন (পুরানো ব্রাউজারগুলির সাথে সামঞ্জস্যপূর্ণ):

a:hover { color: blue; }

@media (hover: none) {
  a:hover { color: inherit; }
}

সীমাবদ্ধতা: ওয়েবভিউ ব্যবহার করার সময় কেবলমাত্র আইওএস 9.0+, ক্রোম অ্যান্ড্রয়েড বা অ্যান্ড্রয়েড 5.0+ এ কাজ করে। hover: hoverপুরানো ব্রাউজারগুলিতে হোভার ইফেক্টগুলি ভেঙে দেয়, hover: noneপূর্বনির্ধারিত সমস্ত সিএসএস বিধিগুলি ওভাররাইড করা দরকার। উভয়ই মিশ্র মাউস এবং টাচ ডিভাইসের সাথে বেমানান

সর্বাধিক শক্তিশালী - জেএসের মাধ্যমে স্পর্শ সনাক্ত করুন এবং সিএসএস প্রিপেন্ড করুন: নিয়মিতভাবে হোভার করুন

এই পদ্ধতিটির সাথে সমস্ত হোভার নিয়মগুলি প্রিপেন্ডিং করা দরকার body.hasHover। (বা আপনার পছন্দের শ্রেণীর নাম)

body.hasHover a:hover { color: blue; }

hasHoverবর্গ ব্যবহার যোগ করা যেতে পারে hasTouch()প্রথম উদাহরণ থেকে:

if (!hasTouch()) document.body.className += ' hasHover'

যাইহোক, পূর্ববর্তী উদাহরণগুলির মতো মিশ্র স্পর্শ ডিভাইসের সাথে এটির একই ঘাটতি রয়েছে, যা আমাদের চূড়ান্ত সমাধানের দিকে নিয়ে আসে। যখনই কোনও মাউস কার্সার সরানো হবে তখনই হোভার ইফেক্টগুলি সক্ষম করুন, যখনই কোনও স্পর্শ সনাক্ত হয় তখন হোভার ইফেক্টগুলি অক্ষম করুন।

function watchForHover() {
  // lastTouchTime is used for ignoring emulated mousemove events
  let lastTouchTime = 0

  function enableHover() {
    if (new Date() - lastTouchTime < 500) return
    document.body.classList.add('hasHover')
  }

  function disableHover() {
    document.body.classList.remove('hasHover')
  }

  function updateLastTouchTime() {
    lastTouchTime = new Date()
  }

  document.addEventListener('touchstart', updateLastTouchTime, true)
  document.addEventListener('touchstart', disableHover, true)
  document.addEventListener('mousemove', enableHover, true)

  enableHover()
}

watchForHover()

এটি যে কোনও ব্রাউজারে মূলত কাজ করা উচিত এবং প্রয়োজন অনুসারে হোভার শৈলীগুলিকে সক্ষম / অক্ষম করে।

পুরো উদাহরণটি এখানে - আধুনিক: https://jsfiddle.net/57tmy8j3/
উত্তরাধিকার (পুরানো ব্রাউজারগুলির সাথে ব্যবহারের জন্য): https://jsfiddle.net/dkz17jc5/19/


ধন্যবাদ! কেবল একটি মন্তব্য: এটি document.styleSheetsব্যবহারের পরিবর্তে উপস্থিত থাকলে প্রথমে যাচাই করা ভাল না try/catch?
সাইমন ফেরেন্ডারিজার

1
আমি try/catchকিছু অদ্ভুত ত্রুটি দেখানোর ক্ষেত্রে ব্যবহার করেছি , যা স্ক্রিপ্টটি ক্র্যাশ করতে পারে, যেমন মুছে ফেলুন নিয়মের কারণে একই-উত্স নীতি বা আই-তে ফ্ল্যাঙ্ক সমর্থন না করায় (এটি প্রতিফলিত করার জন্য মন্তব্য সম্পাদনা করেছেন)। তবে হ্যাঁ, বেশিরভাগ ক্ষেত্রে কেবল একটি সাধারণ চেকই যথেষ্ট।
ব্লেড

1
এটি উল্লেখ করার মতো বিষয় যে ফায়ারফক্স সহ ডেস্কটপ ব্রাউজারগুলির ফলাফল 'notouch' এর ফল দেয় না। তারা স্পর্শ ঘটনা বোঝার রিপোর্ট।
হ্যারি বি

3
এই দ্রবণটি মিশ্র ডিভাইসগুলির জন্য কাজ করে না যেখানে হোভার মাউসের জন্য কাজ করবে তবে স্পর্শ ইভেন্টের জন্য নয়
এনবিআর

2
@ হানিভ এটি বেশিরভাগ ক্ষেত্রেই সঠিক, যদিও এটি আপনার নির্দিষ্ট ক্ষেত্রে নয়। আপনার নিয়মের কাজটি করা কোডটিতে অনেক জটিলতা যুক্ত করবে, যা উত্তরটি বোঝা আরও শক্ত করে তুলবে। আমি হয় নিয়মগুলি বিভক্ত করা বা ২ য় সমাধানটি ব্যবহার করার পরামর্শ দেব যা যাইহোক আরও শক্ত। তবে, আপনি যদি খুব জটিল না করে প্রথম সমাধানটিকে উন্নত করতে পারেন তবে আপনাকে সম্পাদনার পরামর্শ দিতে খুব স্বাগত।
ব্লেড

43

পয়েন্টার অভিযোজনউদ্ধারের জন্য !

যেহেতু এটি কিছুক্ষণের মধ্যে স্পর্শ করা হয়নি, আপনি ব্যবহার করতে পারেন:

a:link {
   color: red;
}

a:hover {
   color:blue;
}

@media (hover: none) {
   a:link {
      color: red;
   }
}

আপনার ডেস্কটপ ব্রাউজার এবং আপনার ফোন ব্রাউজার উভয়েই এই ডেমোটি দেখুন । আধুনিক টাচ ডিভাইস দ্বারা সমর্থিত ।

দ্রষ্টব্য : মনে রাখবেন যে যেহেতু কোনও সারফেস পিসির প্রাথমিক ইনপুট (দক্ষতা) হ'ল একটি মাউস, এটি একটি নীল লিঙ্ক হয়ে শেষ হবে, এমনকি এটি কোনও বিচ্ছিন্ন (ট্যাবলেট) স্ক্রীন হলেও। ব্রাউজারগুলি সর্বদা সুনির্দিষ্ট ইনপুটটির সক্ষমতায় ডিফল্ট হবে।


ধন্যবাদ, এটি সুবিধাজনক হবে! যাইহোক, আমি মোবাইল মোডে ক্রোমের সাহায্যে এটি চেষ্টা করেছিলাম, তবে এটি কার্যকর হয়নি - যখন আমি এটি "ট্যাপ" করেছিলাম, তা যাইহোক নীল হয়ে গেছে ...
সাইমন ফেরেন্ডারিজার

1
@ সিমোনফেরান্ড্রিজার এটি ক্রোম ডেভোলগুলির একটি সীমাবদ্ধতা। আসল টাচ-কেবল ডিভাইসে লিঙ্কটি খোলার চেষ্টা করুন।
জেসন টি ফেদারিংহাম

1
আইপ্যাড ক্রোম / সাফারি বনাম ওএস এক্স ক্রোম / সাফারিতে পুরোপুরি কাজ করা। ধন্যবাদ! পরিশেষে আপনি যেমন একটি ছোট ভিজ্যুয়াল সমস্যার জন্য মার্জিত সমাধান চান solution
রাকালুফ

3
আমি এইমাত্র iOS 11 চালিত আমার আসল আইফোন 6 এস এ চেষ্টা করেছি এবং লিঙ্কটি নীল হয়ে গেছে।
লুকাশ পেট্র

1
এছাড়াও Nexus 5X চলমান অ্যান্ড্রয়েড 8.1.0 এবং ক্রোম 68.0.3440.91 এর মাধ্যমে চেষ্টা করে দেখুন। লিঙ্কটি নীল হয়ে গেছে।
ট্রেভিন অ্যাভেরি 29:58

12

আমি একই সমস্যার মুখোমুখি হয়েছি (স্যামসাং মোবাইল ব্রাউজারগুলির সাথে আমার ক্ষেত্রে) এবং তাই আমি এই প্রশ্নটিতে হোঁচট খেয়েছি।

ক্যালসালের উত্তরের জন্য ধন্যবাদ আমি এমন কিছু খুঁজে পেয়েছি যা আমি বিশ্বাস করি যে কার্যত সমস্ত ডেস্কটপ ব্রাউজারগুলি বাদ দেবে কারণ মনে হচ্ছে যে মোবাইল ব্রাউজারগুলি আমি চেষ্টা করেছি (এটি একটি সংকলিত টেবিল থেকে স্ক্রিনশট দেখুন: সিএসএস পয়েন্টার বৈশিষ্ট্য সনাক্তকরণ টেবিল )।

এমডিএন ওয়েব ডক্সে এটি উল্লেখ করা হয়েছে

পয়েন্টার সিএসএস @ মিডিয়া বৈশিষ্ট্যটি ব্যবহারকারীর প্রাথমিক ইনপুট প্রক্রিয়াটি একটি পয়েন্টিং ডিভাইস কিনা তার উপর ভিত্তি করে শৈলী প্রয়োগ করতে ব্যবহার করা যেতে পারে এবং যদি তাই হয় তবে এটি কতটা সঠিক

আমি যা আবিষ্কার করেছি তা হ'ল পয়েন্টার: মোটা এমন কিছু যা সংযুক্ত টেবিলের সমস্ত ডেস্কটপ ব্রাউজারগুলির কাছে অজানা তবে একই টেবিলের সমস্ত মোবাইল ব্রাউজারগুলিতে পরিচিত। এটি সবচেয়ে কার্যকর পছন্দ বলে মনে হচ্ছে কারণ অন্য সমস্ত পয়েন্টার কীওয়ার্ড মানগুলি অসামঞ্জস্যিত ফলাফল দেয়।

অতএব আপনি কলসালের মতো একটি মিডিয়া ক্যোয়ারী তৈরি করতে পারেন বর্ণিত তবে কিছুটা । এটি সমস্ত স্পর্শ ডিভাইসকে বাতিল করতে বিপরীত যুক্তিকে ব্যবহার করে।

সাস মিক্সিন:

@mixin hover-supported {    
    /* 
     * https://developer.mozilla.org/en-US/docs/Web/CSS/@media/pointer 
     * coarse: The primary input mechanism includes a pointing device of limited accuracy.
     */
    @media not all and (pointer: coarse) {
        &:hover {
            @content;
        }
    }
}

a {
    color:green;
    border-color:blue;

    @include hover-supported() {
        color:blue;
        border-color:green;
    }
}

সংকলিত সিএসএস:

a {
  color: green;
  border-color: blue;
}
@media not all and (pointer: coarse) {
  a:hover {
    color: blue;
    border-color: green;
  }
}

সমস্যাটি অনুসন্ধানের পরে আমি তৈরি এই টুকরোটিতেও এটি বর্ণনা করা হয়েছে । গবেষণামূলক গবেষণার জন্য কোডেপেন

আপডেট : 2018-08-23 এই আপডেটটি লেখার পরে, এবং @ ডিমেট্রি পাভলুতিন দ্বারা নির্দেশিত এই কৌশলটি আর ফায়ারফক্স ডেস্কটপে কাজ করবে বলে মনে হচ্ছে না।


ধন্যবাদ @ দিমিত্রি পাভলুতিন, টেবিল অনুসারে (এটি সংকলিত হওয়ার সময়) এটি করা উচিত, তবে আমি অন্য চেহারাটি দেখতে পারি।
প্রোগ্রামারপার

@ দিমিত্রিপ্যাভলুটিন আপনি সত্যই সঠিক উত্তরটি আপডেট করবে
প্রোগ্রামারপার

1
আপনি বলতে চাচ্ছেন যে এটি ফায়ারফক্স ডেস্কটপে কাজ করে না যদি একচেটিয়াভাবে ছোঁয়া ডিভাইস ব্যবহার করা হয়? আমি চেষ্টা করেছি এমন সবকিছু দিয়ে এটি দুর্দান্ত কাজ করে।
ফুজজিলোজেক

পছন্দ করুন গতবার আমি পরীক্ষা করেছিলাম 2018-08-23, তাই আপনি যদি নিশ্চিতভাবে এটি নিশ্চিত করতে পারেন তবে সম্ভবত আমি উত্তরটি আবার আপডেট করতে পারি?
প্রোগ্রামারপার

9

জেসনের উত্তর অনুসারে আমরা কেবলমাত্র এমন ডিভাইসগুলিতে সম্বোধন করতে পারি যা খাঁটি সিএসএস মিডিয়া প্রশ্নের সাথে হোভার সমর্থন করে না। আমরা কেবলমাত্র এমন ডিভাইসগুলিতে সম্বোধন করতে পারি যা একইভাবে একই প্রশ্নে মোগালদের উত্তর মত হওয়ারকে সমর্থন করে @media not all and (hover: none)। এটি অদ্ভুত দেখাচ্ছে তবে এটি কাজ করে।

আমি এর থেকে সহজ ব্যবহারের জন্য একটি সাস মিক্সিন তৈরি করেছি:

@mixin hover-supported {
    @media not all and (hover: none) {
        &:hover {
            @content;
        }
    }
}

2019-05-15 আপডেট করুন : আমি মিডিয়াম থেকে এই নিবন্ধটি সুপারিশ করছি যা সমস্ত বিভিন্ন ডিভাইসগুলির মধ্য দিয়ে যায় যা আমরা সিএসএস দিয়ে লক্ষ্য করতে পারি। মূলত এটি এই মিডিয়া নিয়মের একটি মিশ্রণ, নির্দিষ্ট লক্ষ্যগুলির জন্য তাদের একত্রিত করুন:

@media (hover: hover) {
    /* Device that can hover (desktops) */
}
@media (hover: none) {
    /* Device that can not hover with ease */
}
@media (pointer: coarse) {
    /* Device with limited pointing accuracy (touch) */
}
@media (pointer: fine) {
    /* Device with accurate pointing (desktop, stylus-based) */
}
@media (pointer: none) {
    /* Device with no pointing */
}

নির্দিষ্ট লক্ষ্যগুলির জন্য উদাহরণ:

@media (hover: none) and (pointer: coarse) {
    /* Smartphones and touchscreens */
}

@media (hover: hover) and (pointer: fine) {
    /* Desktops with mouse */
}

আমি মিক্সিনগুলিকে পছন্দ করি, আমি কেবলমাত্র আমার হোভার মিক্সিনটি কেবলমাত্র এটির সমর্থনকারী ডিভাইসগুলিতে ব্যবহার করি:

@mixin on-hover {
    @media (hover: hover) and (pointer: fine) {
        &:hover {
            @content;
        }
    }
}

button {
    @include on-hover {
        color: blue;
    }
}

এটি মোটেই কাজ করে না। আপনার কাছে হোভার রয়েছে: হোভার-সমর্থিত মিক্সিনের জন্য মিডিয়া কোয়েরিতে কেউ নেই? আপনার পয়েন্টার দরকার: অন্যান্য উত্তর হিসাবে মোটা এখানে।
অ্যালান নেইনহুইস

আপনি কি এটি চেষ্টা করে দেখেছেন বা কেবল বলেছিলেন যে এটি অদ্ভুত দেখাচ্ছে বলে এটি কাজ করে না? এ কারণেই আমি লিখেছিলাম "এটি অদ্ভুত দেখাচ্ছে" .. এবং এটি পয়েন্টার ছাড়াই আমার পক্ষে কাজ করে: মোটা।
কলসাল

আমার ওয়ানপ্লাস 5 টি (ক্রোম এবং ফায়ারফক্স উভয় ক্ষেত্রে) এর সাথে সিএসএস-পদ্ধতির সাথে আমার কিছু অসঙ্গতিপূর্ণ ফলাফল ছিল। এটি আইওএস-তে দুর্দান্ত কাজ করেছে, তবে আমি এটি ওয়ানপ্লাসে কাজ করতে পারি না। আমি যে কোনও পয়েন্টার এবং যে কোনও হোভার
জেথ

6

আমি বর্তমানে একই ধরণের সমস্যা নিয়ে কাজ করছি।

আমার সাথে সাথে দুটি প্রধান বিকল্প রয়েছে যা তত্ক্ষণাত: (১) ব্যবহারকারী-স্ট্রিং চেকিং, বা (২) আলাদা ইউআরএল ব্যবহার করে পৃথক মোবাইল পৃষ্ঠাগুলি বজায় রাখা এবং তাদের জন্য আরও ভাল কি তা ব্যবহারকারীদের চয়ন করা having

  1. আপনি যদি পিএইচপি বা রুবির মতো কোনও ইন্টারনেট নালী-টেপ ভাষা ব্যবহার করতে সক্ষম হন তবে আপনি কোনও পৃষ্ঠার জন্য অনুরোধ করে ডিভাইসের ব্যবহারকারী স্ট্রিংটি পরীক্ষা করতে পারেন <link rel="mobile.css" />এবং সাধারণ স্টাইলের পরিবর্তে কেবল একই সামগ্রীতে পরিবেশন করতে পারেন ।

ব্যবহারকারীর স্ট্রিংগুলিতে ব্রাউজার, রেন্ডারার, অপারেটিং সিস্টেম ইত্যাদি সম্পর্কিত তথ্য সনাক্ত করা থাকে non কোন স্পর্শের বিপরীতে কোন ডিভাইসগুলি "স্পর্শ" সেগুলি সিদ্ধান্ত নেওয়ার সিদ্ধান্ত নেওয়া উচিত। আপনি এই তথ্যটি কোথাও উপলব্ধ খুঁজে পেতে এবং এটি আপনার সিস্টেমে ম্যাপ করতে সক্ষম হতে পারেন।

উ: যদি আপনাকে পুরানো ব্রাউজারগুলি উপেক্ষা করার অনুমতি দেওয়া হয় তবে আপনাকে কেবলমাত্র সাধারণ, নন-মোবাইল সিএসএসে একটি নিয়ম যুক্ত করতে হবে, যথা: সম্পাদনা : এরক। কিছু পরীক্ষা-নিরীক্ষা করার পরে, আমি নীচের নিয়মটি আবিষ্কার করেছি কেবলমাত্র নান্দনিক প্রভাবগুলি অক্ষম করার পাশাপাশি ওয়েবকিট-ব্রাউজারগুলিতে লিঙ্কগুলি অনুসরণ করার ক্ষমতাও অক্ষম করে - দেখুন http://jsfiddle.net/3nkcdeao/
যেমন, আপনার আমি এখানে যা দেখায় তার থেকে আপনি কীভাবে মোবাইল কেসের জন্য নিয়মগুলি সংশোধন করেন সে সম্পর্কে কিছুটা বেশি নির্বাচনী হতে হবে তবে এটি একটি সহায়ক সূচনা পয়েন্ট হতে পারে:

* { 
    pointer-events: none !important; /* only use !important if you have to */
}

সাইডেনোট হিসাবে, পিতামাতার উপর পয়েন্টার-ইভেন্টগুলি অক্ষম করা এবং তারপরে স্পষ্টভাবে তাদের কোনও সন্তানের উপর সক্ষম করা যদি কোনও শিশু-উপাদান প্রবেশ করে তবে পিতামাতার উপর কোনও হভার-প্রভাব আবার সক্রিয় হয়ে উঠবে :hover
দেখাHttp://jsfiddle.net/38Lookhp/5/

বি আপনি উত্তরাধিকার ওয়েব-রেন্ডারারগুলির সমর্থনকারী করছেন, তাহলে আপনি কোন নিয়ম সময় বিশেষ শৈলী সেট সরানোর লাইন বরাবর একটি বিট আরো কাজ করতে হবে :hover। প্রত্যেকের সময় সাশ্রয় করার জন্য, আপনি কেবল মোবাইল সংস্করণ তৈরি করতে আপনার স্ট্যান্ডার্ড স্টাইল শীটটিতে চালিত একটি স্বয়ংক্রিয় অনুলিপি + সেড ইন কমান্ড তৈরি করতে চাইতে পারেন। এটি আপনাকে কেবলমাত্র স্ট্যান্ডার্ড কোডটি লিখতে / আপডেট করার অনুমতি দেয় :hoverএবং আপনার পৃষ্ঠাগুলির মোবাইল সংস্করণে যে কোনও স্টাইল-বিধি ব্যবহার করে তা সরিয়ে দেয়।

  1. (আমি) বিকল্পভাবে, সহজেই আপনার ব্যবহারকারীদের সচেতন করুন যে আপনার ওয়েবসাইট.কম ছাড়াও মোবাইল ডিভাইসের জন্য আপনার একটি m.website.com রয়েছে । যদিও সাবডোমাইনিং সর্বাধিক সাধারণ উপায়, আপনার মোবাইল ব্যবহারকারীদের পরিবর্তিত পৃষ্ঠাগুলি অ্যাক্সেস করার জন্য প্রদত্ত ইউআরএলটির কিছু অন্যান্য পূর্বাভাসযোগ্য পরিবর্তনও থাকতে পারে। এই পর্যায়ে, আপনি নিশ্চিত হতে চাইবেন যে প্রতিবার তারা সাইটের অন্য অংশে নেভিগেট করার সময় তাদের URL টি সংশোধন করতে হবে না।

আবার এখানে, আপনি কেবল স্টাইলশিটগুলিতে একটি অতিরিক্ত নিয়ম বা দুটি যুক্ত করতে পারবেন বা সেড বা অনুরূপ ইউটিলিটি ব্যবহার করে কিছুটা জটিল কিছু করতে বাধ্য করতে পারেন । এটি প্রয়োগ করা সম্ভবত সবচেয়ে সহজ হবে: আপনার স্টাইলিং বিধিগুলিতে নয় যেমন div:not(.disruptive):hover {...আপনি class="disruptive"সিএসএসের পরিবর্তে মোবাইল ব্যবহারকারীর জন্য জেএস বা সার্ভার ভাষা ব্যবহার করে বিরক্তিকর কাজ করার উপাদানগুলিতে যুক্ত করবেন elements

  1. (II) আপনি প্রথম দুটি সংঘটিত করতে পারেন এবং (যদি আপনি সন্দেহ করেন যে কোনও ব্যবহারকারী কোনও পৃষ্ঠার ভুল সংস্করণে ঘুরে বেড়াচ্ছেন) তবে আপনি পরামর্শ দিতে পারেন যে তারা মোবাইল-টাইপ ডিসপ্লেতে স্যুইচ / আউট করে বা অন্য কোথাও কোনও লিঙ্ক রয়েছে যা ব্যবহারকারীদের পিছনে পিছনে ফ্লপ করতে দেয়। ইতিমধ্যে উল্লিখিত হিসাবে, @ মিডিয়া ক্যোয়ারীগুলি পরিদর্শন করার জন্য কী ব্যবহৃত হচ্ছে তা নির্ধারণের জন্য ব্যবহার দেখতে কিছু হতে পারে।

  2. (III) আপনি যদি কোনও ডিভাইস "স্পর্শ" এবং কোনটি না তা একবার জেনে থাকেন তবে আপনি সিএসএস হোভারটিকে টাচ-স্ক্রিন ডিভাইসগুলিতে সহায়ক হিসাবে উপেক্ষা করবেন না বলে মনে করতে পারেন ।


pointer-events- এটা আশ্চর্যজনক! আমি ঠিক তাই খুঁজছিলাম, অনেক অনেক ধন্যবাদ!
সাইমন ফেরেন্ডারিজার

1
@ সিমোনফেরান্ড্রিজার ভাল, আমি আশা করি এটি এগিয়ে যাওয়ার পক্ষে সহায়ক। আজকের এই সতর্কতার বিষয়টি মনে রাখবেন, <a>লিঙ্কগুলি এর অধীনে অ্যাক্সেসযোগ্য pointer-events:none। যে কোনও ভাগ্যের সাথে, এটি পরে পরিবর্তন হবে - বা CSS 3.x বা 4.0+ এর সাথে pointer-events:navigation-onlyবা একই রকম হবে।
সেলডমনিডি

6

এটা চেষ্টা কর:

@media (hover:<s>on-demand</s>) {
    button:hover {
        background-color: #color-when-NOT-touch-device;
    }
}

আপডেট: দুর্ভাগ্যক্রমে ডাব্লু 3 সি এই সম্পত্তিটি চশমা থেকে সরিয়ে দিয়েছে ( https://github.com/w3c/csswg-drafts/commit/2078b46218f7462735bb0b5107c9a3e84fb4c4b1 )।


এটি প্রকৃতপক্ষে সমস্যার সমাধান করবে। এর আগে আমি এর আগে কখনও শুনিনি। কোন ব্রাউজার সংস্করণে এটি কাজ করার কথা?
সাইমন ফেরেন্ডারিজার

3
@ সিমোনফেরেন্ড্রিগার ক্যানিউজ. com/ # feat = css- media- interation এবং আরও কিছু তথ্য: dev.opera.com/articles/media-features
স্কেপটিক

ভাল ... এটির একটি বিস্তৃত ব্রাউজার সমর্থন নেই।
গিয়াকোমো পাইটা

চমৎকার! যেমন সুবিধাজনক সমাধানের জন্য আপনাকে ধন্যবাদ। আমি আশা করি এটি ডাব্লু 3 সি স্ট্যান্ডার্ডে যুক্ত হবে।
জিপি গ্রস্ট

আমি সাহায্য করতে পেরে আনন্দিত
Mar

5

আপনি ব্যবহার করতে পারেন Modernizr জাতীয় (এছাড়াও আমরা দেখি Stackoverflow উত্তর একটি কাস্টম জাতীয় ফাংশন করতে), অথবা:

function is_touch_device() {
 return 'ontouchstart' in window        // works on most browsers 
  || navigator.maxTouchPoints;       // works on IE10/11 and Surface
};

if ( is_touch_device() ) {
  $('html').addClass('touch');
} else {
  $('html').addClass('no-touch');
} 

থেকে স্পর্শ সমর্থনে সনাক্ত ব্রাউজারে ঘটনা, এবং তারপর একটি নিয়মিত বরাদ্দ CSSসম্পত্তি সঙ্গে উপাদান ঢোঁড়ন html.no-touchবর্গ, এভাবে:

html.touch a {
    width: 480px;
}

/* FOR THE DESKTOP, SET THE HOVER STATE */
html.no-touch a:hover {
   width: auto;
   color:blue;
   border-color:green;
}

এটি @ ব্লেড দ্বারাও পরামর্শ দেওয়া হয়েছিল - তবে, htmlট্যাগের পরিবর্তে ট্যাগটি ব্যবহার করা এটি bodyপড়ার জন্য আরও ভাল হতে পারে। এটিই বর্তমানে সমাধানটি আমি ব্যবহার করছি। যাহোক তোমাকে ধন্যবাদ.
সাইমন ফেরেন্ডারিগার

1

এটি আমার জন্য সহায়ক ছিল: লিঙ্ক

function hoverTouchUnstick() {
    // Check if the device supports touch events
    if('ontouchstart' in document.documentElement) {
        // Loop through each stylesheet
        for(var sheetI = document.styleSheets.length - 1; sheetI >= 0; sheetI--) {
            var sheet = document.styleSheets[sheetI];
            // Verify if cssRules exists in sheet
            if(sheet.cssRules) {
                // Loop through each rule in sheet
                for(var ruleI = sheet.cssRules.length - 1; ruleI >= 0; ruleI--) {
                    var rule = sheet.cssRules[ruleI];
                    // Verify rule has selector text
                    if(rule.selectorText) {
                        // Replace hover psuedo-class with active psuedo-class
                        rule.selectorText = rule.selectorText.replace(":hover", ":active");
                    }
                }
            }
        }
    }
}

1

এটিও একটি সম্ভাব্য কাজ, তবে আপনাকে আপনার CSS এর মধ্য দিয়ে যেতে হবে এবং .no-touchআপনার হোওয়ার শৈলীর আগে একটি ক্লাস যুক্ত করতে হবে ।

javascript:

if (!("ontouchstart" in document.documentElement)) {
document.documentElement.className += " no-touch";
}

সিএসএস উদাহরণ:

<style>
p span {
    display: none;
}

.no-touch p:hover span {
    display: inline;
}
</style>
<p><a href="/">Tap me</a><span>You tapped!</span></p>

উৎস

পিএস তবে আমাদের মনে রাখা উচিত, বাজারে আরও বেশি বেশি টাচ-ডিভাইস আসছে যা একই সাথে মাউস ইনপুটকে সমর্থন করে।


0

এটি এখনও একটি নিখুঁত সমাধান না হতে পারে (এবং এটি jQuery সহ) তবে সম্ভবত এটি কাজ করার জন্য কোনও দিক / ধারণা: অন্যভাবে এটি করা সম্পর্কে কী? যার অর্থ: ডিফল্টরূপে হোভার সিএসএস রাজ্যগুলি নিষ্ক্রিয় করা এবং নথির যে কোনও জায়গায় মাউসমোভ ইভেন্টটি সনাক্ত করা থাকলে সেগুলি সক্রিয় করুন। কেউ যদি জএস নিষ্ক্রিয় করে তবে অবশ্যই এটি কাজ করে না। এভাবে আর চারদিকে করার বিরুদ্ধে আর কী কথা বলতে পারে?

সম্ভবত এটির মতো:

সিএসএস:

/* will only work if html has class "mousedetected" */
html.mousedetected a:hover {
   color:blue;
   border-color:green;
}

JQuery:

/* adds "mousedetected" class to html element if mouse moves (which should never happen on touch-only devices shouldn’t it?) */
$("body").mousemove( function() {
    $("html").addClass("mousedetected");
});

1
একটি সমস্যা আসলে হ'ল টাচ ডিভাইসে কোনও কিছুর উপর ক্লিক করার সময় এটি একটি .মোমসওভ ()ও হয়।
এ লাস্ট করুন

1
এবং আপনি সম্ভবত এই ইভেন্টটি অবিরাম বন্ধ করে দেবেন, যার ফলে কর্মক্ষমতাতে প্রভাব ফেলবে। আপনার যদি আরও ভাল ব্যবহার করা উচিত তবে এটি যদি কাজ করে তবে$('body').one.('mousemove', ...)
সাইমন ফেরেন্ডারিজার

0

এটি ব্যবহার করে দেখুন (আমি এই উদাহরণে পটভূমি এবং পটভূমি রঙ ব্যবহার করি):

var ClickEventType = ((document.ontouchstart !== null) ? 'click' : 'touchstart');

if (ClickEventType == 'touchstart') {
            $('a').each(function() { // save original..
                var back_color = $(this).css('background-color');
                var background = $(this).css('background');
                $(this).attr('data-back_color', back_color);
                $(this).attr('data-background', background);
            });

            $('a').on('touchend', function(e) { // overwrite with original style..
                var background = $(this).attr('data-background');
                var back_color = $(this).attr('data-back_color');
                if (back_color != undefined) {
                    $(this).css({'background-color': back_color});
                }
                if (background != undefined) {
                    $(this).css({'background': background});
                }
            }).on('touchstart', function(e) { // clear added stlye="" elements..
                $(this).css({'background': '', 'background-color': ''});
            });
}

CSS:

a {
    -webkit-touch-callout: none;
    -webkit-tap-highlight-color: transparent;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

0

নোংরা উপায় ... মার্জিত নয়, তবে সবচেয়ে সহজ উপায় যা আপনাকে বাঁচাতে পারে।

হোভারের বৈশিষ্ট্যযুক্ত যে কোনও কিছু মুছুন।

.your-class:hover:before {
  color: blue;
  background: linear-gradient(to bottom, rgba(231,56,39,0) 0%, #aaaaaa 100%);
}

@media all and (min-width:320px) and (max-width: 960px) {
    .your-class:hover:before {
    color: black;
    background: transparent;
  }
}

0

আপনার সমস্যাটি যদি আপনি নীল স্বচ্ছ রঙ দ্বারা আবৃত Android এবং সম্পূর্ণ ডিভিতে স্পর্শ / ট্যাপ করেন! তারপরে আপনার কেবলমাত্র পরিবর্তন করতে হবে

কার্সর: পয়েন্টার; টু কর্সার: ডিফল্ট;

মোবাইল ফোন / ট্যাবলেটে লুকানোর জন্য মিডিয়াকিউয়ারি ব্যবহার করুন।

এটি আমার পক্ষে কাজ করে।


-1

এই সহজ 2019 jquery সমাধান চেষ্টা করুন, যদিও এটি প্রায় কিছুটা সময় হয়ে গেছে;

  1. মাথায় এই প্লাগইন যুক্ত করুন:

    src = "https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"

  2. এটিকে জেএসে যুক্ত করুন:

    $ ("*")। on ("স্পর্শ", ফাংশন (ঙ) {$ (এটি) .ফোকাস ();}); // সমস্ত উপাদানগুলিতে প্রযোজ্য

  3. এর কিছু প্রস্তাবিত বৈচিত্রগুলি হ'ল:

    $ (": ইনপুট,: চেকবক্স,") on ("স্পর্শ", ফাংশন (ঙ) this (এটি) .ফোকাস);}); // উপাদান নির্দিষ্ট করুন

    $ ("*")। ("ক্লিক করুন, স্পর্শ করুন", ফাংশন (ঙ) e $ (এটি) .ফোকাস ();}); // ক্লিক ইভেন্ট অন্তর্ভুক্ত

    সিএসএস: বডি {কার্সার: পয়েন্টার; focus // কোনও ফোকাস শেষ করতে যে কোনও জায়গায় স্পর্শ করুন

মন্তব্য

  • টুলটিপগুলি প্রভাবিত করতে এড়াতে বুটস্ট্র্যাপ.জেএস এর আগে প্লাগইন রাখুন
  • সাফারি বা ক্রোম ব্যবহার করে কেবল আইফোন এক্সআর আইওএস 12.1.12 এবং আইপ্যাড 3 আইওএস 9.3.5 এ পরীক্ষা করা হয়েছে।

তথ্যসূত্র:

https://code.jquery.com/ui/

https://api.jquery.com/category/selectors/jquery-selector-extensions/


2
2019 এ আপনার jQuery ব্যবহার করার দরকার নেই - ওয়েবএপিআই বেশ শক্তিশালী এবং সমস্ত বড় বৈশিষ্ট্য সমর্থন করে।
acme

ইয়া ... 2019 সালে jQuery? কিছু ফ্ল্যাশ সম্পর্কে? Hehehe।
প্রতিকার.io
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.