Yalnızca belirli bir sayfada kullanılan css'i çıkarmak


86

Geçmişte ve günümüzde çok fazla kişi tarafından üzerinde çalışılan dinamik olarak oluşturulmuş bir siteniz olduğunu ve şu anda 20.000'den fazla CSS satırı içeren bir paylaşılan stil sayfalarına sahip olduğunuzu varsayalım. Hiç organize değil, bazı sınıf ve kimlik tabanlı seçiciler var ama aynı zamanda çok fazla etiket tabanlı seçici var. Ve sonra, bazı denetleyiciler aracılığıyla bu stilleri kullanan 100 şablonunuz olduğunu söyleyin.

Firebug gibi çalışan, bir url'ye işaret edebileceğiniz ve o sayfa için geçerli tüm CSS seçicilerini belirleyip bunları bir dosyaya dökebilecek bir araç var mı? Temelde, paylaşılan stil sayfalarını sayfa sayfa ayırmanın bir yolu.


Yanıtlar:


17

Daha önce bir Firefox eklentisi olan Dust-Me Selectors'u kullandım. CSS değerlerinin kullanıldığı birkaç sayfada birleşik bir liste tuttuğu için kullanımı çok kolaydır ve çok yönlüdür.

Dezavantajı, sitenin tamamını örtmek için onu otomatikleştirememem, bu yüzden onu sitemin yalnızca önemli sayfalarında / şablonlarında kullandım. Yine de çok kullanışlıdır.

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

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

Dust-Me Selectors 2.2 yukarıdaki yorumun aksine Firefox 3.6 ile uyumludur (ben yeni kurdum).


2
Kullanılmayan tüm öğeler kaldırılmış olarak belirli bir css dosyasının bir kopyasını dışa aktarmanın bir yolu var mı?
rraallvv

1
@rraallw Evet. Bu, işe yarayan ve medya sorgularına hala saygı duyan tek araçtı. Çıktı CSS dosyasını "tanımsız" kelimesiyle küçülttüğü can sıkıcı bir hataya sahiptir, ancak hızlı bir bul ve değiştir bunu düzeltir. Araç çalıştıktan sonra, her dosya sayfası için "Kullanılmayan seçiciler" sekmesindeki "temizle" düğmesine basın. Dışa aktarabileceğiniz CSS'yi oluşturacaktır.
Eric

2
Eklenti sayfası artık mevcut değil. Ve ilk bağlantı ikinciye yönlendiriyor.
Marian

56

Sadece sayfada kullanılmış CSS'yi alarak tam olarak istediğiniz şeyi yapan ve panonuza kopyalamanıza izin veren en iyi araç, CSS Kullanılan bu Chrome uzantısıdır

Güzel Resim Örneği

görüntü açıklamasını buraya girin


Harika bir araç ... Ancak medya sorgularını görmezden geliyor gibi görünüyor. :(
Eric

8
Uzantıyı desteklenen medya sorguları ile güncelledim. Ayrıca, kullanılan ana kareler / yazı tipi yüzü tanımlamaları, hatta bazı IE hack'leri de artık desteklenmektedir.
PaintyJoy

1
Medya sorgularını şimdi destekleyin.
atheaos

2
Bu harika. DOM'da bir öğe bile seçebilirsiniz ve o belirli bir kap için kullanılan CSS'yi sağlayacaktır.
webnoob

2
Ahh, sorununuz için doğru aracı bulduğunuzda çok huzurlu :)
sinaza


10

(Firefox için değil ama belki bu birine yardımcı olabilir)

Chrome üzerinde çalışıyorsanız bu uzantıyı kullanabilirsiniz:

CSS kaldır ve birleştir ( https://chrome.google.com/webstore/detail/css-remove-and-combine/cdfmaaeapjmacolkojefhfollmphonoh )

  • kullanılan tüm stillerle birleşik bir css indirmenize izin verir
  • kullanılmayan stilleri açılır pencerede gösterir
  • oluşturulan stilleri içerir

Harika bir araç ancak medya sorgularının CSS'sini görmezden geliyor. Birleştirildikten sonra sitem artık yanıt vermiyor.
Jonas T

"CSS kaldır ve birleştir" güncelliğini yitirmiş görünüyor, Chrome 67'de çalışmıyor
başka bir

4

Ben rastladım Uncss-Online'da - Resmi olmayan sunucu, çok uygun kullanım defaya mahsus test ya için! Sanırım karşılaştığım en iyi araç.

UnCSS, kullanılmayan CSS'yi stil sayfalarınızdan kaldıran bir araçtır. Birden çok dosyada çalışır ve Javascript'in enjekte ettiği CSS'yi destekler. Bu şekilde kullanılabilir:

  • HTML ve CSS'nizi kopyalayıp sağlanan kutulara yapıştırın
  • Tıklama düğmesi
  • Sihrin gerçekleşmesini bekleyin
  • Kullanılmayan CSS gitti, gerisini al ve kullan!

Bu aracı kullanmanın diğer gelişmiş yolları için Github Sayfalarına bakabilirsiniz.



3

İşte JavaScript kullanan çözümüm:

    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';

Sonunda, cssInlinesayfanın tüm çelik sayfalarının ve içeriklerinin metinsel bir listesi var.

Misal :

    /* 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'i harici bir siteden kendi sayfama uygulamak için kullanılabilirse harika olur. Bunu nasıl yapacağımı bilmiyorum ...
johny neden


2

PurifyCSS'yi kontrol edin ve bu CLI veya Gulp / Grunt / Webpack ile başa çıkabilenler için

Sınıflar javascript tarafından enjekte ediliyor olsa bile, kullanılmayan stili tek sayfadan veya birden çok sayfadan veya tüm projeden kaldırabilirsiniz.

Google'ı yapabilirseniz, PurifyCSS hakkında bilgi edinebileceğiniz tonlarca kaynak vardır.


1

Bu Firefox eklentisi muhtemelen sorununuzu çözecektir, Dust-Me Selectors . Ayrıca CssCleaner veya CssHelper adında küçük bir masaüstü uygulaması da var, ancak bunun bağlantısını bulamadım ... (makinemde uzun zaman önce benzer bir görev için indirilmesini sağlayın)


1

Tek sayfalarla uğraşıyorsanız, yalnızca web sayfası tarafından gerçekten kullanılan CSS'yi hızlı bir şekilde almak için yer imi uygulamamı da kullanabilirsiniz:

  1. Buraya gidin (bu bağlantı kopmuşsa, bunu pastebin'den de alabilirsiniz ).
  2. "Yer İşareti İndir" altındaki büyük düğmeyi yer imleri araç çubuğunuza sürükleyin.

Bu kadar. Şimdi, statik bir sayfayı kapsüllemek istediğinizde (yani, onu taşınabilir hale getirmek veya kendi iframe'inden sunmayı planlıyorsanız), yer imini tıklamanız yeterlidir ve o anda kullanılan sayfadaki tüm CSS'yi bir kaplamada görüntüleyecektir. Kaplamayı kapatmak için gölgeye tıklayın.

Bu çözümün iyi bir yanı, medya sorguları da çıkarıldığı için duyarlı sayfaları desteklemesidir. Bonus olarak, medya sorguları görüntü alanı boyutuna göre sıralanır (örneğin, @media (max-width: 767px)daha sonra gelir @media (max-width: 1023px)).

Bir ihtiyaç varsa, oluşturulan CSS'yi küçültmek için bir seçenek de ekleyebilirim. Bu yer imini yalnızca kendi ihtiyaçlarım için kullandığım için geniş çapta test edilmediğinden, lütfen yorumlarda herhangi bir sorunu bildirin.

NOT: Bu yer imi uygulamasının Chrome'daki yerel dosyalarla çalışmasını --allow-file-access-from-filessağlamak için Chrome kısayol hedefine ekleyin . Misal:

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

1

Sadece basit bir js betiği olan bu aracı kullanmayı deneyin https://github.com/shashwatsahai/CSSExtractor/ Bu araç, aktif stiller için tüm kaynakları listeleyen belirli bir sayfadan CSS'nin alınmasına yardımcı olur ve kaynak olarak bir JSON'a değer olarak anahtar ve kurallar. Tüm CSS'yi href bağlantılarından yükler ve bunlardan uygulanan tüm stilleri söyler. Çıkışı herhangi bir adla bir JSON dosyasına kaydedebilirsiniz.


0

Hmm .. Buna, çeşitli CSS seçicilerini, CSS dosyasının sunucu tarafında ayrıştırılmasını kullanarak çıkararak ve ardından bunların her birini tarayıcıda bir jQuery seçici olarak çalıştırarak biraz kaba kuvvet atardım. Çok zarif değil ama çalışmalı mı?


Ancak bunu yapmak için mevcut bir araç var mı?
Roger Halliburton

0

Eylül 2020 itibariyle bu soru neredeyse 10 yaşında. Sağlanan çözümlerin çoğu artık çalışmıyor veya bağlantılı projeler ortadan kayboldu.

Bununla birlikte, Google artık önceliklendirme ölçütlerinden biri olarak sayfa hızını kullandığından, soru hala son derece alakalı.

Listelenen tüm bağlantılarla ilgili bir dizi araştırma yaptıktan sonra purgecss.com'u buldum . Bu, Angular, React, Vue vb. Kullanarak modern web uygulamalarında / SPA'larda kullanılmayan CSS'yi temizlemek için en iyi seçenek gibi görünüyor. Ayrıca PostCSS, Webpack, Grunt ve Gulp ile entegrasyon da var.

Ayrıca, UnCSS hala korunuyor gibi görünüyor. PurgeCSS kadar güçlüdür ancak derleme süreçlerine veya tek sayfalık javascript uygulamalarına entegre değildir.


-1

Bir sayfada kullanılan CSS'yi almak için http://getcssusedinapage.com'u da kullanabilirsiniz . Ücretsizdir, hızlıdır ve web sitenize kopyalayıp yapıştırabileceğiniz küçültülmüş ve optimize edilmiş CSS koduyla birlikte size birçok ayrıntıyı geri verir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.