SnappySnippet
ようやくこのツールを作成する時間を見つけました。SnappySnippetはGithubからインストールできます。指定された(最後に検査された)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()
。ただし、すべてのスタイルをインライン化するのではなく、CSSフォームのHTMLを分離したかったのです。
問題1-CSSをHTMLから分離する
ここでの解決策はあまり美しくありませんでしたが、非常に簡単でした。選択したサブツリーのすべてのノードにIDを割り当て、そのIDを使用して適切なCSSルールを作成しました。
問題2-デフォルト値でプロパティを削除する
ノードへのIDの割り当ては適切に機能しましたが、CSSルールのそれぞれに約300のプロパティがあり、CSS全体を判読できないことがわかりました。は、指定された要素に対して計算されたすべての可能なCSSプロパティと値
をgetComputedStyle()
返すことがわかりました。それらのいくつかは空であり、いくつかはブラウザのデフォルト値を持っていました。デフォルト値を削除するには、まずブラウザーからそれらを取得する必要がありました(各タグには異なるデフォルト値があります)。解決策は、Webサイトからの要素のスタイルを、空のに挿入された同じ要素と比較することでした<iframe>
。ここでのロジックは、空のにはスタイルシートがない<iframe>
ため、そこに追加した各要素にはデフォルトのブラウザースタイルしかありませんでした。このようにして、重要ではないプロパティのほとんどを取り除くことができました。
問題3-省略プロパティのみを保持する
次に気付いたのはborder: solid black 1px
、同等の省略形を持つプロパティが不必要に印刷されたということです(たとえば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が壊れる可能性があるため、これらはすべてオプションにしています。設定メニューから無効にできます。