<body> içindeki <style> etiketlerini diğer HTML ile kullanma


196
<html>
  <body>
    <style type="text/css">
      p.first {color:blue}
      p.second {color:green}
    </style>

    <p class="first">Hello World</p>
    <p class="second">Hello World</p>

    <style type="text/css">
      p.first {color:green}
      p.second {color:blue}
    </style>

    <p class="first">Hello World</p>
    <p class="second">Hello World</p>
  </body>
</html>

Bir tarayıcının bitişik olmayan css'i nasıl oluşturması gerekir? Bir sayfadaki tüm css stillerini kullanarak bir veri yapısı oluşturması ve bunu oluşturma için kullanması gerekiyor mu?

Yoksa stil bilgilerini kullanarak gördüğü sırayla mı oluşturuyor?


2
Geçerli HTML olmadığı için tanımsız bir davranış olduğunu söyleyebilirim. Hangi öğelerin geçerli ve hangilerinin geçerli olmadığı hakkında daha fazla bilgi için: en.wikipedia.org/wiki/HTML_element
Felix Kling

2
Bu sorunu bir kenara bırakmak, karıştırmak CSSve kötü bir uygulamadır HTML.
0x2D9A3

1
@ 0x2D9A3 Mutlaka doğru değil. Harici bir CSS sayfası istemek, <head>etikette tanımlanan
CSS'den

@KolobCanyon Kabul ediyorum, ancak genel bir kural olarak, CSS ayrı bir dosyada olmalıdır. Tonlarca CSS'niz varsa, hem yönetmek (korumak, (post-), ​​küçültmek, paketlemek) hem de ayrı bir dosya olarak sunmak daha kolaydır ve içeriğiniz (HTML) de daha hızlı yüklenebilir ve daha iyi UX'e yol açabilir. Bununla birlikte, her zaman olduğu gibi, her şey içeriğe özgüdür, bu yüzden YMMW :)
0x2D9A3

3
@KolobCanyon, bu CSS'nin ayrı bir dosyada olup olmaması sorunu değil. Bu durumda soru, <body>yerine CSS ile ilgilidir <head>.
Ray Butterworth

Yanıtlar:


312

Diğerlerinin de belirttiği gibi HTML 4, <style>etiketin <head>bölüme yerleştirilmesini gerektirir (çoğu tarayıcı, <style>içindeki etiketlere izin verse de body).

Bununla birlikte, HTML 5 , etiketin üst öğesinde yer alan stil sayfaları oluşturmanıza olanak sağlayan scopedözelliği (aşağıdaki güncellemeye bakın) içerir <style>. Bu aynı zamanda öğenin <style>içine etiket yerleştirmenizi sağlar <body>:

<!DOCTYPE html>
<html>
<head></head>
<body>

<div id="scoped-content">
    <style type="text/css" scoped>
        h1 { color: red; } 
    </style>

    <h1>Hello</h1>
</div>

    <h1>
      World
    </h1>

</body>
</html>

Yukarıdaki kodu destekleyen bir HTML-5 etkin tarayıcıda scopedoluşturursanız, stil sayfasının sınırlı kapsamını görürsünüz.

Sadece bir büyük uyarı var ...

Bu yanıtı yazdığım sırada (Mayıs 2013) neredeyse hiçbir ana tarayıcı scopedözelliği desteklemiyor . (Görünüşe göre Chromium geliştiricileri bunu destekliyor.)

ANCAK, scopedbu soruyla ilgili özelliğin ilginç bir anlamı vardır . Bu, gelecekteki tarayıcıların (içindeki öğeler kapsandığı sürece) <style>içindeki öğelere izin vermek için standart aracılığıyla zorunlu kılındığı anlamına gelir .<body><style>

Yani, göz önüne alındığında:

  • Mevcut tarayıcıların neredeyse tamamı şu anda bu scopedözelliği yok sayar
  • Hemen hemen her mevcut tarayıcı şu anda izin verir <style>içinden etiketleri<body>
  • Gelecekteki uygulamaların <style>,<body>

... o zaman gelecekte bir özellik ile kanıtladığınız sürece, etiketlerin gövdeye yerleştirilmesinde tam anlamıyla bir zarar * yoktur . Tek sorun, mevcut tarayıcıların aslında stil sayfasının kapsamını sınırlamamasıdır - tüm belgeye uygularlar. Ancak asıl nokta, tüm pratik amaçlar için, aşağıdakileri sağlamanız koşuluyla etiketleri dahil edebilmenizdir :<style>scoped<style><body>

  • scopedÖzellik ekleyerek HTML'nizi geleceğe hazırlayın
  • Şu andan itibaren, içerisindeki stil sayfasının <body>gerçekten kapsamlandırılmayacağını anlayın (çünkü henüz ana tarayıcı desteği yok)


* Tabii ki, HTML doğrulayıcılarını kızdırmak için ...


Son olarak, ortak (ama sübjektif) HTML içinde CSS gömme kötü bir uygulama olduğunu iddiasına ilişkin, unutulmamalıdır bütün mesele ait scopedöznitelik modüllerinin veya sendikasyon içerik olarak HTML ithalat parçaları geliştiriciler izin tipik modern geliştirme çerçevelerini uyumlu hale getirmektir . Belirli stillere sahip kapsüllenmiş, modüler bileşenler geliştirmek için yalnızca belirli bir HTML parçasına uygulanan gömülü CSS'ye sahip olmak çok uygundur .


Şubat 2019'dan itibaren güncelleme, Mozilla belgelerine göre, scopedözellik kullanımdan kaldırıldı. Chrome, 36 (2014) sürümünde ve 62 (2018) sürümünde Firefox'u desteklemeyi bıraktı. Her iki durumda da, özelliğin tarayıcı ayarlarında kullanıcı tarafından açıkça etkinleştirilmesi gerekiyordu. Başka hiçbir büyük tarayıcı bunu desteklemedi.


3
@RobertMcKee: Bunu gerçekten test ettiniz mi? Genellikle tüm html sayfasının (tüm satır içi stil dahil) oluşturulmadan önce ayrıştırılmasını beklerim, çünkü genellikle çok büyük değildir ve tarayıcılar, oluşabilecek flaşsız içeriği önlemek için tam olarak işlemeden önce (çok kısa) bekler nedeniyle css bağlı head. Eğer bu sizin tek css, ve eğer sayfa büyüktür ve eğer ağ bağlantısı çok hızlı değil, o zaman belki stillendirilmemiş içeriğin bir flaş göreceksiniz, ancak en pratik durumlarda bana sürpriz olurdu.
Eamon Nerbonne

4
Bugün itibariyle, yalnızca Firefox kapsamlandırılmış stil öğesini desteklemektedir ( caniuse.com/#feat=style-scoped'a göre ). Ve yaygın tarayıcılar sadece BODY içindeki STYLE öğesini desteklediğinden, gerekirse sadece kullanırım. CSS'nin bir kapsamda uygulanması gerekiyorsa, CSS kaynağındaki her seçiciye bir sarıcı kimliği / sınıfı öneki ekleyebilirsiniz. Aslında bunu HTML tarafı sunucu tarafı yükleyen ve AJAX ile render bir web uygulamasında yaptım. Daha sonra CSS'ye JavaScript'te basit normal ifade eklenebilir: cssString.replace (/ (^ | \}) ([^ {] +) (\ {) / g, '$ 1' + önek + '$ 2 $ 3')
Adam Hošek

5
Destek @scopedya scopedda ölüyor gibi görünüyor: burada ve burada
Kiran Subbaraman

51
Destekleyen @KiranSubbaraman: Ben sadece (Temmuz 2016) mozilla dev üzerinde okudum: " Kapsamlı özellik, Chrome ve Firefox tarafından yalnızca sınırlı ve deneysel olarak benimsenmesinden sonra spesifikasyondan kaldırıldı . Neredeyse kesinlikle olacağı için kullanmaktan kaçınmalısınız yakında bu tarayıcılardan kaldırıldı. " >> developer.mozilla.org/tr-TR/docs/Web/HTML/Element/…
jave.web

9
scopedÖzellik mevcut HTML5 özelliklerine kaldırıldı.
Albert Wiersch

61

KIRILMA KÖTÜ HABER için severler "vücut stil": W3C geçenlerde olan HTML savaşı kaybetti versionless HTML "Yaşam Standardı" WHATWG karşı şimdi haline gelmiştir , ne yazık ki resmi bir, yok değil izin STYLE içinde BODY. Kısa ömürlü mutlu günler sona erdi. ;) W3C doğrulayıcı şimdi WHATWG teknik özellikleriyle de çalışır. (HeadF up için teşekkürler @FrankConijn!)

(Not: Bu, "bugün itibariyle" durumudur, ancak sürüm oluşturma olmadığından, bağlantılar herhangi bir zamanda bildirimde bulunmadan veya kontrol edilmeden geçersiz hale gelebilir. GitHub'daki bireysel kaynak taahhütlerine bağlantı vermek istemiyorsanız, temelde yeni resmi HTML standardı AFAIK için daha uzun süre kararlı referanslar yapın . Bunu doğru bir şekilde yapmanın kurallı bir yolu varsa lütfen beni düzeltin.)

OBSOLETLİ İYİ HABER:

Yay, STYLEnihayet BODYHTML5.2'den itibaren geçerlidir! (Ve scopedgitti.)

Gönderen W3C ( son satırı zevkle! ):

4.2.6. Stil öğesi

...

Bu öğenin kullanılabileceği bağlamlar:

Meta veri içeriğinin beklendiği yer.

Bir başlık öğesinin alt öğesi olan bir noscript öğesinde.

Akış içeriğinin beklendiği vücutta.


META YAN-NOT:

"Tarayıcı savaşı" nın zararlarına rağmen, gülünç derecede rekabet eden iki "resmi" HTML "standardına (tırnak işaretleri 1 standard + 1 standard < 1 standard) karşı geliştirmeye devam etmemiz gerektiği gerçeği," siper içi sağduyuya geri dönüş "yaklaşımının web geliştirme hiç bir zaman gerçekten son bulmadı.

Bu nihayet şimdi değişebilir, ancak geleneksel bilgeliğe atıfta bulunarak: web yazarları / geliştiricileri ve dolayısıyla tarayıcılar sonuçta, zaten yapılmış olanlara karşı iyi bir neden olmadığında, spesifikasyonlarda neyin olması (ve olmamalıdır) karar vermelidir. gerçeklik. Ve çoğu tarayıcı uzun destekleyen STYLEiçinde BODY(bir ya da bu şekilde; örneğin bkz scoped. Attr) (ki, onun doğasında performansı (ve muhtemelen diğer) cezalara rağmen biz . Ödeme ya da değil, değil gözlük için karar vermelidir). Yani, birincisi, onlara bahis yapmaya devam edeceğim ve umudumdan vazgeçmeyeceğim. ;) WHATWG, iddia ettikleri gerçeklik / yazarlara aynı saygı duyuyorsa, W3C'nin yaptığı şeyi burada yapabilirler.


3
Teknik özellikleri okudum ama anlamıyorum. Doğrulayan bir styleblok için örnek bir kod verebilir misiniz body?
Frank Conijn

3
@FrankConijn: İyi nokta, işler değişti, cevabı güncelledi! Gerçekten kafa karıştırıcı. Hem 5.2 hem de 5.3 W3C özellikleri STYLEmeta veri ve akış içeriği olarak kabul edilir, ancak en son WHATWG "canlı" özellikleri eski, sıkıcı "yalnızca meta veriler" öyküsünü anlatır (yalnızca HEAD'de izin verir). Ve yaralanmaya hakaret eklemek için W3C validatörü WHATWG lezzetini takip ediyor gibi görünüyor. Henüz gülüp ağlamaya karar vermedim, ama eminim ki kişisel olarak "browsers + W3C - validator" davasıyla "err" yapmaya ve STYLE BODY'ye izin vermeye karar verdim. (BTW, unutmayın: aslında standardın nihai kaynağı olmalıyız .)
Sz.

Ben gerçekten bu bok ile köpekbalığı atladı düşünüyorum, temelde bir şablon sistemde dinamik olarak bir arka plan görüntüsü özelliği ayarlamak istiyorsanız, çizgi stilleri kullanmak için başka seçenek bırakmazlar. Html çıktısının hemen üzerinde programlı olarak oluşturulmuş bir stil bloğunu bırakmak çok daha az invazivdi.
GovCoder

32

Büyük site İçerik Yönetim Sistemlerinin rutin olarak bazı <style> öğelerini (bazıları, hepsi değil) bu sınıflara dayanan içeriğe yakınlaştırdığını gördüğümde, atın ahırdan çıktığı sonucuna varıyorum.

Cnn.com, nytimes.com, huffingtonpost.com, en yakın büyük şehir gazetesi, vb. Sayfa kaynaklarına bakın. Hepsi bunu yapar.

Vücudun herhangi bir yerine ekstra bir <style> bölümü koymak için iyi bir neden varsa - örneğin, farklı ve bağımsız sayfa öğelerini gerçek zamanlı olarak () eklerseniz ve her birinin kendine özgü bir <style> öğesi varsa ve organizasyon daha temiz, daha modüler, daha anlaşılır ve daha sürdürülebilir olacak - Ben sadece kurşun ısırmak diyorum. Yerel değişkenler gibi kısıtlı kapsamla "yerel" stile sahip olsaydık daha iyi olurdu, ancak daha sonra isteyebileceğiniz veya isteyebileceğiniz HTML ile değil, sahip olduğunuz HTML ile çalışmaya gidersiniz.

Elbette, diğerlerinin ayrıntılı olarak belirttiği gibi, ortodoksiyi takip etmek için potansiyel dezavantajlar ve iyi (her zaman zorlayıcı olmasa da) nedenler vardır. Ama bana göre, <body> 'de <style>' in düşünceli kullanımı zaten ana akım haline geldi.


1
Pragmatizm FTW!
Waruyama

1
Evet haklısın. Örneğin, eklentimin içindeki <body> öğesinde <style> etiketini kullanıyorum. Neden, çünkü şık eklenti içeriği için en kolay yolu. Ama bir an, tüm css sınıfları eklenti verilerim için benzersiz.
Avirtum

7

Geçerli HTML değil, yine de hemen hemen her tarayıcı sadece ikinci örneği dikkate alıyor gibi görünüyor.

Fedora altında FF ve Google Chrome'un son sürümlerinde ve XP altında FF, Opera, IE ve Chrome'da test edilmiştir.


6

Sanırım bu tarayıcıdan tarayıcıya değişecektir: Tarayıcı, kod boyunca ilerlerken genel görüntüleme kuralları muhtemelen güncellenecektir.

Bir dış stil sayfası gecikmeli olarak yüklendiğinde, bu gibi değişiklikleri genel ekran kurallarında görebilirsiniz. Burada benzer bir şey olabilir, ancak o kadar kısa bir süre içinde gerçekte ortaya çıkmaz.

Yine de geçerli bir HTML değil, bu yüzden düşünmek için boşuna bir şey olduğunu söyleyebilirim. <style>etiketleri headsayfanın bölümüne aittir .


5

Diğerlerinin söylediği gibi, stil etiketleri başa ait olduğu için bu geçerli bir html değildir.

Ancak, tarayıcıların çoğu bu doğrulamayı gerçekten zorunlu kılmaz. Bunun yerine, belge yüklendikten sonra stiller birleştirilir ve uygulanır. Bu durumda, ikinci stil grubu, karşılaşılan son tanımlar oldukları için her zaman ilkini geçersiz kılar.


5

<style>Etiket aittir<head> bölümünde, tüm içeriğinden ayrı.

Referanslar: W3C Özellikleri ve W3Schools


52
Soruyu ele almıyor. Ve bu katı kurallar gerçeklik tarafından istila ediliyor. Yazarların stillerini html kafasına tanımlamalarının / eklemelerinin mümkün olmadığı BİRÇOK durum vardır.
Javier

3
Bu 2010 yılında doğru olabilir, ancak bugün kabul edilebilir bir cevap olmaktan çok uzaktır.
Isaac Lubow

3

Örneğinizde, bir tarayıcı hiçbir şey yapmaz. HTML geçersiz. Hata kurtarma tetiklenir veya ayrıştırıcı bunu gerektiği gibi yapar.

Geçerli bir örnekte, birden fazla stil sayfası birbiri ardına görünecek şekilde değerlendirilir, kaskat normal olarak hesaplanır.


2

Sanırım bu sınırlı bağlamlarla ilgili bir sorun olabilir, örneğin programcı olmayan kullanıcılar tarafından kullanılan bir web sistemindeki WYIWYG editörleri , standartları takip etme olasılıklarını sınırlar. Bazen (TinyMCE gibi), içerik / kodunuzu bir textareaetiketin içine yerleştiren , editör tarafından büyük bir divetiket olarak görüntülenen bir lib . Ve bazen, bu editörlerin eski bir versiyonu olabilir.

Sanırım:

  1. programcı olmayan bu kullanıcıların , sistem yöneticilerine (veya kurumun webdevs'lerine) açık bir kanalı yoktur;stylesheets . Aslında, bu anlamda sahip olacakları isteklerin sayısı dikkate alındığında, yöneticiler (veya webdevs) için pratik olmazdı.
  2. bu sistem eskidir ve hala daha yeni HTML sürümlerini desteklememektedir.

Bazı durumlarda, kullanım stylekuralları olmadan , çok kötü bir tasarım deneyimi olabilir. Yani, evet, bu kullanıcıların özelleştirmeye ihtiyacı var. Tamam, ama bu senaryoda çözümler ne olurdu? Bir htmlsayfaya CSS eklemenin farklı yollarını göz önünde bulundurarak, şu çözümleri varsayalım:


1. seçenek: sisteminize sorun

Sistem yöneticinizden, sisteme bazı CSS kuralları eklemesini isteyin stylesheets. Bu harici veya dahili bir CSS çözümü olacaktır. Daha önce de belirtildiği gibi, bu mümkün olmayabilir.


2. seçenek: <link>açık<body>

Kullanım harici stil sayfasını üzerinde bodyyani etiketi, kullanımını linketiketinin içine erişiminiz olan bölgede (yani olacak, sitede, iç bodyetiketi ve değil de headetiketi). Bazı kaynaklar bunun iyi olduğunu, ancak MDN gibi "iyi bir uygulama" olmadığını söylüyor :

Bir <link>öğe , body-ok olan bir bağlantı türüne sahip olup olmamasına bağlı olarak <head>veya <body>öğesinde oluşabilir . Örneğin, bağlantı tipi gövde-tamamdır ve bu nedenle gövde içinde izin verilir. Ancak, bu takip edilmesi iyi bir uygulama değildir; öğelerinizi vücut içeriğinizden ayırıp , içine koyarak daha anlamlı olur .stylesheet<link rel="stylesheet"><link><head>

Bazıları, w3schools<head> gibi bölümle sınırlandırır :

Not: Bu öğe yalnızca kafa bölümüne gider, ancak istediğiniz sayıda görünebilir.

Test yapmak

Burada test ettim (masaüstü ortamı, bir tarayıcıda) ve benim için çalışıyor. Bir dosya oluşturun foo.html:

<!DOCTYPE html>
<html>
<head></head>
<body>
    <link href="bar.css" type="text/css" rel="stylesheet">
    <h1 class="test1">Hello</h1>
    <h1 class="test2">World</h1>
</body>
</html>

Ve sonra aynı dizinde bir CSS dosyası denir bar.css:

.test1 { 
    color: green;
};

Kurum sisteminde bir yere nasıl bir CSS dosyası yüklerseniz bu mümkün görünecektir. Belki de durum böyledir.


3. seçenek: <style>açık<body>

Kullanım internet stil sayfası üzerindeki bodyetiketi, yani kullanımı styleerişiminiz olan alan içinde etiketinin (içerde, sitede olacak bodyetiketinin olup headetiketi). Bu nedir , Charles Salvia 'ın ve Sz işte cevapları hakkındadır. Bu seçeneği belirlerken endişelerini göz önünde bulundurun.


4., 5. ve 6. seçenekler: JS yolları

Uyarı Bunlar <head>, sayfanın öğesinin değiştirilmesiyle ilgilidir . Belki bu olmaz kurumun sistem yöneticileri tarafından izin verilebilir. Bu yüzden, önce onlara izin istemeniz önerilir.

Tamam, izin verilmiş varsayalım, strateji <head> . Nasıl? JavaScript yöntemleri.

4 seçenek: yeni <link>üzerinde<head>

Bu, 2. seçeneğin başka bir sürümüdür. Kullanım harici stil sayfasını üzerinde <head>yani etiketi, kullanımını <link>elemanı dışındaki erişiminiz olan bölgede (yani olacak, sitede, içinde değil bodyiç etiketi ve evet headetiketi). Bu çözüm , yukarıda belirtildiği gibi MDN ve w3schools'un 2. seçenek çözümü üzerindeki tavsiyelerine uygundur . Yeni bir Linknesne oluşturulacak.

JS ile konuyu çözmek için birçok yol var, ancak aşağıdaki kod dizilerinde basit bir örnek gösterdim.

Test yapmak

Burada test ettim (masaüstü ortamı, bir tarayıcıda) ve benim için çalışıyor. Bir dosya oluşturun f.html:

<!DOCTYPE html>
<html>
<head></head>
<body>
    <h1 class="test1">Hello</h1>
    <h1 class="test2">World</h1>
    <script>
        // JS code here
    </script>
</body>
</html>

İçinde scriptetiketi:

var newLink = document.createElement("link");
newLink.href = "bar.css";
newLink.rel = "stylesheet";
newLink.type = "text/css";
document.getElementsByTagName("head")[0].appendChild(newLink);

Ve sonra CSS dosyasında, aynı dizinde bar.css(2. seçenekte olduğu gibi) denir :

.test1 { 
    color: green;
};

Daha önce de söylediğim gibi: bu, kurum sisteminde bir yere nasıl bir CSS dosyası yüklerseniz mümkün olacaktır.

5 seçenek: yeni <style>üzerinde<head>

Yeni kullanın iç stil sayfası üzerinde <head>yani etiketi, yeni bir kullanımını <style>elemanı dışındaki erişiminiz olan bölgede (yani, sitede değil içinde olacaktır bodyiçindeki etiketi ve evet headetiketi). Yeni bir Stylenesne oluşturulacak.

Bu JS ile çözüldü. Basit bir yol aşağıda gösterilmiştir.

Test yapmak

Burada test ettim (masaüstü ortamı, bir tarayıcıda) ve benim için çalışıyor. Bir dosya oluşturun foobar.html:

<!DOCTYPE html>
<html>
<head></head>
<body>
    <h1 class="test1">Hello</h1>
    <h1 class="test2">World</h1>
    <script>
        // JS code here
    </script>
</body>
</html>

İçinde scriptetiketi:

var newStyle = document.createElement("style");
newStyle.innerHTML = 
    "h1.test1 {"+
        "color: green;"+
    "}";
document.getElementsByTagName("head")[0].appendChild(newStyle);

6. seçenek: mevcut bir seçeneği kullanma <style> üzerinde<head>

Varolan kullan iç stil sayfası üzerinde <head>yani etiketi, bir kullanımı <style>elemanı dışındaki alana erişiminiz olan (yani olacaktır sitesinde, değil iç bodyetiketi ve evet iç headetiketi), bazı varsa. Yeni bir Stylenesne oluşturulacak veya bir CSSStyleSheetnesne kullanılacaktır (burada benimsenen çözüm kodunda).

Bu bir açıdan risklidir. Birincisi , çünkü bazı <style> nesneler olmayabilir . Bu çözümü uygulama şeklinize bağlı olarak, undefinedgeri dönebilirsiniz (sistem harici stil sayfası kullanabilir ). İkincisi , çünkü sistem tasarımı yazarının çalışmasını düzenleyeceksiniz (yazarlık sorunları). Üçüncüsü , kurumunuzun BT güvenlik politikasında buna izin verilmeyebilir. Bu nedenle, bunu yapmak için izin isteyin (diğer JS çözümlerinde olduğu gibi) .

Diyelim ki yine izin verildi:

Bu şekilde mevcut yöntemin bazı kısıtlamalar dikkate almak gerekir: insertRule(). Önerilen çözüm varsayılan senaryoyu ve stylesheetvarsa ilk işlemi kullanır .

Test yapmak

Burada test ettim (masaüstü ortamı, bir tarayıcıda) ve benim için çalışıyor. Bir dosya oluşturun foo_bar.html:

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <h1 class="test1">Hello</h1>
    <h1 class="test2">World</h1>
    <script>
      // JS code here
    </script>
  </body>
</html>

İçinde scriptetiketi:

function demoLoop(){ // remove this line
    var elmnt = document.getElementsByTagName("style");
    if (elmnt.length === 0) {
        // there isn't style objects, so it's more interesting create one
        var newStyle = document.createElement("style");
        newStyle.innerHTML =
            "h1.test1 {" +
                "color: green;" +
            "}";
        document.getElementsByTagName("head")[0].appendChild(newStyle);
    } else {
        // Using CSSStyleSheet interface
        var firstCSS = document.styleSheets[0];
        firstCSS.insertRule("h1.test2{color:blue;}"); // at this way (without index specified), will be like an Array unshift() method
    }
} // remove this too
demoLoop(); // remove this too
demoLoop(); // remove this too

Kullandığı bu çözüme başka bir yaklaşım CSSStyleDeclaration (en docs nesne W3Schools'da ve MDN'yi ). Ancak, sistemin CSS'sindeki mevcut kuralları geçersiz kılma riski göz önüne alındığında ilginç olmayabilir.


7. seçenek: satır içi CSS

Satır içi CSS kullan . Bu, sayfa boyutuna (kod satırlarında) bağlı olarak, kodun bakımı (yazarın kendisi veya atanan diğer kişi tarafından) çok zor olsa da, sorunu çözer.

Ancak kurumdaki rolünüzün içeriğine veya web sistemi güvenlik politikalarına bağlı olarak, bu sizin için benzersiz bir çözüm olabilir.

Test yapmak

Bir dosya oluşturun _foobar.html:

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <h1 style="color: green;">Hello</h1>
    <h1 style="color: blue;">World</h1>    
  </body>
</html>

Gagan'ın sorduğu soruyu kesinlikle cevaplamak

Bir tarayıcının bitişik olmayan css'i nasıl oluşturması gerekir?

  1. Bir sayfadaki tüm css stillerini kullanarak bir veri yapısı oluşturması ve bunu oluşturma için kullanması gerekiyor mu?
  2. Yoksa stil bilgilerini kullanarak gördüğü sırayla mı oluşturuyor?

(alıntı uyarlanmıştır)

Daha doğru bir cevap için Google'a şu makaleleri öneriyorum:

  • Tarayıcılar Nasıl Çalışır: Modern web tarayıcılarının perde arkası
  • Ağaç Oluşturma, Yerleşim ve Boya
  • Bir Web Sayfasını “Oluşturmak” Ne Anlama Gelir?
  • Tarayıcı oluşturma nasıl çalışır - perde arkasında
  • Görüntüleme - HTML Standardı
  • 10 Yorumlama - HTML5

+1 Komut dosyası etiketleri dahil iyi fikir ve aptal WYSIWYG CMS editörleri için css, mükemmel yasal HTML eklemek için javascript kullanın
djolf

1

Bu HTML geçerli olmadığından sonuç üzerinde herhangi bir etkisi yoktur ... sadece HTML standardına bağlı kaldığı anlamına gelir (sadece organizasyon amaçlı). Geçerli olması uğruna şu şekilde yazılabilirdi:

<html>
<head>
<style type="text/css">
  p.first {color:blue}
  p.second {color:green}
</style>
</head>
<body>
<p class="first" style="color:green;">Hello World</p>
<p class="second" style="color:blue;">Hello World</p>

Benim tahminim tarayıcının karşılaştığı son stili uyguladığıdır.


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.