九、CSS工程化方案

一、PostCSS介绍

二、PostCSS插件的使用

项目安装 - npm install postcss-cli 
全局安装 - npm install postcss-cli -g

postcss-cli地址:GitHub - postcss/postcss-cli: CLI for postcss

postcss地址:GitHub - postcss/postcss: Transforming styles with JS plugins

编译CSS:

postcss src/01-postcss.css -o build\01-postcss.css

注意:

postcss - 本身不具备处理CSS能力,只是可以解析CSS,我们可以在解析的过程中,可以对CSS解析结构进行修改。

我们现在对原CSS加CSS前缀处理:

原始CSS:

/* @import "./02-plugins-module.css"; */.box{box-shadow: 0 0 3px rgba(255,255,255, .3);
}

这里需要使用到autoprefixer插件

autoprefixer插件 - 为CSS添加前缀,确保被浏览器兼容

安装autoprefixer插件

npm install autoprefixer

解析结果:

注意:

        autoprefixer需要指定浏览器的类型,如果不指定,会自动加一些默认的浏览器类型,我们也可以手工去指定。

比如,指定所有浏览器最近的2个版本:

浏览器市场份额大于10%的浏览器:

注意:'>0%' - 就是支持所有的浏览器。

可以指定具体浏览器版本: Firefox版本 > 30

关于浏览器的指定方式,见下图:

postcss-import插件 - 合并CSS文件

 

解析结果:

css-nano插件 - 压缩代码

安装cssnano插件:

npm install cssnano

 postcss配置:

压缩CSS前:

压缩CSS后:

cssnext插件  - 把新 CSS 规范(浏览器尚未实现)转换成兼容性更强的 CSS

安装cssnext:

npm install cssnext

cssnext配置

编译结果:

 

precss插件 - 基于PostCSS的预处理器

编译前:

PostCSS配置:

编译后:

gulp-postcss插件 - 构建工具

原理:通过流的方式,将各个插件串起来,以达到构建的目的。

安装gulp:

npm install gulp

定义gulp构建任务(gulpfile.js):

const gulp = require('gulp');
const autoprefixer = require('autoprefixer');
const cssnano = require('cssnano');
const atImport = require('postcss-import');//定义了一个叫'postcss'的任务
gulp.task('postcss', function () {//获取了一个gulp-postcss,并指定了src源文件,将它通过管道的方式传给gulp,其中定义了需要执行的插件,最终将结果输出到build目录下var postcss    = require('gulp-postcss');return gulp.src('src/02-plugins-main.css').pipe(postcss([atImport,autoprefixer({browsers:['last 2 versions']}),// cssnano])).pipe(gulp.dest('build/'));
});

执行gulp:

//postcss - task任务名
gulp postcss

webpack插件 - 打包工具

解释:

        webpack认为,JS是是整个应用的核心入口,只需引入js,其他一切都交给js来处理。

课程示例:

安装webpack:

npm install webpack

src\05-webpack-modules.js

src\05-webpack-main.js

执行打包:

在html中引入打包好的js:

打开页面查看打包效果:

前边说过,对于webpack,js是一切的入口,CSS等资源都可以被JS管理打包,看下面示例:

执行打包:

 注意:

        webpack直接引用CSS,执行打包会报错,这是因为,上面我们引用CSS,是通过require引用的,webpack认为引用的文件是个JSON格式文件,而实际上引入的文件是CSS语法,因此就报错了,这时,需要利用webpack的loader机制,通过css-loader插件,处理css文件,再交给webpack。

安装css-loader、style-loader插件命令:

//css-loader - 作用:css-loader负责把css变成js,交给webpack处理
//stye-loader - 作用:将变成js的css注入到html
npm install css-loader style-loader

webpack配置css-loader、style-loader插件:

重新执行打包:

查看页面效果:

css-modules和extract-text-plugin

为了增强理解,看下面示例:

执行打包:

打开页面查看效果:

页面效果出来了,但是存在两个问题:

1.组件的样式有可能被别人的样式干扰到,同样 组件的样式也可能干扰到别人的当前页面元素,这是因为样式的名称太普通,很容易跟别人的样式发生冲突,怎么解决呢,那就是加个不跟别人冲突的样式前缀,其实这个解决办法,css-modules已经实现了

2.通过页面可以看到,html的样式是被JS注入到了header内,这样会造成性能影响。

解决问题1,现在修改下代码:

将编译后返回的动态样式名称,动态写到对应的class上:

重新编译:

之前我们讲了,css是通过js加载的,所以性能会有影响,为什么不通过浏览器机制直接加载呢!

解决问题2,修改代码:

修改webpack.config.js,通过extract-text-webpack-plugin插件处理。

重新编译打包:

注意看,这次多输出了一个CSS文件,我们可以对比下上次编译打包的结果:

把新生成的CSS文件引入HTML文件中:

查看页面:

webpack小结

三、真题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6873.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Baklib助力企业如何搭建内容中台的全新策略解析

内容概要 在当今快速变化的商业环境中,企业面临着数据爆炸和信息管理的巨大挑战。内容中台作为一种新兴的管理理念,专注于内容的集中管理与高效利用,旨在帮助企业优化信息流动,提高工作效率。通过构建一个灵活、可扩展的内容中台…

AR智慧点巡检系统探究和技术方案设计

一、项目背景 随着工业生产规模的不断扩大和设备复杂度的提升,传统的人工点巡检方式效率低下、易出错,难以满足现代化企业对设备运行可靠性和安全性的要求。AR(增强现实)技术的发展为点巡检工作带来了新的解决方案,通…

LabVIEW项目中的工控机与普通电脑选择

工控机(Industrial PC)与普通电脑在硬件设计、性能要求、稳定性、环境适应性等方面存在显著差异。了解这些区别对于在LabVIEW项目中选择合适的硬件至关重要。下面将详细分析这两种设备的主要差异,并为LabVIEW项目中的选择提供指导。 ​ 硬件设…

计算机图形学:实验四 带纹理的OBJ文件读取和显示

一、程序功能设计 在程序中读取带纹理的obj文件,载入相应的纹理图片文件,将带纹理的模型显示在程序窗口中。实现带纹理的OBJ文件读取与显示功能,具体设计如下: OBJ文件解析与数据存储 通过实现TriMesh类中的readObj函数&#x…

C# OpenCV机器视觉:红外体温检测

在一个骄阳似火的夏日,全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇,平日里熙熙攘攘的街道变得冷冷清清,人们戴着口罩,行色匆匆,眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人,看着这一…

PAT甲级-1020 Tree Traversals

题目 题目大意 给出一棵树的后序遍历和中序遍历,要求输出该树的层序遍历。 思路 非常典型的树的构建与遍历问题。后序遍历和中序遍历可以得出一个树的结构,用递归锁定根节点,然后再遍历左右子树,我之前发过类似题目的博客&…

C语言进阶——3字符函数和字符串函数(2)

8 strsrt char * strstr ( const char *str1, const char * str2);查找子字符串 返回指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回 null 指针。匹配过程不包括终止 null 字符,但会在此处停止。 8.1 库函数s…

python学opencv|读取图像(四十二)使用cv2.add()函数实现多图像叠加

【1】引言 前序学习过程中,掌握了灰度图像和彩色图像的掩模操作: python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 python学opencv|读取图像(四十)掩模:三…

基于C语言的数组从入门到精通

简介:本篇文章主要介绍了一维数组,二维数组,字符数组的定义,数组的应用,数组的核心代码解析,适用于0基础的初学者. C语言数组 1.一维数组 1.1定义 1.1.1声明 语法:数据类型 数组名[数组大小];示例:int arr[5]; 1.1.2初始化 a.静态初始化 完全初始化:int arr[5] {1…

【kong gateway】5分钟快速上手kong gateway

kong gateway的请求响应示意图 安装 下载对应的docker 镜像 可以直接使用docker pull命令拉取,也可以从以下地址下载:kong gateway 3.9.0.0 docker 镜像 https://download.csdn.net/download/zhangshenglu1/90307400, postgres-13.tar http…

python 安装插件 requests 下载免费简历(自学7)

安装 requests 库: 他们三个 按一个就行 pip install requests 或者 pip3 install requests 或者 conda install requests 代码 每次只可以下载一页的 简历模板 需要手动修改 id ### import requests from lxml import etree import osif __name__ "__…

西门子【Library of General Functions (LGF) for SIMATIC S7-1200 / S7-1500】

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 通用函数库 (LGF) 扩展了 TIA Portal 中用于 PLC 编程的 STEP 7 指令(数学函数、时间、计数器 等)。该库可以不受限制地使用,并包含 FIFO 、搜索功能、矩阵计算、 astro 计…

最新最详细的配置Node.js环境教程

配置Node.js环境 一、前言 (一)为什么要配置Node.js?(二)NPM生态是什么(三)Node和NPM的区别 二、如何配置Node.js环境 第一步、安装环境第二步、安装步骤第三步、验证安装第四步、修改全局模块…

黑龙江锅包肉:酸甜香酥的东北经典

黑龙江锅包肉:酸甜香酥的东北经典 黑龙江锅包肉,作为东北菜的代表之一,尤其在黑龙江省哈尔滨市享有极高的声誉。这道美食不仅承载着丰富的历史文化内涵,更以其鲜明的地域特色,成为了黑龙江省乃至整个东北地区的标志性菜肴。 历史渊源 锅包肉的历史可以追溯到清朝光绪年间,其…

linux——网络基础

文章目录 目录 文章目录 踏入网络世界:探索 Linux 网络的无垠天地 一、网络发展 早期单机处理模式 网络发展的需求催生 网络发展后的优势对比 二、局域网or广域网 典型局域网架构 广域网连接多个局域网 二者关系 三、协议 语言层与汉语协议 通信设备层与电话机协议 …

挖掘机的市场现状和发展前景:全球增长潜力,重塑基础设施建设新篇章

引言:工程机械的心脏,挖掘机的崛起之路 在现代化建设的浪潮中,挖掘机作为工程机械领域的核心设备,正以其强大的作业能力和广泛的应用场景,成为推动全球基础设施建设不可或缺的力量。从高速公路到大型矿场,…

tkinter绘制组件(44)——浮出ui控件

tkinter绘制组件(44)——浮出ui控件 引言布局函数结构ui框架对齐方向绑定已有控件出现和隐藏逻辑出现和隐藏动画完整代码函数 效果测试代码最终效果 github项目pip下载 引言 TinUI的浮出ui控件(flyout)其实是一个之间创建在UI框架…

【Unity3D】《跳舞的线》游戏的方块单方向拉伸实现案例

通过网盘分享的文件:CubeMoveMusic.unitypackage 链接: https://pan.baidu.com/s/1Rq-HH4H9qzVNtpQ84WXyUA?pwda7xn 提取码: a7xn 运行游戏点击空格动态创建拉伸的方块,由Speed控制速度,新方向是随机上下左右生成。 using System.Collect…

新版IDEA创建数据库表

这是老版本的IDEA创建数据库表,下面可以自己勾选Not null(非空),Auto inc(自增长),Unique(唯一标识)和Primary key(主键) 这是新版的IDEA创建数据库表,Not null和Auto inc可以看得到,但Unique和Primary key…

jmeter中对接口进行循环请求后获取相应数据

1、工作中遇到一个场景就是对某个单一接口进行循环请求,并需要获取每次请求后返回的相应数据; 2、首先就在jmeter对接口相关组件进行配置,需要组件有:循环控制器、CSV数据文件设置、计数器、访问接口、HTTP信息头管理器、正则表达…