九、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小结

三、真题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFPlay命令全集合

FFPlay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器。 ffplay工具下载并播放视频,可以辅助卡看流信息。 官网下载地址:http://ffmpeg.org/download.html#build-windows 下载build好的exe程序: 此处下载…

wangEditor富文本编辑器,Laravel上传图片配置和使用

文章目录 前言步骤1. 构造好前端模版2. 搭建后端存储3. 调试 前言 由于最近写项目需要使用富文本编辑器,使用的是VUE3.0版本所以很多不兼容,实际测试以后推荐使用wangEditor 步骤 构造好前端模版搭建后端存储调试 1. 构造好前端模版 安装模版 模版安…

利用 SAM2 模型探测卫星图像中的农田边界

将 Segment Anything Model Version 2 应用于卫星图像以检测和导出农业地区田地边界的分步教程 🌟 简介 手动绘制田地边界是最耗时的任务之一,其准确性取决于绘制者的表现。然而,精确的边界检测在很多领域都有应用。例如,假设您…

数据库管理-第287期 Oracle DB 23.7新特性一览(20250124)

数据库管理287期 20245-01-24 数据库管理-第287期 Oracle DB 23.7新特性一览(20250124)1 AI向量搜索:算术和聚合运算2 更改Compatible至23.6.0,以使用23.6或更高版本中的新AI向量搜索功能3 Cloud Developer包4 DBMS_DEVELOPER.GET…

第13章 深入volatile关键字(Java高并发编程详解:多线程与系统设计)

1.并发编程的三个重要特性 并发编程有三个至关重要的特性,分别是原子性、有序性和可见性 1.1 原子性 所谓原子性是指在一次的操作或者多次操作中,要么所有的操作全部都得到了执行并 且不会受到任何因素的干扰而中断,要么所有的操作都不执行…

mysql-06.JDBC

目录 什么是JDBC: 为啥存在JDBC: JDBC工作原理: JDBC的优势: 下载mysql驱动包: 用java程序操作数据库 1.创建dataSource: 2.与服务端建立连接 3.构造sql语句 4.执行sql 5.关闭连接,释放资源 参考代码: 插…

unity 粒子系统设置触发

1、勾选Triggers选项 2、将作为触发器的物体拉入队列当中,物体上必须挂载collider 3、将想要触发的方式(Inide、Outside、Enter和Exit)选择为”Callback“,其他默认为”Ignore“ 4、Collider Query Mode 设置为All&#xff1a…

LMI Gocator GO_SDK VS2019引用配置

LMI SDK在VS2019中的引用是真的坑爹,总结一下经验,希望后来的人能少走弯路.大致内容如下: (1) 环境变量 (2)C/C 附加包含目录 E:\GWQ\Gocator\GO_SDK\Gocator\GoSdk E:\GWQ\Gocator\GO_SDK\Platform\kApi (3&#…

61,【1】BUUCTF WEB BUU XSS COURSE 11

进入靶场 左边是吐槽,右边是登录,先登录试试 admin 123456 admiin# 123456 admin"# 123456 不玩了,先去回顾下xss 回顾完就很尴尬了,我居然用SQL的知识去做xss的题 重来 吐槽这里有一个输入框,容易出现存储型…

EchoMimicV2的部署使用

最近有一个录课的需要,我不想浪费人力,只想用技术解决。需求很简单,就是用别人现成的录课视频中的形象和声线,再结合我提供的讲稿去生成一个新的录课视频。我觉得应该有现成的技术了,我想要免费大批量生产。最近看到这…

五、华为 RSTP

RSTP(Rapid Spanning Tree Protocol,快速生成树协议)是 STP 的优化版本,能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制:RSTP 通过引入边缘端口、P/A(Proposal/Agreement)机制等&…

嵌入式知识点总结 ARM体系与架构 专题提升(四)-编程

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.嵌人式编程中,什么是大端?什么是小端 ? 2.如何判断计算机处理器是大端,还是小端 ? 3.如何进行大小端的转换 ? 4.如何对绝对地址0x100000赋值? 1…

Ansys Thermal Desktop 概述

介绍 Thermal Desktop 是一种用于热分析和流体分析的通用工具。它可用于组件或系统级分析。 来源:CRTech 历史 Thermal Desktop 由 C&R Technologies (CR Tech) 开发。它采用了 SINDA/FLUINT 求解器。SINDA/FLUINT 最初由 CR Tech 的创始人为 NASA 的约翰逊航…

Python vLLM 实战应用指南

文章目录 1. vLLM 简介2. 安装 vLLM3. 快速开始3.1 加载模型并生成文本3.2 参数说明 4. 实战应用场景4.1 构建聊天机器人示例对话: 4.2 文本补全输出示例: 4.3 自定义模型服务启动服务调用服务 5. 性能优化5.1 GPU 加速5.2 动态批处理 6. 总结 vLLM 是一…

计算机网络 (60)蜂窝移动通信网

一、定义与原理 蜂窝移动通信网是指将一个服务区分为若干蜂窝状相邻小区并采用频率空间复用技术的移动通信网。其原理在于,将移动通信服务区划分成许多以正六边形为基本几何图形的覆盖区域,称为蜂窝小区。每个小区设置一个基站,负责本小区内移…

从63 秒到 0.482 秒:深入剖析 MySQL 分页查询优化

在日常开发中,数据库查询性能问题就像潜伏的“地雷”,总在高并发或数据量庞大的场景下引爆。尤其是当你运行一条简单的分页查询时,结果却让用户苦苦等待,甚至拖垮了系统。这种情况你是否遇到过? 你可能会想&#xff1…

Word 中实现方框内点击自动打 √ ☑

注: 本文为 “Word 中方框内点击打 √ ☑ / 打 ☒” 相关文章合辑。 对第一篇增加了打叉部分,第二篇为第一篇中方法 5 “控件” 实现的详解。 在 Word 方框内打 √ 的 6 种技巧 2020-03-09 12:38 使用 Word 制作一些调查表、检查表等,通常…

Dockerfile另一种使用普通用户启动的方式

基础镜像的Dockerfile # 使用 Debian 11.9 的最小化版本作为基础镜像 FROM debian:11.11# 维护者信息 LABEL maintainer"caibingsen" # 复制自定义的 sources.list 文件(如果有的话) COPY sources.list /etc/apt/sources.list # 创建…

7-Zip高危漏洞CVE-2025-0411:解析与修复

7-Zip高危漏洞CVE-2025-0411:解析与修复 免责声明 本系列工具仅供安全专业人员进行已授权环境使用,此工具所提供的功能只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利…

百度APP iOS端磁盘优化实践(上)

01 概览 在APP的开发中,磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长,如何高效管理磁盘空间直接关系到用户体验和APP性能。本文将结合磁盘管理的实践经验,详细介绍iOS沙盒环境下的文件存储规范,探讨业务缓…