React入门(2)–––React中使用css / less文件

React入门系列 目录导引
上一篇:React入门(1)——我的第一个React.js项目

创建日期: 2020年2月28日
题记:着急入门的,可以直接看第三部分,通过引入.less渲染组件

一. css和less是什么

CSS 是层叠样式表( Cascading Style Sheets )的简称。用于渲染HTML式样的。CSS的读取是有自己的规则的,从右至左。当项目大点,类名相同时,难免会发生覆盖。从代码中看,明明已经设置了,但是为什么不起作用呢?为了解决这种问题,于是,有了 CSS Modules方案。
Less(Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。可以解决上面提到的覆盖问题。

less与css区别总结:
1、Less是一门CSS预处理语言,css是一种用来表现HTML或XML等文件样式的计算机语言。
2、less扩展了CSS语言,增加了变量、Mixin、函数等特性。
3、css可以被浏览器直接识别,less需要先编译为css。

二.通过引入.css渲染组件

1. 在.js文件中引入css文件,并通过设置className来实现

//index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css'
import  './styles.css'
const App = () => {
  return (
    <div className="background1">
      <div className="background2">
        <h1>测试</h1>
      </div>
    </div>
  )
}
ReactDOM.render(<App />, document.getElementById('root'));
//index.css
.background1 {
  width: 100%;
  height: 1200px;
  background-color: #303855ff;
}
.background2 {
  background-color: yellow;
  width:200px;
  height: 100px;
}
//styles.css
.background2 {
  background-color:red;
  width:200px;
  height: 100px;
}
运行效果

我们可以看到,内层的div的背景是红色的,是被styles.css中定义的background2覆盖的。如果,我们在文件import的时候,调换index.css和styles.css的位置,那么谁在下面,谁将起作用。换言之,当className相同时,后import的css文件,会覆盖掉之前import的css文件。

另一种情况,我们删掉index.js里styles.css的import,在index.css中import styles.css:

//index.css
@import "styles.css";
.background1 {
  width: 100%;
......

运行效果

我们发现,内层的div背景变成黄色的了,也就是说,这种写法,index.css文件,覆盖了styles.css。这种覆盖方式,暂时叫做“后来者居上”,这样,是不是好记点。按着代码执行顺序进行,后设置的式样,会覆盖之前设置的式样。可以挑战下这一篇链接,猜猜这个作者之前描述的代码,会是什么效果呢?想深入了解CSS执行顺序的,也建议看看,作者分析的很细致。

三. 通过引入.less渲染组件

1.首先,要先安装less和less-loader

$ npm install --save-dev less-loader less

遗留问题:为什么我按官网的命令去安装less,在package.json里面不会显示,而用上面的方式,就会显示呢?需要查下npm的子命令了。[参考]

安装后,我们会看到package.json文件中,添加了依赖:

  "devDependencies": {
    "less": "^3.11.1",
    "less-loader": "^5.0.0"
  }

Dependencies和devDependencies到底有什么区别呢?[参考链接]
2.修改webpack配置
哇啊!好尴尬😅,翻了半天,也没找到网上说的webpack.config.js文件,原因看这个

下面这个命令,谨慎执行,因为不可逆。但是只要做好代码版本管理,可以随意折腾,大不了重头再来版本管理git的使用
STEP 1:
$ yarn eject

执行的时候,有提示:NOTE: Create React App 2+ supports TypeScript, Sass, CSS Modules and more without ejecting: https://reactjs.org/blog/2018/10/01/create-react-app-v2.html
因为,执行该命令后会把已构建依赖项、配置文件和脚本复制到程序目录中。该操作是不可逆转的,执行完成后会删除这个命令,也就是说只能执行一次。

插曲:执行的时候,被git给阻挡了,因为是在学习,所以我直接用

$ find . -name ".git" | xargs rm -Rf

用这个命令把git给清除了。如果是项目,自己按照提示,把git相关的commit,stash什么的,处理完毕就好。
执行完毕后,package.json文件被更改了,与此同时,会生成新文件夹config:


config文件夹
STEP 2:

修改webpack.config.js配置文件。我们找到sassRegex,模仿它来配置lessRegex。
(1).配置less

// style files regexes
const cssRegex = /\.css$/;
const cssModuleRegex = /\.module\.css$/;
const sassRegex = /\.(scss|sass)$/;
const sassModuleRegex = /\.module\.(scss|sass)$/;
const lessRegex = /\.less$/; //这一句和下一句是新增的less的配置
const lessModuleRegex = /\.module\.less$/;

(2).配置less-loader
找到"test: sassRegex"这个,搜一下即可,然后模仿这个来写less的。

// Adds support for CSS Modules, but using LESS
            {
              test: lessRegex,
              exclude: lessModuleRegex,
              use: getStyleLoaders(
                {
                  importLoaders: 3,
                  modules: true,
                  sourceMap: isEnvProduction && shouldUseSourceMap,
                },
                'less-loader'
              ),
              sideEffects: true,
            },
            {
              test: lessModuleRegex,
              use: getStyleLoaders(
                {
                  importLoaders: 3,
                  sourceMap: isEnvProduction && shouldUseSourceMap,
                  modules: {
                    getLocalIdent: getCSSModuleLocalIdent,
                  },
                },
                'less-loader'
              ),
            },

这里,我先直接copy了sass的配置,然后改成less,运行后不好用。之后,又在lessRegex里加了一句modules: true,才可以运行。致于 importLoaders: 3,这后面的数字,是3,是1,都好用,没有查具体意义。
3.修改代码

import styles from './styles.less'
......(省略中间代码)
<div className={styles.background2}>
......(省略之后的代码)

这里,引入less文件,作为styles,设置className的时候,将原本的双引号,改成花括号。至此,less的引用成功。
配置的时候请注意:关于 less 配置规则放在 sass 的解析规则下面即可,如果放在了 file-loader 的解析规则下面,less 文件解析不会生效。(这段注意来自于网络,没有验证过)

关于引用less文件,还有一种更优雅的配置方案,不需要用eject暴露webpack文件。
下一篇:React中使用less(use CSS Modules)的两种配置方法

参考链接1:样式设置和CSS文件引入
参考链接2: CSS预处理器LESS、SASS使用教程
参考链接3: 学习Less-看这篇就够了
参考链接4: create-react-app使用less最详细说明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容