Utilizzo dei tag <style> in <body> con altro HTML


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>

In che modo un browser dovrebbe eseguire il rendering di CSS che non è contiguo? Dovrebbe generare una struttura di dati usando tutti gli stili CSS in una pagina e usarla per il rendering?

O esegue il rendering utilizzando le informazioni di stile nell'ordine in cui vede?


2
Direi che è un comportamento indefinito in quanto non è un codice HTML valido. Per ulteriori informazioni su quali elementi sono validi e quali non lo sono: en.wikipedia.org/wiki/HTML_element
Felix Kling

2
Mettendo da parte questo problema, è una cattiva pratica confondere CSSe HTML.
0x2D9A3,

1
@ 0x2D9A3 Non necessariamente vero. Richiede più tempo per richiedere una pagina CSS esterna rispetto a quella CSS definita nel <head>tag
Kolob Canyon

@KolobCanyon Accetto, ma come regola generale, i CSS dovrebbero essere in un file separato. Se disponi di tonnellate di CSS, è sia più semplice gestire (mantenere, (post)) elaborare, minimizzare, raggruppare) e servire come file separato, e anche il tuo contenuto (HTML) potrebbe caricarsi più velocemente, portando a una migliore UX. Tuttavia, come sempre con lo sviluppo, tutto è specifico del contesto, quindi YMMW :)
0x2D9A3

3
@KolobCanyon, questo non è un problema se CSS dovrebbe essere in un file separato. In questo caso la domanda riguarda i CSS <body>piuttosto che in <head>.
Ray Butterworth,

Risposte:


312

Come altri hanno già detto, HTML 4 richiede che il <style>tag sia inserito nella <head>sezione (anche se la maggior parte dei browser consente i <style>tag all'interno di body).

Tuttavia, HTML 5 include l' scopedattributo (vedi aggiornamento di seguito), che consente di creare fogli di stile con ambito nell'ambito dell'elemento padre del <style>tag. Ciò consente anche di posizionare i <style>tag all'interno <body>dell'elemento:

<!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>

Se esegui il rendering del codice sopra in un browser abilitato per HTML-5 che supporta scoped, vedrai l'ambito limitato del foglio di stile.

C'è solo un avvertimento importante ...

Al momento sto scrivendo questa risposta (maggio 2013) quasi nessun browser mainstream attualmente supporta l' scopedattributo. (Anche se apparentemente le build sviluppatore di Chromium lo supportano.)

TUTTAVIA, esiste un'interessante implicazione scopeddell'attributo che riguarda questa domanda. Significa che i browser futuri sono obbligati tramite lo standard per consentire gli <style>elementi all'interno del <body>(purché gli <style>elementi siano di ambito).

Quindi, dato che:

  • Quasi tutti i browser esistenti attualmente ignorano l' scopedattributo
  • Quasi tutti i browser esistenti attualmente consentono <style>tag all'interno di<body>
  • Saranno necessarie implementazioni future per consentire <style>tag (con ambito) all'interno di<body>

... quindi non c'è letteralmente alcun danno * nel posizionare i <style>tag all'interno del corpo, purché in futuro li provi con un scopedattributo. L'unico problema è che i browser attuali non limiteranno effettivamente l'ambito del foglio di stile, ma lo applicheranno all'intero documento. Ma il punto è che, per tutti gli scopi pratici, è possibile includere <style>tag all'interno del fatto <body>che:

  • A prova di futuro il tuo HTML includendo l' scopedattributo
  • Tieni presente che a partire da ora, il foglio di stile all'interno di <body>non sarà effettivamente incluso nell'ambito (poiché non esiste ancora alcun supporto per il browser tradizionale)


* tranne ovviamente, per far incazzare i validatori HTML ...


Infine, per quanto riguarda il comune (ma soggettiva) sostengono che l'incorporamento CSS all'interno HTML è cattive pratiche, si deve rilevare che l' intero punto del scopedattributo è di accogliere framework di sviluppo moderni tipici che consentono agli sviluppatori di pezzi di importazione di HTML come moduli o contenuti sindacato . È molto comodo avere CSS incorporato che si applica solo a un particolare blocco di HTML, al fine di sviluppare componenti modulari incapsulati con stili specifici.


Aggiornamento da febbraio 2019, secondo la documentazione di Mozilla , l' scopedattributo è obsoleto. Chrome ha smesso di supportarlo nella versione 36 (2014) e Firefox nella versione 62 (2018). In entrambi i casi, la funzione doveva essere esplicitamente abilitata dall'utente nelle impostazioni del browser. Nessun altro browser importante l'ha mai supportato.


3
@RobertMcKee: l'hai provato? Mi aspetterei che di solito l'intera pagina html (incluso tutto lo stile in linea) venga analizzata prima del rendering, poiché di solito non è enorme e i browser attendono un (molto breve) mentre prima del rendering proprio per evitare il flash-of -styled contenuto che potrebbe verificarsi a causa di CSS collegati in head. Se questo è il tuo unico css, e se la pagina è grande e se la connessione di rete non è molto veloce, forse vedrai un lampo di contenuti non elaborati, ma mi sorprenderebbe nella maggior parte delle situazioni pratiche.
Eamon Nerbonne,

4
Ad oggi, solo Firefox supporta l'elemento di stile con ambito (secondo caniuse.com/#feat=style-scoped ). E poiché i browser comuni supportano solo l'elemento STYLE all'interno di BODY, lo userei, se necessario. Se il CSS deve essere applicato in un ambito, puoi semplicemente aggiungere un prefisso a ogni selettore nell'origine CSS con ID / classe di un wrapper. In realtà l'ho fatto in un'app Web che ha caricato report HTML sul lato server e li ha resi tramite AJAX. Il CSS può quindi essere preceduto da un semplice regex in JavaScript: cssString.replace (/ (^ | \}) ([^ {] +) (\ {) / g, '$ 1' + prefisso + '$ 2 $ 3')
Adam Hošek,

5
Sostegno per @scoped, o scopedsembra estinguersi: qui e qui
Kiran Subbaraman,

51
Supportando @KiranSubbaraman: Ho appena (luglio 2016) letto su mozilla dev: "L' attributo con ambito è stato rimosso dalle specifiche dopo solo l'adozione limitata e sperimentale da parte di Chrome e Firefox. Dovresti evitare di usarlo , come quasi sicuramente sarà rimosso presto da questi browser ". >> developer.mozilla.org/en-US/docs/Web/HTML/Element/…
jave.web

9
L' scopedattributo è stato rimosso dalle attuali specifiche HTML5.
Albert Wiersch,

62

Cattive notizie per "stile in corpo" amanti: il W3C ha recentemente perso la guerra HTML contro WHATWG, il cui versionless HTML "Living Standard" è ormai diventato quello ufficiale, che, ahimè, non senza lasciare STYLE in BODY. I giorni felici di breve durata sono finiti. ;) Il validatore W3C ora funziona anche secondo le specifiche WHATWG. (Grazie @FrankConijn per l'heads-up!)

(Nota: questo è il caso "a partire da oggi", ma poiché non esiste un controllo delle versioni, i collegamenti possono diventare non validi in qualsiasi momento senza preavviso o controllo. A meno che tu non sia disposto a collegarsi ai suoi singoli commit di origine su GitHub, in pratica non puoi fare più riferimenti stabili al nuovo standard HTML ufficiale , AFAIK. Correggimi se esiste un modo canonico di farlo correttamente.)

BUONE NOTIZIE OSSOLATE:

Sì, STYLEè finalmente valido in BODY, a partire da HTML5.2! (E anche scopedse n'è andato.)

Dalle specifiche del W3C ( goditi l'ultima riga! ):

4.2.6. L'elemento di stile

...

Contesti in cui questo elemento può essere utilizzato:

Dove è previsto il contenuto di metadati.

In un elemento noscript che è figlio di un elemento head.

Nel corpo, dove è previsto il contenuto di flusso.


NOTA META LATERALE:

Il semplice fatto che, nonostante i danni della "guerra dei browser", dovevamo ancora continuare a svilupparci contro due "standard" HTML "ufficiali" ridicolmente in competizione (citazioni per 1 standard + 1 standard < 1 standard) significa che l'approccio "fallback a buon senso nelle trincee" lo sviluppo web non ha mai smesso di applicarsi.

Questo potrebbe finalmente cambiare ora, ma citando la saggezza convenzionale: autori / sviluppatori web e quindi, a loro volta, i browser dovrebbero in definitiva decidere cosa dovrebbe (e non dovrebbe) essere nelle specifiche, quando non c'è una buona ragione contro ciò che è già stato fatto in la realtà. E la maggior parte dei browser hanno a lungo sostenuto STYLEin BODY(in un modo o nell'altro, si veda ad esempio la scoped. Attr) (che, nonostante le sue prestazioni intrinseca (ed eventualmente altri) le sanzioni che . Dovremmo decidere di pagare o meno, non le specifiche). Quindi, per uno, continuerò a scommettere su di loro e non rinuncerò alla speranza. ;) Se WHATWG ha lo stesso rispetto per la realtà / gli autori che sostengono, potrebbero finire per fare qui quello che ha fatto il W3C.


3
Ho letto le specifiche, ma non capisco. Puoi dare un esempio di codice di un styleblocco in quello bodyche convalida?
Frank Conijn,

3
@FrankConijn: buon punto, le cose sono cambiate, ho aggiornato la risposta! È davvero confuso. Sia le specifiche W3C 5.2 che 5.3 trattano STYLEcome metadati e contenuto di flusso, ma le ultime specifiche "viventi" di WHATWG raccontano la vecchia, noiosa storia dei "solo metadati" (consentendola solo in HEAD). E, per aggiungere la beffa al danno, il validatore W3C sembra seguire il sapore di WHATWG. Non ho ancora deciso se ridere o piangere, ma sicuramente ho deciso, personalmente, di "sbagliare" con il caso "browser + W3C - validatore", e consentire STILE nel CORPO. (A proposito, non dimenticare: dovremmo essere la fonte ultima dello standard , in realtà.)
Sz.

1
Penso davvero che abbiano saltato lo squalo con questa schifezza, praticamente non lasciano altra scelta che usare negli stili di linea se si desidera impostare dinamicamente una proprietà di immagine di sfondo in un sistema basato su modelli. È stato molto meno invasivo eliminare un blocco di stile generato programmaticamente appena sopra l'output HTML.
GovCoder il

Fortunatamente, sembra improbabile che i browser smetteranno di supportare una funzionalità da cui dipendono molti siti Web. Sarebbe scomodo in CMS o plug-in di terze parti non avere stili integrati. Personalmente, quando pragmatico (quando non ho un facile accesso a <head>), continuerò a utilizzare questa funzionalità supportata dal browser, a meno che non inizi a rompersi.
ToolmakerSteve

33

Quando vedo che i sistemi di gestione dei contenuti del grande sito sistemano regolarmente alcuni elementi <style> (alcuni, non tutti) vicini al contenuto che si basa su quelle classi, concludo che il cavallo è fuori dalla stalla.

Dai un'occhiata alle fonti di pagine di cnn.com, nytimes.com, huffingtonpost.com, il tuo quotidiano più grande della città, ecc. Tutti fanno questo.

Se c'è una buona ragione per mettere una sezione extra <style> da qualche parte nel corpo - per esempio se stai includendo () ing diversi elementi di pagina indipendenti e in tempo reale e ognuno ha uno <stile> incorporato, e l'organizzazione sarà più pulita, più modulare, più comprensibile e più gestibile - dico solo mordere il proiettile. Certo sarebbe meglio se potessimo avere uno stile "locale" con ambito limitato, come le variabili locali, ma vai a lavorare con l'HTML che hai, non con l'HTML che potresti desiderare o desiderare di avere in un secondo momento.

Naturalmente ci sono potenziali svantaggi e buone (se non sempre convincenti) ragioni per seguire l'ortodossia, come altri hanno elaborato. Ma a me sembra sempre più che l'uso ponderato di <style> in <body> sia già diventato mainstream.


2
Pragmatismo FTW!
Waruyama,

2
Sì hai ragione. Come esempio uso il tag <style> in <body> all'interno del mio plugin. Perché, perché è il modo più semplice per creare eleganti contenuti plugin. Ma un momento, tutte le classi CSS sono uniche per i miei dati di plugin.
Avirtum,

7

HTML non valido, comunque praticamente ogni browser sembra considerare solo la seconda istanza.

Testato con le ultime versioni di FF e Google Chrome sotto Fedora e FF, Opera, IE e Chrome sotto XP.


6

Immagino che questo varierà da browser a browser: le regole di visualizzazione globali verranno probabilmente aggiornate man mano che il browser procede attraverso il codice.

È possibile vedere tali cambiamenti nelle regole di visualizzazione globali a volte quando un foglio di stile esterno viene caricato con un ritardo. Qualcosa di simile potrebbe accadere qui, ma in una successione così breve che in realtà non viene reso.

Non è comunque un codice HTML valido, quindi direi che è una cosa inutile a cui pensare. <style>i tag appartengono alla headsezione della pagina.


5

Come altri hanno già detto, questo non è html valido poiché i tag di stile appartengono alla testa.

Tuttavia, la maggior parte dei browser non applica realmente questa convalida. Invece, una volta caricato il documento, gli stili vengono uniti e applicati. In questo caso il secondo set di stili sovrascriverà sempre il primo perché erano le ultime definizioni incontrate.


5

Il <style>tag appartiene alla <head>sezione, separato da tutto il contenuto.

Riferimenti: specifiche W3C e scuole W3


52
Non affronta la domanda. E quelle rigide linee guida sono invase dalla realtà. Ci sono MOLTI casi in cui non è possibile per gli autori definire / includere il loro stile nella testa html.
Javier,

3
Questo potrebbe essere vero nel 2010, ma oggi è tutt'altro che accettabile.
Isaac Lubow,

3

Nel tuo esempio, un browser non "dovrebbe" fare nulla. L'HTML non è valido. Viene attivato il recupero degli errori o il parser lo fa come sarà.

In un'istanza valida, più fogli di stile vengono semplicemente considerati uno dopo l'altro, la cascata viene calcolata come di consueto.


2

Immagino che questo possa essere un problema relativo a contesti limitati, ad esempio gli editor WYIWYG su un sistema web utilizzato da utenti non programmatori , che limita le possibilità di seguire gli standard. A volte (come TinyMCE), è una lib che mette il tuo contenuto / codice all'interno di un textareatag, che viene reso dall'editor come un grande divtag. E a volte, potrebbe essere una vecchia versione di questi editor.

Suppongo che:

  1. questi utenti non programmatori non hanno un canale aperto con gli amministratori di sistema (o i webdev dell'istituzione), per chiedere l'inclusione di alcune regole CSS dal sistema stylesheets. In realtà, sarebbe poco pratico per gli amministratori (o webdev), considerando il numero di richieste in quel senso che avrebbero.
  2. questo sistema è legacy e non supporta ancora le versioni più recenti di HTML.

In alcuni casi, senza styleregole di utilizzo , può essere un'esperienza di progettazione molto scadente. Quindi, sì, questi utenti hanno bisogno di personalizzazione. Va bene, ma quali sarebbero le soluzioni, in questo scenario? Considerando i diversi modi per inserire CSS in una htmlpagina, suppongo che queste soluzioni:


1a opzione: chiedi al tuo sistema

Chiedi al tuo amministratore di sistema di includere alcune regole CSS da parte del sistema stylesheets. Questa sarà una soluzione CSS esterna o interna . Come già detto, potrebbe non essere possibile.


2a opzione: <link>attiva<body>

Usa un foglio di stile esterno sul bodytag, ovvero l'uso del linktag all'interno dell'area a cui hai accesso (che sarà, sul sito, all'interno del bodytag e non nel headtag). Alcune fonti dicono che va bene, ma "non è una buona pratica", come MDN :

Un <link>elemento può essere presente nell'elemento <head>o <body>, a seconda che abbia un tipo di collegamento che sia body-ok . Ad esempio, il stylesheettipo di collegamento è body-ok e quindi <link rel="stylesheet">è consentito nel corpo. Tuttavia, questa non è una buona pratica da seguire; ha più senso separare i tuoi <link>elementi dal contenuto del tuo corpo, inserendoli nel <head>.

Alcuni altri, limitalo alla <head>sezione, come w3schools :

Nota: questo elemento si trova solo nella sezione head, ma può apparire un numero qualsiasi di volte.

analisi

L'ho provato qui (ambiente desktop, su un browser) e funziona per me. Crea un file 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>

E poi un file CSS, nella stessa directory, chiamato bar.css:

.test1 { 
    color: green;
};

Bene, questo sembrerà possibile solo se hai il modo di caricare un file CSS da qualche parte nel sistema delle istituzioni. Forse questo sarebbe il caso.


3a opzione: <style> attiva<body>

Usa il foglio di stile Internet sul bodytag, ovvero l'uso del styletag all'interno dell'area a cui hai accesso (che sarà, sul sito, all'interno del bodytag e non nel headtag). Queste sono le risposte di Charles Salvia e Sz qui. Scegliendo questa opzione, considera le loro preoccupazioni.


4a, 5a e 6a opzione: vie JS

Avviso Questi sono correlati alla modifica <head>dell'elemento della pagina. Forse non lo farà sarà consentito dagli amministratori di sistema dell'istituzione. Quindi, si consiglia di chiedere loro prima il permesso.

Va bene, supponendo il permesso concesso, la strategia è accedere al <head> . Come? Metodi JavaScript.

4a opzione: nuovo <link>acceso<head>

Questa è un'altra versione della seconda opzione. Utilizza un foglio di stile esterno sul <head>tag, ovvero l'uso <link>dell'elemento all'esterno dell'area a cui hai accesso (che sarà, sul sito, non all'interno del bodytag e sì all'interno del headtag). Questa soluzione è conforme alle raccomandazioni di MDN e w3schools , come sopra citato, sulla soluzione della seconda opzione. Verrà creato un nuovo Linkoggetto .

Per risolvere la questione tramite JS, ci sono molti modi, ma ai seguenti codici dimostrerò uno semplice.

analisi

L'ho provato qui (ambiente desktop, su un browser) e funziona per me. Crea un file 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>

All'interno del scripttag:

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

E poi nel file CSS, nella stessa directory, chiamato bar.css(come nella seconda opzione):

.test1 { 
    color: green;
};

Come ho già detto: questo sembrerà possibile solo se hai il modo di caricare un file CSS da qualche parte nel sistema delle istituzioni.

5a opzione: nuovo <style>acceso<head>

Usa il nuovo foglio di stile interno sul <head>tag, ovvero l'uso di un nuovo <style>elemento all'esterno dell'area a cui hai accesso (che sarà, sul sito, non all'interno del bodytag e sì all'interno del headtag). Verrà creato un nuovo Styleoggetto .

Questo è risolto tramite JS. Di seguito è dimostrato un modo semplice.

analisi

L'ho provato qui (ambiente desktop, su un browser) e funziona per me. Crea un file 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>

All'interno del scripttag:

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

6a opzione: usando un esistente <style> su<head>

Utilizzare un foglio di stile interno esistente sul <head>tag, ovvero l'uso di un <style>elemento all'esterno dell'area a cui si ha accesso (che sarà, sul sito, non all'interno del bodytag e sì all'interno del headtag), se ne esiste qualcuno. StyleVerrà creato un nuovo oggetto o verrà utilizzato un CSSStyleSheetoggetto (nel codice della soluzione adottato qui).

Questo è ad un certo punto di vista rischioso. Innanzitutto , perché potrebbe non esistere qualche <style> oggetto. A seconda del modo in cui si implementa questa soluzione, è possibile che venga undefinedrestituito (il sistema può utilizzare un foglio di stile esterno ). Secondo , perché modificherai il lavoro dell'autore della progettazione del sistema (problemi di paternità). Terzo , perché potrebbe non essere consentito dalle politiche di sicurezza IT della tua istituzione. Quindi, chiedi il permesso per farlo (come in altre soluzioni JS) .

Supponendo, ancora una volta, l'autorizzazione è stata concessa:

Avrete bisogno di prendere in considerazione alcune restrizioni del metodo a disposizione in questo modo: insertRule(). La soluzione proposta utilizza lo scenario predefinito e un'operazione all'inizio stylesheet, se ne esiste una.

analisi

L'ho provato qui (ambiente desktop, su un browser) e funziona per me. Crea un file 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>

All'interno del scripttag:

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

Un altro approccio a questa soluzione è l'utilizzo CSSStyleDeclarationdell'oggetto (documenti su w3schools e MDN ). Ma potrebbe non essere interessante, considerando il rischio di sovrascrivere le regole esistenti sul CSS del sistema.


7a opzione: CSS in linea

Usa CSS in linea . Ciò risolve il problema, sebbene a seconda della dimensione della pagina (nelle righe di codice), la manutenzione del codice (da parte dell'autore stesso o di un'altra persona assegnata) possa essere molto difficile.

Ma a seconda del contesto del tuo ruolo presso l'istituzione o delle sue politiche di sicurezza del sistema web, questa potrebbe essere l'unica soluzione disponibile per te.

analisi

Crea un file _foobar.html:

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

Rispondendo rigorosamente alla domanda posta da Gagan

In che modo un browser dovrebbe eseguire il rendering di CSS che non è contiguo?

  1. Dovrebbe generare una struttura di dati usando tutti gli stili CSS in una pagina e usarla per il rendering?
  2. O esegue il rendering utilizzando le informazioni di stile nell'ordine in cui vede?

(citazione adattata)

Per una risposta più accurata, suggerisco a Google questi articoli:

  • Come funzionano i browser: dietro le quinte dei moderni browser web
  • Render-tree Construction, Layout e Paint
  • Cosa significa "renderizzare" una pagina Web?
  • Come funziona il rendering del browser - dietro le quinte
  • Rendering - HTML standard
  • 10 Rendering - HTML5

+1 Buona idea, inclusi tag script e uso di JavaScript per aggiungere CSS, HTML perfettamente legale per gli stupidi editor CMS WYSIWYG
djolf

1

Poiché questo è HTML non è valido, non ha alcun effetto sul risultato ... significa solo che l'HTML aderisce allo standard (solo per scopi organizzativi). Per essere valido, avrebbe potuto essere scritto in questo modo:

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

La mia ipotesi è che il browser applica l'ultimo stile che incontra.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.