当前位置: 首页 > Web前端 > CSS

PostCSS真的好用!

时间:2023-03-30 22:43:50 CSS

在PostCSS官网上有这样的介绍PostCSS的特性。箭头后面是对应功能的插件及其github地址。提高代码可读性→Autoprefixer今天就使用明天的CSS!→postcss-cssnext全局CSS结束→postcss-modules避免你的CSS出错→stylelint强大的网格CSS→丢失→丢失autoprefixer、cssnext和CSSModules等插件。上面列出的特性都是由相应的postcss插件实现的。要使用PostCSS,您需要将其与webpack或parcel结合使用。Parcel中使用PostCSS的方法:添加配置文件.postcssrc(JSON)、.postcssrc.js或postcss.config.js。以.postcssrc文件为例:{"modules":true,"plugins":{"autoprefixer":{"grid":true}}}Plugins被指定为plugins对象中的键,选项使用定义对象的价值。如果插件没有选项,只需将其设置为true。接下来我会根据官方readme的demo一一介绍各个插件,并补充一些插件背后隐藏的知识点的讲解。1.什么是Autoprefixer?首先明确Autoprefixer是一个PostCSS插件,根据caniuse解析css,并为其添加浏览器厂商前缀。没有任何供应商前缀的通常写法。::placeholder{color:gray;}Autoprefixer将根据当前浏览器支持使用功能和属性数据为您添加前缀。可以试试Autoprefixer的demo:http://autoprefixer.github.io/从上图可以看出,Autoprefixer将不支持已经完全符合W3C标准的css2.1属性display、position等没有浏览器差异。添加前缀,css3属性transform会为其添加前缀,其中--webkit是chrome和safari的前缀,--ms是ie的前缀,像firefox已经实现了transform的W3C标准化,所以使用transform是Can。因此,Autoprefixer是一款非常好用的前端开发加速工具,但需要基于PostCSS才能发挥作用。如果你对venderprefix有疑问,可以阅读我的博客:rem/VenderPrefix/CSSextensions2。什么是postcss-cssnext?postcss-cssnext语法输入::root{--fontSize:1rem;--主色:#12345678;--centered:{显示:flex;对齐项目:居中;证明内容:居中;};}body{颜色:var(--mainColor);字体大小:var(--fontSize);行高:calc(var(--fontSize)*1.5);padding:calc((var(--fontSize)/2)+1px);}.centered{@apply--centered;}浏览器可用语法output:body{color:rgba(18,52,86,0.47059);字体大小:16px;字体大小:1rem;行高:24px;行高:1.5rem;padding:calc(0.5rem+1px);}.centered{display:-webkit-box;显示:-ms-flexbox;显示:弹性;-webkit-box-align:居中;-ms-flex-align:居中;对齐项目:居中;-webkit-box-pack:中心;-ms-flex-pack:中心;justify-content:center;}粗略看了下demo,http://cssnext.io/playground/,感觉既好用又不好用。有用的是使用var()和calc()来计算css属性的值,还有@apply等规则的写法,也可以用来理解一些新的cssdraft特性;不好用有一定的学习成本,前期需要一定时间结合webpack、gulp、parcel,如果有前端新人加入,一定要掌握cssnext的语法。这样做,似乎是想把css变成一种可以进行逻辑处理的语言,但我个人认为,对于像css这种需要具体思考,需要有一定的灵活性的语言,在工作中使用cssnext并不是一个好的方式。很多debug的选择,但可以作为工作之余学习新的CSS草稿特性的入口,待纳入标准后使用。一开始对自己的想法没有把握,就去看看前辈们的想法。其中,顾铁岭对cssnext的想法和我的如出一辙:CSS转译器(transpiler),按照目前还处于草案阶段,还没有被浏览器实现的标准,将代码翻译成符合当前浏览器实现的CSS。类似于ES6的Babel。相比之下,Autoprefixer更有实用价值,以后浏览器如何实现cssnext实现的功能还是个疑问,感觉只能玩玩了。3.什么是postcss-modules?在看postcss-modules之前,首先要弄清楚CSSModules的概念。关于CSSModules,可以看我翻译的一篇文章:【翻译】什么是CSSModules?为什么我们需要它们?postcss-modules是CSSModules在PostCSS上的实现插件。这里有介绍postcss-modules的插件作者写的一篇文章:PostCSS-modules:makeCSSgreatagain!。在我有限的开发经验中,我只在react中使用过cssmodules,在vue和angularjs中没有使用过,而且在react中使用时,我不会使用postcss-modules插件,而是使用react-css-modules插件-在CSSModules中考虑反应。下面给出最简单的入门示例:在React的上下文中,CSS模块可能会这样写:importReactfrom'react';importstylesfrom'./table.css';exportdefaultclassTableextendsReact.Component{render(){returnA0

B0
;}}最终渲染出来的组件的标签会是这样的:>B0如果对类名为什么会编译成table__table___32osj这样的形式有疑惑,需要先makecssmodules搞清楚:【翻译】WhatareCSSModules?为什么我们需要它们?如果你需要在开发或生产环境中使用webpack,你可以阅读react-css-modules的官方文档来寻找答案。通过这次探索,我们可以发现,在不同的生态,或者说框架体系中,同样的技术,比如CSSModules,都会有对应的实现方法,而我们需要掌握的不仅仅是在一个下的配置方法一定的框架,但是这种开发思路。因为学习的核心是学习知识,而不是无穷无尽的学习工具。4.什么是stylelint?这是一个用来强制开发者按照团队css规范编写css样式的工具,类似于eslint。要使用它,只需启用规则。摘自stylelint作者的博客文章:是的,您的团队可能在某处的纯文本wiki中记录了代码样式规范。然而,不可忽视的是人为因素:人总是会犯错误——总是在不经意间。即使您自律并执着于遵循某种代码风格,也无法确保您的同事或开源项目的贡献者也能做到这一点。如果没有linter的帮助,您必须手动检查代码样式和错误。机器存在的意义在于代替人类完成可以自动化的任务。linter就是这样一台机器。有了linter,你就不需要浪费时间检查代码风格,也不需要为每一个代码错误都写很多注释,所以可以大大减少你花在代码审查上的时间。时间。您不必检查代码的作用或代码的外观。事实和stylelint的作者说的一样。即使团队有前端开发规范,也会不经意地写出不符合规范的代码,因为不可能每个人在写CSS规则之前都先检查规范。如果团队没有codereview的水平,写各种风格的css代码是难免的。短期内不会有影响。当项目变大的时候,增加新的功能或者重写旧的功能都会是一件很痛苦的事情。我们主要关注Rules部分:stylelint规则主要分为三种类型,我将从每种规则中选择一种作为示例。可能的错误(常见的错误写法,强烈建议打开)限制语言特性(放弃一些正确的写法,适度建议打开)文体问题(统一代码风格和代码,一般建议打开)可能的错误------color-no-invalid-hex:禁用无效的十六进制颜色完整的十六进制颜色可以是6或8(7、8位是透明度值)字符。它们的缩写也可以是3或4个字符。options:true以下代码违反了规则:a{color:#00;}a{颜色:#fff1az;}a{颜色:#12345aa;}以下代码符合规则:a{color:#000;}a{颜色:#000f;}a{颜色:#fff1a0;}a{颜色:#123450aa;}限制语言特性------color-no-hex:禁止使用十六进制颜色选项:truehexadecimal}a{color:#fff1aa;}a{颜色:#123456aa;}无效的十六进制颜色也违反了规则:a{color:#foobar;}a{颜色:#0000000000000000;}下面是符合规则的:a{color:black;}a{颜色:rgb(0,0,0);}a{颜色:rgba(0,0,0,1);}Stylisticissues------color-hex-case:AutomaticallyconverthexadecimalcolortouppercaseorlowercaseOptionsstring:"lower"|"upper"可以使用stylelint"foo/*.css"--fix来实现相同的功能。“小写”下面的代码是非法的:a{color:#FFF;}下面的代码是符合规则的:a{color:#000;}a{颜色:#fff;}“大写”下面的代码是非法的:a{color:#fff;}下面是符合规则的:a{color:#000;}a{颜色:#FFF;更多stylelint规则可以在以下位置找到:https://github.com/stylelint/...5。什么是迷失网格?LostGrid是一个强大的PostCSS网格系统,可以与任何预处理器甚至原生CSS一起工作。这里有一个非常好的演示显示:http://lostgrid.org/lostgrid-...显示了2个摘录以供说明。.ColumnSection__griddiv{lost-column:1/1;}@media(min-width:400px){.ColumnSection__griddiv{lost-column:1/3;}}@media(min-width:900px){.ColumnSection__griddiv{丢失列:1/6;}}大于900px:小于900px:.NestingSection__grid{background:#8eb19d;}.NestingSection__griddiv{background:#7ba48d;丢失列:1/3;}.NestingSection__griddivdiv{背景:#68977c;lost-column:1/2;}查看css样式后发现table布局,before/after伪元素,css选择器,border-box布局都用的很巧妙,但其实最核心的点是充分利用css本身的流式布局和BFC。针对各种情况,使用大量的样式来约束插件。在css3的flex布局和grid布局逐渐被浏览器支持的今天,个人建议不要使用LostGrid插件。期待与您交流,共同进步。欢迎大家加入我创建的与前端开发息息相关的技术讨论群:SegmentFault技术圈:ES新规范语法糖SegmentFault专栏:趁你还年轻,做一个优秀的前端工程师知乎专栏:趁你年轻,做优秀的前端工程师Github博客:趁你还年轻233的个人博客前端开发QQ群:660634678微信公众号:人寿归/excellent_developers努力成为优秀的前端工程师!