搜索
首页web前端css教程HTML数据属性指南

HTML Data Attributes Guide

目录

  1. 简介
  2. 语法
  3. 使用数据属性进行样式设置
  4. 在 JavaScript 中访问数据属性

简介

HTML 元素可以具有属性,这些属性用于任何用途,从辅助功能信息到样式控制。

<div aria-label="Names" role="region"></div>

不建议的做法是创建你自己的属性,或将现有属性重新用于不相关的功能。

<div highlight="true"></div>
<div width="large"></div>

这样做有很多不好的原因。你的 HTML 将变得无效,这可能没有任何实际的负面影响,但会让你失去那种温暖模糊的有效 HTML 感觉。最令人信服的原因是 HTML 是一种不断发展的语言,仅仅因为今天没有作用的属性和值并不意味着它们将来永远不会起作用。

好消息是:你可以创建你自己的属性。你只需要在它们前面加上 data-* 前缀,然后你就可以随心所欲地做任何事情了!

语法

能够创建你自己的 HTML 属性并将你自己的信息放入其中非常方便。幸运的是,你可以做到!这就是数据属性的用途。它们是这样的:

<div data-foo=""></div>
<div data-size="large"></div>
  • 数据属性通常被称为 data-* 属性,因为它们总是以这种格式。单词 data,然后是一个短划线 -,然后是你能想到的其他文本。

    你可以单独使用 data 属性吗?

    <div data=""></div>

    这可能不会造成任何伤害,但你将无法获得我们将在本指南后面介绍的 JavaScript API。你实际上是在为自己创建属性,正如我在引言中提到的那样,这是不鼓励的。

    数据属性的应该做什么

    存储应该可以访问的内容。如果内容应该在页面上看到或阅读,不要只将它们放在数据属性中,还要确保内容在 HTML 内容中的某个地方。

    <div data-name="Chris Coyier"></div>
    <div>
      Chris Coyier
    </div>

    这里有更多关于隐藏内容的信息。

    使用数据属性进行样式设置

    CSS 可以根据属性及其值选择 HTML 元素。

    /* 选择具有此数据属性和值的任何元素 */
    [data-size="large"] {
      padding: 2rem;
      font-size: 125%;
    }
    /* 你可以将其限定为元素或类或任何其他内容 */
    button[data-type="download"] { }
    .card[data-pad="extra"] { }

    这可能很有吸引力。HTML/CSS 中主要的样式挂钩是类,虽然类很棒(它们具有中等特异性和通过 classList 的不错的 JavaScript 方法),但元素要么具有它,要么不具有它(基本上是开启或关闭)。使用 data-* 属性,你可以获得这种开启/关闭功能,以及在相同特异性级别上根据其值进行选择的能力。

    /* 如果属性存在,则选择 */
    [data-size] { }
    /* 选择属性是否具有特定值 */
    [data-state="open"],
    [aria-expanded="true"] { }
    /* “以…开头”选择器,这意味着这将匹配“3”或任何以 3 开头的字符,例如“3.14” */
    [data-version^="3"] { }
    /* “包含”表示如果值在任何地方包含该字符串 */
    [data-company*="google"] { }

    属性选择器的特异性

    它与类完全相同。我们通常将特异性视为一个四部分值:

    内联样式、ID、类/属性、标签

    因此,单独的属性选择器为0, 0, 1, 0。像这样的选择器:

    div.card[data-foo="bar"] { }

    将是0, 0, 2, 1。2 是因为有一个类(.card)和一个属性([data-foo="bar"]),而 1 是因为有一个标签(div)。

    属性选择器的特异性低于 ID,高于元素/标签,与类相同。

    不区分大小写的属性值

    如果你需要纠正数据属性中可能存在的大小写不一致,属性选择器为此提供了一个不区分大小写的变体。

    /* 将匹配
    <div data-state="open"></div>
    <div data-state="Open"></div>
    <div data-state="OPEN"></div>
    <div data-state="oPeN"></div>
    */
    [data-state="open" i] { }

    它是在方括号选择器中的小写字母 i

    可视化使用数据属性

    CSS 允许你提取数据属性值并在需要时显示它。

    /* <div data-emoji="✅"> */
    [data-emoji]::before {
      content: attr(data-emoji); /* 返回 '✅' */
      margin-right: 5px;
    }
    <h4 id="样式使用的示例">样式使用的示例</h4>
    <p>你可以使用数据属性来指定网格容器所需的列数。</p>
    <pre class="brush:php;toolbar:false"><div data-columns="2"></div>
    <div data-columns="3"></div>
    <div data-columns="4"></div>

    在 JavaScript 中访问数据属性

    与任何其他属性一样,你可以使用通用方法 getAttribute 来访问该值。

    let value = el.getAttribute("data-state");
    // 你也可以设置值。
    // 返回 data-state="collapsed"
    el.setAttribute("data-state", "collapsed");

    但是数据属性也有自己的特殊 API。假设你有一个具有多个数据属性的元素(这完全没问题):

    如果你的元素有引用,你可以像这样设置和获取属性:

    // 获取
    span.dataset.info; // 123
    span.dataset.index; // 2
    // 设置
    span.dataset.prefix = "Mr. ";
    span.dataset.emojiIcon = "?";

    请注意最后一行中的驼峰式命名法。它会自动将 HTML 中的 kebab-style 属性(如 data-this-little-piggy)转换为 JavaScript 中的驼峰式命名法(如 dataThisLittlePiggy)。

    这个 API arguably 不像 classList 那样好,classList 有清晰的添加、删除、切换和替换方法,但它总比没有好。

    你也可以访问内联数据集:

    数据属性中的 JSON 数据

    
    

    为什么不呢?它只是一个字符串,可以将其格式化为有效的 JSON(注意引号等)。你可以根据需要提取该数据并进行解析。

    const el = document.querySelector("li");
    let json = el.dataset.person;
    let data = JSON.parse(json);
    console.log(data.name); // Chris Coyier
    console.log(data.job); // Web Person

    JavaScript 使用案例

    这个概念是你可以使用数据属性将信息放入 HTML 中,JavaScript 可能需要访问这些信息才能执行某些操作。

    一个常见的例子与数据库功能有关。假设你有一个“点赞”按钮:

    该按钮可以对其进行点击处理程序,该处理程序在点击时执行对服务器的 Ajax 请求以递增数据库中点赞的数量。它知道要更新哪个记录,因为它从数据属性中获取它。

    规范

    • 选择器级别 4(工作草案)
    • 选择器级别 3(推荐)
    • 选择器级别 2,修订版 1(初始定义)

    浏览器支持

    此浏览器支持数据来自 Caniuse,其中包含更多详细信息。数字表示浏览器在该版本及更高版本中支持此功能。

    桌面

    移动/平板电脑

  • 以上是HTML数据属性指南的详细内容。更多信息请关注PHP中文网其他相关文章!

    声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    '订阅播客”链接应在哪里?'订阅播客”链接应在哪里?Apr 16, 2025 pm 12:04 PM

    有一段时间,iTunes是播客中的大狗,因此,如果您将“订阅播客”链接到喜欢:

    浏览器引擎多样性浏览器引擎多样性Apr 16, 2025 pm 12:02 PM

    当他们在2013年去Chrome时,我们失去了歌剧。与Edge今年早些时候也进行了同样的交易。迈克·泰勒(Mike Taylor)称这些变化为“减少

    网络共享的UX注意事项网络共享的UX注意事项Apr 16, 2025 am 11:59 AM

    从垃圾点击诱饵网站到大多数出版物的最多,共享按钮长期以来一直无处不在。然而,这些

    每周平台新闻:Apple部署网络组件,渐进的HTML渲染,自托管关键资源每周平台新闻:Apple部署网络组件,渐进的HTML渲染,自托管关键资源Apr 16, 2025 am 11:55 AM

    在本周的综述中,Apple进入Web组件,Instagram如何插入脚本以及一些思考的食物,以进行自托管关键资源。

    git Pathspecs以及如何使用它们git Pathspecs以及如何使用它们Apr 16, 2025 am 11:53 AM

    当我查看GIT命令的文档时,我注意到其中许多人都有选择。我最初以为这只是一个

    产品图像的彩色拾取器产品图像的彩色拾取器Apr 16, 2025 am 11:49 AM

    听起来有点像一个困难的问题,不是吗?我们经常没有成千上万种颜色的产品镜头,以便我们可以随身携带。我们也不是

    黑暗模式与React和Themeprovider切换黑暗模式与React和Themeprovider切换Apr 16, 2025 am 11:46 AM

    我喜欢网站具有“暗模式”选项时。黑暗模式使我更容易阅读网页,并帮助我的眼睛更放松。许多网站,包括

    带有HTML对话框元素的一些动手带有HTML对话框元素的一些动手Apr 16, 2025 am 11:33 AM

    这是我第一次查看HTML元素。我已经意识到了一段时间,但是尚未将其旋转。它很酷,

    See all articles

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热门文章

    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    4 周前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳图形设置
    4 周前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您听不到任何人,如何修复音频
    1 个月前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.聊天命令以及如何使用它们
    1 个月前By尊渡假赌尊渡假赌尊渡假赌

    热工具

    Dreamweaver Mac版

    Dreamweaver Mac版

    视觉化网页开发工具

    DVWA

    DVWA

    Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

    安全考试浏览器

    安全考试浏览器

    Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    功能强大的PHP集成开发环境

    SublimeText3 英文版

    SublimeText3 英文版

    推荐:为Win版本,支持代码提示!