【H5 前端开发笔记】第 19 期:CSS 选择器 (4) 属性选择器 详解

【H5 前端开发笔记】第 19 期:CSS 选择器 (4) —— 属性选择器 详解

属性选择器(Attribute selectors)是 CSS 中非常实用且强大的一类选择器,它根据元素的属性(attribute)及其值来匹配元素。

从 CSS2 开始引入,CSS3 又增加了几种更精细的匹配方式,目前现代浏览器全部支持。

一、属性选择器的 7 种核心写法(最常用的是前 6 种)

序号写法含义匹配条件CSS 版本典型场景
1[attr]属性存在即可只要有 attr 属性(值是什么都行)CSS2[disabled]、[target]、[data-*]
2[attr=”val”]属性值完全相等必须完全等于 val(区分大小写)CSS2[type=”checkbox”]、[lang=”zh-CN”]
3[attr~=”val”]属性值包含这个单词(空格分隔)val 是以空格分隔的词之一CSS2class、rel、data-role 等多值属性
4[attr|=”val”]属性值以 val- 开头val 本身 或 val- 开头CSS2lang=”zh” 匹配 zh、zh-CN、zh-TW
5[attr^=”val”]属性值以 val 开头前缀匹配CSS3href^=”https://”、class^=”btn-“
6[attr$=”val”]属性值以 val 结尾后缀匹配CSS3href$=”.pdf”、src$=”.jpg”
7[attr*=”val”]属性值任意位置包含 val子字符串匹配CSS3href=”login”、title=”登录”

二、代码示例(推荐全部敲一遍)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>属性选择器演示</title>
  <style>
    /* 1. [attr] → 只要有这个属性就选中 */
    a[target] {
      color: #f44336;           /* 所有有 target 属性的链接变红 */
      font-weight: bold;
    }

    /* 2. [attr="value"] → 完全相等 */
    input[type="text"] {
      border: 2px solid #2196F3;
      padding: 8px;
    }

    input[type="checkbox"] {
      transform: scale(1.5);    /* 放大复选框 */
    }

    /* 3. [attr~="value"] → 包含独立单词 */
    [class~="warning"] {
      background-color: #fff3cd;
      padding: 12px;
      border-left: 5px solid #ffc107;
    }

    /* 4. [attr|="value"] → 以 value- 开头(常用于语言代码) */
    [lang|="zh"] {
      font-family: "Microsoft YaHei", sans-serif;
      color: #2e7d32;
    }

    /* 5. [attr^="value"] → 以 value 开头 */
    a[href^="https://"] {
      background: url('https://img.icons8.com/color/16/000000/external-link.png') no-repeat right center;
      padding-right: 20px;
    }

    /* 6. [attr$="value"] → 以 value 结尾 */
    a[href$=".pdf"]::after {
      content: " [PDF]";
      color: #d32f2f;
      font-size: 0.9em;
    }

    img[src$=".webp"] {
      border: 3px solid #9c27b0;
    }

    /* 7. [attr*="value"] → 任意位置包含 */
    [title*="登录"] {
      background-color: #e8f5e9;
      border: 2px dashed #4caf50;
    }

    /* 常用 data-* 属性组合写法 */
    [data-status="success"] {
      color: #4caf50;
    }
    [data-status="error"] {
      color: #f44336;
    }
  </style>
</head>
<body>

<h3>属性选择器实战演示</h3>

<p lang="zh-CN">这是中文段落(lang|="zh" 生效)</p>
<p lang="en">This is English paragraph</p>

<a href="https://example.com" target="_blank">外部链接(target + https:// 前缀)</a><br>
<a href="/files/guide.pdf">下载 PDF 文件(以 .pdf 结尾)</a><br>
<a href="http://internal.com/page">内部链接</a>

<input type="text" placeholder="普通文本框"><br>
<input type="checkbox" checked> 复选框(放大 1.5 倍)

<div class="alert warning important">这是一个警告框(class~="warning")</div>

<img src="photo.webp" alt="示例图片">(.webp 结尾有紫色边框)

<button title="点击登录系统">登录</button>(title 含“登录”有绿色虚线框)

<div data-status="success">操作成功!</div>
<div data-status="error">出错了...</div>

</body>
</html>

三、常见高频使用场景总结(面试+实战)

  1. 表单元素区分input[type="text"]input[type="radio"]input[type="file"]
  2. 链接类型区分:外链 [href^="http"]、PDF 文件 [href$=".pdf"]、图片格式 [src$=".avif"]
  3. data-* 属性状态[data-theme="dark"][data-loading="true"][data-type="modal"]
  4. 国际化[lang|="en"][lang|="zh"]
  5. 图标/文件类型标记:文件后缀、协议类型
  6. 无障碍相关[aria-hidden="true"][aria-invalid="true"]
  7. 第三方组件 hook:很多 UI 库会用 data-* 属性做样式钩子

四、小技巧 & 注意点

  • 属性选择器特异性 = 0,1,0(相当于 class)
  • [attr val][attr="val"] 不要写错引号(推荐始终加引号)
  • 值中包含特殊字符时必须加引号:[data-info="it's ok"]
  • 大小写敏感:HTML 属性值在 HTML5 中通常不区分大小写,但 CSS 属性选择器区分大小写(除非用 i 标志)
  • CSS4 新增不区分大小写写法(目前支持度一般):[attr="val" i]
/* 示例:不区分大小写匹配(部分浏览器支持) */
[class*="btn" i] { ... }

今天的笔记就到这里~
下一期预告:伪类与伪元素(上),重点讲常用结构伪类和交互伪类。

有疑问欢迎留言,有想深入的场景也可以提~ 祝大家 CSS 越写越丝滑!🚀

文章已创建 5186

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部