css中的变量和辅助函数

news2024/9/23 5:19:47

变量

--name  两个破折号加变量名称(可以在当前的选择器内定义)var(--*)

命名规则

body {
    --深蓝: #369;
    background-color: var(--深蓝);
}

变量值只能做用属性值,不能用做属性名。变量命名不能包含 $,[,^,(,% 等字符 普通字符局限在只要是数字[0-9]/字母[a-zA-Z]/_/-这些组合。 还能够是中文,日文或者韩文; 变量名大小写敏感, --blue 和 --Blue 是两个不一样变量。

使用语法

var(--name, [value1] )

第一个参数:引用的变量名称

第二个参数:回退值,表示如果第一个参数未定义,使用回退值代替

js控制css变量

获取css变量:getPropertyValue('--name')

设置css变量:setProperty('--name', value)

let dom = document.getElementById("header");
// 获取css变量
let color = dom.getPropertyValue("--bgColor").trim();
// 设置css变量
dom.setProperty("--bgColor", '#f34e25');

函数

通常带 () 的都是函数表达

属性函数(慎用,用在伪元素):attr()

attr(attrName, [ type, defaultValue]) - 第一个参数是html标签的属性名称;第二个参数是属性值的单位类型(例如string(默认)、number,但因为很多目前都处于试验阶段,因此基本都是string字符串类型);第三个参数是默认值

理论上能用于所有的 CSS 属性但目前支持的仅有伪元素的 content 属性,其他的属性和高级特性目前是实验性的

<div class="main" bgColor="#ffffff" data-width="100px"></div>
 
<style>
.main {
  background: attr(bgColor);
  width: attr(data-width);
}
</style>

兼容性也很是的好,IE8+都是能够完美支持这个属性的 

值处理函数:calc()

calc(表达式) - 表达式支持加、减、乘、除,可以使用不同维度的值计算

width: calc(2em + 16vh)

值处理函数:min、max、clamp 

min(val1... valN):接受任意数量的参数,每个参数也可以是表达式。取出参数中最小的值。

max(val1...valN):同上,取最大的值。

clamp(minVal, defaultVal, maxVal):3个参数,分别是最小值,首选值,最大值。相当于将最终取值限制在一个范围内。

以上3个函数都具有响应式的功能,可以将不同维度的值用来比较

div {
    width: min(10px, 8vh, 2em);
    height: max(120px, 50vh);
    max-height: clamp(20px, 50px, 100px);
}

滤镜函数:filer()

filter: grayscale(1); 灰色效果--网站哀悼主题色就是用它,一行代码搞定

filter: blur(5px); 毛玻璃效果

等等

// css 版的 ps
img {
    -webkit-filter: blur(5px); /* Chrome, Safari, Opera */
    filter: blur(5px);
}

计数函数:counter()

<div class="box">
    <p>选择你想要吃的水果</p>
    <input type="checkbox" value="苹果"/>苹果
    <input type="checkbox" value="橘子"/>橘子
    <input type="checkbox" value="柠檬"/>柠檬
    <p>你一共选择了<span class="total"></span>种水果</p>
</div>


.box {
    counter-reset: characters;
}
input:checked {
    counter-increment: characters
}
.total {
    position: relative;
    padding-right: 10px;
}
.total:after {
    position: absolute;
    content: counter(characters);
}

颜色函数:rgb()、rgba()

rgb(redValue, greenValue, blueValue)
接受3个参数,分别代表红、绿、蓝的色值。取值范围在0~255之间

rgba(redValue, greenValue, blueValue, opacity)
接受4个参数,前三个与rgb的参数一致;最后一个参数是透明度,取值范围在0~1之间。

 伪类选择器函数

:where()函数是一个高级的伪类选择器,他的作用是将一系列的选择器列表,都应用相同的样式,简化多个选择器样式编码的流程。

:where(class1,...classN) { css样式 }- 接受n个参数,参数值为选择器(任意的css选择器)

可以把:where选择当成普通的选择器一样,和其他选择器组合使用,比如放在中间、开头、或者结尾。

// 传统方式
.main span {
    font-size: 12px;
}
.line span {
    font-size: 12px;
}

// 如果有大量样式相同,选择:where函数选择器
:where(.main, .line) span {
    font-size: 12px;
}
 
// 组合使用
div :where(.main, .line) span {
    font-size: 12px;
}

:is()函数与:where()函数选择器用法一致。

:is()函数与:where()函数的区别

优先级不同。:where()函数选择器的优先级总是为0(即使他的样式代码在最下面)

而:is()函数选择器的优先级取决于他的参数选择器列表中最高的选择器

li {
    list-type-style: none;
}
 
:where(li) {
    list-type-style: circle;
}
// 以上代码,li标签的样式仍为none,设置了li选择器的样式,:where()函数选择器的样式优先级最低

.main span {
    font-size: 12px;
}
 
:is(.main) span {
    font-size: 13px;
}
 
span {
    font-size: 14px;
}
 
:where(.main) span {
    font-size: 15px;
}
// 以上代码,由于都设置了span选择器的font-size样式,
// :where()优先级最低;其次是span选择器;
// 第一个选择器和:is()函数选择器的优先级都是.main span,因此他们优先级一致,但是因为is()函数在下面,因此font-size为13px。

E:not(exception):该选择器将选择与括号内的选择器不匹配的元素

:not(:placeholder-shown) 选择器表示输入框不显示占位符文本,即输入框有值

p:not(.info) 匹配所有class值不为info的p元素

:has()函数可以通过后面及里面的元素确定前面或外面的元素的CSS样式

:has 选择可以根据一个相对选择器来选中某个元素,如

  • div:has(p) 表示当 div 中有 p 时,选中 div
  • div:has(>p) 表示当 div 有子元素 p 时,选中 div
  • div:has(+p) 表示当 div 后面紧跟一个 p 时,选中 div
  • div:has(~p) 表示当 div 后续有 p 类型兄弟元素时,选中 div

注意上面的三个选择器都可以不使用 div 而直接使用 :has()

  • :has(p) 选中任何一个内部有 p 的元素
  • :has(>p) 选中任何一个有 p 子结点的元素
  • :has(+p) 选中任何一个后面紧跟 p 的元素
  • :has(~p) 选中任何一个后续 p 兄弟的元素

伪类

:placeholder-shown:选择器表示输入框显示占位符文本,即输入框无值

:valid和:invalid 伪类。这两个伪类通常用于表单验证,但也可以用于检测输入是否有值

:selection:匹配选中的文本

:empty:没有子元素的元素,没有子元素包括文本节点

:in-range:应用于具有范围限制的元素,其中该值位于限制内;比如具有min和max属性的number和range输入框

:out-of-range:与:in-range选择相反,其中该值在限制范围外

:required:应用于具有必填属性required的表单控件

:optional:应用于没有必填属性required的所有表单控件

:read-only:应用于其内容无法供用户修改的元素

:read-write:应用于其内容可供用户修改的元素,比如输入框

:target:该选择器定位当前活动页面内定位点的目标元素:

#info:target {font-size:24px;} //当访问的URL网址为 123.html#info 时,id="info"将加载这个字体样式

优先级表格

selector specificity

特异性是浏览器表示一个 css selector 和其元素的相关性。相关性越强, 即表示表示其权重最高。

特异性基于匹配规则,这些规则由不同类型的 CSS 选择器组成。

Selector Type

根据 W3 标准中的规定, css selector 分为 4 种 type: a, b, c, d. 他们的数目计算规则为:

  • a: 如果 css 属性声明是写在 style=“” 中的, 则数目为 1, 否则为 0

  • b: id 选择器的数量

  • c: class 选择器, 属性选择器(如 type=“text”), 伪类选择器(如: ::hover) 的数量

  • d: 标签名(如: pdiv), 伪类 (如: :before)的数量

在比较不同 css selector 的权重时, 按照 a => b => c => d 的顺序进行比较.

由第一个 selector type a 的计算规则可知: 写在 html 代码 style 属性中的 css 相较写在 css 选择器中的 css 属性具有最高的优先级.

而 id selector (b) 相较 class selector (c) 有更高的优先级. 这也和我们平时的经验相吻合。

重复同样的 css selectory type, 权重会增加!

 .testClass.testClass 高于 .testClass

!important(慎用)

按照 MDN的说法, !important 是不在 css 选择器的权重计算范围内的, 而它之所以能让 css 选择器生效是因为浏览器在遇见 !important 时会进行特殊的判断. 当多个 !important 需要进行比较时, 才会计算其权重再进行比较。

不提倡使用 !important

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

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

相关文章

如何快速编写高效的测试用例? -5个建议让你的测试更准确、更全面

逛知乎的时候&#xff0c;经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 固然&#xff0c;编写一份好的测试用例需要&#xff1a;充分的需求分析能力理论及经验加持。 但这并不意味着…

【每日论文阅读】Do Perceptually Aligned Gradients Imply Robustness?

近似人眼梯度 https://icml.cc/virtual/2023/oral/25482 对抗性鲁棒分类器具有非鲁棒模型所没有的特征——感知对齐梯度&#xff08;PAG&#xff09;。它们相对于输入的梯度与人类的感知非常一致。一些研究已将 PAG 确定为稳健训练的副产品&#xff0c;但没有一篇研究将其视为…

windows同时安装mysql5.0和8.0步骤(完美测试)

mysql5.0和mysql8.0配置如下 1.把如下配置复制下替换到my.ini中 mysql5.0配置如下 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirF:\mysql-5.7.38 # 设置mysql数据库的数据的存放目录 datadirF:\mysql-5.7.38\data # 允许最大连接数 max_connections200 #…

串口乱码原因

开发板上外部时钟的晶振与代码中的外部时钟的晶振不一致&#xff0c;使用cubemx配置时钟时要格外注意&#xff0c;选好芯片之后再看外部晶振是啥&#xff0c;不然随便设置可能乱码 重写fputc函数之后&#xff0c;需要自己手动勾选下面选项

【Linux系统编程二十七】:线程的互斥与同步(互斥锁的使用与应用)

【Linux系统编程二十七】&#xff1a;线程的互斥与同步(互斥锁的使用与应用&#xff09; 一.问题:数据不一致(混乱/不安全)1.多线程并发计算不安全2.将数据加载到寄存器的本质 二.解决方法--互斥锁三.互斥锁的概念与接口1.定义锁2.加锁/解锁 四.互斥锁实现原理与应用1.原理&…

AArch64 Exception Model学习

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网文档为准。 1 Privilege and Exception Levels 1.1 为什么要划分权限&#xf…

swaggerUI不好用,试试这个openapiUI?

title: swaggerUI不好用&#xff0c;试试这个openapiUI? date: 2024-01-08 categories: [tool] tags: [openapi,工具] description: 基于swaggger2, openapi3规范的UI文档 1.背景 由于长期使用 swaggerUI 工具&#xff0c;它的轻量风格个人觉得还是不错的&#xff0c;但是它…

npm v10.2.4 is known not to run on Node.js v14.16.1.

报错&#xff1a; ERROR: npm v10.2.1 is known not to run on Node.js v10.24.1. This version of npm supports the following node versions: ^18.17.0 || >20.5.0. You can find the latest version at https://nodejs.org/. 这种情况降级npm&#xff0c;降不了&…

目标检测-One Stage-YOLOv6

文章目录 前言一、YOLOv6的网络结构和流程二、YOLOv6的创新点总结 前言 YOLOv6 是美团视觉智能部研发的一款目标检测框架&#xff0c;致力于工业应用。论文题目是《YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications》。 和YOLOv4、YOLOv5等不…

Linux——firewalld防火墙(一)

一、Linux防火墙基础 Linux 的防火墙体系主要工作在网络层.针对TCP/P数据包实时过滤和限制.属于典型的包过滤防火墙&#xff08;或称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现&#xff0e;具有非常稳定的性能和高效率,也因此获得广泛的应用.在CentOS 7系统中几种…

虾皮如何查看自己的店铺

在虾皮&#xff08;Shopee&#xff09;平台上查看自己的店铺是非常重要的&#xff0c;因为它可以帮助您了解店铺的运营情况、管理商品和处理客户服务等。下面是在虾皮平台上查看店铺的步骤&#xff1a; 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址&#xff08;复制…

【leetcode 447. 回旋镖的数量】审慎思考与推倒重来

447. 回旋镖的数量 题目描述 给定平面上 **n **对 互不相同 的点 points &#xff0c;其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 &#xff0c;其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等&#xff08;需要考虑元组的顺序&#xff09;。 返回平…

remote-ssh如何离线下载历史版本

remote-ssh离线下载任意历史版本方法&#xff0c;简单有效 很多小伙伴都会遇到这样的问题&#xff0c;由于内网服务器中安装的vs code版本较低&#xff0c;比如1.62.0版本&#xff0c;官网发布的version history 只展示最新的五个版本&#xff0c;还是太高了&#xff0c;导致下…

C#,入门教程(12)——数组及数组使用的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(11)——枚举&#xff08;Enum&#xff09;的基础知识和高级应用https://blog.csdn.net/beijinghorn/article/details/123917587 数组是一种数据集合&#xff0c;是一组完全相同的、按顺序存放的数据。 需要记住数组的几个特征&…

P1003 [NOIP2011 提高组] 铺地毯————C

目录 [NOIP2011 提高组] 铺地毯题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 [NOIP2011 提高组] 铺地毯 题目描述 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做…

MT6785安卓核心板_联发科MTK6785/Helio G95/曦力G95核心板定制

MT6785安卓核心板是基于MT6785(Helio G95)处理器&#xff0c;具备八核处理器结构&#xff0c;包括2颗主频为2.05GHz的Cortex A76处理器和6颗主频为2.0GHz的Cortex A55处理器&#xff0c;以及六颗Cortex-A55处理器。而在GPU方面&#xff0c;采用了Arm Mali-G76 MC4&#xff0c;频…

Modbus转Profinet网关揭秘!升级工业自动化!

Modbus转Profinet网关&#xff08;XD-MDPN100/200&#xff09;通过Modbus协议和Profinet协议之间的转换&#xff0c;实现了不同设备之间的通信。Modbus是一种常用的串行通信协议&#xff0c;而Profinet是一种基于以太网的工业通信协议。随着工业自动化的不断发展&#xff0c;Mo…

3.6 QUERYING DEVICE PROPERTIES

我们关于将执行资源分配给区块的讨论提出了一个重要问题。我们如何确定可用资源的数量&#xff1f;当CUDA应用程序在系统上执行时&#xff0c;它如何确定设备中的SM数量以及可以分配给每个SM的块和线程数量&#xff1f;可能与执行CUDA应用程序相关的其他资源尚未讨论。一般来说…

12.8-1.8

2023.12.8 redis容器 docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf redis.conf不存在&#xff0c;需先在宿主机创建该目录下文件&#xff0c…

《亚太教育》是什么级别的期刊?是正规期刊吗?能评职称吗?

《亚太教育》主要发表教育理论研究、教育教学实践、学校管理、学科教育、科研管理等学术论文以及其他与教育教学相关的学术论文和研究成果,现征集教育管理以及各学科优秀论文。欢迎.各位教师、教育工作者及高校学生踊跃投稿。 收录情况&#xff1a;知网万方维普收录 投稿方式&a…