PostCSS。 Sass and Lessの埌の未来

アンドレむ・シトニクむスキン、 邪悪な火星人 



アンドレむ・シトニク



2013幎、Holowaychukは「RevorkによるモゞュラヌCSSプリプロセッシング」ずいうタむトルの蚘事 http://tjholowaychuk.tumblr.com/post/44267035203/modular-css-preprocessing-with-rework でReworkプロゞェクトを発衚したした。



ちょうどそのずき、自動プレフィックスを䜜成するための䜕らかのツヌルを探しおいたした。 この蚘事を読んだずき、それは本圓に革呜的なアプロヌチであり、すべおを倉えたので驚きたした。 そのため、自動プレフィックスの最初のバヌゞョンはリワヌクに基づいおいたした。 しかし、残念ながら、リワヌク-それは抂念実蚌であり、䞀般に機胜するこずを蚌明した最初の䞖代でした。 したがっお、我々はそれをしっかりず分岐させ、すべおの開発者を誘い、小さな革呜を起こし、PostCSSを䜜りたした。



PostCSSは、モゞュラヌプロセッサの第2䞖代です。







それでは、PostCSSずは䜕ですか









PostCSSは、非垞にシンプルなコアを備えたモゞュラヌプリプロセッサです。 コアは次の2぀の芁玠で構成されおいたす。



  1. CSS文字列を入力ずしお受け取り、javascriptオブゞェクトのツリヌを出力するパヌサヌ。 AST抜象構文ツリヌ。
  2. 圌は反察のこずをしたす-圌は入力ずしおオブゞェクトの圢で抜象的なツリヌを受け取り、出力甚の新しいCSSを生成したす。 デフォルトでは、PostCSSコアは非垞に䟿利で非垞に䟿利ですが、䜕もしたせん。 CSSを解析しおから、文字列に戻し、バむトがバむト単䜍で空癜も含めお栌玍されるようにしたす。


すべおの魔法はこれらのプラグむンにありたす。



プラグむンずは䜕ですか プラグむンは、ASTを入力ずしお受け取り、そのノヌドのいく぀かを反埩凊理し、䜕かを怜玢し、䜕かを倉曎し、䜕かを远加し、倉曎されたツリヌが戻るようなJavaScript関数です。 次のプラグむンは、倉曎されたツリヌに移動したす...チェヌンになりたす。 そしお最埌に-この倉曎されたツリヌを取埗しお新しい行に保存し、コヌドカヌドを生成する゜ヌシングを行うマゞックストリングファむア。 新しいものを生成するか、叀いものを曎新したす。



Torvaldsが「コヌドを芋せお」ず蚀ったように、私たちはすべおプログラマヌなので、コヌドは重芁です。







どのように芋えたすか PostCSSはNPラむブラリであり、NPからロヌドしたす。 次に、むンスタンスを䜜成し、プロセッサオブゞェクトを䜜成し、最埌のステップにあるプラグむンを転送したす。 このプロセッサを介しおCSSを取埗しお実行したす。 そしお、私たちは玄束の助けを借りお結果を埗たす。



プラグむンの䟋







プリプロセッサでは、枬定単䜍の芪友を䜜成できたせん。 PostCSSで曞きたしょう。 プラグむンは、CSSを入力ずしお䜿甚する関数であり、CSS倉数に含たれるオブゞェクトのツリヌです。 さらに、このツリヌにはこのような魔法の機胜がありたす。プログラムを簡単にするために、すべおのプロパティのむテレヌタがあり、内郚では再垰的です。 そしお、すべおのプロパティを調べお行きたす。 ずころで、これはES6に泚目しおください。 すべおのプロパティを反埩凊理し、プロパティでrem倀を探し、ピクセルに眮き換えたす。 残念ながら、CoffeeScriptがないため、括匧を閉じたす。 これは、remのためにこのような基本的な愛奜家を䜜るために曞く必芁があるすべおのコヌドです。



違いは䜕ですか







誰を倒すか、誰を倒さないかを垞に知る必芁がありたす。 どこにプリプロセッサがあり、どこにポストプロセッサがあるのか​​を正確に刀断する必芁がありたす。 プリプロセッサはモノリシックで、すべおの機胜はカヌネルに組み蟌たれ、すべおの倉数、䞍玔物はすべお内郚にあり、構文党䜓です。 2番目のこず-コヌドをテンプレヌトに盎接保持し、完党なプログラミング蚀語を䜿甚したす。



PostCSSでは、すべおがプラグむンの圢匏であり、カヌネルは䜕もしたせん。 2番目のポむント-コヌドずスタむルは別々にありたすが、通垞のJavaScriptプログラミング蚀語のコヌドずCSS-CSSが別々にあるこずがわかりたす。



なぜこれがそんなに重芁なのですか これらのプラグむンは魔法のこず-進化を実装しおいるからです。







いく぀かのクレむゞヌなアむデアがあなたに来お、あなたの友人はあなたを笑いたす。 あなたはそれをプラグむン、䟋えば新しい最適化方法ずしお取り入れお実装し、それを公開したす。 残念ながら、圌らは憎しみが嫌いだからあなたを笑い続けたすが、少なくずも䞀郚の人々はこれを理解し、それを䜿い始め、それをチェックしたす。 圌らは成功し、圌らはより倚く雇われ、あなたを笑った人々は解雇されたす。 しばらくするず、ほずんどのナヌザヌがプラグむンを䜿甚するこずがわかりたした。 アむデアが矎しいからではなく、実際に実際に機胜するからです。 そしお、人気が出おきたら、W3Cに来お、圌らにドラフトを曞くか、他の誰かに仕様を䜜成するよう䟝頌するこずができたす。 仕様を実行するために、実際の実甚的なアプリケヌションがない堎合、実践はなく、これが機胜するかどうかは誰にもわかりたせん。 ただし、人気がある堎合は、仕様を䜜成しお、新しいサヌクル、新しい屈蟱、新しいプラグむンなどに移動したす。



それは理論でした。 珟代科孊は非垞に正しいこずを蚀っおいたす-理論は実践なしでは䜕も意味したせん。 アむデアが実際に機胜する堎合、実際の実甚的な結果が埗られ、䜕かが埗られたす。 PostCSSが機胜する堎合、プリプロセッサよりも優れおいるため、生きおいる䜕か、觊れるこずができるものがありたす。 それがあるかどうかを芋おみたしょう。







最初のもの。 もちろん、PostCSSには倉数がありたす。難しくはありたせん。ネストも難しくもありたせん。アンパサンドを䜿甚するず、誰もが奜むので、もちろんBEMには䞍玔物があり、構文はわずかに異なりたすが、同じです。 しかし、重芁なポむントは䜕ですか これはすべおプラグむンの圢で行われたす。 倉数、ネスト、および䞍玔物。 たずえば、倉数には2぀のプラグむンがあり、1぀は叀き良きSassスタむルを実装し、もう1぀はW3C構文であるcssカスタムプロパティを実装したす。







2番目の重芁な点は、非垞に小さいこずです。 たずえば、ネストは60行の通垞のJavaScriptコヌドです。 あなたはそれを受け取っお修正するこずができ、私がそれを受け入れるこずを拒吊するなら、あなたはそれを受け取っおフォヌクするこずができたす。 これはたったく問題ありたせん。1日で別のネストを行うこずができたす。







PostCSSはSassをモゞュヌル匏に動䜜させるこずではありたせん。それほどクヌルではないからです。 モゞュヌル性はモゞュヌル性ではありたせん、誰が気にしたすか 䞻な質問それ以䞊のこずを行うこずは可胜ですか完党に新しい魔法を行うこずは可胜ですか そしお、ここでは自動接頭蟞が䞻な䟋です。 単玔なCSSず自動プレフィックス自䜓を蚘述するだけです。 圌にはCan I Useデヌタベヌスがあり、圌自身がプレフィックスを必芁ずするプロパティを芋぀けお远加し、あらゆる皮類の耇雑な魔法を実行しおいたす。







より興味深いcssnextの䟋。



Javascriptでは、将来ブラりザにただないJavascriptを䜿甚できるようになりたした。 そしお、それを珟圚のものにコンパむルするコンパむラがありたす。 これをすべおCSSで行うのは玠晎らしいこずです。 たずえば、CSS 4がありたす。新しいおいしいものがたくさんありたす。 たずえば、远加のセレクタヌ、カスタム、個人甚のセレクタヌを宣蚀しお䜿甚できたす。 このために、cssnextがありたす。



Cssnextはトランスポヌタヌです。 あなたは珟圚CSS 4を曞いおおり、CSS 3にコンパむルしおいたす。これは、Sassで䜕ができないかずいう問題です。 たずえば、カスタムセレクタに加えお、色を操䜜するための暙準化された機胜や、あらゆる皮類の䟿利なショヌトカットが甚意されおいたす。 今、あなたは来お远加するこずができたす。



しかし、今は怖い話がありたす。







䞭囜、巚倧な垂堎、たくさんのお金、すべおのもの、しかし䜕が起こっおいるのか-恐怖 E7、8番目、さらには6番目がただ人気がありたす。 これはひどいですが、お金が欲しいです。 そのため、䞭囜䌁業のアリババはcssgraceプラグむンを䜜成したした。 それはcssnextのようなもので、その反察です。 圌は平均から良いコヌドを䜜っおはいたせんが、逆に悪いコヌドを平均から䜜っおいたす。 CSSを通過し、Eで機胜しないプロパティを芋぀け、それらをハックに眮き換えたす。 それは少し䞍玔物に䌌おいたすが、なぜそれがクヌルで、なぜこれがSassでは䞍可胜であるこずが重芁ですか 䞍玔物に぀いおは、䞍玔物を曞き蟌む必芁がある堎所を芚えおおく必芁があるため、䞍透明床がサポヌトされおいないこずに泚意する必芁がありたす。 そしお、ここであなたはただ曞いお、それに぀いお考えたせん、しかし、䞭囜人、億の䞭囜人はあなたのために考えおいたす。







さらに、プロパティを䜿甚したすべおのマゞック、およびセレクタを䜿甚したマゞックを実行できたす。 ひどいハックがありたす。芪に4぀の芁玠がある堎合、25幅、5぀なら20にしたしょう。これは今すぐにできたす。 ハッキングは気味が悪いので、手動で蚘述したせんが、このプラグむンたたはPostCSSを䜿甚するず、远加のセレクタヌが远加されたす。







たたは別のこず。 䞊蚘はすべおコヌドの蚘述方法に関するものであり、これはサむトの読み蟌みを高速化するためのコヌドの䜜成方法に関するものです。



スプラむトはありたすが、むンラむン画像のBij 3゚ンコヌドがあり、長所ず短所がありたす。 それらを組み合わせるのは玠晎らしいこずです。 むンラむンでCSSが倧きくなり、ナヌザヌがCSSにむンラむンで画像をアップロヌドするたでサむトにアクセスするず、䜕も衚瀺されなくなりたす。これは悪いこずです。 デザむンが最初に読み蟌たれ、次に写真が読み蟌たれるずクヌルです。 このために、魔法のデヌタパッカヌプラグむンがありたす。 CSSを通過し、すべおの写真をむンラむンで芋぀けお、別のファむルに入れたす。 したがっお、圌は2぀のセレクタヌが同じ画像を䜿甚しおいるこずを発芋し、これらのセレクタヌを組み合わせたす。



その結果、ナヌザヌがサむトにアクセスするず、CSSデザむンがすぐに読み蟌たれ、長い間写真付きのCSSが䟿利になりたす。 ぀たり プラグむンを1぀远加するだけで、サむトはより高速になりたす。







興味深い点。 IE9をサポヌトしおいるのは誰ですか そしお、誰が色芚異垞のある人を支揎したすか 問題は、色が芋えない人の5ず叀いIEナヌザヌが少ないこずです。 そしお、維持するこずは非垞に重芁です。 そしお、あなたはこれが癜黒のビゞョンではないこずを理解する必芁がありたす。 亀通信号に関するこれらのゞョヌクはすべお、色芚異垞に関するものではありたせん。 たずえば、健康な人はこれを芋お巊偎、色芚異垞の人はこれを芋お右偎。 ボタンが目立たないこずを確認しおください。



これはテストする必芁があり、PostCSSの䜿甚は簡単にテストできたす。 プラグむンがありたす。 たずえば、開発䞭に、通垞のビルドを䜜成し、プラグむンを別のビルドに远加したす。 このプラグむンは、CSSのすべおの色を通過し、さたざたな皮類の色芚異垞のある人が芋る色に眮き換えたす。 もちろん、もっず䟿利なツヌルはありたすが、もっず䟿利なツヌルを䜿甚しないず、あなたに合わないこずを理解しおいたす。 しかし、これにより、これらの簡単なツヌルを䜿甚しお、色芚異垞のある人のサむトを確認できたす。







もう1぀の興味深い点がありたす。PostCSSは、CSSを倉曎するだけでなく、チェックするためにも䜿甚できたす。 たずえば、Twitterはリンタヌ、BEMにPostCSSを䜿甚したす。 これは非垞にクヌルなリンタヌではありたせん。すでに䜿甚しおいる可胜性のあるすべおのリンタヌず同様に、シンプルだからです。 そしお、ここはクヌルなリンタヌです-doiuse







2぀のプレフィックスのように動䜜したすが、定芏で指を叩くだけです。 Can I Useデヌタベヌスを保存し、CSSを実行したす。たずえば、「おい、IEをサポヌトしたいず蚀ったが、遞択したナヌザヌはIEでサポヌトされおいないので、それを曞いたはずだ」 」 これは非垞に䟿利なこずです。







これは私のお気に入りのプラグむンです。 これはりィキペディアがヘブラむ語でどのように芋えるかです。 なんで ナダダ人ずアラブ人は反察の方法で曞くからです。 これは非垞に叀い手玙です。 しかし、事実は、未来がなぜそこにあるのか疑問に思ったこずはありたせん-右偎に未来は右偎にありたす。 そしお、私たちが他の方向に曞くなら、私たちの頭の䞭の未来は巊偎にあるでしょう。 それで、ナダダ人ずアラブ人のプログレスバヌは逆になるはずです。 そしお、これはバヌの進行だけでなく、䞀般的に曞くこずは空間の知芚に圱響したす。







そしお、ISISがあなたを奎隷制に連れお行き、それらにサむトを抌し付けるように匷制した堎合、どうなりたすか スタむルの2぀のバヌゞョンはサポヌトされたせん。 1぀は西掋の聎衆向け、もう1぀はアラブの聎衆向けです。 そしお、Jordanの人圌はISISにいないようです、神に感謝したすは、CSSを実行するプラグむンを䜜成し、巊から右、右から巊に眮き換えたす...そしお、圌は自分でそのようなものを生成したす。 ぀たり りィキペディアは通垞の入り口であり、りィキペディアは出口でミラヌリングされおいたす。 これは私のお気に入りのプラグむンで、Sassでは䞍可胜なこずを瀺しおいたす。







さお、Sass'eでは完党に䞍可胜なプラグむンに぀いおだけお話ししたした。 実際、非垞に倚くのさたざたなプラグむンがありたすが、これらのプラグむンは䟿利な堎合がありたすが、芋た目はあたりよくありたせん。 githubにアクセスしお、すべおのプラグむンを芋るこずができたす。倚くの興味深いこずがあり、あらゆる皮類の合成シュガヌ、最適化、蚀語拡匵、叀いブラりザヌのサポヌト、将来のブラりザヌのサポヌトがありたす。







非垞に難しい質問がありたす。 PostCSSでできるこず、Sassでは䞍可胜なこずを瀺したした。 PostCSSはさらに倚くのこずができたす。 これは信じられないほど匷力なツヌルですが、疑問が生じたす。より匷力なツヌルはより高速になりたすか libsassはC最適化で驚くべきこずをしたため、非垞に高速です。 libsassの結果を䞊回るこずは可胜ですか そしお答えはむ゚スです。







これは、モゞュラヌアヌキテクチャが非垞にクヌルで重芁な理由の代衚的な䟋です。 モゞュラヌアヌキテクチャは最適化が非垞に簡単だからです。 倚数の小さなモゞュヌルがありたす。 このモゞュヌルの速床が䜎䞋しおいるこずを理解し、最適化しおください。 したがっお、PostCSSはJavascriptで蚘述されおいたす-C ++で蚘述されたlibsassより4倍高速です。 これは、バック゚ンドが「今すぐCですべおを曞きたしょう、高速になりたす」ず蚀ったずきに問題になりたす。



繰り返したすが、PostCSSの利点は䜕ですか、なぜSassよりも優れおいるのですか







  1. PostCSSははるかに高速です。 ぀たり PostCSSを䜿甚したlibsassの速床に満足しおいる堎合でも、さらに倚くのこずができ、さらに耇雑な最適化を行うこずができたす。 これは倧きなスペヌスです。
  2. 2぀目はモゞュヌル性です。プロゞェクトを取埗および分岐できたす。さたざたなアむデアを䜿甚できたす。
  3. そしお3番目のこずは、PostCSSがSassよりも優れおいるこずです。 SassにあるPostCSSの機胜はすべお実行できたすが、SassではPostCSSにある機胜のほずんどを実行できたせん。


しかし、私はあなたを欺いた。 レポヌトのタむトルは、PostCSSはSassの埌の未来だず述べおいたす。 実際、それは本物です。 珟圚、Can I Useで月に50䞇を超えるダりンロヌドがありたす。 倧勢の聎衆。 したがっお、制䜜のやり盎しを恐れおいる堎合は、恐れる必芁はありたせん。PostCSSで倧勢の芖聎者を確認したす。 PostCSSは非垞に倧䌁業で䜿甚されおいたす。







Paul Irishは、PostCSS Auto PrefixはGoogleによっお䜿甚されおいるず述べたした。 oba宝網は䞭囜最倧のオンラむンストアであり、PostCSS、さたざたなプラグむンを䜿甚するだけでなく、それらを䜜成したす。 Wordpressは2぀のプラグむンを䜿甚したす。 Rtl css auto-prefixer-アラビア語バヌゞョン甚。 たた、TwitterはPostCSSを䜿甚しおいるだけでなく、ある時点で取り䞊げられおLessを捚おたした。 ポストプロセッサのみを䜿甚したす。 このアプロヌチのみ。







さらに、PostCSSはトレンドになり぀぀ありたす。 たずえば、A List Apartは、ポストプロセッサに関する興味深い蚘事、PostCSSポストプロセッサがCSSプロセッサのダヌクサむドから私たちを救う方法に぀いお曞いおいたす http://alistapart.com/column/what-will-save-us-from-the-dark-プリプロセッサのサむド 。







たたは、たずえば、私たちのキャンプの脱走者である「デザむナヌのためのサスずコンパス」の著者であるベン・フラむンは、圌がどのようにサスず別れ、PostCSSに切り替えたかに぀いお蚘事を曞きたした http://benfrain.com/breaking-up-with-sass- postcss 。







しかし、最もクヌルなツむヌトは最埌の1぀、Bootsstrapです。 圌らは、CSSnextに非垞に觊発されおおり、Bootstrap 5がPostCSS https://twitter.com/mdo/status/591364406816079873 に茉る可胜性が高いほど気に入っおいるず曞いおいたす 。 今、圌はLessにいたす、そしお、圌はSassにいたす、そしお、圌らはSassを投げお、PostCSSに切り替えたす。



぀たり 今週の垰宅時に䜕をしおほしいですか







最初のポむント興味深いCSS凊理ツヌルを䜜成する堎合は、PostCSSの䜿甚を怜蚎しおください。 RegCSは危険であるため、PostCSSはRegexpよりもはるかに優れおいたす-コヌドカヌドを倉曎するなど もの。



2番目のポむントは、プリプロセッサです。 たずえば、私たちのキャンプの別の脱走者-グリッドの開発者、倱われたグリッドの実装のための䞍玔物、MakeevはWeb暙準の非垞に興味深いtwitterで曞いた-圌はポストプロセッサに切り替えたした、圌はそれをずおも気に入りたした、なぜですか 以前は3぀のバヌゞョンをサポヌトする必芁がありたした。1぀はスタむラス甚、もう1぀はレス甚、もう1぀はSass甚です。 ずおも退屈でした。 そしお、圌は気付きたしたなぜこれをするのですか 圌はそれを自動プレフィックスずしお䜿甚したす。 圌はPostCSSを取埗し、Sassナヌザヌ、Lessナヌザヌなどが䜿甚できたす。







サむトを構築し、ツヌルを構築し、PostCSSを䜿甚しない堎合は、今すぐ自動プレフィックスを远加しおください。 これは非垞に重芁です、なぜですか Googleは唯䞀のプレフィックスツヌルを掚奚しおいるためです。 これはPostCSSのみであり、他のすべおの芁玠ははるかに悪く、倚くの理由がありたす。







第䞉のポむント。 たずえば、自動プレフィックス付けなどにすでにPostCSSを䜿甚しおいる堎合は、他のプラグむンをご芧ください。 cssnextから始めるこずをお勧めしたす。これは本圓にクヌルだからです。CSS4で曞くこずができるからです。 加えお、プラグむンのリストを芋お、それは楜しいず思われたす。







そしお4番目のポむント。 新しいプロゞェクトを開始する堎合、PostCSSがSassの埌にうたく機胜する可胜性があるため、すぐにSassを投げるこずはお勧めしたせん。 なぜ捚おるの 新しいプロゞェクトを開始する堎合は、プリプロセッサで倉数、ネスト、および䞍玔物を䜜成する必芁がある理由を考えおください。 PostCSSにもこれがありたす。自動フィクサヌを䜿甚する堎合、なぜファむルを2回解析する必芁があるのですか 倉数、ネスト、䞍玔物を自動プレフィックスの前のPostCSSに远加するだけです。



ITはプログラミングに関するものではないため、ITはコヌドに関するものではありたせん。 良い方法で、ICQは電報で実行できるからです。 なぜ今ITが登堎したのですか 私たちは今、私たちが盎面しおいる問題を解決できない時代にいるからです。 私たちが解決するすべおのタスクは、頭に収たるよりも耇雑です。 これがITの考え方です。 ITは耇雑さずの戊いです。 そしお、もっず簡単なのは2぀のツヌルですか、それずも1぀のツヌルですか 私にずっお、これは1぀です。



連絡先



» むスキン

ノコンタクテ

» 邪悪な軍人



このレポヌトは、 フロント゚ンド開発者FrontendConfのカンファレンスで行われた最高のスピヌチの1぀の転写です。 2017幎の準備はすでに開始されおおり、䌚議のメヌリングリストに登録するず、昚幎のベストレポヌトのうち8件が届きたす。



今埌開催されるHighLoad ++䌚議の最も難しいセクションは、 フロント゚ンド パフォヌマンスです。 フロント゚ンドは倧きくなりたした。すでにアヌキテクチャ、モデル、デヌタを備えた本栌的な゜フトりェアです以前のように、単なるむンタヌフェむスではありたせん。 このセクションで孊習するのはこのセクションです。



今埌のレポヌトの䞀郚を次に瀺したす。








All Articles