初步认识css自定义属性

所属分类: 网页制作 / CSS 阅读数: 1297
收藏 0 赞 0 分享

今天,CSS预处理器是Web开发的标准。 预处理器的一个主要优点是它们使您能够使用变量, 这有助于您避免复制和粘贴代码,并简化了开发和重构。

在本文中,您将了解到如何将CSS变量集成到CSS开发工作流程中,这会使得样式表更易于维护和不重复性。

现在,让我开始吧!

1* css变量的语法

<1> 什么是css变量?

如果您使用过任何一种编程语言,那么您应该已经熟悉了变量的概念。 变量允许您存储和更新程序所需的值以便工作。

在CSS中使用变量的好处与在编程语言中使用变量的好处并没有太大的不同。

以下是规范对此的说法:

[Using CSS variables] makes it easier to read large files, as seemingly-arbitrary values now have informative names, and makes editing such files much easier and less error-prone, as one only has to change the value once, in the custom property, and the change will propagate to all uses of that variable automatically.

W3C Specification .

[使用CSS变量]可以更容易地读取大文件,因为看似任意的值现在具有信息性名称,并且使得编辑此类文件更容易且更不容易出错,因为只需要在自定义属性中更改一次值 ,这种更改将自动传播到所有使用该变量的地方。

<2>css自定义变量语法

要声明变量而不是常用的CSS属性(如颜色或填充),只需提供以 - - 开头的自定义命名属性:

.box{
  --box-color: #4d4e53;
  --box-padding: 0 10px;
}

属性的值可以是任何有效的CSS值:颜色,字符串,布局值,甚至是表达式。

以下是一些有用的自定义属性:

:root{
  --main-color: #4d4e53;
  --main-bg: rgb(255, 255, 255);
  --logo-border-color: rebeccapurple;
  --header-height: 68px;
  --content-padding: 10px 20px;
  --base-line-height: 1.428571429;
  --transition-duration: .35s;
  --external-link: "external link";
  --margin-top: calc(2vh + 20px);
  /* Valid CSS custom properties can be reused later in, say, JavaScript. */
  --foo: if(x > 5) this.width = 10;
}

如果您不确定 :root,在HTML中它与html相同但具有更高的特异性,相当于全局变量。

<3> css变量的使用

var() 函数

您要通过 var() 这个 css 函数来使用 css 变量,将 css 变量名传入这个函数:

.box{
  --box-color:#4d4e53;
  --box-padding: 0 10px;

  padding: var(--box-padding);
}

.box div{
  color: var(--box-color);
}

var() 函数的语法是:
 

var( <custom-property-name> [, <declaration-value> ]? )

方法的第一个参数是要替换的自定义属性的名称。函数的可选第二个参数用作回退值。如果第一个参数引用的自定义属性无效,则该函数将使用第二个值。

如果您不确定是否已定义自定义属性并且想要提供用作回退的值,则可以执行此操作。

例如:

color: var(--foo, red, blue); //将red, blue同时指定为回退值;即是说任何在第一个逗号之后到函数结尾前的值都会被考虑为回退值。

padding: var(--box-padding, var(--main-padding));

calc()函数

由于我们习惯使用预处理器和其他语言,我们希望在处理变量时能够使用基本运算符。 为此,CSS提供了一个calc()函数,它使浏览器在对自定义属性的值进行任何更改后重新计算表达式:

:root{
  --indent-size: 10px;

  --indent-xl: calc(2*var(--indent-size));
  --indent-l: calc(var(--indent-size) + 2px);
  --indent-s: calc(var(--indent-size) - 2px);
  --indent-xs: calc(var(--indent-size)/2);
}

如果您尝试使用无单位值,则使用calc()函数可以带来很大的方便:

:root{
  --spacer: 10;
}
.box{
  padding: var(--spacer)px 0; /* DOESN'T work */
  padding: calc(var(--spacer)*1px) 0; /* WORKS */
}

css自定义属性的scop

自定义属性也遵守CSS层叠规则。
 

2* 利用js使用css自定义属性

假设您有一个名为 --left-pos 的 CSS 变量,其值为 100px,范围为 CSS 文档中的 .sidebar 类:

.sidebar {
--left-pos: 100px;
}

可以通过如下方式获取 --left-pos 的值:

const sidebarElement = document.querySelector('.sidebar');
const cssStyles = getComputedStyle(sidebarElement);
const cssVal = String(cssStyles.getPropertyValue('--left-pos')).trim();
console.log(cssVal); //100px

设置css属性值:

sidebarElement.style.setProperty('--left-pos', '200px');

3* css 变量和预处理变量有什么不同?

在样式化网站时,您可能通过使用Sass和Less等预处理器来使得变量的更具有灵活性。

预处理器允许您设置变量,并在函数,循环,数学运算等中使用它们。这是否意味着CSS变量无关紧要?

不完全是,主要是因为CSS变量与预处理器变量不同。

差异源于CSS变量是在浏览器中运行的真正的CSS属性,而预处理器变量需要被编译成常规CSS代码,因此浏览器对它们一无所知。

这意味着您可以更新样式表文档中的CSS变量,内联样式属性和SVG表示属性,或者选择使用JavaScript 动态 操作它们。对于 CSS 自定义属性的修改,会立马传递到使用到他的地方,而预处理器则无法完成这种行为,因为他们是提前已经编译好了的!

这并不是说你需要在一个或另一个之间做出选择:没有什么能阻止你利用CSS和预处理器变量一起工作的超能力。

以上所述是小编给大家介绍的初步认识css自定义属性,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

CSS配合JavaScript做酷的动态页面效果

  利用CSS配合JavaScript的可以做很多更酷的动态页面效果,在本教程的最后给大家简单介绍一下CSS配合JS的应用。首先,要搞清楚事件和动作的概念。在客户端脚本中,JavaScript 通过对事件进行响应来获得与用户的交互。例如,当用户单击一个按钮或者在某段文字上移动鼠标
收藏 0 赞 0 分享

WEB标准,Web前端开发工程师必备技术列表

  想要打造并拥有一流的Web产品开发团队,在团队成员基础能力上一定要下功夫。对于Web前端产品开发来说,仅仅掌握Web1.0时代简单的"网页套接"是完全不够的。我结合自己的团队配备,特此罗列了Web前端产品工程师所涉及的技能列表如下:   通过许多实际项目,
收藏 0 赞 0 分享

用CSS制作Alpha滤镜测试板

alpha滤镜给制作网页特效提供了较大的创作空间,但由于它控制参数较多,在实际应用时,为了确定一组合适的参数值,不得不反复调整修改,在编辑窗口和预览窗口来回倒腾,甚是麻烦,本文介绍了一种简单的方法。制作一个“Alpha滤镜参数测试板”,在测试板上输入参数
收藏 0 赞 0 分享

非常流行的所谓的气泡窗口

普通的Alt无法自定义风格,而Sweet Titles通过JS脚本与CSS的集合.自定义了这种伪Alt风格. 前一段时间非常流行的,就所谓的气泡窗口(鼠标移到链接处出现的). 我们这里实现的用的是Sweet Titles的插件.显示效果完全由CSS控制.. 先下载Sweet Ti
收藏 0 赞 0 分享

CSS教程:li和ul标签用法举例

LI代码的格式化: A).运用CSS格式化列表符: ul li{ list-style-type:none; } B).如果你想将列表符换成图像,则: ul li{ list-style-type:none; list-style-image: url(/blog/images/
收藏 0 赞 0 分享

CSS教程:CSS中的定位(position)

  使用CSS来定位页面内层的位置,一直是比较难以掌握的事情,很多时候,往往被绝对定位的元素,总是以浏览器的左上角为坐标原点,此时,如果浏览器的大小改变,被定义的层就会偏离设计想要的位置,让人很挠头。   其实,要想控制好层的绝对定位,只要理解CSS中关于定位
收藏 0 赞 0 分享

CSS教程:盒模型(BOX Model)

  如果想熟练掌握DIV和CSS的布局方法,首先要对盒模型有足够的了解。每个HTML元素都可以看作一个装了东西的盒子,盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框外和其他盒子之间,还有边界(margin),如图1所示。
收藏 0 赞 0 分享

无延迟翻滚的图形与CSS混合风格按钮

  在一个具有图形背景的按钮中添加CSS风格的文本,这种建立按钮的方法结合了具有CSS翻滚(CSS rollover)标记的开发速度和效率,从而有效地提高按钮外表图像的三维效果。   相比于常规的图形按钮,这些图形/CSS混合按钮可易于建立和载入,因为你只需要为空白按钮外面
收藏 0 赞 0 分享

css里expression实现界面对象的批量控制

用过css样式我们就知道, 可以定义一批对象的class属性来指定同一个样式来统一界面. 但如何统一同类型的对象的事件? 比如:界面有无数个 <img src="**.jpg"> 如何实现鼠标经过此图片, 图片的src变成是**_over.jpg?
收藏 0 赞 0 分享

CSS教程:水平对齐(text-align)

  水平对齐(text-align),用以设定元素内文本的水平对齐方式。   1.语法   text-align具体参数如下: 语法:text-align:left|right|center|justify 说明:设定元素内文本的水平对齐方式。 参数:left:左
收藏 0 赞 0 分享
查看更多