css-loader和style-loader关系原理及作用
2023-06-12
771 字约 3 分钟
...用webpack打包就需要用到css-loader和style-loader,接下来让我们逐步解析两个loader的作用以及它们都做了怎样的工作
创建空项目
- 创建一个名为demo的空文件夹,这就是我们实验的项目目录
- 进入到目录下执行
npm init -y
按照上述两步,我们就搭建好了最简单的项目环境了,接下来需要安装依赖包和创建源码目录
- 在项目目录创建
src子目录 - 基于webpack4讲解,运行npm安装所需依赖
npm i webpack@webpack-4 webpack-dev-server@version-3 webpack-cli@4 css-loader@5 style-loader@2 html-webpack-plugin@webpack-4 -D
创建webpack.cofnig.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
module: {
rules: [
{
test: /.css$/,
use: [
'css-loader'
]
}
]
},
plugins: [
new HtmlWebpackPlugin()
]
}
创建一个src/public.css样式文件
.rect{
background-color: red;
width: 100px;
height: 100px;
}
创建src/index.js程序入口文件
import './public.css';
let div = document.createElement("div");
div.className = "rect";
div.innerText = "hello div";
document.getElementsByTagName("body")[0].appendChild(div);
运行
webpack server
打开浏览器http://localhost:8080,显示内容如下:

运行结果1
我们点击浏览器查看源码,发现样式内容并没有应用到div上面,原因是css-loader只是帮我们解析了css文件里面的代码,默认webpack是只解析js代码的,所以想要应用样式我们要把解析完的css代码拿出来加入到style标签中。
更改src/index.js
// 打印到浏览器控制台,看一下导入的css文件究竟是什么
import css from './public.css';
console.log(css);
重新运行
我们发现原来获取的css竟然是一个js对象,这就是css-loader帮助我们编译时进行的转换工作

运行结果2
继续更改src/index.js代码
// 这次我们将css-loader解析的js对象中的css样式挂载到head的style标签中
import css from './public.css';
let div = document.createElement("div");
div.className = "rect";
div.innerText = "hello div";
let body = document.getElementsByTagName("body")[0];
let style = document.createElement("style");
style.innerText = css[0][1];
body.appendChild(style);
body.appendChild(div);
运行查看

运行结果3
我们发现style的样式被成功应用到div上面了,这是我们手动挂载css-loader解析的内容到style标签下,并且将style标签加入到html文档中,但是这样手动做很麻烦,所以就有了style-loader
引入style-loader
如果你看懂我上面说的,那么你应该已经猜测到了style-loader作用了,style-loader就是帮我们直接将css-loader解析后的内容挂载到html页面当中,我们来看一下
修改webpack.cofnig.js配置
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
module: {
rules: [
{
test: /.css$/,
use: [
+ 'style-loader',
'css-loader'
]
}
]
},
plugins: [
new HtmlWebpackPlugin()
]
}
继续更改src/index.js代码
去掉手动挂载样式
import './public.css';
let div = document.createElement("div");
div.className = "rect";
div.innerText = "hello div";
document.getElementsByTagName("body")[0].appendChild(div);
运行结果
我们发现和之前的手动挂载一样

运行结果4
总结
- css-loader帮助我们解析css成为js对象
- sytle-loader可以从css-loader解析的对象中提取css样式挂载到页面当中
如果您觉得这篇文章有帮助,请点个赞吧~
相关文章
更多文章 →css2025-03-04
CSS 实现文本省略显示【单行,2行,多行】
在 中,长文本内容可能会超出其容器的范围。为了保持良好的用户体验,我们通常会将超出的文本部分以省略号显示。本文将详细介绍如何在CSS中限制文本显示一行、两行或多行,超过部分显示省略号。 1\. 前言 限制文本显示长度并以省略号表示超出部分是常见的需求。通过CSS,可以简单地实现这一效果。我们将分别介绍单行文本、省略两行文本和多行文本的实现方法。 2\. 单行文本省略 要实现单行文本省略,主要使用以下CSS属性: : 禁止文本换行。 :...
学习面试
css2025-03-04
css中,有哪些方式可以隐藏页面元素?区别?
一、前言 在平常的样式排版中,我们经常遇到将某个模块隐藏的场景 通过 隐藏元素的方法有很多种,它们看起来实现的效果是一致的 但实际上每一种方法都有一丝轻微的不同,这些不同决定了在一些特定场合下使用哪一种方法 二、实现方式 通过 实现隐藏元素方法有如下: display:none visibility:hidden opacity:0 设置height、width模型属性为0 position:absolute clip path dis...
学习面试
css2025-03-04
css实现正方形的几种方案及优缺点
前言 在电商、个人博客等网站我们或多或少都可以看到css正方形的应用场景,自适应正方形布局是必须要掌握的;接下来采黎带大家揭开css自适应正方形神秘的面纱 正方形 这很简单,设置盒子宽高都为200px就可以了 自适应正方形 青铜 提起自适应,想必都会想到 rem 、 vw 等相对单位,我们分别用这些单位来实现一下。 rem 屏幕宽度大于1200px时,字体为16px,rem的盒子的大小为 160px \ 160px; 屏幕宽度小于120...
学习面试
css2025-03-04
Flexbox 弹性布局
一、是什么 简称 box,意为”弹性布局”,是一种一维的布局模型。一次只能处理一个维度上的元素布局,一行或者一列。 采用Flex布局的元素,称为 容器( ),简称”容器“;它的所有子元素自动成为容器成员,称为 项目( ),简称”项目“。 容器中默认存在两条轴, 主轴 和 交叉轴 。项目默认沿主轴排列,通过 来决定主轴的方向。 每根轴都有起始线和终止线,用来描述flexbox元素的方向。 任何一个容器都可以指定为 布局。设为 Flex 布...
学习面试
css2025-03-04
提升CSS渲染性能
1\. 提升CSS渲染性能: 2\. 合适使用css选择器: 3\. 提升css文件加载的性能: 4\. 精简css代码: 5\. 合理使用web fonts: 6\. css动画优化:
学习面试
css2024-08-29
CSS 终于在 2024 年增加了垂直居中功能
在 2024 年的 CSS 原生属性中允许使用 1 个 CSS 属性 进行垂直居中。 支持情况: | Chrome: 123 | Firefox: 125 | Safari: 17.4 | | | | | CSS 对齐一般会使用 或 布局,因为 在默认的流式布局中不起作用。在 2024 年,浏览器实现了 。 你不需要 flexbox 或 grid,只需要 1 个 CSS 属性就可以进行对齐。 因此内容不需要包裹在 div 中。 令人惊讶...
学习面试
评论
请登录后发表评论
去登录