之前写过一点点 后来又看了 一篇ppt You Might Not Need CSS Preprocessor 讲了一些关于当前预处理解决的痛点以及它们缺点 并给出了使用原生css解决这些痛点的方法 然而大部分方法都还只是标准 甚至有的还是提案 浏览器实现就更少了 不过可以作为展望来期待一下美好的未来吧 算是The Future of CSS
预处理器解决的痛点:
- 变量 (CSS Variables)
- 混合 (Mixins)
- 嵌套 (Nesting)
- 模块 (Modules)
- 其他: 选择器辅助方法, 颜色函数等 (Selector helpers, color functions)
预处理器的缺点:
- 额外配置 (Additional setup)
- 需要编译 (Compilation)
- 不够标准化的语法 (Not standardized syntax)
- 调试困难 (Hard debug)
然后文章告诉你 这些痛点都有原生的解决办法 具体的兼容性可以查看 caniuse或者MDN或者官方标准 这些东西更新太快了 不能保证写本文的时候的标准以后不会变
变量 (CSS Variables)
第一个变量: currentColor
用法很简单 基本上所有现代浏览器都能用了
1 | div { |
更加通用的css变量 CSS Variables 标准
语法
1 | /* 定义变量 */ |
使用
1 | :root { |
为啥 css变量要用--foo
和var(foo)
这样的语法呢 而不用sass或者其他的类似$foo
呢 这里有篇文章 Let’s Talk about CSS Variables 相当早的文章 关于制定这个语法的时候 规则制定者们的一些思考
具体的css变量语法各个地方资料都很多 这里就不多讲了
混合 (Mixins)
主要是@apply
这个语法和css变量的有点点相似 @apply 提案
1 | :root { |
和这个功能相似的有个 @extend(继承) 提案
1 | .error { |
嵌套 (Nesting)
和各种预处理也没有大的区别 nesting 提案
基本语法
1 | ul { |
还有一个关键字 @nest
必须要结合&
使用
1 | .foo { |
相当于
1 | .foo { |
模块 (Modules)
这个所有浏览器应该都兼容了的 早在ie5.5
就可以用了
但是由于浏览器没有实现并行请求 所有的子模块按顺序全部加载 会阻塞其他请求 所以这个语法虽然没有兼容性问题 但是几乎没人用 但是等到HTTP/2
普及之后这个情况会有改观
1 | /* Formal syntax */ |
其他
:matches伪类
可以使用css选择器同时选择多个元素 来自Selectors4 标准
1 | .nav:matches(.side,.top) .links:matches(:hover, :focus) { |
@custom-selector
自定义选择器 来自CSS Extensions 草案 这个草案非常新鲜 9 February 2017
才编辑过的
1 | @custom-selector :--text-inputs input[type="text"], input[type="password"]; |
这个功能是不是和:matches
有点重复
@custom-media
自定义媒体查询 这个语法和@custom-selector
如出一辙 mediaqueries 草案
1 | @custom-media --tablet (min-width: 800px) and (max-width: 1024px); |
Color Function
是一个颜色的扩展类 帮助设置一些颜色什么的 Color Function
1 | /* syntax */ |
现在这些特性肯定不能全部都用上的 如果想用 可以试一下这个 css next 相关的一些新css特性也可以再这里查到