特定のページで使用されているCSSのみを抽出する


85

動的に生成されたサイトで、過去と現在を問わず、非常に多くの人が作業を行っていて、20,000行を超えるCSSを含む共有スタイルシートのコレクションがあるとします。まったく整理されていません。クラスとIDベースのセレクターがいくつかありますが、タグベースのセレクターが多すぎます。そして、いくつかのコントローラーを介して、これらのスタイルを使用する100個のテンプレートがあるとします。

おそらくFirebugのように機能するツールがあり、URLをポイントすると、そのページに適用可能なすべてのCSSセレクターが決定され、ファイルにダンプされますか?基本的に、共有スタイルシートをページごとにリッピングする方法。


回答:


17

以前、FirefoxプラグインであるDust-MeSelectorsを使用しました。CSS値が使用されている複数のページにわたって結合されたリストを維持するため、非常に使いやすく、用途が広いです。

欠点は、サイト全体をスパイダーするように自動化できなかったため、サイトの主要なページ/テンプレートでのみ使用することになったということです。それにもかかわらず、それは非常に便利です。

http://www.sitepoint.com/dustmeselectors/

https://addons.mozilla.org/en-US/firefox/addon/dust-me-selectors/

上記のコメントとは異なり、Dust-Me Selectors2.2はFirefox3.6と互換性があります(インストールしたばかりです)。


2
未使用のものをすべて削除して、指定したcssファイルのコピーをエクスポートする方法はありますか?
rraallvv 2016

1
@rraallwうん。これは、機能し、メディアクエリを尊重する唯一のツールでした。出力CSSファイルに「undefined」という単語が散らばるという厄介なバグがありますが、クイック検索 'n置換で修正されます。ツールが実行されたら、各ファイルシートの[未使用のセレクター]タブにある[クリーン]ボタンを押します。エクスポートできるCSSが生成されます。
エリックL.

2
アドオンページはもう存在しません。そして、最初のリンクは2番目のリンクにリダイレクトされます。
マリアン

56

使用済みのCSSをページに表示するだけで、実際に必要なことを正確に実行し、クリップボードにコピーするだけの最高のツールを提供するのが、このChrome拡張機能CSSです。

きれいな絵の例

ここに画像の説明を入力してください


素晴らしいツール...しかし、メディアクエリを無視しているようです。:(
エリックL.

8
サポートされているメディアクエリの拡張機能を更新しました。さらに、使用されているキーフレーム/フォントフェースの定義に加えて、一部のIEハックもサポートされるようになりました。
PaintyJoy 2017

1
メディアクエリを今すぐサポートします。
atheaos 2017年

2
これは素晴らしい。DOMで要素を選択することもでき、その特定のコンテナーに使用されるCSSを提供します。
webnoob 2017年

2
:)あなたは、あなたの問題の正確な右のツールを見つけたときああそう平和
sinaza


10

(Firefox用ではありませんが、これは誰かを助けるかもしれません)

Chromeで作業している場合は、次の拡張機能を使用できます。

CSSの削除と結合https://chrome.google.com/webstore/detail/css-remove-and-combine/cdfmaaeapjmacolkojefhfollmphonoh

  • 使用されているすべてのスタイルを組み合わせたCSSをダウンロードできます
  • ポップアップウィンドウに未使用のスタイルを表示します
  • 生成されたスタイルが含まれます

優れたツールですが、メディアクエリCSSを無視します。結合すると、私のサイトは応答しなくなります。
Jonas T

「CSSの削除と結合」は時代遅れのようで、Chrome 67では機能しません
別の

4

Uncss-Online-非公式サーバーに出くわしました。テストや1回限りの使用に非常に便利です。私が出会った中で最高のツールだと思います。

UnCSSは、未使用のCSSをスタイルシートから削除するツールです。複数のファイルで機能し、Javascriptが挿入されたCSSをサポートします。これは次のように使用できます。

  • HTMLとCSSをコピーして提供されたボックスに貼り付けます
  • ボタンをクリック
  • 魔法が起こるのを待つ
  • 未使用のCSSはなくなりました。残りを取り、それを使用してください。

このツールを使用する他の高度な方法については、Githubページを確認してください。


3

SnappySnippet

SnappySnippetという名前のChromeのオープンソースのアドオンがあります。他のアドオンよりもはるかに優れていることがわかりました。Chromeですでに利用可能な開発者ツールを拡張するだけです。ページの一部だけを抽出して、関連するすべてのCSSを抽出することもできます。このstackoverflowの投稿を見てください


1
はい、しかしそれはクラス名をいくつかの一般的なIDに変更しますが、これはあまり役に立ちません
Shishir Arora 2016

3

JavaScriptを使用した私の解決策は次のとおりです。

    var css = [];
    for (var i=0; i<document.styleSheets.length; i++)
    {
        var sheet = document.styleSheets[i];
        var rules = ('cssRules' in sheet)? sheet.cssRules : sheet.rules;
        if (rules)
        {
            css.push('\n/* Stylesheet : '+(sheet.href||'[inline styles]')+' */');
            for (var j=0; j<rules.length; j++)
            {
                var rule = rules[j];
                if ('cssText' in rule)
                    css.push(rule.cssText);
                else
                    css.push(rule.selectorText+' {\n'+rule.style.cssText+'\n}\n');
            }
        }
    }
    var cssInline = css.join('\n')+'\n';

最後cssInlineに、ページのすべての鋼板とその内容のテキストリストです。

例:

    /* Stylesheet : http://example.com/cache/css/javascript.css */
    .javascript .de1, .javascript .de2 { -webkit-user-select: text; padding: 0px 5px; vertical-align: top; color: rgb(0, 0, 0); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); margin: 0px 0px 0px -7px; position: relative; background: rgb(255, 255, 255); }
    .javascript { color: rgb(172, 172, 172); }
    .javascript .imp { font-weight: bold; color: red; }

    /* Stylesheet : http://example.com/i/main_master.css */
    html { }
    body { color: rgb(24, 24, 24); font-family: 'segoe ui', 'trebuchet MS', 'Lucida Sans Unicode', 'Lucida Sans', sans-serif; font-size: 1em; line-height: 1.5em; margin: 0px; padding: 0px; background: url(http://pastebin.com/i/bg.jpg); }
    a { color: rgb(204, 0, 51); text-decoration: none; }
    a:hover { color: rgb(153, 153, 153); text-decoration: none; }
    .icon24 { height: 24px; vertical-align: middle; width: 24px; margin: 0px 4px 0px 10px; }
    #header { border-radius: 0px 0px 6px 6px; color: rgb(255, 255, 255); background-color: rgb(2, 56, 89); }
    #super_frame { min-width: 1100px; width: 1200px; margin: 0px auto; }
    #monster_frame { -webkit-box-shadow: rgb(204, 204, 204) 0px 0px 10px 5px; box-shadow: rgb(204, 204, 204) 0px 0px 10px 5px; border-radius: 5px; border: 1px solid rgb(204, 204, 204); margin: 0px; background-color: rgb(255, 255, 255); }
    #header a { color: rgb(255, 255, 255); }
    #menu_2 { height: 290px; }

    /* Stylesheet : [inline styles] */
    .hidden { display: none; }

これを使用して、外部サイトから自分のページにcssを適用できれば素晴らしいと思います。私は...それを行う方法がわからない
ジョニーなぜ


2

PurifyCSSを確認してくださいこれは、CLIまたはGulp / Grunt / Webpackを処理できるユーザー向けです。

クラスがjavascriptによって挿入されている場合でも、単一ページ、複数ページ、またはプロジェクト全体から未使用のスタイルを削除できます。

あなたがグーグルできるなら、あなたがPurifyCSSについて学ぶことができるそこにたくさんのリソースがあります。


1

このFirefox拡張機能は、おそらくあなたの問題、Dust-MeSelectorsを解決するでしょう。CssCleanerまたはCssHelperと呼ばれる小さなデスクトップアプリもありますが、それへのリンクを見つけることができませんでした...(同様のタスクのためにずっと前にダウンロードした私のマシンでここに持ってください)


1

単一のページを扱っている場合は、ブックマークレットを使用して、Webページで実際に使用されているCSSのみをすばやく取得することもできます。

  1. ここに行く(このリンクが壊れている場合は、ペーストビンからも入手できます)。
  2. 「ブックマークレットのダウンロード」の下にある大きなボタンをブックマークツールバーにドラッグします。

それでおしまい。これで、静的ページをカプセル化する場合(つまり、移植可能にする場合、または独自のiframeから提供する場合)、ブックマークをクリックするだけで、現在のページで使用されているすべてのCSSがオーバーレイで表示されます。影をクリックしてオーバーレイを閉じます。

このソリューションの良い点の1つは、メディアクエリも抽出されるため、レスポンシブページをサポートすることです。ボーナスとして、メディアクエリはビューポートサイズの特異性によってソートされます(たとえば、@media (max-width: 767px)に来る)。 @media (max-width: 1023px)

必要に応じて、生成されたCSSを縮小するオプションを追加することもできます。このブックマークレットは自分のニーズにのみ使用しているため、広くテストされていません。問題があればコメントで報告してください。

注:このブックマークレットをChromeのローカルファイルで機能さ--allow-file-access-from-filesせるには、Chromeショートカットターゲットに追加します。例:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files

1

このツールを使用してみてください。これは単純なjsスクリプトです https://github.com/shashwatsahai/CSSExtractor/ このツールは、アクティブなスタイルのすべてのソースを一覧表示する特定のページからCSSを取得し、ソースを次のようにJSONに保存するのに役立ちます。キーとルールを値として。hrefリンクからすべてのCSSをロードし、それらから適用されたすべてのスタイルを通知します。出力は任意の名前のJSONファイルに保存できます。


0

うーん..CSSファイルのサーバーサイド解析を使用してさまざまなCSSセレクターを抽出し、ブラウザー内でこれらのそれぞれをjQueryセレクターとして実行することで、これにブルートフォースを投げかけます。あまりエレガントではありませんが、機能するはずですか?


しかし、これを行うための既存のツールはありますか?
ロジャーハリバートン

0

2020年9月の時点で、この質問はほぼ10年前のものです。提供されたソリューションのほとんどが機能しなくなったか、リンクされたプロジェクトが消えました。

ただし、Googleは現在、優先順位付けの指標の1つとしてページ速度を使用しているため、この質問は依然として非常に重要です。

リストされているすべてのリンクを調査した後、purgecss.comを見つけました。これは、Angular、React、Vueなどを使用して最新のWebアプリ/ SPAで未使用のCSSをクリーンアップするための最良のオプションのようです。PostCSS、Webpack、Grunt、Gulpとのビルド統合もあります。

また、UnCSSはまだ維持されているようです。PurgeCSSと同じくらい強力ですが、ビルドプロセスや単一ページのJavaScriptアプリには統合されていません。


-1

使用することもできます http://getcssusedinapage.comを使用して、ページで使用されるCSSを取得ます。それは無料で、速く、あなたがあなたのウェブサイトにコピーして貼り付けることができる最小化され最適化されたCSSコードとともにあなたに多くの詳細を返します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.