网易首页 > 网易号 > 正文 申请入驻

web前端需要了解自定义的CSS属性

0
分享至

在这篇文章中,我们介绍自定义的CSS属性,显示为什么要使用它们,如何定义它们以及如何使用和不使用JavaScript来更改它们。

今天的前端开发人员有大量的工具来帮助他们创建和编辑CSS。其中一种工具是预处理器,使用预处理器的主要优点之一是可以在样式中使用变量。这消除了复制和粘贴的需要,这使得重构变得更容易。

当使用预处理器变量时,开发人员倾向于用颜色,字体大小,布局细节等来定义它们。这一切都很好,但预处理器变量有一些限制:

  • 不能被JavaScript操纵。预处理器变量在它们到达浏览器之前被提前编译,如CSS属性/值对。

  • 没有意识到DOM或CSSOM。就像上面那样,变量是提前编译的,没有机会去了解这些细节。

  • 不能被继承。在选择器上定义预处理变量并不意味着该选择器的后代也可以使用该变量。

老式的CSS变量

在继续讨论这个话题之前,最好知道CSS有一个准变量,那就是currentColor关键字。这个支持的变量引用了一个元素的当前颜色值。

.block {
color: cornflowerblue;
border: 1px solid currentColor; /*Border color will be the same as font color*/
}

虽然currentColor功能强大,但也有其局限性,包括只接受颜色值。

定义自定义CSS属性

CSS规范的伟大创造者,也就是W3,并没有固有地创建CSS变量。所创建的是自定义属性,它们的定义是:

自定义作者定义属性的集合,统称为自定义属性,它允许作者使用作者选择的名称将属性赋值给属性,以及var()允许作者在其他属性中使用这些值的函数文件中其他地方的属性。

自定义属性就像任何其他的CSS属性,可以在任何元素上定义。他们使用相同的继承和级联,我们都珍视我们的心。他们可以是有条件的,在媒体查询中设置的,以及其他规则。此外,他们可以设置内联和style标签。

CSS自定义属性有两个主要部分:定义它们并阅读它们。

声明一个自定义属性

声明一个自定义的属性,通过启动它的名字–然后赋值给它。

:root {
--bodyColor: cornflowerblue;
}

属性名称区分大小写。所以,–bodyColor和–BodyColor是两个不同的自定义属性。

读取自定义属性

要读取CSS自定义属性,所有必须做的就是使用var函数:

:root {
--linkColor: orange;
}
a {
color: var(--linkColor);
}

上面,我们linkColor在:root伪类上定义了一个自定义属性,然后使用var函数来获取属性的值来设置链接的颜色值。由于我们linkColor在:root伪类上定义了我们可以访问linkColor链接选择器中的变量。但是,看看这个例子:

a {
--linkColor: orange
}
button {
color: var(--linkColor)
}

在上面的例子中,我们linkColor在链接选择器中定义,但是我们试图在按钮选择器中引用它。由于我们linkColor在链接选择器中定义,所以linkColor不会被定义。所以我们最终会得到一个颜色值inherited。

事情要指出的是,与自定义属性,计算值,如果没有找到,要么是initial还是inherited取决于现有的具体属性。

为了解决这种情况,我们的自定义属性可能没有定义,或者在使用时可能没有值,var函数有一个回退参数。

h1 {
color: var(--headingColor, red);
}

在上述情况下,如果headingColor从未定义或给定值,h1则将回退到红色。

不使用JavaScript更改自定义CSS属性

让我们以一个非常简单的例子来说明在hover上更改自定义属性:

button {
color: red;
width: 3em;
--buttonBackground: red;
background-color: var(--buttonBackground);
transition: background-color .2s ease;
}
button:hover {
--buttonBackground: blue;
}

正如你所看到的,悬停按钮重新定义了buttonBackground蓝色的值。

是的,我知道这是一个相当简单的例子,可以没有自定义属性。但是,如果我们一次又一次地改变其他一些属性和价值会发生什么?这种能力使我们能够创造更多可读的代码。我们来看一个更高级的例子。

:root {
--borderRadius: 10px;
}
@media screen and (min-width: 768px) {
--borderRadius: 15px;
}
button {
border-radius: var(--borderRadius);
}

现在,让我们考虑以上。正如你所看到的,我们borderRadius在根中设置了10个像素。然后我们在我们按钮的border-radius 值的值中使用这个自定义属性 。但最酷的是,我们也重新定义了我们的媒体查询中的自定义属性稍大一些。所以如果我们点击768或更大的断点,那么我们的按钮将有一个稍大的边界半径。

使用JavaScript更改自定义CSS属性

现在,自定义属性开始闪耀的是他们与JavaScript一起使用的能力。

在JavaScript中使用CSS自定义属性时,我们需要做的两个主要部分是读取属性并在属性上设置一个新值。

获取自定义属性的价值

要获取内联自定义属性值的值,只需使用以下内容:

element.style.getPropertyValue('--foo');

要从样式表中获取自定义属性值或继承它:

getComputedStyle(element).getPropertyValue('--foo');

我将使用上面的方式来获取值,因为它也适用于内联值,不像第一个被覆盖的值。

设置自定义属性的值

设置自定义属性的值非常简单:

element.style.setProperty('--foo', 1 + 3);

以上将设置foo内联元素的值为4。很简单,对吧?

用一个演示来包装它

我们来看看一个将这一切结合在一起的小例子。

在上面的笔中,您可以在结果视图中看到,如果您将鼠标移动到白色圆点上,将会跟随您的光标。一个简单的演示,显示了我们刚刚在这篇文章中提到的一些事情。我们来分解一下。

我们来看看JavaScript部分:

var rootEl = document.documentElement;
document.addEventListener('mousemove', e => {
let x = e.clientX / innerWidth;
let y = e.clientY / innerHeight;
rootEl.style.setProperty('--mouse-x', x);
rootEl.style.setProperty('--mouse-y', y);
});

我们在这里做的是绑定一个简单的鼠标移动事件到文档。当鼠标移动时,我们将鼠标放在垂直或水平位置,并将该值除以视口的宽度或高度,得到一个从0到1的数字。这将允许我们使用这个数字作为百分比。做完这些计算之后,我们为鼠标x和y设置CSS自定义属性值,如下所示:

做完这些之后,我们现在可以访问我们的CSS中的鼠标位置。这是多么酷?让我们来看看我们在CSS中是如何做到的:

.demo:before {
--ballWidth: 3em;
content: '';
display: block;
position: absolute;
top: calc((100% * var(--mouse-y)) - (var(--ballWidth) * .5));
left: calc((100% * var(--mouse-x)) - (var(--ballWidth) * .5));
height: var(--ballWidth);
width: var(--ballWidth);
background-color: white;
border-radius: var(--ballWidth);
}

正如你在上面的CSS代码片段中看到的,我们引用了我们在JavaScript中设置的鼠标位置属性。我们在这两行中简单地称呼他们:

我们将相应的鼠标位置作为我们想要移动元素的方向,然后乘以100%将我们的数字转换为百分比。所以,随着我们的鼠标移动,我们正在更新鼠标变量,我们的CSS正在为我们移动元素的工作。

最后的想法

CSS自定义属性是一个非常强大的方式,让你调整你的样式表。它们是分离JavaScript行为和样式的一种方式,正如在JavaScript中设置CSS中的信息以用于其样式所示。

即使您为CSS使用预处理器,CSS自定义属性仍然可以直接嵌入到CSS中。原因是自定义属性可以与DOM或CSSOM交互,并且可以与预处理器变量不同地动态更改。

你怎么看?

本文固定链接: http://www.i7758.com/archives/2885.html

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
我78岁风流才子和妙龄少妇同居两年后,她怀孕还发财了

我78岁风流才子和妙龄少妇同居两年后,她怀孕还发财了

叶天辰故事会
2024-04-23 22:26:35
奇瑞背后的大赢家

奇瑞背后的大赢家

蓝鲸财经
2024-04-26 15:30:48
德国防长:俄罗斯武器已堆满仓库!美国利用援乌拨款提高军工产能

德国防长:俄罗斯武器已堆满仓库!美国利用援乌拨款提高军工产能

鹰眼Defence
2024-04-26 18:30:26
多地已出现!有女大学生被抓

多地已出现!有女大学生被抓

家在栖霞
2024-04-26 14:20:59
拉塞尔不忍詹姆斯了 场边玩手机抗议没球权 决定跳出合同离开湖人

拉塞尔不忍詹姆斯了 场边玩手机抗议没球权 决定跳出合同离开湖人

篮球话题团
2024-04-27 01:43:51
众生相!湖人0-3陷入绝境,赛后詹姆斯直接离场,主场观众狂嘘

众生相!湖人0-3陷入绝境,赛后詹姆斯直接离场,主场观众狂嘘

天涯沦落人
2024-04-26 12:45:18
按摩时,足浴技师问你“之前来过么?”可能在暗示你,别不当回事

按摩时,足浴技师问你“之前来过么?”可能在暗示你,别不当回事

毒舌混知所
2024-03-30 07:50:03
被重罚后,周琦摊牌发声,官宣决定,去向曝光,杜锋遗憾

被重罚后,周琦摊牌发声,官宣决定,去向曝光,杜锋遗憾

东球弟
2024-04-26 13:14:31
102岁杨振宁庆祝“瓷婚”,翁帆母亲罕露面!墙上百万名画很抢眼

102岁杨振宁庆祝“瓷婚”,翁帆母亲罕露面!墙上百万名画很抢眼

娱乐团长
2024-04-18 21:00:03
曝拼多多公然违反苹果规定,利用灵动岛向用户推送广告,且不留痕迹

曝拼多多公然违反苹果规定,利用灵动岛向用户推送广告,且不留痕迹

西游日记
2024-04-26 11:11:48
江苏一处长工作时间与女下属开房,被举报8个月无人管,照片流出

江苏一处长工作时间与女下属开房,被举报8个月无人管,照片流出

求实者
2024-04-26 19:14:39
女人在过夫妻性生活时,为什么总发出声音?医生:大多数人不了解

女人在过夫妻性生活时,为什么总发出声音?医生:大多数人不了解

皮皮讲文
2024-01-02 10:36:17
29岁港姐大晒下半身比基尼特写照!网民直呼身材火辣!

29岁港姐大晒下半身比基尼特写照!网民直呼身材火辣!

我爱追港剧
2024-04-26 23:46:56
网友偶遇王心凌,据说本人很矮很瘦,但是非常漂亮!

网友偶遇王心凌,据说本人很矮很瘦,但是非常漂亮!

阿芒娱乐说
2024-04-26 21:34:22
太可怕了,银行快要扛不住了!六大行存款一年多了 14 万亿

太可怕了,银行快要扛不住了!六大行存款一年多了 14 万亿

玉辞心
2024-04-26 19:24:13
欺凌何以至此?长沙初三女生被打事件调查

欺凌何以至此?长沙初三女生被打事件调查

澎湃新闻
2024-04-26 10:00:32
干部阻拦春耕最新进展:让敛钱人被扒出,纪云浩部队照惹质疑

干部阻拦春耕最新进展:让敛钱人被扒出,纪云浩部队照惹质疑

180°视角
2024-04-25 11:07:23
中美谈妥,王毅定下标准,美国不制裁中国银行,俄罗斯如坐针毡

中美谈妥,王毅定下标准,美国不制裁中国银行,俄罗斯如坐针毡

说天说地说实事
2024-04-26 17:02:50
文艺青年布林肯的从政之路

文艺青年布林肯的从政之路

小A看世界
2024-04-26 19:24:25
上门按摩师:假装盲人后,富家母女在我面前展现鲜为人知的一面

上门按摩师:假装盲人后,富家母女在我面前展现鲜为人知的一面

茶馆说书人
2023-09-08 11:46:14
2024-04-27 05:56:49
爱码农
爱码农
专注前端开发,关注用户体验
82文章数 395关注度
往期回顾 全部

科技要闻

车展观察|德系日系绝不能放弃中国市场

头条要闻

官方回应环卫工用电子秤测灰尘:正常作业达标有奖励

头条要闻

官方回应环卫工用电子秤测灰尘:正常作业达标有奖励

体育要闻

哈姆:录像会议上队员们都很生气&沮丧 大家都受够了&想做出改变

娱乐要闻

金靖回应不官宣恋情结婚的原因

财经要闻

贾跃亭,真他娘是个人才

汽车要闻

2024北京车展 比亚迪的自驱力让对手紧追猛赶

态度原创

亲子
本地
艺术
数码
公开课

亲子要闻

台湾性治疗师田雅筑:女生在夫妻生活里恐惧逃避该怎么办?

本地新闻

蛋友碰碰会空降西安!5.1山海境等你!

艺术要闻

画廊周北京迎来第八年, “漂留” 主题聚集 30 余家艺术机构与 40 场展览

数码要闻

小米自带线充电宝 20000mAh 上架:支持 33W 功率,售价 159 元

公开课

睡前进食会让你发胖吗?

无障碍浏览 进入关怀版