目次
PostCSS の初めての紹介
PostCSS をすぐに使う
環境の準備
gulpfile.js を変更します
サンプル スタイルを作成します
インスタンスを実行します
PostCSS を理解する
PostCSS の詳細を確認します。
PostCSS性能
开始编写自己的PostCSS插件
环境准备
创建插件文件夹
创建插件入口文件
运行实例
再谈PostCSS
ホームページ ウェブフロントエンド htmlチュートリアル POSTCSS_html/css_WEB-ITnose を使用したクイック スタート

POSTCSS_html/css_WEB-ITnose を使用したクイック スタート

Jun 21, 2016 am 08:57 AM

| 元のリンク: http://aotu.io/notes/2015/10/13/start-postcss/

PostCSS の初めての紹介

PostCSS について初めて聞いたので、公式 Github の次の紹介文を読んでください:

PostCSS は、JS プラグインで CSS を変換するツールです。これらのプラグインは、変数とミックスインをサポートできます。将来の CSS 構文、インライン イメージなどをトランスパイルします

を中国語に翻訳すると、次のようになります:

PostCSS は、CSS を変更するために JS プラグインを使用して実装されたツールのセットですこれらのプラグインは、変数と混合構文をサポートし、将来の CSS 構文、インライン画像などを変換できます。

Less や SASS などのツールを使用して、合意された構文に従って CSS を前処理しています。書き込み、最終的にそれを使用可能なスタイルに変換するには、その代償として、 まずこのツールの書き込み構文に精通する必要があります

近年、Grunt、Gulp、Webpack などの自動化ツールの台頭により、組み合わせたアプリケーションが非常に普及しています。では、PostCSS の重要性は何でしょうか。答えは次のとおりです: CSS エコシステム

PostCSS には、CSS にブラウザーのプレフィックスを自動的に追加するプラグイン autoprefixer、最もよく使用される px2rem など、多くのプラグインがあります。まだ CSS 標準ではないものの、特に利用できる cssnext をサポートするプラグインがあり、さらにたくさんのプラグインがあります。有名な Bootstrap でさえ、次のバージョンの Bootstrap 5 ではスタイルの基礎として PostCSS を使用する予定です。

PostCSS を一文で要約すると: CSS コンパイラーでできること、またできること、より良くできること

PostCSS をすぐに使う

上記はおおよそ次のとおりですPostCSS が導入されましたが、私たちの頭の中で PostCSS についての理解が形成されていない可能性があります。そこで、簡単な例を通して PostCSS の使用方法を見てみましょう。

プラグインのおかげで、PostCSS は Grunt、Gulp、webpack、Broccoli、Brunch、ENB をサポートします。ここでは例として Gulp を使用します。

環境の準備

インスタンス ディレクトリを作成して入力します

mkdir postcss-demo && cd postcss-demo
ログイン後にコピー

すぐに package.json ファイルを生成します

# --yes 参数能够帮助我们快速生成默认的package.jsonnpm init --yes
ログイン後にコピー

上記で作成したものを作成しますpackage.json ファイルのメイン パラメータを gulpfile.js に変更し、必要な依存関係をインストールします

# gulp跟gulp-postcss是必须的,后面两个插件为了演示用途npm i gulp gulp-postcss autoprefixer autoprefixer-core cssnext --save-dev -d
ログイン後にコピー

gulpfile.js を作成します

# 这里用命令行进行创建,你也可以手动新建touch gulpfile.js
ログイン後にコピー

gulpfile.js を変更します

次のコードを gulpfile.js に貼り付けます

var gulp = require('gulp');var postcss = require('gulp-postcss');var autoprefixer = require('autoprefixer');var cssnext = require('cssnext');//定义css任务gulp.task('css', function(){  //定义postcss任务流数组  var processors = [    autoprefixer({      browsers:['last 3 version'],      cascade: false,      remove: false    }),    cssnext()  ];  return gulp.src('./src/css/*.css')             .pipe(postcss(processors))             .pipe(gulp.dest('./dist'));});
ログイン後にコピー

サンプル スタイルを作成します

プロジェクトのルート ディレクトリに src ディレクトリを作成し、その下に css ディレクトリを作成します。そしてスタイルを作成します。

# 这里用命令创建,你也可以手动创建mkdir -p src/css && touch style.css
ログイン後にコピー

編集スタイルは次のとおりです:

h1{  display:flex;}:root {--fontSize: 1rem;--mainColor: #12345678;--highlightColor: hwb(190, 35%, 20%);}body {color: var(--mainColor);font-size: var(--fontSize);line-height: calc(var(--fontSize) * 1.5);padding: calc((var(--fontSize) / 2) + 1px);}
ログイン後にコピー

インスタンスを実行します

すべての準備ができたら、実行できます。プロジェクトのルート ディレクトリに定義したばかりのタスク

gulp css
ログイン後にコピー
ログイン後にコピー

予期せぬことが起こらなければ、ルート ディレクトリの下に dist フォルダが生成され、その中にスタイル ファイルが含まれます。その内容は次のとおりです。

body{  display:-webkit-flex;  display:-ms-flexbox;  display:-webkit-box;  display:flex;}body {color:#123456;color:rgba(18, 52, 86, 0.47059);font-size:16px;font-size:1rem;line-height:24px;line-height:1.5rem;padding:calc(0.5rem + 1px);}
ログイン後にコピー

私たちが書いた内容がわかります。スタイルにはブラウザーの接頭辞が自動的に付けられ、将来の CSS 構文の一部が変換されます。

PostCSS を理解する

上記の例を通じて、PostCSS の使用方法を理解する必要があります。この時点で、まず CSS プリプロセッサの使用履歴を思い出してください:

  1. 変数定義、ネスト、継承などの CSS プリプロセッサの構文機能を学習します
  2. 上記の構文に従って、特定のサフィックス名 (.less/.scss など) を持つファイルを作成します
  3. Gulp/Grunt/Webpack などの自動ツールを通じて、または手動で CSS スタイルにコンパイルします

PostCSS の使用履歴:

  1. CSS に従って CSS スタイル ファイルを直接書き込みます標準構文
  2. PostCSS プラグインをロードし、Gulp/Grunt/Webpack などの自動化ツールを介して出力を変換します

比較して、CSS プリプロセッサは次のようなアナロジーを示します。あなたはツールボックスです、ツールボックスの中に何かを手に入れる方法はあなたと合意されており、あなたはこれらのルールに従ってそれを受け取る必要があります、そしてPostCSSはあなたに必要なツールを横から選んで置くことができるようなものです。十分でない場合は、独自のツールを構築できます。

PostCSS の詳細を確認します。

PostCSS 自体には CSS アナライザー、CSS ノードのみが含まれています。ツリー API、ソース マップ ジェネレーター、CSS ノード スプライサー、および PostCSS ベースのプラグインはすべて使用します。これは、CSS ノード ツリー API を使用して実装されます。

CSS は次のように構成されていることは誰もが知っています:

element {  prop1 : rule1 rule2 ...;  prop2 : rule1 rule2 ...;  prop2 : rule1 rule2 ...;  ...}
ログイン後にコピー

各スタイル ルールには 1 つ以上の属性と値が含まれています。したがって、PostCSS の実行プロセスは大まかに次のとおりです:

  1. パーサー

    CSS アナライザーを使用して CSS 文字コンテンツを読み取り、完全なノード ツリーを取得します

  2. プラグイン

    CSS ノード ツリー API を使用して、上記で取得したノード ツリーに対して一連の変換操作を実行します

  3. プラグイン

    上記の CSS 文字への変換後、CSS ノード スプライサーを使用してノード ツリーを再構築します

  4. Stringifier

    上記の変換中に、ソース マップ ジェネレーターを使用して、変換前後の文字間の対応関係を示すことができます

PostCSS性能

在PostCSS官方推特上看到,由JavaScript编写的PostCSS比C++编写的libsass还要快3倍。

如果你对上面的性能截图有疑问,可以亲自来 这里测试看看。

开始编写自己的PostCSS插件

PostCSS在自己的 Github上放了一些常用的插件,更多的插件可以在 postcss.parts进行搜索。

但有时候已有的插件不满足我们的需求,这个时候需要编写自己的PostCSS插件,下面我们将一步步创建一个简单的插件,这个插件功能非常简单,如下:

/*   文件位置:src/css/style.css */h1 {  font-family: "\5FAE\8F6F\96C5\9ED1",fontstack('Arial');}
ログイン後にコピー

当输入上面的样式时,会生成下面的样式:

/*  文件位置:dist/style.css */h1 {  font-family: "\5FAE\8F6F\96C5\9ED1",tahoma,arial;}
ログイン後にコピー

环境准备

我们将以 Gulp作为基础来实现我们的插件,首先创建项目文件夹

mkdir postcss-plugin && cd postcss-plugin
ログイン後にコピー

然后快速创建 package.json文件:

npm init --yes
ログイン後にコピー

紧接着先安装必备的包

npm i gulp postcss gulp-postcss --save-dev -d
ログイン後にコピー

再创建 gulpfile.js并且输入下面内容:

var gulp = require('gulp');var postcss = require('gulp-postcss');gulp.task('css', function(){  var processors = [  ];  return gulp.src('./src/css/*.css')             .pipe(postcss(processors))             .pipe(gulp.dest('./dist'));});
ログイン後にコピー
ログイン後にコピー

创建插件文件夹

我们在执行 npm install安装的包都放置在 node_modules文件夹下面,这里我们创建PostCSS的插件文件夹,注意: PostCSS的插件命名格式为:postcss-插件名字

# 这里采用命令新建文件夹,你也可以手动创建mkdir node_modules/postcss-fontstack
ログイン後にコピー

创建插件入口文件

现在我们可以在 postcss-fontstack文件夹创建入口文件 index.js, PostCSS创建插件的方式如下:

var postcss = require('postcss');module.exports = postcss.plugin('插件名字', function 插件名字(选项){  //这里写插件代码})
ログイン後にコピー

那我们可以在 index.js里面贴入下面代码:

var postcss = require('postcss');modules.exports = postcss.plugin('fontstack', function fontstack( options ){  return function( css ){    options = options || {};    var fontstack_config = {      'Arial': 'tahoma,arial',      'Times New Roman': 'TimesNewRoman, "Times New Roman", Times, Baskerville, Georgia, serif'    };    function toTitleCase( str ){      return str.replace(/\w\S*/g,function( txt ){          return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();      });    }    // css.walkRules方法用来遍历每一条css规则    css.walkRules( function( rule ){        // walkDecls方法用来解析属性跟值        rule.walkDecls( function( decl, i ){            var value = decl.value;            if( value.indexOf( 'fontstack(' ) !== -1 ){                var fontstack_requested = value.match(/\(([^)]+)\)/)[1].replace(/["']/g,"");                fontstack_requested = toTitleCase( fontstack_requested );                var fontstack = fontstack_config[ fontstack_requested ];                var firstFont = value.substr( 0, value.indexOf('fontstack(') );                var newValue = firstFont + fontstack;                decl.value = newValue;            }        });    });  }});
ログイン後にコピー

在 gulpfile.js引入上面的插件,代码如下:

var gulp = require('gulp');var postcss = require('gulp-postcss');gulp.task('css', function(){  var processors = [  ];  return gulp.src('./src/css/*.css')             .pipe(postcss(processors))             .pipe(gulp.dest('./dist'));});
ログイン後にコピー
ログイン後にコピー

运行实例

在项目根目录下运行实例,最终实现我们的效果

gulp css
ログイン後にコピー
ログイン後にコピー

再谈PostCSS

基于 PostCSS能够做到很多 CSS预处理器做不到的事情,未来发展前景还是挺不错的,而且最新的 Atom编辑器也可以下载插件来支持 PostCSS这种语法。

但这就意味着 CSS预处理器过时了么?不会。 PostCSS的出现并不是为了替换掉之前的技术,只是提供多一种思路让我们去考虑,就比如Sass编译后再加 autoprefixer自动补齐浏览器前缀这种做法当前还是比较流行的。

再回到文章最开始说的, PostCSS其实是在打造一个改变CSS开发方式的生态系统。也许暂时我们还是保持传统的开发方式,但未来对于 PostCSS我还是保持关注,它是值得期待的。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

< Progress>の目的は何ですか 要素? < Progress>の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML< Progress>について説明します。要素、その目的、スタイリング、および< meter>との違い要素。主な焦点は、< Progress>を使用することです。タスクの完了と< Meter> statiの場合

< datalist>の目的は何ですか 要素? < datalist>の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML< Datalist>について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

< meter>の目的は何ですか 要素? < meter>の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html< meter>について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化< Meter> < Progress>およびex

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

< iframe>の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? < iframe>の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

この記事では、< iframe>外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

HTMLは初心者のために簡単に学ぶことができますか? HTMLは初心者のために簡単に学ぶことができますか? Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

See all articles