CSS自定义属性:引入 | 使用var() | cal()计算 | css 与 js 的连接

简介: 自定义属性,是一种开发者可以自主命名和使用的CSS属性。浏览器在处理像 color 、position 这样的属性时,需要接收特定的属性值,而自定义属性,在开发者赋予它属性值之前,它是没有意义的。所以要怎么给 CSS 自定义属性赋值呢?

引入
自定义属性,是一种开发者可以自主命名和使用的CSS属性。浏览器在处理像 color 、position 这样的属性时,需要接收特定的属性值,而自定义属性,在开发者赋予它属性值之前,它是没有意义的。所以要怎么给 CSS 自定义属性赋值呢?这倒和习惯无异:
.foo {

color: red;
--theme-color:gray;

}
复制代码
自定义元素的定义由 -- 开头,这样浏览器能够区分自定义属性和原生属性,
假如只是定义了一个自定义元素和它的属性值,浏览器是不会做出反应的。如上面的代码, .foo 的字体颜色由 color 决定,但 --theme-color 对 .foo 没有作用。
可以用 CSS 自定义元素存储任意有效的 CSS 属性值:
.foo {

--theme-color:blue;
--spacer-width: 8px;
--favorite-number: 3;
--greeting: "How are you";
--reusable-shadow: 0 3px 1px -2px rgba(0,0,0,0.85);

}
复制代码
使用
使用 var() 方法实现:
.button {

background-color: var(--theme-color);

}
复制代码
这段代码中,我们把.button的background-color属性赋值为 --theme-color的值。
同时,这个--theme-color能用在任意选择器和属性上:
.button {

background-color: var(--theme-color);

}
p {

color: var(--theme-color);

}
.title > .p {

border-color: var(--theme-color);

}
复制代码

缺省值

如果开发者并没有定义过 --theme-color 这个变量呢?var()可以接收第二个参数作为缺省值:
.button {

background-color: var(--theme-color,gray);

}
复制代码
或者把另一个自定义属性作为缺省值:
.button {

background-color: var(--theme-color,var(--default-bg-color));

}
复制代码
传参数时总是传入一个缺省值是一个好习惯,特别是在构建 web components 的时候。为了让你的页面在不支持自定义属性的浏览器上正常显示,别忘了加上兼容代码:
.button {

background-color:gray;//兼容性处理
background-color: var(--theme-color,gray);

}
复制代码
作用域和级联
自定义属性遵从标准的作用域和级联规则,开发者按照平时使用的习惯来就可以了!
你可能希望将 --theme-color 设置为全局变量,处处可用。最简单的方法是使用 :root 伪元素:
:root {

--theme-color: gray;

}
复制代码
这样,整个document,都可以使用--theme-color。
但当你希望不同的模块使用不同的 --theme-color 值怎么办呢?

只需要在模块的作用域中给属性重新赋值,新的颜色就会分模块生效,而不需要开发者一个个重置使用到 --theme-color 的属性。

section.about {

--theme-color: darkblue;

}
section.contacts {

--theme-color: darkred;//重新赋值

}
section.news {

--theme-color: yellow;

}
复制代码
CSS计算
calc() 函数常常被用于跨单位的计算:
.child {

width: calc(100% - 16px)

}
复制代码
事实上这个计算是在浏览器运行时进行的,浏览器会将 calc()的计算结果以像素单位呈现在屏幕上。

calc() 与 CSS 自定义属性结合

:root {

--base-size: 4px;
--title-multiplier: 5;
--body-multiplier: 3;

}
.title {

text-size: calc(var(--title-multiplier) * var(--base-size))

}
.body {

text-size: calc(var(--body-multiplier)* var(--base-size));

}
复制代码
CSS 与 javascript之间的桥梁

自定义属性和 Sass、Less 或者 PostCSS 这些处理器语言一个非常重要的不同点在于:浏览器是可以解析自定义属性的。这就意味着开发者可以动态改变自定义属性的值。这是 CSS 迈出的一大步。

就和平时用 JS 操作元素任意的属性一般,自定义属性也可以通过 getPropertyValue 和 setProperty 方法操作 :
const styles = getComputedStle(document.querySelector('.foo'));

const oldColor = styles.getPropertyValue('--color').trim();
foo.style.setProperty('--color','green');
复制代码
属性值一旦被改变,所有与这个自定义属性相关的 CSS 属性也都会发生改变,。这样就能轻松实现批量修改元素的属性值。

相关文章
|
2月前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
1月前
|
JavaScript 前端开发
|
9天前
|
JavaScript 前端开发
页面滚动触发css3动画js插件
delighters.js是一款页面滚动触发css3动画js插件。该js插件可以在页面向下滚动时,为进入浏览器视口的元素制作各种炫酷的CSS3动画效果。
38 13
|
18天前
纸屑飘落生日蛋糕场景js+css3动画特效
纸屑飘落生日蛋糕CSS3动画特效是一款js+css3制作的全屏纸屑飘落,生日蛋糕点亮庆祝动画特效。
35 3
|
1月前
|
前端开发 JavaScript
用HTML CSS JS打造企业级官网 —— 源码直接可用
必看!用HTML+CSS+JS打造企业级官网-源码直接可用,文章代码仅用于学习,禁止用于商业
142 1
|
1月前
|
前端开发
CSS权重计算
【10月更文挑战第28天】CSS权重计算是CSS样式应用中的一个重要概念,了解和掌握权重计算规则有助于更好地控制页面的样式表现,避免样式冲突和意外的显示效果,从而提高网页开发的效率和质量。
|
1月前
|
前端开发 JavaScript 安全
HTML+CSS+JS密码灯登录表单
通过结合使用HTML、CSS和JavaScript,我们创建了一个带有密码强度指示器的登录表单。这不仅提高了用户体验,还帮助用户创建更安全的密码。希望本文的详细介绍和代码示例能帮助您在实际项目中实现类似功能,提升网站的安全性和用户友好性。
48 3
|
1月前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
117 6
|
1月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
20 0
|
2月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
84 4

热门文章

最新文章