2024使用广泛的 CSS 特性

215 阅读6分钟

1. css滤镜效果

详见developer.mozilla.org/zh-CN/docs/…,可通过链接demo尝试一下

2. :has()

CSS 函数式伪类 **:has()** 表示一个元素,如果作为参数传递的任何相对选择器在锚定到该元素时,至少匹配一个元素。这个伪类通过把可容错相对选择器列表作为参数,提供了一种针对引用元素选择父元素或者先前的兄弟元素的方法。意思是某某元素如果匹配某某选择器,就会匹配。支持所有css选择符

详见developer.mozilla.org/zh-CN/docs/…

/* <a> 元素里面有 <img> 元素,则这个 <a> 元素就会匹配 */
a:has(img) { display: block; } 
/* 子元素是 <img> 元素的 <a> 元素会被匹配,而关系更远的后代元素则不考虑 */
a:has(> img) { display: block; }
/* 兄弟选择器 表示匹配后面跟随 <p> 元素的 <h5> 元素 */
h5:has(+ p) { font-size: 1rem; }
/*  <article> 元素内有 <h5> 元素或者有 <p> 元素就会匹配,是或的关系 */
article:has(h5, p) { background-color: #f0f3f9; }
/*  <article> 元素内有 <h5> 元素或者有 <p> 元素就会匹配,是与的关系 */
article:has(h5):has(p) { background-color: #f0f3f9; }
/* 与其他伪类混用 */

3. 尺寸限制:min-content, max-content, fit-content

min-content 尺寸关键字表示内容的最小固有尺寸。对于文本内容而言,这意味着内容会利用所有软换行的机会,变得尽可能的小。

详见:developer.mozilla.org/zh-CN/docs/…

.item {
  width: min-content;
  background-color: #8ca0ff;
  padding: 5px;
  margin-bottom: 1em;
}

<div class="item">项目</div>
<div class="item">项目中包含更多文本。</div>

max-content 尺寸关键字表示内容的最大固有尺寸。对于文本内容,这意味着即使内容会导致溢出,它也不会换行。

**fit-content** 关键字相当于 fit-content(stretch)。在实际应用中,这意味着盒子会使用可用空间,但绝不会超过 max-content

4. aspect-ratio

**aspect-ratio** 为盒子规定了首选纵横比,这个纵横比可以用于计算 auto 尺寸以及其他布局函数。

详见:developer.mozilla.org/zh-CN/docs/…,可通过链接demo尝试一下

5. scroll-behavior

当用户手动导航或者 CSSOM scrolling API 触发滚动操作时,CSS 属性 **scroll-behavior** 为一个滚动框指定滚动行为,其他任何的滚动,例如那些由于用户行为而产生的滚动,不受这个属性的影响。在根元素中指定这个属性时,它反而适用于视窗。

详见:developer.mozilla.org/zh-CN/docs/…,可通过链接demo尝试一下,点击 scroll to: A B C,通过锚点平滑滚动

auto:这是默认值,表示滚动将立即跳转到指定位置,没有任何过渡效果。

smooth:表示滚动将平滑地过渡到指定位置,提供一种更加自然和优雅的视觉体验

6. CSS比较函数

详见:developer.mozilla.org/zh-CN/docs/…

min()

计算一系列值的最小值。

max()

计算一系列值的最大值。

clamp()

计算最小值、中间值、最大值的中值。

函数接收三个用逗号分隔的表达式作为参数,按最小值、首选值、最大值的顺序排列。

当首选值比最小值要小时,则使用最小值。

当首选值介于最小值和最大值之间时,用首选值。

当首选值比最大值要大时,则使用最大值。

width: min(1vw, 4em, 80px);
width: max(10vw, 4em, 80px);
font-size: clamp(1.8rem, 2.5vw, 2.8rem);

7. 背景滤镜backdrop-filter

**backdrop-filter** 可以让你为一个元素后面区域添加图形效果(如模糊或颜色偏移)。因为它适用于元素_背后_的所有元素,为了看到效果,必须使元素或其背景至少部分透明。

详见:developer.mozilla.org/zh-CN/docs/…

/* 关键词值 */
backdrop-filter: none;

/* 指向 SVG 滤镜的 URL */
backdrop-filter: url(commonfilters.svg#filter);

/* <filter-function> 滤镜函数值 */
backdrop-filter: blur(2px);
backdrop-filter: brightness(60%);
backdrop-filter: contrast(40%);
backdrop-filter: drop-shadow(4px 4px 10px blue);
backdrop-filter: grayscale(30%);
backdrop-filter: hue-rotate(120deg);
backdrop-filter: invert(70%);
backdrop-filter: opacity(20%);
backdrop-filter: sepia(90%);
backdrop-filter: saturate(80%);

/* 多重滤镜 */
backdrop-filter: url(filters.svg#filter) blur(4px) saturate(150%);

/* 全局值 */
backdrop-filter: inherit;
backdrop-filter: initial;
backdrop-filter: revert;
backdrop-filter: unset;

各个滤镜方法对应含义如下表:

滤镜

释义

blur

模糊

brightness

亮度

contrast

对比度

drop-shadow

投影

grayscale

灰度

hue-rotate

色调变化

invert

反相

opacity

透明度

saturate

饱和度

sepia

褐色

backdrop-filter和filter区别

backdrop-filter是让当前元素所在区域后面的内容模糊灰度或高亮之类,要想看到效果,需要元素本身半透明或者完全透明,不影响文字内容;而filter是让当前元素自身模糊灰度或高亮之类,影响文字内容。

8. :focus-visible

当元素匹配:focus伪类并且客户端 (UA) 的启发式引擎决定焦点应当可见 (在这种情况下很多浏览器默认显示“焦点框”。) 时,**:focus-visible** 伪类将生效。应用的场景是:元素聚焦,同时聚焦轮廓浏览器认为应该显示。

这个选择器可以有效地根据用户的输入方式 (鼠标 vs 键盘) 展示不同形式的焦点。

详见:developer.mozilla.org/zh-CN/docs/…

通过demo尝试可见:focus-visible only在按钮被点击时不会出现焦点框,只有键盘焦点才展示,但是focus则两种情况都会出现焦点框:

9. CSS 嵌套

CSS 嵌套模块定义了嵌套选择器的语法。它提供将一个样式规则嵌套至另一个规则内的能力,其中被嵌套规则的选择器将相对于其父规则的选择器。

CSS 嵌套不同于如 Sass 等的 CSS 预处理器的一点是,它是被浏览器直接解析的,而不是先经由 CSS 预处理器的预编译。

详见:developer.mozilla.org/zh-CN/docs/…

10. prefers-color-scheme

**prefers-color-scheme** CSS 媒体特性用于检测用户是否有将系统的主题色设置为亮色或者暗色。

详见:developer.mozilla.org/zh-CN/docs/…