SnappySnippet
ようやくこのツールを作成する時間ができました。Github からSnappySnippetをインストールできます。指定された (最後に検査された) DOM ノードから HTML+CSS を簡単に抽出できます。さらに、CodePen または JSFiddle にコードを直接送信できます。楽しみ!

その他の機能
- HTML のクリーンアップ (不要な属性の削除、インデントの修正)
- CSS を最適化して読みやすくする
- 完全に設定可能 (すべてのフィルターをオフにすることができます)
::before
および::after
疑似要素で動作します
- Bootstrap & Flat-UIプロジェクトのおかげで素晴らしい UI
コード
SnappySnippet はオープン ソースであり、GitHubでコードを見つけることができます。
実装
これを作成している間にかなり多くのことを学んだので、私が経験したいくつかの問題とそれらに対する私の解決策を共有することにしました。
最初の試行 - getMatchedCSSRules()
最初に、元の CSS ルール (Web サイトの CSS ファイルから取得) を取得しようとしました。驚くべきことに、これは のおかげで非常に簡単ですがwindow.getMatchedCSSRules()
、うまくいきませんでした。問題は、HTML スニペットのコンテキストではもはや一致しない、ドキュメント全体のコンテキストで一致する HTML および CSS セレクターの一部のみを取得していたことです。セレクターを解析して変更するのは得策ではないように思えたので、この試みは断念しました。
2 回目の試行 - getComputedStyle()
次に、@CollectiveCognition が提案したことから始めました - getComputedStyle()
. ただし、すべてのスタイルをインライン化するのではなく、HTML から CSS を分離したかったのです。
問題 1 - CSS を HTML から分離する
ここでの解決策はあまり美しくはありませんでしたが、非常に簡単でした。選択したサブツリーのすべてのノードに ID を割り当て、その ID を使用して適切な CSS ルールを作成しました。
問題 2 - デフォルト値のプロパティを削除する
ノードに ID を割り当てることはうまくいきましたが、CSS ルールのそれぞれに最大 300 個のプロパティがあり、CSS 全体を読み取れないことがわかりました。指定された要素に対して計算されたすべての可能な CSS プロパティと値
を返すことが判明しました。getComputedStyle()
それらのいくつかは空で、いくつかはブラウザのデフォルト値を持っていました。デフォルト値を削除するには、最初にブラウザーから取得する必要がありました (各タグには異なるデフォルト値があります)。解決策は、Web サイトからの要素のスタイルを、空の に挿入された同じ要素と比較することでした<iframe>
。ここでのロジックは、空の にはスタイル シートがない<iframe>
ため、そこに追加した各要素にはデフォルトのブラウザー スタイルしかありませんでした。このようにして、重要でないプロパティのほとんどを取り除くことができました。
問題 3 - 省略形のプロパティのみを保持する
次に気付いたのは、同等の省略形を持つプロパティが不必要に出力されていたことです (たとえば、 wasborder: solid black 1px
と then border-color: black;
、border-width: 1px
itd.)。
これを解決するために、私は単純に相当する省略形を持つプロパティのリストを作成し、それらを結果から除外しました。
問題 4 - プレフィックス付きプロパティの削除
-webkit-
前の操作の後、各ルールのプロパティの数は大幅に減少しましたが、聞いたことのないプレフィックス付きのプロパティがたくさんあることがわかりました( -webkit-app-region
? -webkit-text-emphasis-position
?)。これらのプロパティのいくつかは有用であると思われるため ( など) 、
これらのプロパティのいずれかを保持する必要があるかどうか疑問に思っていました。ただし、これを確認する方法がわかりませんでした。ほとんどの場合、これらのプロパティは単なるゴミであることを知っていたので、それらをすべて削除することにしました。-webkit-transform-origin
-webkit-perspective-origin
問題 5 - 同じ CSS ルールの組み合わせ
私が見つけた次の問題は、同じ CSS ルールが何度も繰り返されていることです (たとえば<li>
、まったく同じスタイルを持つそれぞれに対して、作成された CSS 出力に同じルールがありました)。
これは、ルールを相互に比較し、まったく同じプロパティと値のセットを持つルールを組み合わせただけの問題でした。その結果、代わりに#LI_1{...}, #LI_2{...}
を得#LI_1, #LI_2 {...}
ました。
問題 6 - HTML のインデントのクリーンアップと修正
結果に満足したので、HTML に移行しました。outerHTML
プロパティがサーバーから返されたとおりにフォーマットされているため、混乱しているように見えました。
必要な HTML コードouterHTML
は、単純なコードの再フォーマットだけでした。これはすべての IDE で利用できるものであるため、まさにそれを行う JavaScript ライブラリがあると確信していました。そして、私が正しかったことがわかりました (jquery-clean)。さらに、不要な属性削除エクストラ ( など) がstyle
ありdata-ng-repeat
ます。
問題 7 - CSS を壊すフィルター
状況によっては、上記のフィルターによってスニペットの CSS が壊れる可能性があるため、すべてオプションにしました。[設定]メニューから無効にすることができます。