CSS Variables

CSS原生变量(CSS自定义属性)

示例地址:https://github.com/ccyinghua/Css-Variables

一、css原生变量的基础用法

变量声明使用两根连词线"--"表示变量,"$color"是属于Sass的语法,"@color"是属于Less的语法,为避免冲突css原生变量使用

"--"

// 声明变量
--color:#000;// 读取变量
var(--color)

注:
1、变量声明不能包含$,[,^,(,%等字符,普通字符局限在只要是“数字[0-9]”“字母[a-zA-Z]”“下划线_”和“短横线-”这些组合,但是可以是中文,日文或者韩文 
2、变量的值可以是颜色、字符串、多个值的组合等

示例:

<h3>css variables基础使用</h3>
<div class="btn_box"><button type="button" class="login_btn">登录</button>
</div>
/* css variables基础使用 */
:root{--content1:"abc";--content2:"efg";--width:calc(100px   200px);--btn-bg:#279cff;--字体:18px;
}
.btn_box:before{content:var(--content1)' with add';display:block;line-height: 50px;
}
.btn_box:after{content:var(--content1)','var(--content2);display:block;line-height: 50px;
}
.login_btn{width:var(--width);height:50px;border-radius:30px;border:0;background: var(--btn-bg);box-shadow: 0 5px 5px rgba(39,156,255,.42);text-align: center;font-size:var(--字体);line-height: 50px;color:#fff;cursor:pointer;outline:none;
}

 

二、作用域

1、变量是遵循CSS语法的优先级高低的 

Id > class > 标签 > *

2、注意并无!important这种用法;
3、如果变量所在的选择器和使用变量的元素没有交集,是没有效果的。

<div>蓝色</div>
<div class="divbox">绿色</div>
<div class="divbox" id="alert">红色</div>
:root { --color: blue; }
.divbox { --color: green; }
#alert { --color: red; }
div{color: var(--color);width:300px;line-height: 50px;text-align: center;
}

三、响应式

div {--color: #7F583F;--bg: #F7EFD2;
}.mediabox {color: var(--color);background: var(--bg);
}@media screen and (min-width: 768px) {body {--color:  #F7EFD2;--bg: #7F583F;}
}

四、注意事项

1、属性名(例:width/height/margin....等)不可以走变量

.divbox {--side: margin-top;/* 无效 */var(--side): 20px;
}

2、var()的完整的写法是"var(<自定义属性名> [, <默认值 ]?)",在变量的名字后面可以有一个默认值,如果引用的变量没有定义(注意,仅限于没有定义),则使用后面的值作为元素的属性值

body {background:var(--bg,skyblue);
}

3、如果变量值是不合法的,例如下面设置背景色background只能是色值而不能是像素,则使用背景色属性的默认值代替。

body {--bg: 20px;background-color: #369;background-color: var(--bg, #cd0000);
}

等同于

body {--bg: 20px;background-color: #369;background-color: transparent;
}

4、CSS变量设置数值

(1)

h3 {--size: 30;   font-size: var(--size)px;
}

结果h3元素的字体大小就是本身的默认大小 

(2)

h3 {--size: 30px;   font-size: var(--size);
}等于
h3 {font-size:30px;
}

(3)使用CSS3 calc()计算:

h3 {--size: 30;   font-size: calc(var(--size) * 1px);
}
等于
h3 {font-size:30px;
}

5、如果变量值带有单位,就不能写成字符串。

/* 无效 */
.divbox {--size: '30px';font-size: var(--size);
}/* 有效 */
.divbox {--size: 30px;font-size: var(--size);
}

6、进行calc()运算时,最好能提供默认值: calc(var(--base-line-height, 0) * 1rem)

7、不能作为媒体查询值使用:

@media screen and (min-width: var(--desktop-breakpoint) {})

8、图片地址,如url(var(--image-url)) ,不会生效

五、兼容性处理

检测浏览器是否支持CSS自定义属性的方法。

/*css*/@supports ( (--a: 0)) {/* supported */
}@supports ( not (--a: 0)) {/* not supported */
}
// Jsif (window.CSS && window.CSS.supports && window.CSS.supports('--a', 0)) {alert('CSS properties are supported');
} else {alert('CSS properties are NOT supported');
}

六、JS操作变量

CSS 变量可以和 JS 互相交互

:root{--testMargin:75px;
}
//  读取
var root = getComputedStyle(document.documentElement);
var cssVariable1 = root.getPropertyValue('--testMargin').trim();
console.log(cssVariable1); // '75px'// 写入
document.documentElement.style.setProperty('--testMargin', '100px');
var cssVariable2 = root.getPropertyValue('--testMargin').trim();
console.log(cssVariable2);  // '100px'// 删除
document.documentElement.style.removeProperty('--testMargin');
var cssVariable3 = root.getPropertyValue('--testMargin').trim();
console.log(cssVariable3); // '75px'

javascript可以把任意值存入css变量,可以读取变量的值,实现javascript与css的通信。

七、CSS variables与预处理器的不同

1、预处理器变量不是实时的

$color:#7F583F;@media screen and (min-width: 768px) {$color: #F7EFD2;
}.mediabox {background: $color;
}

编译结果

.mediabox {background: #7F583F; 
}

2、预处理器不能限定作用域

$zcolor:blue;
.ulbox {$zcolor:red;
}
ul{color: $zcolor;
}

编译为

ul {color: blue; 
}

3、预处理器变量不可互操作

原生的CSS自定义属性可以与任何CSS预处理器或纯CSS文件一起使用。

4、总结

  • 相较于传统的 LESS 、SASS 等预处理器变量,CSS 变量的优点在于:
  • CSS 变量的动态性,能在页面运行时更改,而传统预处理器变量编译后无法更改
  • CSS 变量能够继承,能够组合使用,具有作用域
  • 配合 Javascript 使用,可以方便的从 JS 中读/写

八、CSS原生变量的兼容性

https://caniuse.com/#search=css var

 

本文转载于:猿2048➨https://www.mk2048.com/blog/blog.php?id=ha2b1icb&title=CSS Variables

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【基础中的基础】引用类型和值类型,以及引用传递和值传递

一直在博客园怼人&#xff0c;非常惭愧。所以郑重决定&#xff1a; 好好写一篇干货&#xff0c;然后再接着怼人。 这是一起帮上陈百万同学的求助&#xff0c;讲了一会之后&#xff0c;我觉得很有些普世价值&#xff0c;干脆就发到园子来。面向小白&#xff0c;高手轻拍。 我们从…

Java 7:使用NIO.2进行文件过滤–第3部分

大家好。 这是使用NIO.2系列进行文件过滤的第3部分。 对于那些尚未阅读第1 部分或第2部分的人 &#xff0c;这里有个回顾。 NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API&#xff0c;您可以执行与java.io相同的操作&#xff0c;以及许多出色的功能&#xf…

python众数问题给定含有n个元素的多重集合s_分治法求众数 给定含有n个元素的多重集合S 联合开发网 - pudn.com...

分治法求众数所属分类&#xff1a;数据结构开发工具&#xff1a;C/C文件大小&#xff1a;240KB下载次数&#xff1a;3上传日期&#xff1a;2018-01-04 20:19:09上 传 者&#xff1a;九鼎说明&#xff1a; 给定含有n个元素的多重集合S&#xff0c;每个元素在S中出现的次数称为该…

mysql 5.0 乱码,解决MySQL 5.0.16的乱码问题

导读&#xff1a;问&#xff1a;怎样解决MySQL 5.0.16的乱码问题?答&#xff1a;MySQL 5.0.16的乱码问题可以用下面的方法解决&#xff1a;1.设置phpMyAdminLanguage:Chinese simplified (zh-utf-8)MySQL 字符集&#xff1a;UTF-8 Unicode (utf8)MySQL 连接校对 gbk_chinese_c…

Hadoop Serialization -- hadoop序列化具体解释 (2)【Text,BytesWritable,NullWritable】

回想&#xff1a;回想序列化&#xff0c;事实上原书的结构非常清晰&#xff0c;我截图给出书中的章节结构&#xff1a;序列化最基本的&#xff0c;最底层的是实现writable接口&#xff0c;wiritable规定读和写的游戏规则 &#xff08;void write(DataOutput out) throws IOExce…

我需要多少个线程?

这取决于您的应用程序。 但是对于那些希望对如何从生产站点购买的所有昂贵内核中挤出更多资金的人来说&#xff0c;请多多包涵&#xff0c;我将阐明围绕多线程 Java应用程序的奥秘。 内容针对最典型的Java EE应用程序进行了“优化”&#xff0c;该应用程序具有Web前端&#xff…

H5网页适配 iPhoneX,就是这么简单

iPhoneX 取消了物理按键&#xff0c;改成底部小黑条&#xff0c;这一改动导致网页出现了比较尴尬的屏幕适配问题。对于网页而言&#xff0c;顶部&#xff08;刘海部位&#xff09;的适配问题浏览器已经做了处理&#xff0c;所以我们只需要关注底部与小黑条的适配问题即可&#…

python为什么closed_为什么python类的函数被调用两次[关闭](Why a function of python class is called twice [closed])...

为什么python类的函数被调用两次[关闭](Why a function of python class is called twice [closed])我遇到了两次调用的python类函数的问题。 我正在使用Spyder IDE。这是我的简单代码class Test:def f(self):print("a")from Test import *t Test()t.f()当我按“运行…

php关联数组和哈希表,php遍历哈希表及关联数组的实例代码

有关php数组的分类&#xff0c;PHP数组分为&#xff1a;数字索引数组和关联数组。其中数字索引数组和C语言中的数组一样&#xff0c;下标是为0&#xff0c;1&#xff0c;2…而关联数组下标可能是任意类型&#xff0c;与其它语言中的hash&#xff0c;map等结构相似。PHP遍历关联…

数字校园-云资源平台 2014.10.26-人人通共享空间

近期,教育部在统计学校信息化建设情况,当中一项重要内容,作为三通两平台的一个环节,就是学校开通人人通空间的情况,网上普及了一下知识,不就是十多年前就玩的学校博客的变种吗,网上有一些产品,也是没有热闹起来,为要求而要求的多,既然要求,就来一个吧,花了几天时间,也做了一个.…

VUE.js 中取得后台原生HTML字符串 原样显示问题

今天使用vue调试页面&#xff0c;发现了页面上的一个问题&#xff0c;后台数据传过来的HTML字符串并没有被转换为正常的HTML代码&#xff0c;一拍脑门&#xff0c;发现忘记转换了&#xff0c;于是满心欢喜加上了{{{}}}。但是之后构建发现报错&#xff1a; 为此去官网上查了下…

高性能持久消息

总览 尽管有许多可用于Java的高性能消息传递系统&#xff0c;但大多数都避免引用基准&#xff0c;包括持久消息传递和消息的序列化/反序列化。 这样做有很多原因。 1&#xff09;您并不总是需要或想要持久消息2&#xff09;您希望使用自己的序列化选项。 避免使用它们的一个重要…

python去掉重复内容并按原来次序输出元素_在Python中,从列表中删除重复项以使所有元素在保留顺序时都是唯一的最快的算法是什么?...

饮歌长啸使用方法&#xff1a;lst [8, 8, 9, 9, 7, 15, 15, 2, 20, 13, 2, 24, 6, 11, 7, 12, 4, 10, 18, 13, 23, 11, 3, 11, 12, 10, 4, 5, 4, 22, 6, 3, 19, 14, 21, 11, 1, 5, 14, 8, 0, 1, 16, 5, 10, 13, 17, 1, 16, 17, 12, 6, 10, 0, 3, 9, 9, 3, 7, 7, 6, 6, 7, 5, 1…

Lucene –快速添加索引和搜索功能

什么是Lucene&#xff1f; Apache LuceneTM是完全用Java编写的高性能&#xff0c;功能齐全的文本搜索引擎库。 它是一项适用于几乎所有需要全文搜索的应用程序的技术&#xff0c;尤其是跨平台的应用程序。 Lucene可以纯文本&#xff0c;整数&#xff0c;索引PDF&#xff0c;Of…

td 双击 编辑 php,双击表格td进行编辑

$(function(){//隔行换色// $("tbody tr:odd").css("background-color","#eee");var numId $(".tbody td");numId.dblclick(function(){var tdIns $(this);var tdpar $(this).parents("tr");//tdpar.remove();//current_…

前端开发之基础知识-HTML(一)

1.1 html概述和基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写&#xff0c;意思是超文本标记语言&#xff0c;超文本指的是超链接&#xff0c;标记指的是标签&#xff0c;是一种用来制作网页的语言&#xff0c;这种语言由一个个的标签组成&#xff0c;用…

nodejs的async异步编程

函数有&#xff1a; series waterfall parallel parallelLimit … series函数 串行执行 它的作用就是按照顺序一次执行。 async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); } },function(err, results) { conso…

《深入理解Java虚拟机》读书笔记3--垃圾回收算法

转载&#xff1a;http://blog.csdn.net/tjiyu/article/details/53983064 下面先来了解Java虚拟机垃圾回收的几种常见算法&#xff1a;标记-清除算法、复制算法、标记-整理算法、分代收集算法、火车算法&#xff0c;介绍它们的算法思路&#xff0c;有什么优点和缺点&#xff0c;…

python常用函数中文_【python】python常用函数

urlencode与urldecode当url中包含中文或者参数包含中文&#xff0c;需要对中文或者特殊字符(/、&)做编码转换。urlencode的本质&#xff1a;把字符串转为gbk编码&#xff0c;再把\x替换成%。如果终端是utf8编码的&#xff0c;需要把结果再转成utf8输出&#xff0c;否则会乱…

带有批注的Spring硒测试

这篇文章描述了如何在Java中实现Selenium测试。 它的灵感来自Alex Collins的帖子&#xff0c;并带有注释。 该代码可在GitHub的Spring-Selenium-Test目录中找到。 一些替代方法和更轻巧的技术可用于对Spring MVC应用程序进行单元测试。 要进行单元测试服务&#xff0c;请参见此…