postcss基本使用

news/2024/11/8 18:44:22/

参考资料:13 分钟掌握 PostCSS_哔哩哔哩_bilibili(峰华前端)

postcss基本使用

postcss是个处理css相关文件的平台,可以通过插件来补全浏览器前缀、使用新特性转成旧的写法、px自动转rem、css语法规则检查等等。

搭建项目

新建文件夹 test-postcss

用vscode打开,命令里初始化项目

yarn init -y

新建index.html,内容包括

<head><meta charset="utf-8" /><link rel="stylesheet" href="./style.css" /><title>test-postcss</title>
</head>
<body><main><div class="boxs"><div class="box"></div><div class="box"></div><div class="box"></div></div></main>
</body>

新建style.css,内容有

main {margin-bottom: 24px;letter-spacing: 1px;font-size: 24px;height: 100vh;background-color: black;
}.boxs {padding-bottom: 18px;display: grid;grid-template-columns: repeat(3, 1fr);height: 100%;align-content: space-around;
}.box {width: 100px;height: 100px;background: linear-gradient(45deg, blue, orange);
}

使用postcss

安装

yarn add postcss postcss-cli -D

运行

npx postcss style.css -o dist.css

这时可以看到根目录下的dist.css,内容和style.css一样,因为还没有配置任何插件。

把浏览器里的引用地址改为dist.css

 <link rel="stylesheet" href="./dist.css" />

使用autoprefixer插件

安装

yarn add autoprefixer -D

运行指令,通过参数使用这个插件

npx postcss style.css -o dist.css -u autoprefixer

此时打包后的代码仍无变化,可以用 npx autoprefixer --info 查看加前缀的属性。

修改支持的浏览器列表,让兼容Chrome 69以上的版本,在package.json中增加

  "browserslist": ["cover 99%","Chrome >= 69"],

运行指令(同上),可以看到生成的dist.css里面一些属性和值加了浏览器前缀

-webkit-align-content: space-around;-ms-flex-line-pack: distribute;align-content: space-around;
……background: -webkit-linear-gradient(45deg, blue, orange);background: -moz-linear-gradient(45deg, blue, orange);background: -o-linear-gradient(45deg, blue, orange);background: linear-gradient(45deg, blue, orange);

命令行带参不方便,可使用配置文件。根目录下新建postcss.config.js,内容为

module.exports = {plugins: [require("autoprefixer")]
}

删除dist.css后运行不带参数的指令

npx postcss style.css -o dist.css

发现配置生效了。

使用postcss-preset-env

这个插件功能涵盖了autoprefixer,而且还有将高版本css转成低版本的能力,即css界的babel。

安装

yarn add postcss-preset-env -D

测试babel,需要把css的stage属性提高,使用比较新的属性测试,比如& 选择器

修改 postcss.config.js ,增加如下配置

const postcssPresetEnv = require('postcss-preset-env')module.exports = {plugins: [postcssPresetEnv({stage: 0}),]
}

然后在css中使用&嵌套选择器,以及使用比较新的属性padding-inline

.boxs {padding-inline: 12px;
}
.box {&:hover {background: linear-gradient(45deg, orange, blue);}
}

运行指令编译css,发现输出的css中 & 内的内容被提出来了,padding-inline 也变成了padding-leftpadding-right。鼠标滑过浏览器上的色块,也有变化。

使用stylelint

stylelint可以检查css写法是否规范

安装

yarn add stylelint stylelint-config-standard -D

根目录新建.stylelintrc.json文件,内容为

{"extends":"stylelint-config-standard"
}

在postcss.config.js里面配置

plugins: [require("stylelint")
]

再运行编译,发现控制台弹出黄色的警告,内容是哪些css写法不符合规范。如果没看到弹出警告,那尝试将某个属性名字或值修改成一个错误的写法,再编译,警告就出来了。

使用postcss-pxtorem

可以在打包时自动把px单位转换成rem

安装

yarn add postcss-pxtorem -D

在postcss.config.js中配置,其中propList为‘*’是将所有属性转换,而默认的只有字号字间距等几个属性。

	plugins: [require("postcss-pxtorem")({propList: ['*'],})]

运行编译指令,发现输出的css中的px已经变成了rem。

指令简写

运行一长串指令不方便,可以添加到package.json中的scripts里

  "scripts": {"build":"postcss style.css -o dist.css"}

现在在命令行直接运行 yarn build 即可

在CRA中使用

先提交完代码,再暴露配置项

yarn eject

在config下的webpack.config.js中查找postcss,把postcss-preset-env中的stage改为0。注意有两处,分别是判断是否使用useTailwind。

然后再package.json中把postcss相关的依赖重新手动安装为最新版。重启项目,发现css新写法已经被转换了。

查找ident: ‘postcss’,在后面同级的plugins数组内最后添加pxtorem模块即可,当然先要手动安装依赖。

require('postcss-pxtorem')({propWhiteList: ['*'],
})

重启项目,px已经变成rem了。


http://www.ppmy.cn/news/117185.html

相关文章

Python编程常见8大技巧汇总

01.字符串输入 整理用户输入的问题在编程过程中极为常见。通常情况下&#xff0c;将字符转换为小写或大写就够了&#xff0c;有时你可以使用正则表达式模块「Regex」完成这项工作。但是如果问题很复杂&#xff0c;可能有更好的方法来解决&#xff1a; user_input “This\nstri…

PIL TypeError:无法处理此数据类型:(1,1,1),|u1

转载自&#xff1a;https://cloud.tencent.com/developer/ask/sof/1239327/answer/1718259 PIL TypeError:无法处理此数据类型&#xff1a;(1&#xff0c;1&#xff0c;1)&#xff0c;|u1 问题 我有一个形状为(1,28,28)的numpy.ndarray&#xff0c;值是0,1范围内的浮点数。我…

TypeError: Cannot handle this data type: (1, 1, 128), |u1

原始代码&#xff1a; scipy.misc.toimage(img).save(s, format"png") 因为scipy1.2.0以上没有了.toimage等很多函数。所以运用其他的来代替。 from PIL import Image Image.fromarray(np.uint8(img).convert(RGB).save(s, format"png") 但是运行会报错…

KeyError: ((1, 1, 512), ‘|u1‘) 报错

今天在学习tensorboard时 发现了这个错误&#xff1a; 原因是调用write.add_image()参数错误导致的 我的代码&#xff1a; writer.add_image("ant1", image_array, 1, dataformats"CHW") pycharm 里ctrl鼠标左键查看方法源码 嗯&#xff1f;&#xff1f…

TypeError: Cannot handle this data type: (1, 1, 28), |u1

PIL和numpy相互转换方式如下&#xff1a; from PIL import Image#PIL image转成numpy np_img np.asarray(PIL_img) #参数时PIL类型的图片 或 np_img np.array(PIL_img)#将array准成PIL image Image.fromarray(np.uint8(np_img))但是直接用Image.fromarray(np.uint8(data))…

pytorch错误记录:TypeError: Cannot handle this data type: (1, 1, 64), |u1

经过测试&#xff1a; pairwise_distance函数在pytorch1.7上的表现与pytorch1.10/pytorch1.11上有区别,代码如下 pytorch1.7上 feat_A的size是1&#xff0c;64&#xff0c;64&#xff0c;64&#xff0c;feat_B的size是1&#xff0c;64&#xff0c;64&#xff0c;64 出来应该…

教你看懂存储卡的速度,U3 U1 ⑩ ④ V30 V60 V90 A1 A2

先看2张总结图 一张中文&#xff0c;一张英文。图片内容一样。 Class等级标准&#xff1a; 早期存储卡速度等级使用Class等级来标识。主要有C10、C6、C4、C2四种标识。C2最低写入速度为2MB/秒&#xff1b;C4最低写入速度为4MB/秒&#xff1b;C6最低写入速度为6MB/秒&#xff1…

PyTorch 报错:TypeError: Cannot handle this data type: (1, 1, 512), |u1 (已解决)

PyTorch 报错&#xff1a;TypeError: Cannot handle this data type: (1, 1, 512), |u1 &#xff08;已解决&#xff09; pytorch 代码&#xff0c;保存图片 语句时&#xff0c;报错 TypeError: Cannot handle this data type: (1, 1, 512), |u1 这是因为&#xff0c;当要保存…