CSS 触屏上的 hover 问题

触屏上的 CSS hover 问题。(Chrome Android)点击一下会选中可 hover 的文本。

从这篇文章1找到一处 CodePen 演示 2。代码:

    <button
      data-title="Hello guys!"
      data-help="My name is @tianheg"
    >Subscribe</button>
    button {
      color: #333;
      font-size: 1.3rem;
      padding: 2rem;
      background-color: #eee;
      border: 1px solid #ddd;
      position: relative;
      transition: all ease 200ms;
    }

    @media (pointer: fine) {
      button:hover {
        color: #fff;
        border-color: #000;
        background-color: #333;
      }
      button:hover::after {
        top: 90%;
        background: #aaa;
        border-radius: 0.25rem;
        content: attr(data-title);
        position: absolute;
        font-size: 0.7rem;
        padding: 0.5rem 0.8rem;
        width: max(100%, 200px);
        max-width: max-content;
      }
    }

    @media (pointer: coarse) {
      button::after {
        content: attr(data-title);
        display: block;
        font-size: 0.75rem;
      }
      button:hover {
        color: #ddd;
        border-color: #aaa;
        background-color: #999;
      }
    }

    @media (pointer: none) {
      button::before, button::after {
        display: block;
        font-size: 0.75rem;
      }
      button::after {
        content: attr(data-title);
      }
      button::before {
        content: attr(data-help);
      }
    }

我自己做的一个 Demo。

<p class="codepen" data-height="230" data-default-tab="html,result" data-slug-hash="MWVVGbx" data-preview="true" data-editable="true" data-user="tianheg" style="height: 230px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">

See the Pen Pointer Media Queries in CSS by tianheg (@tianheg) on CodePen.

</p>

当你在电脑上把鼠标移到区块上时,会出现 Hello guys! 字样;当你在触屏手机上查看时,会发现 Subscribe 下面会有 Hello guys! 字样。正好对应了我的 CSS 设置。

从 MDN 的这一页面3可见 @media 下 pointer 的详细用法:

  1. none 表示当前显示设备无指向装置
  2. coarse 表示当前设备有不精确的指向装置,例如,触屏环境
  3. fine 表示当前设备包含精确的指向装置
欢迎通过「邮件」或者点击「这里」告诉我你的想法
Welcome to tell me your thoughts via "email" or click "here"