美文网首页
你可能还不知道的 CSS 特性

你可能还不知道的 CSS 特性

作者: littleyu | 来源:发表于2021-06-18 17:15 被阅读0次

1. :is():where()

:is(.header, .main) p {
  color: red;
}
:where(.header, .main) p {
  color: red;
}

其实这两个选择器等同于:

.header p, .main p {
  color: red;
}
.header p, .main p {
  color: red;
}

他们唯一不同之处,就是选择器权重不同。等同于以:

/* :is */
.header p, .main p {
  color: red;
}
/* :where */
p {
  color: red;
}

🌰:一般可以用来简写一些选择器

.div1 p, .div2 p .div3 p {}
/* 简写 */
:is(.div1, .div2, .div3) p {}

2. :not():has()

🌰:有时候可以更有语义化一点表示下图需求:

在没有 :not() 选择器的时候,你可能会想到下面这样的方式

.card + .card { /* 没用过的看不懂 */
  margin-top: 20px;
}   

/* 或 */

.card {
  margin-bottom: 20px;
}
.card:last-child { /* 需要拆成了两行来写 */
  margin-bottom: 0;
}

如果换成 :not() 选择器,可以这要来实现:

.card:not(:last-child) {
  margin-bottom: 20px
}

虽然 CSS 选择器已经非常强大了,但一直以来,在 CSS 中没有从子元素选到父元素的样的选择器(父选择器):

即将到来的 :has() 选择器它可以用来选择父级元素

<section> <!-- section 边框颜色是 blue --> 
  <h1>H1 Level Title</h1>
</section>  
<section> <!-- section 边框颜色是 red --> 
  <h2>H2 Level Title</h2>
</section>  
section:has(h1) {
  border-color: blue;
}
section:has(h2) {
  border-color: red;
}

🌰:可能根据子元素的变化,改变父元素的样式,而不必再给父元素添加额外的 class

3. :empty:blank

🌰:有时候数据为空时,如下图这样:

此时我们还要额外隐藏容器,要是有了表示空状态的伪类选择器就可以直接这么写

section:empty {
  display: none; /* or others */
}

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

<!-- 空元素 -->
<div class="error"></div>
<div class="error"><!-- 注释 --></div>
<div class="error pseudo-elements(伪元素)"></div> 

<!-- 非空元素 -->
<div class="error"> </div> <!-- 中间有一个空格符 -->
<div class="error">
</div> <!-- 断行 -->
<div class="error">
  <!-- 注释 -->
    <!-- ... -->
  <!-- 注释 -->
</div> <!-- 注释断行排列 -->
<div class="error"><span></span></div>

4. maskclip-path

5. mix-blend-mode

.wrapper {
    position: relative;
}
:is(.wrapper) svg, img {
    position: absolute;
    top: 0;
    left: 0;
}
.wrapper svg {
    fill: red;
  mix-blend-mode: multiply;
  z-index: 2;
}

<section class="wrapper">
        <svg id="js-couch" class="couch__overlay" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="none" width="1000" height="394"> 
            <defs> 
              <path d="M996.35 77.55q-1.85-1.95-8.65-3.75l-62.4-17.1q-9.3-2.75-12.15-2.5-1.8.15-2.85.45l-.75.3q2.25-16.3 3.75-22.05 1.15-4.4 1.4-10.8.2-6.6-.7-10.85-1.25-5.65-3.1-7.8-2.95-3.35-9.65-2.7-5.95.6-39.3 1.7-38.3 1.25-39.45 1.3-10.25.5-126.75.5-5.05 0-54.2 1.3-45.8 1.25-54.05.95-19.45-.45-30.4-.7-20.2-.55-23.1-1.3-22.3-5.85-26.5 1.25-2.65 4.55-3.85 7.9-.6 1.7-.7 2.5-.65-2.2-2.05-4.55-2.75-4.65-6.45-5.2-3.85-.55-13.65-.4-7.4.1-12 .4-.4.05-18.7.9-16.55.8-19.15 1.1-3.4.4-14.6 1.1-11.3.75-13.05.65h-9.8q-8.65-.05-11.45-.4-2.85-.35-9.25-.6-6.7-.15-8.5-.25-2.7-.1-27.75-.1-25.1 0-29.6.1-92.35 1.15-99 1.65-5.15.4-20 0-15.3-.4-24.4-1.25-6.75-.6-21-1.55-12.95-.9-14.85-1.1-6.45-1.05-11.05-1.5-8.7-.85-12.85.5-5.45 1.75-8.1 4.65-3.2 3.4-2.9 8.6.25 4.65 2.1 11.8 1 3.8 2.55 9.1 1 3.85 2.35 10.1-.1 1-1.5 1-1.75 0-7.7.85-7.1 1-9.8 2.05-2.4.9-23 4.75-21.2 3.9-22.05 4.15-8.2 1.85-15.05 3.35Q7.4 69.1 5.65 70.3 2.5 72.45 2 73.1.6 75 .75 79.2q.15 4.15 1.3 12.75.9 6.85 1.45 10 .5 2.75 8.55 54 6.65 42.15 7.35 46.85 1.15 7.65 4.9 28.55 4.55 25.2 6.35 31.2 2.45 8.15 3.8 11.75 1.85 4.9 3.2 5.75 1.25.8 6.85.65 2.75-.05 5.3-.25l23.85.35q.1 0 1 .95t2 .95q1.9 0 3.4-1.4l23.1-.25 43.65.4q135.05 2.15 137.9 1.9 1.25-.1 72.9.5 72.45.65 76.85.45 8.1-.35 64 .4 143.35.95 146 1.1.55.05 75.3.3 74.7.3 79.8.6 8.65.5 68.25-.35l51.75.5 1.6.4q1.95.35 3.8.05 1.45-.25 3.5-.2 1.9 0 3.35-.3 2.1-.45 8.25-.8 6.25-.3 8.75-.05 1.7.2 8 1 5.75.3 7.4-1.75 1.75-2.2 4.95-10.85 2.8-7.55 4.05-12.4.65-2.5 3.6-17.2 2.75-13.75 3.15-14.8.45-1.25 4.45-22.85 4.05-22.4 4.4-24.4.3-1.45 3.75-25.2 3.35-23.2 4-26.3 1.15-5.5 2.35-18.8 1.4-15.7.8-23.7-.6-8.35-3.35-11.15z" id="a" /> 
              </defs> 
            <use xlink:href="#a"/> 
          </svg>
          <img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f6df13a9d4a44573a45e9fc5cbcf012d~tplv-k3u1fbpfcp-zoom-1.image" alt="">
    </section>

在线:https://codepen.io/kylewetton/pen/OJLmJoV

6. CSS 等比缩放 aspect-ratio

.container {
  width: 100%;
  aspect-ratio: 1 / 1; /* 生成一个 1:1 的正方形 */
}

🌰:

7. CSS 滚动捕捉 scroll-snap-type

🌰:实现 h5 滚动效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {margin: 0;padding:0;}
       .container {
            height: 100vh;
            overflow-y: auto;
            scroll-behavior: smooth;
            -webkit-overflow-scrolling: touch;
            scroll-snap-type: y mandatory;
            scroll-snap-stop: always;
        }
        /* .container::-webkit-scrollbar {
            display: none;
        } */ 

        .container img {
            height: 100vh;
            width: 100%;
            scroll-snap-align: center;
            vertical-align: middle;
        }


    </style>
</head>
<body>
    <div class="container">
        <img src="https://picsum.photos/500/300?random=1" alt="">
        <img src="https://picsum.photos/500/300?random=2" alt="">
        <img src="https://picsum.photos/500/300?random=3" alt="">
        <img src="https://picsum.photos/500/300?random=4" alt="">
        <img src="https://picsum.photos/500/300?random=5" alt="">
        <img src="https://picsum.photos/500/300?random=6" alt="">
        <img src="https://picsum.photos/500/300?random=7" alt="">
      </div>
</body>
</html>

在电脑上的滚动略有卡顿,手机上体验良好

🌰:Demo: codepen.io/airen/full/…(图片的中心位置和容器中心位置对齐)
🌰:Demo: codepen.io/airen/full/… ( iOS的一些原生交互)
🌰:Demo: codepen.io/airen/full/…

8. CSS Gap(沟槽)

.gap { 
  gap: 10px; 
} 
/* 等同于 */ 
.gap { 
  row-gap: 10px; 
  column-gap: 10px 
} 

9. CSS 逻辑属性 (个人暂无用处)

可能在某些国际化需求上会用到

<style>
.right {
    direction: rtl;
    unicode-bidi: embed;
}
:is(.right, .left) p {display: inline-block;}
:is(.right, .left) .avatar {
    margin-inline-end: 1rem; // 逻辑属性
    /* 等于以下两句话 */
    /*
    .avatar {
      margin-right: 1rem;
    }
    div[dir="rtl"] .avatar {
      margin-right: 0;
      margin-left: 1rem;
    }
    */
}
</style>
<div>
    <div class="left">
      <p class="avatar">头像</p>
      <p>内容: abcdefg</p>
    </div>
    <div class="right" dir="rtl">
      <p class="avatar">头像</p>
      <p>内容: abcdefg</p>
    </div>
</div>

10. CSS 比较函数 min()max()clamp()

🌰:min(50vw, 500px) 在浏览器视窗宽度改变时,返回的值的变化:

clamp(MIN, VAL, MAX),这三个值之间的关系(或者说取值的方式):
  • 如果 VAL 在 MIN 和 MAX 之间,则使用 VAL 作为函数的返回值
  • 如果 VAL 大于 MAX ,则使用 MAX 作为函数的返回值
  • 如果 VAL 小于 MIN ,则使用 MIN 作为函数的返回值
.element { 
    width: clamp(100px, 50vw, 500px); 

    /* 50vw相当于视窗宽度的一半,如果视窗宽度是760px的话,那么50vw相当等于380px*/ 
    width: clamp(100px, 380px, 500px); 

    /* 用min()和max()描述*/ 
    width: max(100px, min(380px, 500px));

    /*min(380px, 500px)返回的值是380px*/ 
    width: max(100px, 380px);

    /*max(100px, 380px)返回的值是380px*/ 
    width: 380px; 
}

11. CSS 内容可见性 content-visibility 未实测

在这种场合下,我们可以使用CSS的 content-visibility 来跳过屏幕外的内容渲染。也就是说,如果你有大量的离屏内容(Off-screen Content),这将会大幅减少页面渲染时间。

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

12. CSS 的嵌套 未发布

W3C 也在讨论和定义CSS中的嵌套规则。目前两种规则:

foo {
    color: red;
  
  @nest bar {
    color: green;
  }
}

// 或者 
foo {
    color: red;
  
  & bar {
    color: green;
  }
}

// 都等同于
foo {
    color: red;
}

foo bar {
    color: green;
}

13. @scope

/* @scope (<root>#) [to (<boundary>#)]? { … } */

@scope (.tabs) to (.panel) {
  :scope { /* targeting the scope root */ }
  .light-theme :scope .tab { /* contextual styles */ }
}

相关文章

  • 你可能还不知道的 CSS 特性

    1. :is() 和 :where() 其实这两个选择器等同于: 他们唯一不同之处,就是选择器权重不同。等同于以:...

  • 你不知道css特性

    1. css做表单的验证 随笔记录: 获取url中的hash值 location.hash 行内元素span, ...

  • Less学习笔记

    Less作为 CSS 的一种扩展,不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法,你可以在任何...

  • CSS的三大特性总结(深入理解css权重)

    【目录】 css的三大特性层叠性特性说明原理DEMO继承性优缺点重点DEMOhtml代码css代码优先级css特殊...

  • 我的CSS 疑问大全

    &文章解读& 看标题可能大家还不太清楚我要将的是什么,“我的CSS 疑问大全”指的是我自己不理解的CSS知识,可能...

  • 易错题

    答案 答案 3 4 从字符串中,把数字识别出来 你知道css3哪些新特性?我擦,实话实说, 我不太清楚哪个是css...

  • CSS 的使用中你可能不知道的 7 件事

    欢迎移步我的博客阅读:《CSS 的使用中你可能不知道的 7 件事》 无论你信不信,JavaScript 和 CSS...

  • 你可能不知道的css

    最近在学习《css揭秘》这本书,作者是w3c工作组的特邀专家,设计css语言的委员之一。这本书实现了很多常见的、我...

  • CSS的特性

    CSS的特性 1.层叠性 在两个样式权限相同的情况下,同一个标签中如果样式属性发生冲突,后面的会将前面的属性覆盖掉...

  • CSS相关文章

    前端面试之 CSS3 新特性 除了 HTML5 的新特性,CSS3 的新特性也是面试中经常被问到的。如何用 js ...

网友评论

      本文标题:你可能还不知道的 CSS 特性

      本文链接:https://www.haomeiwen.com/subject/kqskyltx.html