css中的变量和辅助函数

变量

--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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决kubelet报failed to get imageFs info: non-existent label \“docker-images\“

问题&#xff1a; 一环境主机重启后&#xff0c;查看kubelet日志经常有大量无法回收镜像文件报错&#xff0c;会导致kubelet的pleg不健康&#xff0c;从而导致kubelet发生重启。报错如下&#xff1a; 解决办法 解决方法一&#xff1a; systemctl stop docker systemctl stop …

鸿蒙开发DevEco Studio搭建

DevEco Studio 安装 DevEco Studio 编辑器 下载&#xff1a;https://developer.harmonyos.com/cn/develop/deveco-studio#download Windows(64-bit)Mac(X86)Mac(ARM) 安装&#xff1a;DevEco Studio → 一路 Next运行&#xff1a; 基础安装&#xff1a;Node.js > 16.9.1…

通过Docker搭建4节点的Tendermint集群

Tendermint&#xff1a;0.34.24 Docker&#xff1a;20.10.21 Docker-Compose&#xff1a;2.20.2 OS&#xff1a;Ubuntu 20.04 Go&#xff1a;1.19.2 Linux/amd64 1 修改Tendermint源码 1.1 修改监听IP 为什么要将127.0.1修改成0.0.0.0呢&#xff1f;因为容器内的服务如果是以…

Java进击框架:Spring-Web(八)

Java进击框架&#xff1a;Spring-Web&#xff08;八&#xff09; 前言DispatcherServlet拦截器异常视图解析重定向转发 语言环境日志 过滤器带注释的控制器声明映射请求其它注解验证 功能性端点URI Links异步请求CORSHTTP缓存视图技术MVC配置其他Web框架 前言 Spring Web MVC是…

大数据深度学习长短时记忆网络(LSTM):从理论到PyTorch实战演示

文章目录 大数据深度学习长短时记忆网络&#xff08;LSTM&#xff09;&#xff1a;从理论到PyTorch实战演示1. LSTM的背景人工神经网络的进化循环神经网络&#xff08;RNN&#xff09;的局限性LSTM的提出背景 2. LSTM的基础理论2.1 LSTM的数学原理遗忘门&#xff08;Forget Gat…

Mate X5对应用进行专门适配,刷视频和文章的体验比直板机强太多

虽然说折叠机是否适合当主力机使用一直是一个有争议的问题&#xff0c;但折叠机在阅读浏览方面的体验真的是要比直板机强太多。 比如办公时&#xff0c;各种表格报单、海报PPT都是更大更清晰&#xff0c;一览无遗&#xff0c;体验过基本就回不去了。 而华为的最新折叠屏&…

rime中州韵小狼毫 日期/农历 时间 事件 节气 滤镜

网络上但凡提到 rime中州韵小狼毫须鼠管输入法&#xff0c;总少不了智能时间&#xff0c;日期等炫技&#xff0c;可见这个便捷时间/日期输入功能是多么的受欢迎。作者也不落窠臼&#xff0c;今天为大家带来的分享就是 时间日期 滤镜。 先睹为快 在正文开始前&#xff0c;我们…

【python】爬取百度热搜排行榜Top50+可视化【附源码】【送数据分析书籍】

英杰社区https://bbs.csdn.net/topics/617804998 一、导入必要的模块&#xff1a; 这篇博客将介绍如何使用Python编写一个爬虫程序&#xff0c;从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应&#xff0c;以及os模块处理文件和目录操…

【多传感器攻击】TPatch: A Triggered Physical Adversarial Patch

代码 https://github.com/forget2save/TPatch 论文 https://www.usenix.org/system/files/sec23summer_123-zhu-prepub.pdf 自动驾驶汽车越来越多地利用基于视觉的感知模块来获取有关驾驶环境的信息并检测障碍物。正确的检测和分类对于确保安全驾驶决策非常重要。现有的工作已…

Rust学习笔记:基础概念介绍(一)

Rust背景 让我们从Rust语言的背景开始&#xff0c;探索它的起源。Rust最初是Mozilla研究院在2006年的一个个人项目。第一个稳定的公开版本发布于2015年5月&#xff0c;但在此之前Mozilla已经在生产软件中使用了Rust。2021年&#xff0c;Rust基金会成立&#xff0c;其宪章是管理…

1、设计模式概述

1.1 软件设计模式的产生背景 1.2 软件设计及模式的概念 1.3 学习设计模式的必要性 1.4 设计模式分类 创建型模式 用于描述“怎样创建对象”&#xff0c;它的主要特点是“将对象的创建与使用分离”。GOF书中提供了单例、原型、工厂方法、抽象工厂、建造者等5种创建者模式。 结构…

【SkyWant.[2304]】路由器操作系统,移动【Netkeeper】使用教程校园网

目录 步骤一&#xff1a;正确连接网线&#xff0c;插电开机正确连接网线&#xff1a; 认识系统灯&#xff1a; 插电开机&#xff1a; 步骤二&#xff1a;开机之后&#xff0c;系统的基本设置 1.进入设置界面&#xff1a; 2.设置辅助热点wifi&#xff1a; 3.设置日常…

Mysql InnoDB行锁深入理解

Record Lock记录锁 Record Lock 称为记录锁&#xff0c;锁住的是一条记录。而且记录锁是有 S 锁和 X 锁之分的&#xff1a; 当一个事务对一条记录加了 S 型记录锁后&#xff0c;其他事务也可以继续对该记录加 S 型记录锁&#xff08;S 型与 S 锁兼容&#xff09;&#xff0c;…

SQL基础知识1

一、基本知识 1、定义 2、语句结构 二、库和表的操作 1、创建、删除库 方法一 在navicat的查询中写 方法二 用mysql命令窗口写 1、用管理员身份运行MySQL的窗口 2、先看一下已经存在的数据库 3、新建数据库 2、导入表 方法一 用dos命令窗口&#xff0c;管理员身份运行…

LeetCode(242)有效的字母异位词⭐

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…

大前端nestjs入门教程系列(四):如何nestjs整合mysql数据库

经过前面的几篇文章&#xff0c;想必大家已经对nestjs有了基础的了解&#xff0c;那么这篇文章就带大家玩玩数据库&#xff0c;学会了这篇&#xff0c;就离大前端又进了一步 Nest与数据库无关&#xff0c;使你可以轻松地与任何 SQL 或 NoSQL 数据库集成。 根据你的喜好&#xf…

【办公自动化】Window电脑如何设置定时任务计划

在Windows系统中&#xff0c;我们可以使用任务计划程序来创建和管理定时任务。任务计划程序是Windows操作系统自带的一个功能&#xff0c;可以帮助我们自动执行一些重复性的任务&#xff0c;例如备份文件、更新软件等。 一、打开任务计划程序 首先&#xff0c;我们需要打开任…

【YOLO系列】 YOLOv4思想详解

前言 以下内容仅为个人在学习人工智能中所记录的笔记&#xff0c;先将目标识别算法yolo系列的整理出来分享给大家&#xff0c;供大家学习参考。 本文未对论文逐句逐段翻译&#xff0c;而是阅读全文后&#xff0c;总结出的YOLO V4论文的思路与实现路径。 若文中内容有误&#xf…

跟我学java|Stream流式编程——Stream 基础

一、流式编程的概念和作用 Java 流(Stream)是一连串的元素序列&#xff0c;可以进行各种操作以实现数据的转换和处理。流式编程的概念基于函数式编程的思想&#xff0c;旨在简化代码&#xff0c;提高可读性和可维护性。 Java Stream 的主要作用有以下几个方面&#xff1a; 简化…

vite 如何设置 pwa,让网页类似 app 那样运行,使用插件 vite-plugin-pwa

vite 如何设置 pwa&#xff0c;让网页类似 app 那样运行&#xff0c;使用插件 vite-plugin-pwa 一、概述 情况还是那么个情况&#xff0c;还是原来的项目 vue2 改为 vitetsvue3 遇到的问题&#xff0c;今天这个问题是如何 在 Vite 环境下设置 PWA。 PWA 就是网页应用可以像 a…