GIS君-Manchan's blog GIS君-Manchan's blog
首页
  • 前端文章

    • HTML5
    • CSS3
    • JavaScript
  • 学习笔记

    • CSS选择器世界
地信
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 旧版博客
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

まん酱/GIS君

一个正在学习中的GISer~
首页
  • 前端文章

    • HTML5
    • CSS3
    • JavaScript
  • 学习笔记

    • CSS选择器世界
地信
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 旧版博客
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《CSS选择器世界》

    • 概述
    • CSS选择器的优先级
    • CSS选择器的命名
    • 精通CSS选择符
    • 元素选择器
    • 属性选择器
    • 用户行为伪类
      • 手型经过伪类:hover
      • 激活状态伪类:active
      • 焦点伪类:focus
      • 整体焦点伪类:focus-within
      • 键盘焦点伪类:focus-visible
    • URL定位伪类
    • 输入伪类
    • 树结构伪类
  • 学习笔记
  • 《CSS选择器世界》
GIS君-manchan
2022-11-28
目录

用户行为伪类

CSS 伪类是 CSS 选择器最有趣的部分。

用户行为伪类是指与用户行为相关的一些伪类,例如,经过:hover、按下:active 以及聚焦:focus 等。

# 手型经过伪类:hover

:hover 不适用于移动端,虽然也能触发,但消失并不敏捷,体验反而奇怪。:hover 在桌面端网页很常用,例如鼠标经过时改变链接的颜色,或者改变按钮的背景色等。

# 优化经过伪类:hover

:hover触发是即时的,用户在不经意划过的时候,或出现浮层覆盖目标元素的情况。可以通过增加延迟显示优化体验。

<html>
<table demo7-1>
  <tr>
    <th scope="col">标题1</th>
    <th scope="col">标题2</th>
    <th scope="col" width="40">操作</th>
  </tr>
  <tr>
    <td>内容1</td>
    <td>内容2</td>
    <td><a href="#" class="icon-delete" data-title="删除">删除</a></td>
  </tr>
  <tr>
    <td>内容3</td>
    <td>内容4</td>
    <td><a href="#" class="icon-delete" data-title="删除">删除</a></td>
  </tr>
</table>

</html>

<style>
  [demo7-1] .icon-delete {
    display: block;
    width: 20px;
    height: 20px;
    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNpiVGn7z4AFsAFxNxDHQvmLgbgUiH+hK2RhwA66gDgPiQ9i/wDicnSFTDgMgNlsA8S2UHYKNoUgFxwBYmscBh1BYgsBMbp/j+ByAbGAkQXqTJjJjERqhKm3YcIh+Z8Am2AgEg1GDaCiAe+gtDU0LTAipQt0tjWyHiak3AZLuv8JYFjynoOcG8ugpoMykSABV7+HWlgL4gAEGAB4CiT14uCL4QAAAABJRU5ErkJggg==) no-repeat center;
    font-size: 0;
    margin: auto;
    position: relative;
  }

  [demo7-1] .icon-delete::before {
    content: attr(data-title);
    position: absolute;
    visibility: hidden;
    transition: visibility 0s .2s;
    background-color: #333;
    color: white;
    bottom: 100%;
    left: 50%;
    padding: 1px 5px;
    transform: translateX(-50%);
    font-size: 12px;
    white-space: nowrap;
    border-radius: 3px;
    margin-bottom: 4px;
  }

  [demo7-1] .icon-delete::after {
    content: "";
    position: absolute;
    bottom: 100%;
    left: 50%;
    margin-bottom: -4px;
    transform: translateX(-50%);
    border: 4px solid transparent;
    border-top-color: #333;
    transition: visibility 0s .2s;
    visibility: hidden;
  }

  [demo7-1] .icon-delete:hover::before,
  [demo7-1] .icon-delete:hover::after {
    visibility: visible;
  }
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

# 非子元素的:hover显示

可以利用相邻兄弟选择符,控制兄弟元素。

# 纯:hover显示浮层的体验问题

:hover 交互在有鼠标的时候确实很方便,但是如果用户的鼠标坏了,或者设备本身没有鼠标(如触屏设备、智能电视),则纯:hover 实现的下拉列表功能就完全痪了,根本没法使用,这是绝对会让用户抓狂的非常糟糕的体验。

可以增加:focus伪类,提升用户体验。

# 激活状态伪类:active

:active 伪类可以用于设置元素激活状态的样式,可以通过点击鼠标主键,也可以通过手指或者触控笔点击触摸屏触发激活状态。

# 焦点伪类:focus

与:active伪类不同,:focus默认只能匹配特定的元素,包括:

  • 非 disabled 状态的表单元素,如<input>输入框、<select>下拉框、<button>按钮等;
  • 包含 href 属性的<a>元素;
  • <area>元素,不过可以生效的 CSS 属性有限
  • HTML5中的<summary>元素。

设置了 HTML contenteditable 属性的普通元素可以应用:focus 伪类。

设置了HTML tabindex 属性的普通元素也可以应用:focus 伪类。

如果期望<div>元素可以被 Tab 键索引,且被点击的时候可以触发:focus 伪类样式,则使用 tabindex="0";如果不期望<div>元素可以被 Tab 键索引,且只在它被点击的时候触发:focus 伪类样式,则使用 tabindex="-1"。对于普通元素,没有使用自然数作为tabindex 属性值的场景。

# 整体焦点伪类:focus-within

:focus-within伪类和:focus 伪类有很多相似之处,那就是伪类样式的匹配离不开元素聚焦行为的触发。区别在于:focus 伪类样式只有在当前元素处于聚焦状态的时候才匹配,而:focus-within 伪类样式在当前元素或者是当前元素的任意子元素处于聚焦状态的时候都会匹配。

# 键盘焦点伪类:focus-visible

当元素匹配:focus伪类并且客户端 (UA) 的启发式引擎决定焦点应当可见 (在这种情况下很多浏览器默认显示“焦点框”。) 时,:focus-visible伪类将生效。

这个选择器可以有效地根据用户的输入方式 (鼠标 vs 键盘) 展示不同形式的焦点。

在目前版本的 Chrome 浏览器下浏览器认为使用键盘访问时触发的元素聚焦才是:focus-visible 所表示的聚焦。换句话说,:focus-visible 可以让我们知道元素的聚焦行为到底是鼠标触发还是键盘触发。因此,如果希望去除鼠标点击时候的 outline,而保留键盘访问时候的 outline,只要一条短短的CSS 规则就可以了:

:focus:not(:focus-visible) {
    outline: 0;
}
1
2
3
微信 支付宝
#CSS#CSS选择器
文章更新于: 2022/12/01 16:05:30
属性选择器
URL定位伪类

← 属性选择器 URL定位伪类→

最近更新
01
前端面试学习
01-02
02
Markdown首行缩进
12-01
03
缅怀 | 加强测绘工作 发展地理信息产业
12-01
更多文章>
Theme by Vdoing | Copyright © 2020-2023 Manchan All rights reserved.
鄂ICP备2020015911-1号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式