CSS 新特性总结

2023-10-29

CSS 伪类选择器

:is() 和 :where()

:is() 将选择器列表作为参数,并选择该列表中任意一个选择器可以选择的元素,其优先级是由它的选择器列表中优先级最高的选择器决定的,列表值中不能使用伪元素。

:where()将会选择所有能被该选择器列表中任何一条规则选中的元素,其优先级为 0。

:not() 和 :has()

:not() 用来匹配不符合一组选择器的元素。由于它的作用是防止特定的元素被选中,它也被称为反选伪类。

:has() 至少匹配一个满足参数选择器的元素,而且能匹配父元素。在当前规范中,并未列为实时选择器配置的一部分,意味着其不能用于样式表中,只能用于如 document.querySelector() 的函数中。

:empty 和 :blank

:empty 代表没有子元素的元素。子元素只可以是元素节点或文本(包括空格)。注释或处理指令都不会产生影响。

:blank 选择用户输入为空的输入框。:blank 选择器被认为尚有一定风险,正在持续改进它。

:focus-visible 和 :focus-within

:focus 当用户使用鼠标点击焦点元素或使用键盘的 Tab 键(或快捷键)触发焦点元素焦点环的样式。

:focus-visible :只有使用键盘的 Tab 键(或快捷键)触发焦点元素焦点环的样式。如果仅使用 :focus-visible 设置焦点环样式的话,那么用户使用鼠标点击焦点元素时不会触发焦点环样式。

:focus-within:表示一个元素获得焦点,或该元素的后代元素获得焦点。这也意味着,它或它的后代获得焦点,都可以触发 :focus-within。

CSS 颜色

rgb()rgba() 、hsl() 和 hsla() ,以往用逗号(,)作为分割符,现在可以直接使用空格做分割符,并且rgb() 和 hsl() 函数在第三个值和第四个值之间加上 / 可以取替 rgba() 和 hsla() :

​​

另外,十六进制描述颜色,也可以在原本的语法规则中最后两位添加新的位值来描述透度明。比如 #rrggbbaa 或 #rgba。

可以在color() 函数中指定颜色空间,不同颜色空间,色彩度不一样。使用了color() 函数指定颜色空间除了要考虑该函数支持度(浏览器的兼容性)还需要考虑硬件设备对颜色空间的支持度。 ​

在 CSS 中可以借助媒体查询 @media 来做相应的判断。

CSS 蒙层和剪切

蒙层和剪切对应的 CSS 属性就是 mask 和 clip-path ,其中 mask 是一个简写属性。

mask 允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域。

clip-path 使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。

clip-path 、float 和 CSS 的 Shapes 结合可以实现一些不规则的图文混排的布局效果。

CSS 混合模式

目前主要有 mix-blend-mode 和 background-blend-mode 两个属性。前者是用于多个元素的合成,后者是用于多个背景的合成。

CSS 自定义属性

CSS 自定义属性又被称为 CSS 变量。在 CSS 中注册自定义属性时是使用 -- 来注册的,可以给已注册的自定义属性赋值,包括空字符串。

var() 函数有两个参数,第一个参数就是自定义属性,第二个参数是备用值。当第一个参数是个无效值时,会采用第二个参数。无效变量是指当一个自定义属性的值是 initial 时。

--invalid: initial; // 无效变量
--valid: ;			// 有效变量

上述效果代码: 

<div class="element">
  <i>Element</i>
</div>

<i>Element</i>

<style>
  .element {
  	--color: red;  // 只作用于 .element 元素及其后代元素
  }

  i {
  	--foo: initial;                         // 无效变量
  	--color: var(--foo);					// 无效变量
  	background-color: var(--color, orange); // --color是无效变量,采用备用值 orange
  }
</style>

color 属性相当于设置了 color: ; 值,客户端在计算该值时将被忽略,因此会继承其祖先元素的 color 值,该例继承了 body 元素的 color 值 black 。

<section>Element</section>

<style>
  :root {
    --initial: initial; // 无效变量
    --valid: ;			// 有效变量
  }
  section {
  	background-color: var(--initial, red); // 无效变量,会采用备用值 red
    color: var(--valid, red);			   //	有效变量,备用值被忽略
  }
</style> 

借助无效变量和有效变量,可以实现多种换肤效果: 

label {
  --box-shadow: var(--ON);
  --box-shadow-active: var(--OFF);
  box-shadow: 0 0 0 3px var(--box-shadow, rgba(0, 0, 0, 0.05))
    var(--box-shadow-active, #2196f3);
  cursor: pointer;
}

label.dark {
  background-color: var(--dark-bgcolor);
}

label.light {
  background-color: var(--light-bgcolor);
}

label.blue {
  background-color: var(--blue-bgcolor);
}

#dark:checked ~ div .dark,
#light:checked ~ div .light,
#blue:checked ~ div .blue {
  --box-shadow: var(--OFF);
  --box-shadow-active: var(--ON);
}

.nav {
  color: var(--light, var(--light-color)) var(--dark, var(--dark-color))
    var(--blue, var(--blue-color));
  background-color: var(--light, var(--light-bgcolor))
    var(--dark, var(--dark-bgcolor)) var(--blue, var(--blue-bgcolor));
}

a.active,
a:hover {
  background-color: var(--light, var(--light-active-bgcolor))
    var(--dark, var(--dark-active-bgcolor))
    var(--blue, var(--blue-active-bgcolor));
}

/* 设置切换开关 */
:root {
  --ON: initial; // 无效变量,相当于开启 var()的备用值
  --OFF: ; // 有效变量,相当于关闭 var()的备用值

  /* Dark */
  --dark-color: rgba(156, 163, 175, 1);
  --dark-bgcolor: rgba(17, 24, 39, 1);
  --dark-active-bgcolor: rgba(55, 65, 81, 1);

  /* Light */
  --light-color: rgba(55, 65, 81, 1);
  --light-bgcolor: rgba(243, 244, 246, 1);
  --light-active-bgcolor: rgba(209, 213, 219, 1);

  /* Blue */
  --blue-color: rgba(165, 180, 252, 1);
  --blue-bgcolor: rgba(49, 46, 129, 1);
  --blue-active-bgcolor: rgba(67, 56, 202, 1);
}

#dark:checked ~ .nav {
  --light: var(--OFF);
  --dark: var(--ON);
  --blue: var(--OFF);
}

/* 默认为Light */
#light:checked ~ .nav {
  --light: var(--ON);
  --dark: var(--OFF);
  --blue: var(--OFF);
}

#blue:checked ~ .nav {
  --light: var(--OFF);
  --dark: var(--OFF);
  --blue: var(--ON);
}

CSS 等比缩放

指的是 “容器高度按比例根据宽度改变”,很多时候也称为宽高比或纵宽比。使用 aspect-ratio 直接设置:

.container {
	width: 100%;
  aspect-ratio: 16 / 9;
}

CSS 滚动捕捉

在 Web 布局中,时常会碰到内容溢出容器的现状,如果 overflow 设置为 auto 或 scroll 时容器会出现水平或垂直滚动条: ​

 比如,实现每次滚动时,图片的中心位置和容器中心位置对齐:

.container {
  scroll-behavior: smooth;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scroll-snap-type: x mandatory;
  scroll-padding: 20px;
}

img {
  scroll-snap-align: center;
  scroll-snap-stop: always;
}

scroll-behavior 为一个滚动框指定滚动行为,其他任何的滚动,例如那些由于用户行为而产生的滚动,不受这个属性的影响。在根元素中指定这个属性时,它反而适用于视窗。

scroll-behavior接受两个值:

  • auto :滚动框立即滚动
  • smooth :滚动框通过一个用户代理定义的时间段使用定义的时间函数来实现平稳的滚动,用户代理平台应遵循约定,如果有的话。

 CSS 媒体查询

 CSS 媒体查询 @media 又称为 CSS 条件查询。新的媒体查询特性可以查询到用户在设备上的喜好设置:

  • prefers-reduced-motion
  • prefers-contrast
  • prefers-reduced-transparency
  • prefers-color-scheme
  • inverted-colors

比如 prefers-color-scheme 实现暗黑模式的皮肤切换效果: ​

:root {
  /* Light theme */
  --c-text: #333;
  --c-background: #fff;
}

body {
  color: var(--c-text);
  background-color: var(--c-background);
}

@media (prefers-color-scheme: dark) {
  :root {
    /* Dark theme */
    --c-text: #fff;
    --c-background: #333;
  } 
}

 又比如,根据网格数据设置来控制资源的加载:

@media (prefers-reduced-data: reduce) {
  header {
    background-image: url(/grunge.avif);
  }
}

@media (prefers-reduced-data: no-preference) {
  @font-face {
    font-family: 'Radness';
    src: url(megafile.woff2);
  }
}

CSS 比较函数

min() 和 max()

min() 函数会从多个参数(或表达式)中返回一个最小值作为CSS属性的值,即使用 min() 设置最小值,等同于 min-width。

max() 函数会从多个参数(或表达式)中返回一个最大值作为CSS属性的值,即使用max()设置最大值,等同于 max-width。

clamp()

clamp(MIN, VAL, MAX),返回一个值,即在定义的最小值和最大值之间的数值范围内的一个中间值。该函数接受三个参数: ​

  • 最小值(MIN),VAL 小于 MIN 时返回;
  • 中间值(VAL),一般是一个相对值,也称首选值,默认作为函数返回值返回;
  • 最大值(MAX),VAL 大于 MAX 时作为函数返回值返回。

CSS 内容可见性

指 content-visibilit 和 contain-intrinsic-size 两个属性,主要功能是可以用来提高页面的渲染性能。

大多时候可以使用CSS的 content-visibility 来跳过屏幕外的内容渲染。

contain-intrinsic-size 属性控制由 content-visibility 指定的元素的自然尺寸。它的意思是,content-visibility 会将元素的高度(height)视为 0,浏览器在渲染之前会将这个元素的高度变为 0,从而使我们的页面高度和滚动变得混乱。但如果已经为元素或其子元素显式设置了高度,那这种行为就会被覆盖。如果你的元素中没显式设置高度,并且因为显式设置 height可能会带来一定的副作用而没设置,那么我们可以使用 contain-intrinsic-size 来确保元素的正确渲染,同时也保留延迟渲染的好处。 ​contain-intrinsic-size 和 content-visibility一般是同时设置:

section {
  content-visibility: auto;
  contain-intrinsic-size: 1000px;
}

CSS 内在尺寸

<img>src 路径上浮出来的图片底下有一行对图像的尺寸的描述,其实现这表述图片尺寸中两个重要信息: ​

  • 外在尺寸: 252 x 158 px ,开发者给 img 设置的尺寸;
  • 内在尺寸: 800 x 533 px ,图片原始尺寸。

其实在 CSS 中给一个元素框设置大小时,有的是根据元素框内在的内容来决定,有的是根据上下文来决定的。根据该特性,CSS的尺寸也分为内部(内在)尺寸和外部(外在)尺寸。 ​

  • 内部尺寸:指的是元素根据自身的内容(包括其后代元素)决定大小,而不需要考虑其上下文;而其中 min-contentmax-contentfit-content 能根据元素内容来决定元素大小,因此它们统称为内部尺寸。
  • 外部尺寸:指的是元素不会考虑自身的内容,而是根据上下文来决定大小。最为典型的案例,就是 widthmin-widthmax-width 等属性使用了 % 单位的值。

简单地说,fit-content 相当于 min-contentmax-content,其 取值: ​

  • 如果元素的可用空间(Available)充足,fit-content 将使 用 max-content
  • 如果元素的可用空间(Available)不够充足,比 max-content 小点,那就是用可用空间的值,不会导致内容溢出
  • 如果元素的可用空间(Available)很小,比 min-content还小,那就使用 min-content

其他 CSS 知识点

margin 左右负边距的负边距表现并不一致。左为负时,是左移,右为负时,是左拉。上下与左右类似。

input 的默认宽度取决于内联属性 size 值。

position = “absolute” | ‘fixed’时,同时设置 left 和 right 等同于隐式地设置宽度,同时设置 top 和 bottom 则等同于隐式地设置高度。

相邻兄弟选择器 (+) 介于两个选择器之间,当第二个元素紧跟在第一个元素之后,并且两个元素都是属于同一个父元素的子元素,则第二个元素将被选中:

 animation-direction = “alternate”,可以使得动画去回交替进行。animation-play-state = "pasued",可以使得动画暂停。

fliter = blur(),可以使得背景高斯模糊(背景虚化)。

利用 CSS 渐变实现进度条:

使用 transform + transition 可以实现旋转元素的效果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS 新特性总结 的相关文章

  • border-box 不适用于内联块元素?

    我有一个清单inline block元素 我想为您将鼠标悬停在其上的元素添加边框 但是 请注意边框如何偏移元素 即使我使用box sizing border box并明确定义元素的宽度和高度 我说明了以下行为 box sizing bord
  • CSS - 制作“步进”文本的好方法?

    有没有一种好的方法可以实现以下目标 而无需任何额外的标记 不过使用 JavaScript 就很好了 任何想法 Thanks Edit 我的标记将是这样的 div style width 400px p Text text text Text
  • HTML:您可以隐藏/忽略浏览器查找中的文本元素 (CTRL+F)

    我有一个具有相当复杂的 UI 的 Web 应用程序 并且屏幕的一部分保留用于内容 如果可能的话 我想这样做 以便当用户使用浏览器的内置文本搜索 CTRL F 时 UI 中的任何文本都将被忽略 并且仅搜索实际内容 这可行吗 CSS 和 Jav
  • 如何使用 iTextSharp 设置 PDF 段落或字体行高?

    如何使用 iTextSharp 更改 PDF 字体或段落的行高 排版中的行距称为行距 如果可以使用行间距 则可以使用 Paragraph Leading 或 Paragraph LeadingMultiplier 看http itextsh
  • 使用“SVG 多边形”悬停状态在“SVG”之后淡入 div

    有没有一个只用CSS来解决这个问题的方法 我希望能够在 SVG 之后淡入 div 但前提是用户将鼠标悬停在 SVG 多边形上 代码看起来像这样
  • 为什么行框之间有空格,而不是由于半行距?

    在下面的代码示例中 您将看到垂直流动的之间有空白spans是 每个之间有空白line box 我想首先声明这与之间的差距无关inline block框 甚至是结果半领先 https www w3 org TR CSS21 visudet h
  • IE9支持CSS线性渐变吗?

    有了 Chrome Safari 和 Firefox webkit gradient and moz linear gradient特性 我怎样才能用 IE9 做同样的事情呢 最好的跨浏览器解决方案是 background fff back
  • IE8 和怪异模式

    IE8 是否像 IE6 7 一样以怪异模式运行 我有一个网页 其中有一些非常奇怪的代码 内容以填充和负边距居中 它在 IE6 7 和其他浏览器中可以正常工作 但在 IE8 中 内容区域的宽度只有一半并且不居中 怪异模式的标志 源代码在 DO
  • object.style.x 不返回任何内容[重复]

    这个问题在这里已经有答案了 在我网站上的 JavaScript 中 我有这样的内容 console log document getElementById side news style display 我已经尝试过很多样式 但它没有返回任
  • CSS隐藏滚动条,但元素可滚动

    我有一个名为 items 的元素 元素内的内容更长 比元素高度 我想让它可滚动但隐藏滚动条 我该怎么做呢 div class left side div class items style display block width 94 ma
  • 如何允许点击穿过 div 但仍然对悬停做出反应?

    说我有divA部分重叠的divB 我怎样才能允许点击divA穿过去divB但仍然有hover悬停时触发divA 我知道pointer events none 这使得点击通过 但也阻止了悬停 我也尝试过以下方法 但它不允许点击失败 docum
  • 从第三方网站为 iframe 设置 CSS

    我正在尝试设计风格snapwidget Instagram feed http snapwidget com getstarted 我想让边框变成白色 这不是小部件的设置 所以我尝试添加 css 看来我的 css 没有被检测到 因为内容位于
  • 使用 CSS3 反转进度条

    我有这个EXAMPLE http jsfiddle net Mils fmaGZ 1 我想将进度条反转 180 度 从右向左进行 要获得这样的东西 我试图改变过渡属性但没有结果 Code progress bar span display
  • 使用 css 变换在其父对象的宽度上对对象进行动画处理

    我正在尝试使用 css 转换来转换 100 宽度包装器内元素的位置来提高动画性能 因此 它从左侧进入屏幕并从右侧退出 然后重复动画 我想我可以在这个动画中使用百分比 我发现翻译与您正在制作动画的对象相关 因此 如果您有一个 100px 宽的
  • CONDITION CSS 区分 IE6 到 IE7

    我想声明一个不同于 ie6 和 ie7 的风格 但我的CSS条件被IE7识别为IE6 我用的是XP和explorer 7 这是我使用的代码
  • 为什么只读输入字段无效

    考虑以下 html
  • 如何使用 Spring MVC 和 Thymeleaf 添加静态文件

    我的问题是如何添加 CSS 和图像文件等静态文件 以便我可以使用它们 我正在使用 Spring MVC 和 Thymeleaf 我查看了有关此主题的各种帖子 但它们对我没有帮助 所以我才来问 根据这些帖子 我将 CSS 和图像文件放在res
  • 半流体布局 CSS/Html

    我有一个两列布局 其中右列的静态宽度为 350px 左列的宽度应填充页面的其余部分 或者至少这是我想要发生的事情 但不幸的是事实并非如此 看一下我的 css html http jsfiddle net CmJ7P http jsfiddl
  • 为什么 Firefox 3.6 改变了 jQuery 和 CSS 属性?

    为什么 Firefox 3 6 改变了 jQuery 和 CSS 属性 好吧 更具体一点 我有一个交叉淡入淡出插件 可以在放置在彼此之上的两个图像之间创建发光效果 该函数 如下所示 将使顶部图像在悬停时在 200 毫秒内转换为不透明度 0
  • 指定 body CSS 宽度安全吗?

    现在通常满足于以一定的尺寸居中 div Blah div 不使用包装器进行对齐和大小并直接将其应用到body tag 像这样 Blah 尺寸是

随机推荐

  • C++引用(&)解析:引用的作用,什么时候使用引用,引用与指针的不同

    引用是什么 什么时候使用引用 做函数的参数 做函数的返回值 引用与指针的不同 引用是什么 引用是变量的别名 理论上不开辟新的空间 符号 是类型标识符的一部分 被引用的数据类型 变量名称 如下图中 变量a 与变量ra 指向同一块内存空间 由此
  • 使用python的tkinter模块制作一个计算器

    使用tkinter模块制作的一个简单的计算器 由于刚学这个模块 所以做的不是很好 截图 点击计算后算式区的值会改成结果 可自行在数字触发的函数中添加数字输入就进行计算回显的功能 代码如下 import tkinter as tk impor
  • Python学习笔记(十):包、模块

    一 包 模块 Python中的包相当于文件夹 模块就是 py文件 不同包下有相同名称的模块时 为了区分 可在模块里加上 包名 模块名 路径 这个路径叫做命名空间 注 如果想让一个普通的文件夹变为包 则需要在这个文件夹内添加 init py文
  • 原子操作实现无锁栈

    atomic3 cpp 使用CAS操作实现一个无锁栈 include
  • Vulkan® A Specification Core And Extension::Vulkan文档核心部分和扩展部分对照与翻译说明

    2020 7 1 更 修改和完善某些描述 Vulkan版本 1 2 137 1 2 145 Vulkan文档分成两种 核心部分 核心部分 扩展部分 核心部分是必定要翻译的 对于扩展部分 本人并不是所有扩展都见过 所以对于扩展部分尽可能的翻译
  • Kanzi Shader入门

    1 版本 kanzi默认支持Opengl ES 2 0 在qnx平台可以支持到ES 3 0 2 着色器 kanzi只支持 顶点着色器 和 片段着色器 3 kanzi studio 无法直接使用shader 需要通过画刷和材质间接使用 在 普
  • strongSwan报文交互过程

    通过上篇案例 我们已经初步掌握了如何通过strongSwan配置两台Linux主机之间的IPsec隧道 今天我们再来看一下strongSwan配置IPsec的报文交互过程和转发性能 组网图还是上次的拓扑 首先查看一下在配置完strongSw
  • 使用FFmpeg命令进行hls切片,得到的ts文件时长不准确

    一 问题描述 使用如下FFmpeg命令进行hls切片 ffmpeg i video2 mp4 hls time 1 f hls out m3u8 由于使用了参数 hls time 1 所以预计生成的ts文件时长会是1秒左右 但结果却是最终生
  • 关于把数据库放在阿里云上,实现共享

    本地的数据库只能实现在自己的机器上访问 别人的电脑无法实现访问 因此通过借助阿里云 把数据库放在阿里云上 从而多人都可以通过阿里云的ip来进行访问操作 在试验过程中 难度最大的就是对阿里云一窍不通 不知从何下手 下面进行一下总结 实现的基本
  • django<model模块和分页功能模块>

    model模块使用 import os django os environ setdefault DJANGO SETTINGS MODULE wxy django settings django setup 指定django的配置 fro
  • dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique:

    C Program Files Java jdk1 8 0 181 bin java exe Dmaven multiModuleProjectDirectory E Software xiaoye CRUD parent Dmaven h
  • Java内存区域(栈、堆、方法区)详细解说

    参考文献 深入学习java虚拟机 概览 java虚拟机在执行java程序的过程中会把它所管理的内存划分成若干个不同的数据区域 这些区域各有用途 以及创建和销毁的时间 有的区域随着虚拟机的进程的启动而存在 有的则依赖用户线程的启动和结束而建立
  • 简单JS解密爬取股票信息案例

    前言 今天给大家带来一个使用JS解密爬取股票信息的案例 本案例比较简单 主要介绍如何找出JS加密的过程 希望通过本案例可以带给大家学习JS的一些思路 本案例网站 https webapi cninfo com cn marketData 一
  • Jetty, “No multipart config for servlet” problem

    I m writing handler for file transfer The request is multipart HTTP message The message is correct tested on other serve
  • Python爬虫:解决SSL证书验证问题

    如果目标网站没有设置好HTTPS证书 又或者网站的HTTPS证书不被CA机构认可 用浏览器访问的话 就可能会出现SSL证书错误的提示 用requests库来请求这类网站的话 会直接抛出SSLError错误 requests exceptio
  • ssh命令详解

    基础命令学习目录 SSH 远程连接工具 连接原理 ssh服务是一个守护进程 demon 系统后台监听客户端的连接 ssh服务端的进程名为sshd 负责实时监听客户端的请求 IP 22端口 包括公共秘钥等交换等信息 ssh服务端由2部分组成
  • C++知识积累:explicit关键字的作用

    explicit意为 显式的 该关键字主要是用于防止类构造函数出现隐式类型转换的情况 且只适用于仅含一个参数的构造函数 我们先来看第一个问题 什么是防止构造函数出现隐式转换呢 来看下面的例子 class A public A int a c
  • React-router v5和v6的区别对比

    以下是两个版本之间的区别 一 首先是注册路由的时候v5的Switch改为了Routes v5 代码如下 import Route Switch from react router dom 引入react router div 注册路由 编写
  • spring boot默认扫描的路径

    一般来说spring boot默认的扫描路径是启动类当前的包和子包 SpringBootApplication EnableTransactionManagement proxyTargetClass true MapperScan bas
  • CSS 新特性总结

    CSS 伪类选择器 is 和 where is 将选择器列表作为参数 并选择该列表中任意一个选择器可以选择的元素 其优先级是由它的选择器列表中优先级最高的选择器决定的 列表值中不能使用伪元素 where 将会选择所有能被该选择器列表中任何一