ほとんどのWeb開発者と同様に、私はWebサイトのソースを調べて、そのマークアップがどのように構築されているかを確認することがあります。 FirebugやChrome Developer Toolsのようなツールでコードを簡単に調べることができますが、独立したセクションをコピーしてそれをローカルで再生したいのであれば、個々の要素とそれらに関連するCSSをすべてコピーするのは面倒です。そして、おそらくソース全体を保存し、無関係なコードを切り取るのに同じくらいの作業が必要です。
Firebugでノードを右クリックして[このノードにHTML + CSSを保存]オプションを設定できれば素晴らしいでしょう。そのようなツールは存在しますか?この機能を追加するためにFirebugまたはChrome Developer Toolsを拡張することは可能ですか?
私はやっとこのツールを作成する時間を見つけました。 Chromeウェブストアから SnappySnippet をインストールできます。指定された(最後に検査された)DOMノードから簡単にHTML + CSSを抽出することができます。さらに、コードを直接CodePenまたはJSFiddleに送信できます。楽しい!
::before
および::after
疑似要素で動作しますSnappySnippetはオープンソースです、そしてあなたは コードをGitHub に見つけることができます。
私はこれをしている間かなりたくさん学んだので、私は私が経験した問題のいくつかとそれらに対する私の解決策を共有することに決めました、多分誰かがそれを面白いと思うかもしれません。
最初に私はオリジナルのCSSルール(ウェブサイト上のCSSファイルから来る)を検索しようとしました。驚くべきことに、これはwindow.getMatchedCSSRules()
のおかげで非常に単純ですが、うまくいきませんでした。問題は、文書全体の文脈で一致していたHTMLおよびCSSセレクターのうち、HTMLスニペットの文脈では一致しなくなった部分のみを取っていたことです。セレクタの解析と修正は良い考えのようには思えなかったので、私はこの試みを断念した。
それから、@ CollectiveCognitionが提案したものgetComputedStyle()
から始めました。しかし、私は本当にすべてのスタイルをインライン化するのではなく、CSSフォームHTMLを分離したいと思いました。
ここでの解決策はそれほど美しくはありませんでしたが、非常に簡単でした。選択したサブツリーのすべてのノードにIDを割り当て、そのIDを使用して適切なCSSルールを作成しました。
ノードにIDを割り当てることはうまくいきました、しかし私は私のCSSルールの各々が〜300全体のプロパティを読むことが不可能にする〜300のプロパティを持っていることを発見しました。getComputedStyle()
は、指定された要素に対して計算されたすべてのCSSプロパティと値を返します。それらのいくつかは空で、いくつかはブラウザのデフォルト値を持っていました。デフォルト値を削除するには、最初にブラウザからそれらを取得しなければなりませんでした(そして各タグは異なるデフォルト値を持ちます)。解決策は、Webサイトから来る要素のスタイルを、空の<iframe>
に挿入されている同じ要素と比較することでした。ここでの論理は空の<iframe>
にスタイルシートがないということでした、それで私がそこに追加した各要素はデフォルトのブラウザスタイルだけを持っていました。このようにして私は重要ではないプロパティのほとんどを取り除くことができました。
次に気付いたのは、短縮形の同等物を持つプロパティが不必要に印刷されたことです(例:border: solid black 1px
、次にborder-color: black;
、border-width: 1px
itdなど)。
これを解決するために、私は簡単に等価なものを持つプロパティのリストを作成し、結果からそれらを除外しました。
それぞれのルールのプロパティの数は前の操作の後にかなり少なくなりました、しかし私は私がまだ聞いたことのないたくさんの-webkit-
接頭辞のプロパティを持っていたことがわかりました(-webkit-app-region
?-webkit-text-emphasis-position
?)。
これらのプロパティのうちのいくつか(-webkit-transform-Origin
、-webkit-perspective-Origin
など)が役に立つと思われるため、これらのプロパティのいずれかを保持する必要があるかどうかと思いました。しかし、これを検証する方法を考え出していません。ほとんどの場合、これらのプロパティは単なるゴミであることがわかっていたので、それらをすべて削除することにしました。
私が気づいた次の問題は、同じCSSルールが何度も繰り返されることでした(例えば、まったく同じスタイルの<li>
ごとに、作成されたCSS出力に同じルールがありました)。
これは、規則を互いに比較し、まったく同じプロパティと値のセットを持つ規則を組み合わせただけの問題です。その結果、#LI_1{...}, #LI_2{...}
の代わりに#LI_1, #LI_2 {...}
を取得しました。
結果に満足していたので、HTMLに移行しました。 outerHTML
プロパティによって、サーバーから返されたとおりにフォーマットされているため、混乱していました。outerHTML
から取得したHTMLコードが必要とした唯一のものは、単純なコードの再フォーマットでした。すべてのIDEで利用可能なものなので、それを実現するJavaScriptライブラリがあることを私は確信していました。そして、 私は正しかった(jquery-clean) であることがわかります。さらに、余分な不要な属性を削除する必要があります(style
、data-ng-repeat
など)。
状況によっては、上記のフィルタがスニペット内のCSSを壊す可能性があるので、私はそれらすべてをオプションにしました。無効にするには、設定メニューを使用します。
Webkitブラウザ(FireBugについてはよく分からない)を使用すると、要素のHTMLを簡単にコピーすることができるので、これは邪魔にならないプロセスの一部です。
ある要素のHTMLをコピーする前に(JavaScriptコンソールで)これを実行すると、与えられたすべての子要素と同様に、与えられた親要素のためのすべての計算されたスタイルはインラインスタイル属性に移動されます。 。
var el = document.querySelector("#someid");
var els = el.getElementsByTagName("*");
for(var i = -1, l = els.length; ++i < l;){
els[i].setAttribute("style", window.getComputedStyle(els[i]).cssText);
}
それは完全なハックであり、あなたは通過するための「ジャンク」なcss属性をたくさん持っているでしょう。
私はもともと私がChrome(またはFireFox)ソリューションを探していたときにこの質問をしましたが、Internet Explorer開発者ツールでこの機能に出会いました。私が探しているもののほとんど(JavaScriptを除く)
私は何年も前にこのツールを同じ目的で作成しました。
http://www.betterprogramming.com/htmlclipper.html
あなたはそれを使って改善することを歓迎します。
これは、スクラップブックというFirebugプラグインによって実行できます。
あなたは設定でJavascriptオプションをチェックすることができます
編集:
これ も役に立ちます
Firequarkは、HTMLスクリーンスクレイピングのプロセスを支援するためのFirebugの拡張です。 Firequarkは、Firebug(Firefox用のWeb開発プラグイン)を使用して、Webページから単一または複数のHTMLノードのCSSセレクタを自動的に抽出します。生成されたCSSセレクターは、情報を抽出するためのScrapiのようなHTMLスクリーンスクレーパーへの入力として与えることができます。 Firequarkは、HTMLスクリーンスクレイピングを使用するためのCSSセレクタの能力を最大限に引き出すように構築されています。
divclip は、Florentin Sardanの htmlclipper の更新版です。
eS5、HTML5、スコープ付きCSSなど、最新の機能拡張を備えています...
あなたはプログラムで様式化されたdivを抽出することができます:
var html = require("divclip").bySel(".article-body");
console.log(html);
楽しい。
必要なプラグインはありません。ワンクリックでInternet Explorer 11のネイティブDeveloper Toolsを使えば非常に簡単に行えます。要素を右クリックしてその要素を調べ、ブロックを右クリックして[要素をスタイルと共にコピー]を選択します。下の画像でそれを見ることができます。
それはのように非常にきれいなCSSコードを提供します。
.menu {
margin: 0;
}
.menu li {
list-style: none;
}
最近私は、検査された要素、html、そして関連するcssとメディアクエリだけをページからコピーするためのクロムエクステンション "eXtract Snippet"を作成しました。これにより、実際の関連CSSが得られることに注意してください。
https://chrome.google.com/webstore/detail/extract-snippet/bfcjfegkgdoomgmofhcidoiampnpbdao?hl=ja
このための単一の解決策を備えたツールは私は知りませんが、あなたは同時にFirebugと Web Developer extension を使うことができます。
Firebugを使用して必要なhtmlセクション(Inspect Element)とWeb Developerをコピーして、どのCSSが要素に関連付けられているかを確認します(Web Developerの「View Style Information」を呼び出す)。マークアップこれは、そのマークアップに関連付けられたCSSを表示します。
それは正確にあなたが望むもの(すべてをワンクリック)ではありませんが、それはかなり近く、そして少なくとも直感的です。
http://clipboard.com はこれを非常にうまく行います。コピーしたバージョンが元のバージョンとまったく同じであることを期待しているので、実際にプレイすることはできません。
Firebugでもこの機能が必要です。それまでは、 this オンラインサービスを使用してクラスを削除し、CSSをインラインスタイルに変換するという方法もあります。
Webページから必要な部分をコピーして、wysiwygエディタに貼り付けるだけです。エディタツールバーの "source"ボタンをクリックしてHTMLソースをチェックしてください。
私がDrupalサイトで作業していたとき、私はこの最も簡単な方法を見つけました。私はwysiwyg CKeditorを使っています。
jQuery.fn.extend({
getStyles: function() {
var rulesUsed = [];
var sheets = document.styleSheets;
for (var c = 0; c < sheets.length; c++) {
var rules = sheets[c].rules || sheets[c].cssRules;
for (var r = 0; r < rules.length; r++) {
var selectorText = rules[r].selectorText.toLowerCase().replace(":hover","");
if (this.is(selectorText) || this.find(selectorText).length > 0) {
rulesUsed.Push(rules[r]);
}
}
}
var style = rulesUsed.map(function(cssRule) {
return cssRule.selectorText.toLowerCase() + ' { ' + cssRule.style.cssText.toLowerCase() + ' }';
}).join("\n");
return style;
}
});
使用法:
$("#login_wrapper").getStyles()
私はここで答えとして言及されたすべてのツールを調べました。しかし、彼らはあなたが見つめていた美しい顔で繰り返しの、汚いHTML CSSを与えます。彼らはあなたにJSを与えません。
私がやること:
ページ全体のHTML、CSSなどを保存する Firefoxプラグイン があります。
IE 5.5にはあなたが探していたものがあったことを私は覚えています;)