1、appearance属性

可以将其他的元素伪装成你指定的元素,

  1. <style>
  2. .switch-component{
  3. -webkit-appearance:radio; /*这个input就会按照radio绘制*/
  4. }
  5. </style>
  6. <input class="switch-component" type="checkbox" />

2、focus-within属性

这个属性可以由父元素控制子元素

  1. <style>
  2. * {
  3. border: 0px;
  4. box-sizing: border-box;
  5. }
  6. .box {
  7. margin: 100px auto 0px;
  8. }
  9. .box:focus-within {
  10. transform: scale(1.5);
  11. }
  12. .box input[type="text"] {
  13. width: 500px;
  14. height: 50px;
  15. outline: 0px;
  16. border: 1px solid #333;
  17. }
  18. .box input[type="button"] {
  19. width: 50px;
  20. height: 50px;
  21. outline: 0px;
  22. border: 0px;
  23. }
  24. </style>
  25. <div class="box">
  26. <input type="text" />
  27. <input type="button" value="按钮"/>
  28. </div>

3、scroll-snap(滚动捕捉)

这个属性可以进行初级的滚动捕捉,比较适合子盒子在父盒子内以父高或者父宽的大小移动

  1. <div class="test">
  2. <li>第一个</li>
  3. <li>第二个</li>
  4. <li>第三个</li>
  5. <li>第四个</li>
  6. <li>第五个</li>
  7. </div>
  8. <style>
  9. .test{
  10. height: 300px;
  11. overflow-y: scroll;
  12. scroll-snap-type: y mandatory; /* 说明父盒子滚动的类型和方向。*/
  13. }
  14. li{
  15. scroll-snap-align: center; /* 设置子盒子的对齐方式 */
  16. }
  17. </style>

4、less、scss、css 以及js 进行变量共享

项目中在进行换肤,以及主题定制的时候,总是希望维护一处样式变量。其他地方进行引用,大多数场景,less、scss等文件好说,但是有的时候涉及到 js 控制主题色更改,还得单独设置 查询资料之后得知, **css Module ** 支持 **:export** 关键字,原理跟 **ES6****export** 作用差不多

  1. // CSS Module 有一个:export关键字,它在功能上等同于 ES6 的关键字export,即导出一个 js 对象。
  2. // .less
  3. :export {
  4. name: "less";
  5. mainColor: @mainColor;
  6. fontSize: @fontSize;
  7. }
  8. // .scss
  9. :export {
  10. name: "scss";
  11. primaryColor: $primaryColor;
  12. fontSize: $fontSize;
  13. }
  14. // css
  15. :export {
  16. primaryColor: $primaryColor;
  17. fontSize: $fontSize;
  18. }

5、env() css3 函数

可以拿到环境变量,用于设置 css 样式表中。

env 函数可接收两个参数,头一个参数为 环境变量 ,第二个可选参数,如果环境变量不可用,该参数可让您设置备用值

可取变量:safe-area-inset-top、safe-area-inset-right、safe-area-inset-bottom、safe-area-inset-left

  1. // safe-area-inset-* 值可用于确保内容即使在非矩形的视区中也可以完全显示。
  2. env(safe-area-inset-top, 20px);
  3. env(safe-area-inset-right, 20px);
  4. env(safe-area-inset-bottom, 20px);
  5. env(safe-area-inset-left, 20px);

注意:该环境变量,需要配合 viewport meta 需要添加一下代码。最需要设置 viewport-fit=cover

  1. <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"/>

6、CSS 控制是否允许用户可点击

pointer-events:none:顾名思意,就是鼠标事件拜拜的意思。元素应用了该CSS属性,链接啊,点击啊什么的都变成了“浮云牌酱油”

  1. a.disabled {
  2. pointer-events: none;
  3. }

css 知识点积累 - 图1

7、通过JavaScript 控制 css 变量

在使用 CSS3 变量的时候,总会碰到这样一种场景: 某一个变量是需要通过 JavaScript动态获取的,并不能直接在 css中写死。但是又不想通过 JavaScript 去操作样式

这个时候就可以使用 setProperty

  1. // 不考虑页面缩放的情况
  2. const vh = window.innerHeight * 0.01;
  3. document.documentElement.style.setProperty('--vh', `${vh}px`);
  4. // 考虑页面缩放的情况
  5. window.addEventListener('resize', () => {
  6. let vh = window.innerHeight * 0.01;
  7. document.documentElement.style.setProperty('--vh', `${vh}px`);
  8. });

就会出现这种
image.png
然后再在样式中书写

  1. .my-element {
  2. height: calc(var(--vh, 1vh) * 100);
  3. }

8、给连续相邻的元素 hover状态下阴影样式,前面的阴影会被后面的阴影遮挡

遮挡的样式:
image.png
初步猜测是由于层级导致的。这是因为在正常文档流排版中,后面的元素在相同层级中,后面的元素 还是会略高于前一个元素。但是解决这个问题,我又想靠他自己撑开自动排版,那就只能使用 position: relative 并且是在 hover 状态下添加。

  1. &:hover {
  2. position: relative;
  3. }

添加之后的样式
image.png

9、aspect-ratio 对元素设置一个规定的宽高比

当元素需要设置固定宽高比的话,以前只能是用 :
1、JavaScript 根据 宽去动态计算出高,或者根据 高 动态计算 宽。
2、或者使用 CSSpaddinghook 实现先宽高比
最新的 CSS3 规范中支持使用 aspect-ratio: <width-ratio>/<height-ratio> 来归档元素的宽高比
注意:这个属性具有局限性,只对于设置了 宽\高 任何一项或者多项的元素起作用
用法:

  1. aspect-ratio: 1 /* 宽 */ / 1 /* 高 */;
  2. aspect-ratio: 16 / 9;
  3. /** 也可以设置成 **/
  4. img, input[type="image"], video, embed, iframe, marquee, object, table {
  5. aspect-ratio: attr(width) / attr(height);
  6. }

10、accent-color 可以给 部分元素设置强调色

之前给 <input type="checkbox">、<input type="radio">、<input type="range">、<progress> 这类的选中状态的时候,需要通过 :check 伪类 去设置,现在只需要通过 accent-color就可以设置
当然,这个属性是有兼容问题的
image.png
用法:

  1. <input type="checkbox" checked />
  2. <input type="checkbox" class="custom" checked />
  3. <style>
  4. input {
  5. accent-color: auto;
  6. display: block;
  7. width: 30px;
  8. height: 30px;
  9. }
  10. input.custom {
  11. accent-color: rebeccapurple;
  12. }
  13. </style>

页面结果:
image.png