SnappySnippet
Sonunda bu aracı oluşturmak için biraz zaman buldum. SnappySnippet'i Github'dan yükleyebilirsiniz . Belirtilen (son incelenen) DOM düğümünden kolay HTML + CSS çıkarılmasına olanak tanır. Ayrıca, kodunuzu doğrudan CodePen veya JSFiddle'a gönderebilirsiniz. Zevk almak!
Diğer özellikler
- HTML'yi temizler (gereksiz nitelikleri kaldırma, girintiyi düzeltme)
- CSS'yi okunabilir hale getirmek için optimize eder
- tamamen yapılandırılabilir (tüm filtreler kapatılabilir)
- ile çalışır
::before
ve ::after
sözde öğeler
- Bootstrap & Flat-UI projeleri sayesinde güzel kullanıcı arayüzü
kod
SnappySnippet açık kaynak kodludur ve kodu GitHub'da bulabilirsiniz .
uygulama
Bunu yaparken çok şey öğrendiğimden, yaşadığım bazı problemleri ve çözümlerimi paylaşmaya karar verdim, belki birisi ilginç bulacaktır.
İlk deneme - getMatchedCSSRules ()
İlk başta orijinal CSS kurallarını almayı denedim (web sitesindeki CSS dosyalarından geliyor). Oldukça şaşırtıcı, bu çok basit window.getMatchedCSSRules()
, ancak iyi çalışmadı. Sorun, HTML ve CSS seçicilerinin yalnızca belgenin tamamı bağlamında eşleşen ve bir HTML pasajı bağlamında artık eşleşmeyen bir bölümünü almamızdı. Seçicileri ayrıştırmak ve değiştirmek iyi bir fikir gibi görünmediğinden, bu girişimden vazgeçtim.
İkinci deneme - getComputedStyle ()
Sonra, @CollectiveCognition'ın önerdiği bir şeyden başladım - getComputedStyle()
. Ancak, gerçekten tüm stilleri satır içi yerine CSS form HTML ayırmak istedim.
Sorun 1 - CSS'yi HTML'den Ayırma
Buradaki çözüm çok güzel değil, oldukça basitti. Seçilen alt ağaçtaki tüm düğümlere kimlikler atadım ve bu kimliği uygun CSS kuralları oluşturmak için kullandım.
Sorun 2 - Özellikleri varsayılan değerlerle kaldırma
Düğümlere kimlik atamak güzel çalıştı, ancak her CSS kuralımın tüm CSS'yi okunamaz hale getiren ~ 300 özelliğe sahip olduğunu öğrendim.
Çıkıyor getComputedStyle()
getiri verilen elemanı için hesaplanan tüm olası CSS özelliklerini ve değerler. Bazıları boş olduğunda, bazılarında tarayıcı varsayılan değerleri vardı. Varsayılan değerleri kaldırmak için önce tarayıcıdan almak zorunda kaldım (ve her etiketin farklı varsayılan değerleri vardır). Çözüm, web sitesinden gelen öğenin stillerini, boş bir öğeye eklenen aynı öğeyle karşılaştırmaktı <iframe>
. Buradaki mantık, boş bir stil sayfası olmamasıydı <iframe>
, bu yüzden eklediğim her öğenin yalnızca varsayılan tarayıcı stilleri vardı. Bu şekilde önemsiz olan özelliklerin çoğundan kurtulabildim.
Problem 3 - Sadece steno özelliklerinin korunması
Ben tespit bir sonraki şey stenografi eşdeğeri olan özellikleri gereksiz yere basılmış oldu (örneğin vardı border: solid black 1px
ve sonra border-color: black;
, border-width: 1px
itd.).
Bunu çözmek için sadece stenografi eşdeğeri olan özelliklerin bir listesini oluşturdum ve sonuçlardan filtreledim.
Sorun 4 - Ön ekli özellikleri kaldırma
Her kuralın özellikleri sayısı önemli ölçüde önceki işlemden sonra düşürmek oldu, ama ben çok vardı eşik tespit ettik -webkit-
asla duymak ait getirdiğiniz öneki özellikleri ( -webkit-app-region
? -webkit-text-emphasis-position
?).
Bunlardan bazı yararlı görünüyordu çünkü (bu özelliklerin herhangi tutmalı acaba -webkit-transform-origin
, -webkit-perspective-origin
vs.). Ancak, bunu nasıl doğrulayacağımı anlayamadım ve çoğu zaman bu özelliklerin sadece çöp olduğunu bildiğim için hepsini kaldırmaya karar verdim.
Sorun 5 - Aynı CSS Kurallarını Birleştirmek
Bir sonraki sorun, aynı CSS kurallarının tekrar tekrar tekrarlanmasıydı (örneğin, <li>
aynı stilleri olan her biri için oluşturulan CSS çıktısında aynı kural vardı).
Bu sadece kuralları birbirleriyle karşılaştırma ve tam olarak aynı özellik ve değerlere sahip olan kuralları birleştirme meselesiydi. Sonuç olarak, yerine #LI_1{...}, #LI_2{...}
aldım #LI_1, #LI_2 {...}
.
Sorun 6 - HTML girintisini temizleme ve düzeltme
Sonuçtan memnun olduğum için HTML'ye geçtim. Çoğunlukla outerHTML
özellik tam olarak sunucudan döndürüldüğü gibi biçimlendirilmiş kalması nedeniyle bir karışıklık gibi görünüyordu . İhtiyaç duyulan
tek HTML kodu outerHTML
basit bir kod yeniden biçimlendirmesiydi. Her IDE'de mevcut bir şey olduğundan, tam olarak bunu yapan bir JavaScript kütüphanesi olduğundan emindim. Ve haklı olduğum ortaya çıkıyor (jquery-clean) . Dahası, gereksiz niteliklerin kaldırılması ekstra var ( style
, data-ng-repeat
vb.).
Sorun 7 - CSS'yi kıran filtreler
Bazı durumlarda yukarıda belirtilen filtrelerin snippet'te CSS'yi bozma ihtimali olduğundan, hepsini isteğe bağlı yaptım. Bunları Ayarlar menüsünden devre dışı bırakabilirsiniz .