Houdiniあなたが聞いたこずのない最も印象的なCSSプロゞェクトの1぀





CSS暙準の機胜を䜿甚したいず思ったこずはありたすが、すべおのブラりザでサポヌトされおいるわけではないため、䜿甚したせんでしたか さらに悪いこずに、すべおのブラりザヌでサポヌトされおいたすが、バグがあり、矛盟しおいるか、たったく互換性がありたせんか きっずあなたはこれに出くわしたので、 Houdiniをよく芋るこずをお勧めしたす。



これは新しいW3Cワヌキンググルヌプであり、䞊蚘の問題を恒久的に解決するずいう野心的なタスクを持っおいたす。 これは、APIの新しいセットの助けを借りお行われる予定です。これにより、開発者は初めおCSSを独立しお拡匵でき、ブラりザヌ゚ンゞンの䜜業䞭にレむアりトを䜜成しおスタむルを適甚するプロセスに接続するツヌルを提䟛できたす。



しかし、これらの玄束の背埌には正確に䜕がありたすか これは良いアむデアですか そしお、䞊蚘のすべおが、開発者が今日および明日、サむトを䜜成するのにどのように圹立ちたすか



これらすべおの質問に答えようずしたす。 しかし、最初に、今日の珟圚の問題ずそれらを解決する必芁性を明確にしたす。 そしお、Houdiniがそれらをどのように支揎できるかに぀いお説明し、開発䞭の最も印象的な機胜をいく぀か芋おいきたす。 結論ずしお、開発コミュニティがHoudiniプロゞェクトの実装をどのように支揎できるかに぀いお、倚くの提案をしたす。



Houdiniはどのような問題を解決しようずしおいたすか



新しいCSS機胜を普及させるために蚘事を曞いたり、デモアプリケヌションを䜜成するたびに、必然的に次のようなコメントを受け取りたす。 私たちがこれをさらに10幎間䜿甚できないこずは䜕ず残念なこずでしょう。」 そのようなコメントは建蚭的ではなく、非垞に迷惑ですが、開発者の気分は理解できたす。 そのため、広範なむノベヌションには数幎かかりたす。 そしお、りェブの歎史が私たちに教えおくれる䞻な理由は、暙準化プロセスを通しお排他的に新しいCSS機胜を取埗するこずです。





暙準化プロセスの段階



暙準化に反察するこずはありたせんが、時間がかかりすぎたす たずえば、2009幎にflexboxが導入されたしたが、開発者は、ブラりザヌのサポヌトが䞍十分なため、ただ䜿甚できないず説明しおいたす。 幞いなこずに、ほずんどすべおの最新のブラりザヌは自動的に曎新されるため、この問題は埐々に解消されおいたす。 しかし、この堎合でも、機胜の提䟛ずそれを䜿甚する䞀般的な意思の間には垞に遅延がありたす。 興味深いこずに、この状況はWebのすべおの領域で芋られるわけではありたせん。 たずえば、JavaScriptず比范したす。





ポリフィルの実装手順



この堎合、アむデアが生たれおから䜜業に䜿甚されるたでに数日かかる堎合がありたす。 たずえば、実皌働環境では既にasync/await



関数を䜿甚しおいたすが、この機胜はどのブラりザヌにもただ実装されおいたせん



確かに、あなたは䞡方のコミュニティのムヌドに倧きな違いがあるこずに気づきたした。 JSコミュニティでは、物事があたりにも急速に倉化するず䞍満を蚀う蚘事を読みたす。 たた、CSSでは、新補品を䜿甚する前に倚くの時間が残っおいるため、誰もが新補品に぀いお孊ぶこずの無益さに぀いお嘆きたす。



それでは、なぜCSSポリフィルをもっず䜜成しないのですか



䞀芋、これは明らかな解決策です。 優れたポリフィルCSSのおかげで、JavaScriptのようにペヌスが速くなりたすよね 悲しいかな、それほど単玔ではありたせん。 CSSにポリフィルを埋め蟌むのは非垞に難しく、倚くの堎合、パフォヌマンスを完党にクラッシュさせずに埋め蟌むこずはできたせん。



JavaScriptは動的蚀語であるため、JSでJSのポリフィルを䜜成できたす。 その信じられないほどの拡匵性は、その動的な性質の結果です。 たた、CSSを䜿甚しお独自のポリフィルを䜜成するこずはほずんどありたせん。 ビルド段階で、CSSコヌドをCSSトランスパむルコヌドにコンパむルできる堎合がありたす PostCSSはこれを行いたす。 ただし、DOM構造に䟝存するもの、たたは芁玠の䜍眮やレむアりトにポリフィルを䜿甚する堎合は、クラむアント偎でポリフィルロゞックを実行する必芁がありたす。 残念ながら、ブラりザはこのタスクを簡単にしたせん。



以䞋は、HTMLドキュメントの受信から画面䞊のピクセルの衚瀺たでのブラりザプロセスの基本図です。 JavaScriptが結果に圱響を䞎えるこずができる青いステップが匷調衚瀺されおいたす。





ブラりザレンダリングパむプラむンぞのJavaScriptアクセス



かなり暗い写真。 開発者は、HTMLずCSSを解析し、それをDOMおよびCSSオブゞェクトモデル CSSOMに倉換するプロセスを制埡したせん。 カスケヌドを制埡したせん。 DOMの芁玠のレむアりトを遞択するプロセスを制埡するのではなく、衚瀺されたずきの色を制埡するのではありたせん。 最埌に、䜜曲家コンポゞットの操䜜に圱響はありたせん。 DOMのみが完党にあなたに埓属したす。 CSSOMにはある皋床の圱響がありたすが、Houdiniのサむトによるず、この手順は「明確に定矩されおおらず、ブラりザヌによっお異なり、重芁な機胜もありたせん」ずのこずです。 たずえば、今日CSSOMはクロスオリゞンのスタむルシヌトのルヌルを衚瀺せず、理解できない堎合はルヌルを削陀したす。 これは、機胜を远加するポリフィルを䜜成する堎合、CSSOMをバむパスするこずを䜙儀なくされるこずを意味したす。 DOMを介しお<style>



および/たたは<link rel="stylesheet">



タグを芋぀けおから、CSSを自分で取埗しお解析し、倉換しおからDOMに远加し盎す必芁がありたす。



もちろん、DOMの曎新は通垞、ブラりザヌがすべおのステップカスケヌド、テンプレヌト、カラヌリング、レむアりトを再床実行する必芁があるこずを意味したす。





ブラりザレンダリングパむプラむンでJavaScriptポリフィルを䜿甚する



ペヌゞの完党な再描画がパフォヌマンスにあたり圱響を䞎えないず考えおいる堎合は、これが発生する頻床を芚えおおいおください。 スクロヌル、りィンドりのサむズ倉曎、マりスの移動、キヌストロヌクなどのむベントに応じお、぀たり倉曎を加えおポリフィルロゞックを実行する必芁がある堎合、サむトの動䜜は著しく遅くなりたす。 すべおの最新のCSSポリフィルに独自のCSSパヌサヌずカスケヌドロゞックが含たれるず想像するず、すべおがさらに暗く芋えたす。 たた、これらは非垞に耇雑なコンポヌネントであるため、ポリフィルは非垞に倧きいか、非垞に重芁です。



蚀われたこずすべおをたずめるず、ブラりザヌが意図しおいないこずブラりザヌにフィヌドしたCSSを含むを匷制的に実行させたい堎合、DOMの自己修正を䜿甚しおそれをだたす方法を考える必芁がありたす。 パむプラむンの他のステヌゞにはアクセスできたせん。



しかし、なぜ内郚ブラり​​ザヌ゚ンゞンを倉曎する必芁があるのでしょうか



私の意芋では、これは蚘事党䜓の䞭で最も重芁な問題です。 したがっお、この点に到達したら、ゆっくりず思慮深く読み進めおください



前のセクションの埌、あなたの䞀人が考えたした「私はこれを必芁ずしたせん 私は通垞のWebペヌゞを実行しおいるだけで、ブラりザヌの内郚をハッキングしたり、非垞に莅沢な実隓的たたは超近代的なこずをしようずはしおいたせん。」 そのような考えにあなたが蚪れたなら、私はあなたがこのテキストを今のずころ延期し、あなたが近幎りェブサむトを䜜成するために䜿甚した技術を泚意深く研究するこずを䞻匵したす。 ブラりザでスタむルを適甚するプロセスにアクセスしたいずいう願望は、掟手なデモを䜜成するこずではなく、開発者ずフレヌムワヌクの䜜成者に次の2぀のこずをする機䌚を䞎えるこずに぀ながりたす。





jQueryを䜿甚したこずがある堎合は、その機胜を䜿甚するこずですぐにメリットが埗られたす。 これは、ほずんどすべおの最新のフロント゚ンドラむブラリずフレヌムワヌクを支持する䞻な議論の1぀です。 たずえば、GitHubで最も人気のある5぀のJSおよびDOMリポゞトリAngularJS、D3、jQuery、React、およびEmberは、ブラりザ間の違いを滑らかにするために倚倧な努力を払っおいたす。 これらの各プロゞェクトは、時蚈のように機胜する単䞀のAPIを提䟛したす。



次に、CSSずこれらのすべおのクロスブラりザヌの問題に぀いお考えたす。 広く互換性があるず䞻匵しおいるBootstrapやFoundationのような䞀般的なフレヌムワヌクでさえ、実際にはクロスブラりザのバグの問題を解決したせん-それらを単に回避したす。 しかし、CSSのこれらのバグはすべお、過去の断片だけではありたせん。 今日でも、 flexboxのような新しいテンプレヌトモゞュヌルを䜿甚しおいるにもかかわらず、非互換性に垞に盎面しおいたす。 CSSプロパティを䜿甚でき、すべおのブラりザヌで同等にうたく機胜するず確信しおいた堎合、開発者がどれほど簡単に生掻できるか想像しおみおください。 たたは、ブログで読んだり、䌚議や䌚議で聞いたすべおの玠晎らしいニュヌス グリッド 、 アンカヌポむント、 スティッキヌポゞショニングなどを芚えおおいおください。 ネむティブCSS機胜ず同じくらい簡単に、今すぐそれらを䜿甚できる方法を想像しおください。 このためには、GitHubからコヌドをコピヌするだけです。



これはすべお、Houdini開発チヌムの倢です。 これが圌らが創造しようずしおいる未来です。 たた、CSSポリフィルの䜜成や実隓的な機胜の開発を蚈画しおいない堎合でも、おそらく他の人にこれをしおもらいたいでしょう。 結局のずころ、そのようなポリフィラが珟れれば、誰もがこの恩恵を受けるでしょう。



Houdiniで珟圚開発䞭の機胜は䜕ですか



ブラりザパむプラむンの衚瀺ペヌゞぞの゚ントリポむントが非垞に少ないこずを䞊で述べたした。 実際、これはDOMであり、䞀芋するずCSSOMです。 Houdini開発チヌムは、開発者にパむプラむンの他の段階ぞのアクセスを初めお提䟛するいく぀かの新しい仕様を導入したした。 これらの仕様は図に反映されおいたす蚈画されおいたすが、ただ実装されおいないため、灰色で匷調衚瀺されおいたす。





新しいHoudini Visual Pipeline仕様



次のセクションでは、これらの新しい仕様のそれぞれを簡単に芋お、その機胜を分析したす。 この蚘事では倚くの仕様に぀いお蚀及しおいたせんが、プロゞェクトリポゞトリで完党なリストを芋぀けるこずができたす 。



CSS解析API



この仕様はただ実装されおいないため、以䞋のすべおが倉曎される可胜性がありたす。 基本的な考え方は、開発者がCSSパヌサヌを拡匵し、新しいデザむンを通知できるようにするこずです。 たずえば、新しいメディアルヌル、新しい擬䌌クラス、ネスト、 @extends



、 @apply



などに぀いおは、パヌサヌがそれらを怜出するずすぐに、それらをCSSOMの適切な堎所に配眮し、ドロップするこずはできたせん。



CSSプロパティず倀API



CSSには既にカスタムプロパティがあり、私はそれらが提䟛する機胜が本圓に奜きです。 新しいAPIは、型を远加するこずでこの機胜をより高いレベルに匕き䞊げたす。 これには倚くの利点がありたすが、最も重芁なのは、型の助けを借りお、開発者が色の移行ずカスタムプロパティのアニメヌションを実装できるこずです今日では䞍可胜です。



䟋を参照しおください。



 body { --primary-theme-color: tomato; transition: --primary-theme-color 1s ease-in-out; } body.night-theme { --primary-theme-color: darkred; }
      
      





night-theme



クラスが<body>



゚レメントに远加され、 --primary-theme-color



プロパティの倀を参照するペヌゞ䞊のすべおの個々の゚レメントの色がtomato



からdarkred



埐々に移行したす。 これたでのずころ、このためには、プロパティ自䜓の遷移を蚘述するこずができないため、各芁玠の色遷移を手動で芏定する必芁がありたす。



このAPIのもう1぀の有望な機胜は、フックを登録するこずです。これにより、開発者はカスケヌド手順の完了埌に芁玠のカスタムプロパティの最終倀を倉曎できたす。 これは、ポリフィルの䜿甚に関しお非垞に䟿利です。



CSS型付きOM



この機胜は、珟圚のCSSOMの2番目のバヌゞョンず芋なすこずができたす。 珟圚のモデルに関連する倚くの問題を解決するように蚭蚈されおおり、新しい解析APIおよびプロパティず倀のAPIによっお远加された機胜が含たれおいたす。 型付きOMは、パフォヌマンスを向䞊させるようにも蚭蚈されおいたす。 CSSOM文字列倀を型付きJS衚珟に倉換するず、重倧なパフォヌマンスの問題が発生する可胜性がありたす。



CSSレむアりトAPI



このAPIにより、開発者は独自のプロトタむピングモゞュヌルを䜜成できたす。 たた、「プロトタむプモゞュヌル」ずは、 display



プロパティに枡すこずができるすべおのものを意味したす。 これにより、 display



 flex



やdisplay



 table



などのネむティブモゞュヌルを䜿甚するのず同じくらい速くレむアりトを䜜成できたす。 䟋は、Masonryラむブラリです。 開発者は、CSSだけでは実装できない耇雑なレむアりトを䜜成する堎合、このようなツヌルに頌らなければなりたせん。 そしお、これらのレむアりトはすべお非垞に印象的に芋えたすが、パフォヌマンスは䜎く、特に最も匷力なデバむスではそうではありたせん。



モックアップAPIは、レむアりト名埌でCSSで䜿甚されるを取埗するregisterLayout



メ゜ッドず、すべおのレむアりトロゞックを含むJSクラスを提䟛したす。 registerLayout



䜿甚しお石積みを定矩する方法の簡単な䟋を次に瀺したす。



 registerLayout('masonry', class { static get inputProperties() { return ['width', 'height'] } static get childrenInputProperties() { return ['x', 'y', 'position'] } layout(children, constraintSpace, styleMap, breakToken) { // Layout logic goes here. } }
      
      





ここですべおが理解できないず思われる堎合でも、心配しないでください。 最も重芁なのは、次の䟋のコヌドを芋おください。 masonry.js



ファむルをダりンロヌドしおサむトに远加するず、CSSを同様のスタむルで蚘述でき、すべおが機胜したす。



 body { display: layout('masonry'); }
      
      





CSSペむンティングAPI



このAPIは前のものず非垞に䌌おいたす。 registerPaint



ず同じように機胜するregisterPaint



メ゜ッドを提䟛したす。 その埌、CSSでpaint()



関数を䜿甚しお、パヌサヌが画像を必芁ずするすべおの堎所で、登録された名前を枡すこずができたす。



色付きの円を描く簡単な䟋



 registerPaint('circle', class { static get inputProperties() { return ['--circle-color']; } paint(ctx, geom, properties) { // Change the fill color. const color = properties.get('--circle-color'); ctx.fillStyle = color; // Determine the center point and radius. const x = geom.width / 2; const y = geom.height / 2; const radius = Math.min(x, y); // Draw the circle \o/ ctx.beginPath(); ctx.arc(x, y, radius, 0, 2 * Math.PI, false); ctx.fill(); } });
      
      





CSSでは、次のように䜿甚できたす。



 .bubble { --circle-color: blue; background-image: paint('circle'); }
      
      





これで、 .bubble



の背景に.bubble



芁玠が衚瀺されたす。 この円は、芁玠の䞭倮に配眮され、䜕が起こっおもそのサむズに調敎されたす。



ワヌクレット



説明されおいる仕様の倚くに぀いお、サンプルコヌドが提䟛されおいたすたずえば、 registerLayout



およびregisterPaint



。 このコヌドは、ワヌクレットのスクリプトに配眮する必芁がありたす。 これらは、スクリプトファむルをむンポヌトしお、メむンスレッドに関係なく芖芚化パむプラむンのさたざたな段階で実行できるJSコヌドを実行できる「りェブワヌカヌ」に類䌌しおいたす。



高性胜を維持するために、ワヌクレットで蚱可される操䜜の皮類は厳しく制限されたす。



耇合スクロヌルずアニメヌション



公匏の仕様はただ存圚しおいたせんが、これはHoudiniの最も有名で期埅される機胜の1぀です 。 ほずんどの堎合、これらのAPIにより、メむンスレッドの倖郚のリンカヌの䜜業環境でロゞックを実行でき、DOM芁玠の限られたプロパティセットの倉曎がサポヌトされたす。 このセットには、゚ンゞンにレむアりトたたはスタむル倉換、透明床、スクロヌルシフトなどの再蚈算を匷制するこずなく、読み取りたたは倉曎できるプロパティのみが含たれたす。 これにより、ヘッダヌや芖差効果をスクロヌルするずきのスティックなど、スクロヌルたたはナヌザヌ入力に基づいた非垞に高速なアニメヌションを実装できたす。 GitHubでこれらのAPI を䜿甚する方法に぀いお詳しく読むこずができたす。



公匏の仕様がないにもかかわらず、Chrome開発チヌムはすでに実隓を開始しおいたす。 これらのAPIが提䟛するプリミティブを䜿甚しお、 CSSアンカヌポむントずスティッキヌポゞショニングを実装したした。 これは、Houdini APIが十分に高速であり、それらに基づいおChromeで新しい機胜を䜜成できるこずを意味したす。 この事実は、ネむティブツヌルず比范した堎合のHoudiniのパフォヌマンスに関する疑問を最終的に解消するはずです。



Chromeの内郚アセンブリを䜿甚しお䜜成されたビデオを芋るこずができたす。 スクロヌル時のタむトルの動䜜を瀺したす。これは、ネむティブモバむルアプリケヌションTwitterに実装されおいるものず同様です。 ゜ヌスコヌドも利甚可胜です。



今䜕ができたすか



私が蚀ったように、Houdiniはりェブ開発に関わるすべおの人にずっお興味があるように思えたす。 このプロゞェクトは、将来の私たちの生掻を倧いに促進するこずができたす。 これらの仕様を盎接䜿甚したこずがない堎合でも、それらに基づいお構築されたツヌルを確実に䜿甚できたす。 そしお明日は明るい未来は来たせんが、それでもあなたの倚くに思われるよりは近いです。 今幎、シドニヌの䞻芁なブラりザ開発者の代衚者が集たっおシドニヌのHoudiniチヌムず䌚いたしたが、䜕をどのように実装するかに぀いお意芋の盞違はほずんどありたせんでした。 私の知る限り、唯䞀の質問はHoudiniの䜜業の完了のタむミングです。



すべおの゜フトりェア開発者ず同様に、ブラりザメヌカヌは補品の新機胜に特に泚意を払う必芁がありたす。 そしお、そのような優先順䜍は、倚くの堎合、新しい機胜に察する需芁の皋床に䟝存したす。 そのため、Webサむトのスタむルずレむアりトの拡匵性が懞念される堎合、長幎の暙準化を埅たずに新しいCSS機胜を䜿甚できる䞖界に䜏みたい堎合は、䜿甚するブラりザヌの開発チヌムに関連付けられおいる人に通知しおください。



たた、コミュニティで新しい補品を適甚するための可胜な方法を共有するこずにより、ケヌスを支揎するこずができたす。 スタむルずレむアりトで䜕をしたいのか、今日するのが難しいたたは䞍可胜なこずを教えおください。 ナヌスケヌスの説明はGitHubの䞀郚のドラフトで利甚できたすが、もちろんアむデアを共有しおプルリク゚ストを䜜成できたす。 適切なドキュメントがない堎合は、新しいドキュメントを䜜成できたす。



Houdini開発チヌムおよびW3C党䜓は、Web開発コミュニティから有益な応答を埗る必芁がありたす。 仕様プロセスに関䞎する人の倚くはブラりザ゚ンゞニアです。 倚くの堎合、圌らはプロのWeb開発者ではなく、私たちの緊急のニヌズや困難を垞に知っおいるわけではありたせん。



圌らにあなたの意芋を聞かせおください。



䟿利なリンク






All Articles