澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站用法教程

2019-10-30 作者:澳门新萄京赌场网址   |   浏览(65)

谈谈 PostCSS

2017/10/18 · CSS · POSTCSS

初藳出处: laizimo   

让CSS更完美:PostCSS-modules

2017/01/22 · CSS · POSTCSS

原来的小说出处: Alexander Madyankin   译文出处:众成翻译   

译者注(GeoffZhu): 那篇切合部分应用过预管理CSS的开荒者,比方less,sass或stylus,若是你都没用过,那您分明不是个好车手。在PostCSS中早已能够利用CSS Modules了,该篇小编进献了多少个新工具,能够让越多开辟者方便的选取新型的CSS Modules。

我们和大局作用域的css麻木不仁争了多年,现在终于是时候甘休它了。不管您用的是何许语言照旧框架,CSS命名冲突将不再是个难题。小编将给您来得一下PostCSS和PostCSS-modules怎样运用,并且能够在服务端使用它们。 CSS最早只是二个标榜文书档案的工具,不过职业到壹玖玖柒年发出了变通。浏览器中不再单独唯有文书档案了,即时通信,各样软件,游戏,没什么是浏览器不可能承载的。

现行反革命,大家在HTML和CSS方面已经走了相当的远相当远,开辟者们振作振作出了CSS全部的潜在的能量,以致创办出了有个别CSS本身都快精通不了的东西。

每三个有经历的开荒者都掌握 — 每趟使用全局命名空间都以留下了贰个发出bug的隐患,因为火速就大概现身雷同命名冲突之类的主题材料,再加上此外方面(项目更是大等)的熏陶,代码越来越不易维护。

对此CSS来讲,那表示有题指标布局。CSS特异性和CSS宽泛性之间,一向存在着如英雄轶事般的对决。仅仅是因为每一个选择器都恐怕会默化潜移到这个不想被影响的要素,使之发生了冲突。

着力具有编制程序语言都扶助部分作用域。和CSS和睦相处的JavaScript有英特尔, CommonJS和终极分明的ES6 modules。可是大家并未二个可以模块化CSS的措施。

对此八个高水平体系来讲,独立的UI组件(也便是组件化)特别关键的 — 每种组件小巧独立,能够拼合成复杂的页面,那让大家节省了无数的办事。可是大家大器晚成味有八个难点,怎么样卫戍全局命名冲突那?

连带前言

澳门新萄京官方网站 1

image.png

日前,在工程化开采中,使用最多的相应正是Less、Sass和Stylus。首先,还是介绍一下它们啊。它们有个统意气风发的名字——css预管理器。何为CSS预管理器?

css预管理器给出了极度实用的解决方案:

变量:就好像别的编制程序语言雷同,免于多处改换。

Sass:使用「$」对变量实行宣示,变量名和变量值使用冒号实行划分
Less:使用「@」对变量进行宣示

Sass:它的法子是三者中最差的,一纸空文全局变量的概念
Less:它的主意和js相比较相像,逐级往上搜求变量
Stylus:它的艺术和Less比较平日,可是它和Sass相近更赞成于指令式查找
嵌套:对于css来讲,有嵌套的写法无疑是完备的,更疑似老爹和儿子层级之间显著提到

三者在这里处的拍卖都以同等的,使用「&」表示父成分

CSS Modules 用法教程

2016/06/19 · CSS · Modules

最早的小说出处: 阮一峰   

学过网页开拓就能掌握,CSS 不能够算编制程序语言,只是网页样式的意气风发种描述方法。

为了让 CSS 也能适用软件工程措施,程序猿想了各样措施,让它变得像一门编制程序语言。从最先的Less、SASS,到新兴的 PostCSS,再到近期的 CSS in JS,皆感觉了缓慢解决那个主题素材。

澳门新萄京官方网站 2

本文介绍的 CSS Modules 有所分歧。它不是将 CSS 退换成编制程序语言,而是成效很单纯,只参与了部分效率域和模块正视,那正好是网页组件最急需的遵循。

故此,CSS Modules 很容命理术数,因为它的平整少,同一时间又非常有用,能够保障有些组件的体制,不会潜濡默化到任何零件。

澳门新萄京官方网站 3

前言

近日的前端,javascript的升华分明,框架林立。同期,html也是齐足并驱,推出了HTML5标准,何况获得了广泛。那样的前进却只是少了八个脚色?

CSS,就是其大器晚成看似不起眼的东西,却在付出中表明着和js同样重要的功能。css,是风流洒脱种体裁脚本,好像和编制程序语言有着必然的离开,大家能够将之驾驭为朝气蓬勃种描述方法。那宛如导致css被轻渎了。可是,css这几年来正在经历着一回巨变——CSS Module。笔者回忆js的井喷期应该能够说是node带来的,它拉动了Module的定义,使得JS能够被工程化开拓品种。那么,明日的css,也将越是美好。假设你爱怜笔者的稿子,款待商量,应接Star~。招待关怀本人的github博客

寸草不留办法

因为有前任的找出,现在大家有Object-Oriented CSS, BEM, SMACSS等等,这么些都以极度棒何况充足有效的办法。他们经过扩展前缀的点子,化解了命名冲突的主题素材。

因此增加前缀的措施消除命名冲突是个体力活(manual mangling)。大家手动的去编写长长的接收器。你也能够选取预编译的css语言,但是它们并不曾从根本上消除难题(依然体力活)。上边是大家用BEM标准书写的叁个独立组件(对于现存的除BEM之外的章程,理念上着力也是那般):

CSS

/* 普通 CSS */ .article { font-size: 16px; } .article__title { font-size: 24px; } /* 使用css预管理语言 */ .article { font-size: 16px; &__title { font-size: 24px; } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* 普通 CSS */
.article {
  font-size: 16px;
}
 
.article__title {
  font-size: 24px;
}
 
/* 使用css预处理语言 */
.article {
  font-size: 16px;
 
  &__title {
    font-size: 24px;
  }
}

介绍

PostCSS是叁个用到JS插件来对CSS举办转移的工具,这一个插件特别强盛,强盛到呼风唤雨。此中,Autoprefixer便是成都百货上千PostCSS插件中最盛行的四个。

直到近年来(前年十6月)PostCSS已经有超过200个插件,你可以插件列表探求有未有您所急需的插件。如若你想和煦写个插件,据说这是贰个没有错的主见,何况极度轻松(前提通晓node.js,可是自身还未有学会呢),你能够试着搞点事。

零、示例库

自己为这一个科目写了贰个示例库,饱含三个德姆o。通过它们,你能够轻易学会CSS Modules。

首先,克隆示例库。

JavaScript

$ git clone

1
$ git clone https://github.com/ruanyf/css-modules-demos.git

接下来,安装依赖。

JavaScript

$ cd css-modules-demos $ npm install

1
2
$ cd css-modules-demos
$ npm install

紧接着,就能够运作第二个示范了。

JavaScript

$ npm run demo01

1
$ npm run demo01

开拓浏览器,访谈

正文

既是作为意气风发篇推广PostCSS的稿子,大家就应该先来打探一下那是何许,和大家事先讲的CSS Module有吗关系?此处让我为你们不停道来。

CSS模块(CSS Modules)

二〇一四年面世了此外三种格局的落实。分别是CSS-in-JS 和 CSS Modules。我们将根本钻探前面一个。

CSS模块允许你将享有css class自动破裂,那是CSS模块(CSS Modules)的暗中认可设置。然后生成八个JSON文件(sources map)和原本的class关联:

CSS

/* post.css */ .article { font-size: 16px; } .title { font-weight: 24px; }

1
2
3
4
5
6
7
8
/* post.css */
.article {
  font-size: 16px;
}
 
.title {
  font-weight: 24px;
}

地方的post.css将会被转变到相仿下边那样:

CSS

.xkpka { font-size: 16px; } .xkpkb { font-size: 24px; }

1
2
3
4
5
6
7
.xkpka {
  font-size: 16px;
}
 
.xkpkb {
  font-size: 24px;
}

被打碎替换的classes将被保留在贰个JSON对象中:

JavaScript

`{ "article": "xkpka", "title": "xkpkb" } `

1
`{  "article":  "xkpka",  "title":  "xkpkb"  }  `

在转移达成后,你能够平昔援引这一个JSON对象到品种中,那样就足以用事先写过的class名来直接使用它了。

JavaScript

import styles from './post.json'; class Post extends React.Component { render() { return ( <div className={ styles.article }> <div className={ styles.title }>…</div> … </div> ); } }

1
2
3
4
5
6
7
8
9
10
11
12
import styles from './post.json';
 
class Post extends React.Component {
  render() {
    return (
      <div className={ styles.article }>
        <div className={ styles.title }>…</div>
        …
      </div>
    );
  }
}

越来越多给力的功能, 能够看看 这篇十一分好的文章.

不仅仅是保留了前头涉嫌的二种方法的长处,还自行消除了组件css分离的主题材料。那正是CSS模块(CSS Modules),听上去特别不易啊!

到那边,大家有遭逢了另贰个难点: 大家今后的CSS Modules相关工具,只好在客商端(浏览器)使用,把它内置二个非Node.js的服务端情状中是极其十一分困难的。

怎么选拔 Postcss

现方今种种插件和工具多的层层,举个例子gulp、grunt、webpack,less、scss等也都有对应其工具的照管插件,还大概有合併、压缩、浏览器自动刷新等实用插件,那Postcss存在的含义是什么呢?

模块化?!就算您的项目用的webpack可能是gulp,那么相应的要设置一批管理种种文件的插件。Postcss能够说就是将你项目中具有拍卖css的插件进行了一个三回封装,令你依照Postcss那几个平台来完结,用Postcss它独有的风华正茂套系统来处理项目中的css文件。相当于说假如你的品类中想利用Postcss,想感受Postcss的特种魔力,那么less、scss、clean-css等拍卖css的插件全体替换来Postcss其独特的插件就行了。

它还大概有部分风味,举个例子创立了二个插件成效极强的生态系统,具有模块化须求怎么样用哪些(precss就是一个合併了相似SASS相当多艺术的包),比较别的的CSS预管理器它的优势首要反映在偏下多少个方面:

  1. 有着异常高的拍卖品质(3倍以上的管理速度)
  2. 您既可以够写平常的CSS,也足以组合LESS只怕SASS一同编写
  3. 对Source Map扶助更加好
  4. 他的插件真的太多太强盛太方便了

意气风发、局地成效域

CSS的准绳都以全局的,任何三个组件的样式法则,都对整个页面有效。

发出一些成效域的独一无二情势,正是利用贰个无比的class的名字,不会与其余选取注重名。那便是CSS Modules 的做法。

上边是一个React组件App.js。

JavaScript

import React from 'react'; import style from './App.css'; export default () => { return ( <h1 className={style.title}> Hello World </h1> ); };

1
2
3
4
5
6
7
8
9
10
import React from 'react';
import style from './App.css';
 
export default () => {
  return (
    <h1 className={style.title}>
      Hello World
    </h1>
  );
};

上边代码中,大家将样式文件App.css输入到style对象,然后援用style.title代表一个class。

CSS

.title { color: red; }

1
2
3
.title {
  color: red;
}

营造筑工程具会将类名style.title编写翻译成一个哈希字符串。

XHTML

<h1 class="_3zyde4l1yATCOkgn-DBWEL"> Hello World </h1>

1
2
3
<h1 class="_3zyde4l1yATCOkgn-DBWEL">
  Hello World
</h1>

App.css也会同期被编写翻译。

JavaScript

._3zyde4l1yATCOkgn-DBWEL { color: red; }

1
2
3
._3zyde4l1yATCOkgn-DBWEL {
  color: red;
}

那样一来,这一个类名就造成有一无二了,只对App组件有效。

CSS Modules 提供各个插件,扶植不一致的创设筑工程具。本文使用的是 Webpack 的css-loader插件,因为它对 CSS Modules 的支撑最佳,何况相当轻便采用。顺便说一下,假设你想学 Webpack,可以翻阅小编的科目Webpack-Demos。

上边是以此示例的webpack.config.js。

JavaScript

module.exports = { entry: __dirname '/index.js', output: { publicPath: '/', filename: './bundle.js' }, module: { loaders: [ { test: /.jsx?$/, exclude: /node_modules/, loader: 'babel', query: { presets: ['es2015', 'stage-0', 'react'] } }, { test: /.css$/, loader: "style-loader!css-loader?modules" }, ] } };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
module.exports = {
  entry: __dirname '/index.js',
  output: {
    publicPath: '/',
    filename: './bundle.js'
  },
  module: {
    loaders: [
      {
        test: /.jsx?$/,
        exclude: /node_modules/,
        loader: 'babel',
        query: {
          presets: ['es2015', 'stage-0', 'react']
        }
      },
      {
        test: /.css$/,
        loader: "style-loader!css-loader?modules"
      },
    ]
  }
};

上边代码中,关键的风度翩翩行是style-loader!css-loader?modules,它在css-loader后边加了三个查询参数modules,表示张开CSS Modules 功用。

当今,运营这么些德姆o。

JavaScript

$ npm run demo01

1
$ npm run demo01

打开 ,能够见到结果,h1题目显示为鲜蓝。

本身想和你们说后会有期

澳门新萄京官方网站 4

脚下,在工程化开荒中,使用最多的相应正是Less、Sass和Stylus。首先,依旧介绍一下它们啊。它们有个统生龙活虎的名字——css预管理器。何为CSS预管理器?应该正是黄金时代种能够将您依照它的平整写出来的格式转成css的事物(照旧讲的最早一点)。它们的面世能够说是刚好碰上其时,杀绝了css的意气风发部分遗憾:

  • 语法远远不够有力,不可见嵌套书写,不方便人民群众模块化开拓
  • 从未有过变量和逻辑上的复用机制,导致在css的属性值中一定要动用字面量格局,以致持续重复书写重复的体裁,导致难以维护。

直面以上难点,css预管理器给出了丰硕实用的缓和方案:

  1. 变量:有如其余编制程序语言相似,免于多处改正。
    • Sass:使用「$」对变量实行宣示,变量名和变量值使用冒号进行划分
    • Less:使用「@」对变量实行宣示
    • Stylus:中申明变量未有任何限定,结尾的分店无关紧要,但变量名和变量值之间必须要有『等号』。但要求当心的是,若是用“@”符号来声称变量,Stylus会进行编写翻译,但不会赋值给变量。正是说,Stylus 不要选取『@』注明变量。Stylus 调用变量的法子和Less、Sass完全相通。
  2. 作用域:有了变量,就必得得有功效域举办田间处理。就想js一样,它会从一些成效域开端往上搜索变量。
    • Sass:它的方法是三者中最差的,荒诞不经全局变量的概念
    • Less:它的点子和js比较相近,逐级往上寻觅变量
    • Stylus:它的措施和Less比较相仿,但是它和Sass同样更赞成于指令式查找
  3. 嵌套:对于css来讲,有嵌套的写法无疑是两全的,更疑似父子层级之间鲜明提到
    • 三者在此处的拍卖都以风度翩翩律的,使用「&」表示父成分

有了这个方案,会使得大家得以在确定保障DPY、可维护性、灵活性的前提下,编写css样式。

回去话题中,之所以会合世向预管理器那样子的缓和方案,百川归海依然css标准进步的滞后性导致的。同一时候,大家也应当思考一下,真的只要预管理器就够了啊?往往在类型过大时,由于缺乏模块的概念,全局变量的主题素材会软磨硬泡烦闷着你。每一趟定义选用器时,总是要观照到任何文件中是不是也选用了同等的命名。毕竟项目是团社团的,实际不是个人的。哪是不是有方法得以解决这么些难点吧?

PostCSS-modules

为了在服务端和顾客端都能选取CSS Modules,作者写了个PostCSS-modules,它是二个PostCSS插件,让您能够在服务端使用模块化的CSS,何况服务端语言能够是Ruby, PHP, Python 或许别的语言。

PostCSS是二个CSS预管理器,它是用JS达成的。它帮忙静态检查CSS,扶助变量和混入(mixins),能让您利用今后尚未被浏览器协理的前途CSS语法,内联图像等等。举例利用最为布满的Autoprefixer,它只是PostCSS的三个插件。

假若您使用Autoprefixer, 其实你早已在用PostCSS了。所以,增添PostCSS-modules到您的连串信赖列表,并非大器晚成件难事。笔者先给你打个样(实例),用Gulp and EJS,其实您能够用任何语言做相通的职业。

JavaScript

// Gulpfile.js var gulp = require('gulp'); var postcss = require('gulp-postcss'); var cssModules = require('postcss-modules'); var ejs = require('gulp-ejs'); var path = require('path'); var fs = require('fs'); function getJSONFromCssModules(cssFileName, json) { var cssName = path.basename(cssFileName, '.css'); var jsonFileName = path.resolve('./build', cssName '.json'); fs.writeFileSync(jsonFileName, JSON.stringify(json)); } function getClass(module, className) { var moduleFileName = path.resolve('./build', module '.json'); var classNames = fs.readFileSync(moduleFileName).toString(); return JSON.parse(classNames)[className]; } gulp.task('css', function() { return gulp.src('./css/post.css') .pipe(postcss([ cssModules({ getJSON: getJSONFromCssModules }), ])) .pipe(gulp.dest('./build')); }); gulp.task('html', ['css'], function() { return gulp.src('./html/index.ejs') .pipe(ejs({ className: getClass }, { ext: '.html' })) .pipe(gulp.dest('./build')); }); gulp.task('default', ['html']);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Gulpfile.js
var gulp         = require('gulp');
var postcss      = require('gulp-postcss');
var cssModules   = require('postcss-modules');
var ejs          = require('gulp-ejs');
var path         = require('path');
var fs           = require('fs');
 
function getJSONFromCssModules(cssFileName, json) {
  var cssName       = path.basename(cssFileName, '.css');
  var jsonFileName  = path.resolve('./build', cssName '.json');
  fs.writeFileSync(jsonFileName, JSON.stringify(json));
}
 
function getClass(module, className) {
  var moduleFileName  = path.resolve('./build', module '.json');
  var classNames      = fs.readFileSync(moduleFileName).toString();
  return JSON.parse(classNames)[className];
}
 
gulp.task('css', function() {
  return gulp.src('./css/post.css')
    .pipe(postcss([
      cssModules({ getJSON: getJSONFromCssModules }),
    ]))
    .pipe(gulp.dest('./build'));
});
 
gulp.task('html', ['css'], function() {
  return gulp.src('./html/index.ejs')
    .pipe(ejs({ className: getClass }, { ext: '.html' }))
    .pipe(gulp.dest('./build'));
});
 
gulp.task('default', ['html']);

咱俩只供给举行gulp义务,就会获得更改后的CSS文件和JSON文件,然后就足以在EJS模版里面用了:

XHTML

<article class="<%= className('post', 'article') %>"> <h1 class="<%= className('post', 'title') %>">Title</h1> ... </article>

1
2
3
4
<article class="<%= className('post', 'article') %>">
  <h1 class="<%= className('post', 'title') %>">Title</h1>
  ...
</article>

若是你想看看实际的代码,笔者在GitHub给您盘算了个example。越多的例证能够看PostCSS-modules和CSS Modules


轻便编写可爱惜的CSS,未有肥壮的mixins。长长的前缀将变为历史,迎接来到未来的CSS世界。

1 赞 收藏 评论

澳门新萄京官方网站 5

PostCSS安装及应用

PostCSS平常是整合自动化工具使用,假使要独自使用能够安装PostCSS CLI

因为本人用的是webpack,这里介绍一下webpack的使用

npm i  postcss-loader autoprefixer --save-dev

webpack.config.js 文件

    module: {
        rules: [ 
            {
                test: /.css$/,
                loader: "style-loader!css-loader!postcss-loader"
            },
        ]
    },

postcss.config.js 配置文件

module.exports = {
    plugins: [
        require('autoprefixer')   //最常用的postcss插件,自动补全css浏览器前缀
    ]
}

二、全局作用域

CSS Modules 允许选取:global(.className)的语法,声美素佳儿(Friso)个大局准则。凡是那样表明的class,都不会被编写翻译成哈希字符串。

App.css参预三个大局class。

JavaScript

.title { color: red; } :global(.title) { color: green; }

1
2
3
4
5
6
7
.title {
  color: red;
}
 
:global(.title) {
  color: green;
}

App.js动用普通的class的写法,就会引用全局class。

JavaScript

import React from 'react'; import styles from './App.css'; export default () => { return ( <h1 className="title"> Hello World </h1> ); };

1
2
3
4
5
6
7
8
9
10
import React from 'react';
import styles from './App.css';
 
export default () => {
  return (
    <h1 className="title">
      Hello World
    </h1>
  );
};

运作那些示例。

JavaScript

$ npm run demo02

1
$ npm run demo02

打开

CSS Modules 还提供风姿潇洒种显式的片段功能域语法:local(.className),等同于.className,所以地点的App.css也得以写成上边那样。

JavaScript

:local(.title) { color: red; } :global(.title) { color: green; }

1
2
3
4
5
6
7
:local(.title) {
  color: red;
}
 
:global(.title) {
  color: green;
}

先辈的点子

对此css命名冲突的难点,由来已久,能够说大家前端开采职员,每一天在狼狈周章,怎样去高雅的解决这几个标题。css并未有像js相像现身了英特尔、CMD和ES6 Module的模块化方案。

那就是说,回到难题,怎么着去消逝呢?大家的先驱也许有提议过不一样的方案:

  1. Object-Oriented CSS
  2. BEM
  3. SMACSS

方案能够说是更仆难数,不乏有团体内部的施工方案。但是超多都以二个合营点——为选拔器增添前缀。

那只是贰个体力活,你只怕须求手动的去编写长长的选拔器,或然你能够应用预编写翻译的css语言。不过,它们犹如并为消弭本质的主题素材——为什么会促成这种不满。我们无妨来看看,使用BEM标准写出来的例证:

JavaScript

<!-- 正确的。成分都位于 'search-form' 模块内 --><!-- 'search-form' 模块 --> <form class="search-form"> <!-- 在 'search-form' 模块内的 'input' 成分 --> <input class="search-form__input" /> <!-- 在 'search-form' 模块内的 'button' 成分 --> <button class="search-form__button"></button> </form> <!-- 不精确的。成分位于 'search-form' 模块的上下文之外 --><!-- 'search-form' 模块 --> <form class=""search-block> </form> <!-- 在 'search-form' 模块内的 'input' 成分 --> <input class="search-form__input"/> <!-- 在 'search-form' 模块内的 'button' 成分 --> <button class="search-form__button"></button>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 正确的。元素都位于 'search-form' 模块内 --><!-- 'search-form' 模块 -->
<form class="search-form">
    <!-- 在 'search-form' 模块内的 'input' 元素 -->
    <input class="search-form__input" />
    <!-- 在 'search-form' 模块内的 'button' 元素 -->
    <button class="search-form__button"></button>
</form>
<!-- 不正确的。元素位于 'search-form' 模块的上下文之外 --><!-- 'search-form' 模块 -->
<form class=""search-block>
</form>
<!-- 在 'search-form' 模块内的 'input' 元素 -->
<input class="search-form__input"/>
<!-- 在 'search-form' 模块内的 'button' 元素 -->
<button class="search-form__button"></button>

历次那样子写,猜想是个程序猿,都得加班吧,哈哈!

autoprefixer 插件

那么好,知道了Postcss是个什么样鬼,来认知一下最盛名(最实用)的插件autoprefixer

autoprefixer是让您能够偷懒的神器,若是你的项目是PC端的,况兼产品大大可能项目老板大概略你包容IE8~9,是或不是很发烧。别怕,用了autoprefixer,写平常的科班css就好了,autoprefixer会自动帮您增添浏览器前缀的,哈哈。

Postcss还会有多数作用,压缩合併它都足以,只要你感兴趣,完全可以行使到项目在那之中(不提议,当然假如你愿意折腾,请随便)。

三、定制哈希类名

css-loader暗许的哈希算法是[hash:base64],这会将.title编译成._3zyde4l1yATCOkgn-DBWEL那样的字符串。

webpack.config.js个中能够定制哈希字符串的格式。

JavaScript

module: { loaders: [ // ... { test: /.css$/, loader: "style-loader!css-loader?modules&localIdentName=[path][name]---[local]---[hash:base64:5]" }, ] }

1
2
3
4
5
6
7
8
9
module: {
  loaders: [
    // ...
    {
      test: /.css$/,
      loader: "style-loader!css-loader?modules&amp;localIdentName=[path][name]---[local]---[hash:base64:5]"
    },
  ]
}

运维那个示例。

JavaScript

$ npm run demo03

1
$ npm run demo03

你会发现.title被编写翻译成了demo03-components-App—title—GpMto。

风流浪漫种希望

到现在的网页开拓,讲究的是组件化的想想,因而,急须求可行的css Module方式来产生网页组件的付出。自从2016年始于,国外就风靡了CSS-in-JS(标准的象征,react的styled-components),还也可能有后生可畏种正是CSS Module。

本篇谈及后面一个,供给对前面三个实行询问的话,自行谷歌就可以

对此css,大家都明白,它是一门描述类语言,并荒诞不经动态性。那么,要怎样去产生module呢。大家能够先来看四个react使用postcss的例子:

//example.css .article { font-size: 14px; } .title { font-size: 20px; }

1
2
3
4
5
6
7
8
//example.css
 
.article {
    font-size: 14px;
}
.title {
    font-size: 20px;
}

之后,将那个命名打乱:

.zxcvb{ font-size: 14px; } .zxcva{ font-size: 20px; }

1
2
3
4
5
6
.zxcvb{
    font-size: 14px;
}
.zxcva{
    font-size: 20px;
}

将之命名对应的剧情,放入到JSON文件中去:

{ "article": "zxcvb", "title": "zxcva" }

1
2
3
4
{
    "article": "zxcvb",
    "title": "zxcva"
}

从今今后,在js文件中接收:

import style from 'style.json'; class Example extends Component{ render() { return ( div classname={style.article}> div classname={style.title}>/div> /div> ) } }

1
2
3
4
5
6
7
8
9
10
11
import style from 'style.json';
 
class Example extends Component{
    render() {
        return (
            div classname={style.article}>
                div classname={style.title}>/div>
            /div>
        )
    }
}

那规范,就描绘出了风流罗曼蒂克副css module的原型。当然,大家不容许每趟都亟需手动去写那么些东西。大家必要自动化的插件辅助大家做到那七个历程。之后,大家应该先来了然一下postCSS。

四、 Class 的组合

在 CSS Modules 中,贰个采纳器能够继续另贰个选取器的规行矩步,那叫做”组合”(“composition”)。

在App.css中,让.title继承.className 。

JavaScript

.className { background-color: blue; } .title { composes: className; color: red; }

1
2
3
4
5
6
7
8
.className {
  background-color: blue;
}
 
.title {
  composes: className;
  color: red;
}

App.js不要更改。

JavaScript

import React from 'react'; import style from './App.css'; export default () => { return ( <h1 className={style.title}> Hello World </h1> ); };

1
2
3
4
5
6
7
8
9
10
import React from 'react';
import style from './App.css';
 
export default () => {
  return (
    <h1 className={style.title}>
      Hello World
    </h1>
  );
};

运转这一个示例。

JavaScript

$ npm run demo04

1
$ npm run demo04

打开

App.css编写翻译成上边包车型大巴代码。

JavaScript

._2DHwuiHWMnKTOYG45T0x34 { color: red; } ._10B-buq6_BEOTOl9urIjf8 { background-color: blue; }

1
2
3
4
5
6
7
._2DHwuiHWMnKTOYG45T0x34 {
  color: red;
}
 
._10B-buq6_BEOTOl9urIjf8 {
  background-color: blue;
}

对应地, h1的class也会编写翻译成<h1 class=”_2DHwuiHWMnKTOYG45T0x34 _10B-buq6_BEOTOl9urIjf8″>。

自己急需认知你

PostCSS是何等?可能,你会以为它是预管理器、也许后Computer等等。其实,它怎么着都不是。它能够领略为后生可畏种插件系统。使用它GitHub主页上的牵线:

PostCSS is a tool for transforming CSS with JS plugins. These plugins can support variables and mixins, transpile future CSS syntax, inline images, and more.

您能够在使用预管理器的意况下使用它,也能够在原生的css中应用它。它都以支撑的,况兼它富有着三个大而无当的生态系统,比方你恐怕常用的Autoprefixer,正是PostCSS的八个卓殊受款待的插件,被谷歌(Google), Shopify, 推文(Tweet), Bootstrap和CodePen等营业所遍布运用。

理之当然,大家也足以在CodePen中运用它:

澳门新萄京官方网站 6

此间推荐我们看一下PostCSS的深刻类别

接下去,大家来看一下PostCSS的配置:

这里大家使用webpack postcss postcss-loader cssnext postcss-import的整合。

首先,大家得以经过yarn来设置这几个包:

yarn add --dev webpack extract-text-webpack-plugin css-loader file-loader postcss postcss-loader postcss-cssnext postcss-import

1
2
yarn add --dev webpack extract-text-webpack-plugin css-loader file-loader postcss postcss-loader postcss-cssnext postcss-import
 

然后,我们布署一下webpack.config.js:

const webpack = require('webpack'); const path = require('path'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = { context: path.resolve(__dirname, 'src'), entry: { app: './app.js'; }, module: { loaders: [ { test: /.css$/, use: ExtractTextPlugin.extract({ use: [ { loader: 'css-loader', options: { importLoaders: 1 }, }, 'postcss-loader', ], }), }, ], }, output: { path: path.resolve(__dirname, 'dist/assets'), }, plugins: [ new ExtractTextPlugin('[name].bundle.css'), ], };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const webpack = require('webpack');
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
  context: path.resolve(__dirname, 'src'),
  entry: {
    app: './app.js';
  },
  module: {
    loaders: [
      {
        test: /.css$/,
        use: ExtractTextPlugin.extract({
          use: [
            {
              loader: 'css-loader',
              options: { importLoaders: 1 },
            },
            'postcss-loader',
          ],
        }),
      },
    ],
  },
  output: {
    path: path.resolve(__dirname, 'dist/assets'),
  },
  plugins: [
    new ExtractTextPlugin('[name].bundle.css'),
  ],
};

然后在根目录下配置postcss.config.js

module.exports = { plugins: { 'postcss-import': {}, 'postcss-cssnext': { browsers: ['last 2 versions', '> 5%'], }, }, };

1
2
3
4
5
6
7
8
module.exports = {
  plugins: {
    'postcss-import': {},
    'postcss-cssnext': {
      browsers: ['last 2 versions', '> 5%'],
    },
  },
};

之后,就足以在开拓中应用cssnext的特征了

/* Shared */ @import "shared/colors.css"; @import "shared/typography.css"; /* Components */ @import "components/Article.css";

1
2
3
4
5
/* Shared */
@import "shared/colors.css";
@import "shared/typography.css";
/* Components */
@import "components/Article.css";

/* shared/colors.css */ :root { --color-black: rgb(0,0,0); --color-blue: #32c7ff; } /* shared/typography.css */ :root { --font-text: "FF DIN", sans-serif; --font-weight: 300; --line-height: 1.5; } /* components/Article.css *澳门新萄京官方网站用法教程。/ .article { font-size: 14px; & a { color: var(--color-blue); } & p { color: var(--color-black); font-family: var(--font-text); font-weight: var(--font-weight); line-height: var(--line-height); } @media (width > 600px) { max-width: 30em; } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* shared/colors.css */
:root {
  --color-black: rgb(0,0,0);
  --color-blue: #32c7ff;
}
 
/* shared/typography.css */
:root {
  --font-text: "FF DIN", sans-serif;
  --font-weight: 300;
  --line-height: 1.5;
}
 
/* components/Article.css */
.article {
  font-size: 14px;
  & a {
    color: var(--color-blue);
  }
  & p {
    color: var(--color-black);
    font-family: var(--font-text);
    font-weight: var(--font-weight);
    line-height: var(--line-height);
  }
  @media (width > 600px) {
    max-width: 30em;
  }
}

最后动用webpack举行编写翻译就能够了。

五、输入任何模块

选用器也能够继续别的CSS文件之中的平整。

another.css

JavaScript

.className { background-color: blue; }

1
2
3
.className {
  background-color: blue;
}

App.css能够传承another.css里面的平整。

JavaScript

.title { composes: className from './another.css'; color: red; }

1
2
3
4
.title {
  composes: className from './another.css';
  color: red;
}

运作这么些示例。

JavaScript

$ npm run demo05

1
$ npm run demo05

打开

总结

PostCSS,本国还从未太流行起来,但是相信不久的未来也会日趋的走俏,何况国内的能源相当少,然而这几天新出了一本大漠老师们协同翻译的书——《深远PostCSS Web设计》。有意思味的人也得以去看一下,学习有个别前言的东西。本篇也只是大致的写了瞬间PostCSS的事物,鉴于国国内资本源很少,所以参照他事他说加以调查了一下外国的博文化教育材,上边会有链接。

假令你对本人写的有疑问,能够商量,如笔者写的有错误,迎接指正。你喜欢本人的博客,请给本身关怀备至Star~呦。大家协同总计一同前进。款待关切自个儿的github博客

六、输入变量

CSS Modules 扶植采用变量,然而要求设置 PostCSS 和 postcss-modules-values。

JavaScript

$ npm install --save postcss-loader postcss-modules-values

1
$ npm install --save postcss-loader postcss-modules-values

把postcss-loader加入webpack.config.js。

JavaScript

var values = require('postcss-modules-values'); module.exports = { entry: __dirname '/index.js', output: { publicPath: '/', filename: './bundle.js' }, module: { loaders: [ { test: /.jsx?$/, exclude: /node_modules/, loader: 'babel', query: { presets: ['es2015', 'stage-0', 'react'] } }, { test: /.css$/, loader: "style-loader!css-loader?modules!postcss-loader" }, ] }, postcss: [ values ] };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var values = require('postcss-modules-values');
 
module.exports = {
  entry: __dirname '/index.js',
  output: {
    publicPath: '/',
    filename: './bundle.js'
  },
  module: {
    loaders: [
      {
        test: /.jsx?$/,
        exclude: /node_modules/,
        loader: 'babel',
        query: {
          presets: ['es2015', 'stage-0', 'react']
        }
      },
      {
        test: /.css$/,
        loader: "style-loader!css-loader?modules!postcss-loader"
      },
    ]
  },
  postcss: [
    values
  ]
};

接着,在colors.css内部定义变量。

JavaScript

@value blue: #0c77f8; @value red: #ff0000; @value green: #aaf200;

1
2
3
@value blue: #0c77f8;
@value red: #ff0000;
@value green: #aaf200;

App.css能够援用那一个变量。

JavaScript

@value colors: "./colors.css"; @value blue, red, green from colors; .title { color: red; background-color: blue; }

1
2
3
4
5
6
7
@value colors: "./colors.css";
@value blue, red, green from colors;
 
.title {
  color: red;
  background-color: blue;
}

运作这几个示例。

JavaScript

$ npm run demo06

1
$ npm run demo06

打开

1 赞 3 收藏 评论

澳门新萄京官方网站 7

参照他事他说加以调查链接

PostCSS-modules:
make CSS great again!

PostCSS Deep Dive: What You Need to Know

1 赞 3 收藏 评论

澳门新萄京官方网站 8

本文由澳门新萄京官方网站发布于澳门新萄京赌场网址,转载请注明出处:澳门新萄京官方网站用法教程

关键词: