聊聊你可能不了解的CSS属性函数 attr()


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章带大家了解一下CSS属性函数 attr()。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

属性函数 attr() 用于获取HTML元素里面的属性值,并用于样式中,但目前暂时只能应用于CSS元素中的伪元素。

例子

1.png

实现一个Tooltip

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

<!DOCTYPE html>

<html>

  <head>

    <meta charset="UTF-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>css attr函数</title>

    <style>

      .tooltip {

        width: 100px;

        position: relative;

        margin: 0 auto;

      }

      .tooltip:hover::after {

        padding: 5px;

        position: absolute;

 

        /* 在伪元素中作为字符串中使用 */

        content: attr(data-tooltip);

        color: #fff;

        background-color: #000;

        border-radius: 10px;

        top: 25px;

        left: 0;

      }

 

      /* 箭头 */

      .tooltip:hover .arrow::after {

        content: "";

        position: absolute;

        bottom: -5px;

        left: 20%;

        margin-left: -5px;

        border-width: 5px;

        border-style: solid;

        border-color: transparent transparent black transparent;

      }

 

    </style>

  </head>

  <body>

    <div data-tooltip="一段提示">

      Hover me

      <span></span>

    </div>

  </body>

</html>

语法中的实验属性(目前所有浏览器都不支持)

在新的语法中支持各种类型的CSS属性,具体支持的可查看MDN文档#Specifications "MDN文档"),举个例子,假如需要设置一个margin-top,正常是需要去找到类名然后设置,稍微图省事一点可能会集中书写css类名,然后全局引入再调用.这种写法一定程度上能方便一点,但是不够个性化,假如我要设置成上边距15px,又得重新加一个类名,还是很麻烦。

1

2

3

4

5

6

<div class="mt10"></div>

 

//style

.mt10{

    margin-top: 10px;

}

但是如果实验属性支持的话,可以写成这样。

1

2

3

4

5

6

7

<div mt="10px"></div>

 

//style

 

[mt] {

    margin-top: attr(mt,0);

}

这种写法就很类似组件开发,不需要指定特定大小的px值,在HTML元素上直接能指定任意大小的PX值,而且基于CSS,没有JS的参与,会更加轻巧。但是,很遗憾的是目前所有浏览器都不支持,估计很长一段时间内也是不支持的,这里做一下了解,提供一种组件开发的思路。幸运的是,在找资料的过程发现张鑫旭大佬已经探索过这种可能性,然后对这种特性做了 Polyfill,查看Polyfill。

Polyfill attr()实验属性原理

利用CSS自定义属性传递attr的属性值

1

2

3

4

5

6

.test-attr {

  --mbNum: attr(mb px);

  margin-bottom: var(--mbNum);

  --mlNum: attr(ml px);

  margin-left: var(--mlNum);

}

然后获取所有包含attr()函数的自定义的属性名

阅读剩余部分

相关阅读 >>

纯css3实现信纸/同学录效果(代码示例)

css如何固定住元素不变

css怎么让一段缩进

如何用HTML5中的canvas实现渐变文字的效果

通过14张有趣生动的图片来了解 flexbox 的用法(值得收藏)

HTML5 localstorage知识点总结

css如何实现底部tapbar栏效果

边框css四边怎么加

storage event如何实现页面间通信

css怎么让字体变大

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...