PHP CSS stil alın

3 Cevap php

Ben basit DOM çözümleyici kullanarak sayfaları ayrıştırma duyuyorum. Bu temiz, ama her öğe için uygulanan css stil almak istiyorum. Inline stilleri, ama inline o olmak, bu eleman için de geçerlidir her stili, sayfa içi veya harici. Sadece

Bunu yapan bir sınıf var mı? Değilse, bunu nasıl yapardınız? Gerçekten basan stilleri, çağlayan, ya da tarayıcı belirli stilleri umurumda değil. Tüm doğrudan uygulanabilir stilleri olması yeterli olacaktır.

3 Cevap

Martin dediği gibi, bunu yaparken neredeyse PHP bir tarayıcı yazıyoruz - bu büyük bir ask var! Herhangi bir büyük projesi olduğu gibi, anahtar (bunların bazıları tam olarak basit olmasa da) onu daha yönetilebilir adımlar yıkmak için.

: Sen gerekir

  • harici css dosyaları bağlantılı olan (varsa) çalışmak
  • (Bamya echo): Sayfada css ve inline css, harici css okuma ve yorumlama bir yol bulmak (veya geliştirmek)
  • css hangi kurallar diğer css kuralları geçersiz hangi vb dahil olmak üzere - (. sınıf, # id ve eleman türüne göre uygulanan stiller dahil) her eleman ve her elemanın ebeveynleri için geçerli ne stilleri işe

Ben bu gibi şeyler MPDF hemen hemen aynı şeyi yapmak gibi, imkansız (ve iyi bir başlangıç ​​noktası sağlayabilir) söyleyemem ama ben düzgün hızlı bir düzeltme var sanmıyorum.

Bu oldukça uzun bir sipariş var. Bu basit bir örnek düşünün:

<style>
   p .foo {
     color: yellow;
   }
   span > *[href] {
     color: red;
   }
   img + .foo {
     color: green;
   }
   span #bar {
     color: blue;
   }
   .baz #bar {
     color: black;
   }
</style>      
<p class="baz">Lorem ipsum <span>dolor sit 
  <img src="x.png"><a id="bar" class="foo" href="#top">amet</a>,</span>
  consectetur adipiscing elit.
</p>

Bağlantı ne renk? 5 stilleri her bağlantı elemanına doğrudan geçerlidir. Sadece CSS2.1 düşünün bile, yine işlemek 3 stilleri var.

Bamya söylediği gibi, tam CSS ayrıştırıcı ve tercüman olmaksızın, bu çözülemez. Tek yazmak teorik olarak mümkün olmalı, ancak ben henüz PHP ile yazılmış bir görmedim.

(CSS sınıfları parsing, evet vardır -. this question cevaplarını görmek, ancak bu sadece size söylerdim "Bu dosya için, bu CSS bildirimlerinde var" yorumlayıcısı zor kısmı, ve ben bir PHP bir farkında değilim)

Yapabileceğiniz en iyi şey, bazı web sayfası render motoru sayfayı render (örneğin Gecko veya Webkit) ve CSS özelliklerini sorgulamak olacaktır. Bu, ne yazık ki, çok basit bir PHP sınıfı kapsamı dışındadır.

Sen CSS kısmını kontrol etmek isteyebilirsiniz QUAIL accessibility library - biz de bu özelliği gerekli ve temelde DOMDocument dayalı bir pseudo-tarayıcı inşa edilmiştir. Çünkü bilgisayarlı stilleri merkezi bir dizi için bir işaretçi gibi davranan sayfadaki her düğüm için ek bir nitelik kesmek zorunda kaldı, ama biz açısından orada yol yaklaşık% 70 olduğunu DOMDocument XPaths ile garip bazı şeyleri W3C testleri geçerek.