Perché i tag <b> e <i> sono deprecati?


98

Questa domanda è emersa in una delle mie lezioni al college. Il professore ha dato solo la risposta che era più descrittivo, ma sembra come se <b>e <i>sono piuttosto esplicite nel loro significato ed è più facile da digitare rispetto <strong>e <em>.

Quali erano gli argomenti ufficiali per la deprecazione di questi tag?


38
Sono abbastanza sicuro <b>e <i>non sono deprecato.
Doval,


4
Tendo a ragionare in questo modo: voglio che uno screen reader legga diversamente o no? Se voglio solo scegliere le parole che possono essere facilmente trovate da un lettore (non cieco), potrei usare b- significa letteralmente "questo è audace", non "questo è enfatizzato". Ma il punto principale è che sono diversi nel significato - non c'è deprecazione, solo che quando eri solito fare bo i, di solito intendevi strongo em.
Luaan,

1
@MichaelT Ricordo quando ho iniziato a usare LaTeX, ero confuso riguardo a tutti i diversi modi in cui il testo poteva essere in corsivo e in grassetto quando iniziavo su un documento vuoto (senza pacchetti di stile).
Cole Johnson,

@Luaan: Anche se <i>e <b>non sono in realtà deprecati, <tt>e lo <u>sono, e la domanda sarebbe altrettanto applicabile a quelli.
supercat

Risposte:


135

L'estate scorsa ho letto la specifica HTML5 completa e tutte le precedenti specifiche HTML (anche quelle abbandonate) e tutte le specifiche CSS che ho trovato e molte specifiche XML. Dato che amo i documenti ipertestuali semanticamente ricchi, lascia che ti dia l'idea alla base della semantica HTML pertinente in HTML5.

Prima di HTML5

Prima di HTML5, ied berano davvero fuori moda. Il motivo era che essenzialmente funzionavano come eme strong, rispettivamente, ma con attenzione alla presentazione e non alla semantica (il che è un male).

In effetti, isignificava che il testo doveva essere in corsivo (diceva qualcosa su come il testo doveva essere visualizzato sullo schermo). D'altra parte, emsignificava che il testo doveva essere enfatizzato (diceva qualcosa sulla semantica del testo).

C'è un'importante differenza teorica qui. Se lo usi em, l'agente utente (= browser) sa che il testo deve essere enfatizzato, quindi può renderlo in corsivo se il documento viene visualizzato sullo schermo (o tutto maiuscolo se la formattazione non è possibile, o forse anche in grassetto è l'utente lo preferisce), può pronunciarlo diversamente se il documento viene parlato all'utente, ecc.

Nota che l'enfasi è davvero sulla semantica. Ad esempio, le frasi

  • Il gatto è mio. (= non il cane!)
  • Il gatto è mio . (= non tuo!)

non hanno lo stesso significato.

La stessa differenza si applica a b(carattere grassetto) e strong(forte enfasi).

Un principio generale della scrittura digitale in generale e della creazione di ipertesti in particolare è che dovresti separare contenuto e stile. Nella creazione di ipertesti, ciò significa che il contenuto deve essere nel file HTML e lo stile deve essere in un file CSS (o un numero di file CSS). Un principio diverso ma correlato è che il documento dovrebbe essere ricco di semantica (come contrassegnare intestazioni, piè di pagina, elenchi, sottolineature, indirizzi, aree di navigazione, ecc.). Questo ha una serie di vantaggi:

  • È molto più facile per i programmi per computer interpretare il documento. Questi programmi includono browser, applicazioni di sintesi vocale, motori di ricerca e assistenti digitali. (Ad esempio, il browser può consentire di salvare un indirizzo nella rubrica, se solo è in grado di trovarlo e interpretarlo. Inoltre, potresti sapere che Microsoft Word può creare e aggiornare automaticamente un sommario se esegui correttamente il markup delle intestazioni .)
  • È molto più semplice cambiare lo stile in seguito. (Se vuoi cambiare il colore di tutte le intestazioni di terzo livello nel tuo documento di 860 pagine, puoi cambiare una singola riga nel foglio di stile. Se avessi contenuto e presentazione misti, dovresti esaminare l'intero documento manualmente E probabilmente ti perderai un'intestazione o due, rendendo il documento non professionale.)
  • È possibile utilizzare fogli di stile diversi a seconda delle circostanze (il documento viene visualizzato sullo schermo o stampato su carta?). Puoi anche consentire all'utente finale di scegliere da solo lo stile. (Il mio sito Web offre una serie di fogli di stile alternativi. In IE e FF, puoi modificarli utilizzando il menu Visualizza.)

Quindi, in breve, ie bsono stati deprecati perché erano tag HTML preoccupati per la presentazione , il che è totalmente sbagliato.

In HTML5

In HTML5 ie bnon sono più deprecati. Invece, hanno un significato sematico . Quindi ora sono in realtà sulla semantica e non sulla presentazione.

Come in precedenza, emper sottolineare l'enfasi: "Il gatto è mio". Ma usi iper quasi tutti gli altri casi in cui dovresti usare il corsivo in un'opera stampata. Per esempio:

  • Usi iper contrassegnare le designazioni tassonomiche: "Mi piace R. norvegicus ".
  • Utilizzi iper contrassegnare una frase in una lingua diversa rispetto al testo circostante: à la carte
  • Usi iper contrassegnare una parola quando parli della parola stessa: " bere è sia un sostantivo che un verbo"

È anche una buona idea utilizzare l' classattributo per specificare l'utilizzo preciso (anche "microformato" di Google e "microdati"). E, naturalmente, nel secondo caso, dovresti davvero usare l' langattributo per specificare la lingua corretta. (In caso contrario, ad esempio , un agente di sintesi vocale potrebbe pronunciare erroneamente il testo.)

Circa un anno fa, le specifiche HTML5 dicevano anche che citedovevano essere usate per contrassegnare i nomi di libri, film, opere, dipinti, ecc .:

  • Cosa ne pensi di ninfomane ?

Infine, da molto tempo, dfnviene utilizzato per contrassegnare l'istanza di definizione di una frase in un testo (come una definizione matematica o la definizione di un termine):

  • Un gruppo è un set X dotato di una singola operazione binaria * tale che ...

Quindi il corsivo nel tuo libro stampato, che può significare molte cose diverse, è rappresentato da quattro diversi tag HTML5, il che è davvero fantastico, perché la semantica è buona, come ho provato a convincerti prima. (Ad esempio, puoi chiedere al tuo browser di creare un elenco di tutte le definizioni nel testo, in modo da assicurarti di conoscerle tutte prima dell'esame.)

Passando a stronge b, la specifica HTML5 dice che strongdovrebbe essere usato per contrassegnare una parte importante del testo, come un avvertimento o una parola molto importante da catturare in una frase. D'altra parte, bdovrebbe essere usato per contrassegnare cose che devono essere facili da trovare nel testo, come le parole chiave. Uso anche bcome titoli nelle voci di elenco (LI).


1
Correzione: il tag di definizione è <dfn>no <def>. Altrimenti, ottimo riepilogo completo di tutti i problemi. Il tuo suggerimento da utilizzare <b>come titoli nelle voci di elenco è interessante; l'approccio semantico consiste nell'utilizzare un elenco di definizioni , ma poiché attualmente nessun browser supporta display:run-in, inline markup delle parole chiave con <b>o <span>sono le migliori che puoi fare.
AmeliaBR,

@AmeliaBR. Grazie per aver osservato l'errore di battitura (def). Informazioni sugli elenchi di definizioni: gli elenchi di definizioni dovrebbero essere usati per le coppie nome-valore, e io le uso sempre per questo (dai un'occhiata al mio libro degli ospiti , per esempio). Ho anche adorato display:run-in, ma poiché il suo supporto sta diminuendo , devi usare floatil content:trucco o , vedi rejbrand.se/rejbrand/news.asp?ItemIndex=169 . Quando parlo dell'uso bdi contrassegnare le "intestazioni" negli elenchi, non intendo le coppie nome-valore, ma piuttosto elenchi semplici in cui desidero utilizzare un'intestazione in ciascun elemento.
Andreas Rejbrand,

1
@SarahofGaia Vi sono almeno due difetti nel ragionamento che <b>garantiscono il testo accresciuto. 1) Screen reader, display braille e altri mezzi per consumare testo per i quali glifi più spessi sono un concetto insignificante. 2) b { font-weight: normal }, il che significa che lo stile di visualizzazione non è fisso per <b>nessuno dei due.
settembre

1
Infine, si è sempre libero di fornire il proprio CSS, se non vi fidate del browser: b, strong { font-weight:bold; }. In questo modo puoi essere sicuro di come potresti essere. CSS è il modo per specificare il formato visivo. HTML riguarda il significato (contenuto), CSS sulla sua presentazione visiva.
Andreas Rejbrand,

1
Questa risposta mi ha dato la comprensione del motivo per cui ho bisogno di cambiare i miei tag di carattere in CSS. Mi sono sempre piaciuti i tag dei caratteri in grassetto e tutto il resto, ora capisco perché non dovrei usarli. Grazie
Andreas,

58

Come dice Doval, non sono deprecati. Essi esistono ancora , ma devono essere utilizzati in modo diverso da ciò che molte persone in cui utilizzate per prima di HTML5.

Si tratta di HTML "semantico". Dovrebbe descrivere "cosa" è, invece di come dovrebbe apparire. Il browser o teoricamente qualsiasi altro supporto di visualizzazione (ad esempio un'app di lettura per non vedenti) dovrebbe essere in grado di decidere come interpretare esattamente.

Questo è simile al motivo per cui non dovresti usare nomi di classi CSS come "rosso" e usare classi più descrittive che descrivono l'idea funzionale dietro l'utilizzo di un colore diverso qui. In seguito potresti decidere che il verde è migliore (e forse qualsiasi cosa "forte" dovrebbe essere mostrata usando il colore rosso invece del testo in grassetto). Oppure un utente daltonico potrebbe avere alcune impostazioni speciali del browser in cui i colori vengono sostituiti con altri mezzi.


1
Vi sono situazioni in cui è preferibile utilizzare <b> rispetto a <strong>? Oppure <strong> è sempre un tag "più semantico"?
LanceLafontaine,

4
All'incirca potresti usare <b> per cose che dovrebbero essere "evidenziate" ma non "enfatizzate", come le parole chiave in un testo. Nella documentazione tecnica si trovano spesso diversi stili di testo utilizzati per mostrare determinati attributi, come negli esempi di codice dei libri di programmazione o termini tecnici. Per tali casi di utilizzo si potrebbe usare un termine tecnico <b> o <i>.
Thorsten Müller,

3
@LanceLafontaine Dai un'occhiata allo standard ufficiale .
Rufflewind

4
@ thorstenmüller Penso che sia anche un cattivo esempio ... è il caso del libro di testo in cui la direzione decide in seguito che invece di grassetto vogliono i loro attributi in caratteri tipografici e non in grassetto ma sottolineati, nel qual caso l'utilizzo <span class="keyword">...</span>in primo luogo ti salva un sacco di problemi.
CompuChip,

2
@LanceLafontaine <b>è un caso limite, ma ci sono solidi esempi da utilizzare <i>per casi in cui <em>è inappropriato: nomi scientifici di specie o parole latine adottati in inglese (è possibile utilizzare un intervallo con un attributo di lingua, ma che ha molte altre implicazioni - - uno screen reader potrebbe scambiare voci per una lingua diversa). Può anche essere usato per il corsivo dei titoli di altre opere, sebbene l'approccio semanticamente corretto sia quello di usarlo <cite>.
AmeliaBR,

41

La storia vera è che be isono stati prima obsoleto, deprecato, maledetto e anatematized come “di presentazione” in varie bozze HTML5 (in senso lato), ma poi si rese conto che questi tag sono ampiamente utilizzati e anche generati da molti programmi di authoring. Invece di permetterli semplicemente, hanno sviluppato per loro nuove definizioni "semantiche" inventate, per essere in grado di consentire gli elementi ma ancora fingere di essere severi riguardo al markup "presentazionale". Le nuove definizioni sono diverse da una bozza all'altra e sono oscure: difficilmente puoi trovare due persone che le capiscono e le interpretano allo stesso modo.

Spiacente, nessun riferimento. La descrizione sopra è il risultato di seguire le modifiche e leggere le bozze e le discussioni, spesso tra le righe. Non dicono esplicitamente la causa. Penso ancora che sia la vera storia.

La conclusione è: andare avanti. Non c'è niente di utile qui. Gli elementi be ifanno la stessa cosa che hanno sempre: rendono il carattere grassetto o corsivo, rispettivamente, con le solite avvertenze. Questa è la realtà che dovresti prendere in considerazione, non la "semantica" quasischolastica che non ha alcun impatto su browser, motori di ricerca o altri software.


3
Detto questo, puoi seguire la semantica quasischolastic semplicemente trattandola <b>come un tipo divertente <span>che per impostazione predefinita viene visualizzato in grassetto. Quindi, se puoi essere infastidito, dai anche ai tuoi usi un classattributo in modo che quando necessario puoi ridisegnare più cose contemporaneamente che lo hanno usato perché hanno una semantica comune. È quasischolastic nel senso che la gente penserà che sei quasi nella testa per averlo fatto b.productname {font-weight: normal; font-style: italic; }dopo aver cambiato idea sulla presentazione e approfittato della tua saggia scelta di markup semantico ;-)
Steve Jessop,

1
@SteveJessop: Per quei pochi di noi al mondo che si preoccupano ancora delle dimensioni del file, dire <b>this</b>sembra molto più ragionevole di <span class="bold">this</b>(l'overhead di otto byte del primo è abbastanza fastidioso; l'overhead di 23 byte del secondo sembra pazzo). Mi chiedo perché HTML non abbia mai definito una rappresentazione in forma abbreviata <@quack>this</@>come equivalente a <span class="quack">this</span>?
supercat

4
@supercat: ecco a cosa serve la codifica di trasferimento: gzip. O forse XML + XSLT, a seconda di dove e come si desidera introdurre una notazione più concisa per "ciarlatano".
Steve Jessop,

7
@supercat class='bold'? Il Maestro Suku di The Codeless Code avrebbe parlato con te sull'uso di nomi di classe così poveri . Considera questo il tuo ultimo grassetto rosso .

2
Ai tempi dei modem 14.4, CSS era un'idea non ancora realizzata o implementata in nessun agente utente. Questi elementi HTML sono solo innesti legacy antichi con cui saremo bloccati per sempre.
Michael Hampton,

11

I tag <b>e sono <i>nati con i concetti di "grassetto" e "corsivo". Il problema è che questi potrebbero essere completamente privi di significato per alcuni programmi utente. Ad esempio, come suona "corsivo" in uno screen reader per un cieco?

Sostituendoli con <strong>e <em>rimosso il collegamento diretto a concetti tipografici. Invece, l'agente utente può renderli come ritiene opportuno.


2
A rigor di termini, l'agente utente può eseguire il rendering <b>e anche <i>se lo ritiene opportuno.
Jonathan Eunice,

8

I tag <b>e <i>sono essenziali quando si richiede letteralmente del testo in 'grassetto' o 'corsivo'.

Se stai scrivendo un'equazione in HTML in cui un ' I ' in corsivo ha un significato diverso da un 'I' non in corsivo, è importante essere in grado di fare questa distinzione.

Li penso nello stesso modo in cui penso <sup>o <sub>tag: non puoi rappresentare correttamente il significato di un'equazione senza usare tali tag "aspetto".

L'approccio purista sarebbe usare MathML o TeX ma il supporto del browser non è ancora presente ...


14
Vorrei che le persone che spingevano per un markup "semantico" riconoscessero che in alcuni casi i vecchi tag erano più semanticamente corretti di qualsiasi alternativa. Se il testo di un documento fa riferimento a determinate parole sottolineate, mostrarle in qualsiasi modo diverso da sottolineandole sarebbe semanticamente sbagliato. Se uno sta importando testo da un sistema che ne inserisce una parte in a monospaced typefacema che non fa alcuna distinzione sul perché, l'utilizzo di una delle "sostituzioni" <tt>implica erroneamente che il codice che esegue l'importazione ne sapesse più di quanto non avesse fatto a proposito dello scopo.
supercat

Concordo con l'idoneità be iin contesti matematici (e fisici), ma tale utilizzo non è menzionato nelle bozze HTML5. Quando ho sollevato questa domanda, è stato seriamente risposto che al posto dei caratteri speciali Unicode (lettere matematiche in grassetto e lettere matematiche in corsivo)!
Jukka K. Korpela,

1
@supercat: l'affermazione generale (che ammetto non è sempre applicabile) è che non dovresti scrivere assegni che l'utente-agente non può incassare. In particolare, non dovresti scrivere una pagina in cui si afferma che lo screen reader di qualcuno parlerà in un carattere a spaziatura fissa (immagino che una voce robotica sarebbe appropriata: non ho mai effettivamente usato uno screen reader). Ovviamente questo ignora che le pagine della maggior parte delle persone non funzionano affatto sugli screen reader, e quindi non ha senso pagare un prezzo per un'ipotetica accessibilità di cui non si preoccupano. Ma il W3C trascura deliberatamente questo fatto come una questione di principio.
Steve Jessop,

Nel caso dell'importazione del codice, suppongo che la risposta canonica (se non soddisfacente) sia class="source-X-asserts-it-should-be-monospace", distinguendola quindi dal testo semanticamente diverso, nel senso che qualche altra fonte afferma per ragioni sconosciute che dovrebbe essere monospaziale. In effetti, questo sta controllando le cose che l'HTML considera cattive, invece di limitarsi a tradurre le cattive in HTML.
Steve Jessop,

1
@SteveJessop: In altre parole, dovremmo migliorare <TT>, il che ha suggerito direttamente che il testo dovrebbe essere impostato in un carattere monospaziale contrastante, con markup che, dopo alcuni strati di indiretta, indicherà che il testo dovrebbe essere mostrato in un particolare carattere che capita a essere monospace. Mentre io non aspetterei tutti i lettori di schermo da fare qualcosa di utile con <tt>, mi aspetterei che avrebbero avuto un tempo molto più facile con <tt>rispetto <span class="styleNameThisImportUtilityPicked">.
supercat

0

I principi di progettazione alla base dei tag HTML sono che dovrebbero essere "semantici", cioè dovrebbero indicare significato e intento piuttosto che istruzioni di basso livello.

Il test classico è "i tag possono essere utilizzati in modo significativo in un browser per non vedenti".

Quindi, per un browser basato su audio, la "i" per il corsivo è piuttosto inutile in quanto non è possibile parlare in corsivo. Tuttavia, il tag "em" è significativo in quanto un dispositivo audio può enfatizzare una frase in molti modi: aumentando il tono, aumentando il volume o modificando l'accento. Un renderizzatore Braille potrebbe enfatizzare alzando i punti cambiando spaziatura, cambiando dimensione o aggiungendo vibrazioni.


Come dici tu non puoi avere un corsivo - ma puoi avere un corsivo in cui il fatto che è corsivo ha un significato semantico, ad esempio equazioni ...
SAL

2
"Quindi, per un browser basato su audio, la" i "per il corsivo è piuttosto inutile in quanto non è possibile parlare in corsivo." ... Sì, e anche <img>perché non puoi parlare un'immagine e un sistema senza hardware audio non può essere presente <audio>. A volte la presentazione è il vero scopo di un elemento e non ha bisogno di essere universalmente supportata (e diversamente da altri elementi potenzialmente non supportati, <i>non ha bisogno di un testo alternativo perché il fatto che è in corsivo è l'unica informazione persa). Il vero problema è quando le persone dicono iquando vogliono dire em .
nmclean,

@SAL: Perché non si può avere un "discorso in corsivo"? Se il discorso normale viene pronunciato con un valore di "intonazione" pari a 100, il testo all'interno di un <i>tag utilizza il passo di 120 e il testo all'interno di un <b>tag utilizza 80 e il testo all'interno di una <tt>sincronizzazione del discorso con una macchina da scrivere sintetizzata che produce il testo consentirebbe all'ascoltatore distinguere facilmente quelle forme di markup. Il lavoro sarebbe molto più difficile se invece di usare un <i>tag il testo usasse invece un testo che faceva <span class="whatever">apparire parti del testo usando "Acme SemiScript" anziché "Waldorf Sans" [alcune famiglie di font ...
supercat

... non hanno un buon carattere corsivo, ma a volte un carattere solo corsivo può sembrare buono se impostato all'interno di un testo scritto usando un'altra famiglia di caratteri].
supercat

@supercat Stai descrivendo un discorso enfatizzato, non un corsivo. Se vuoi un tono diverso, dovresti usarli, come ha detto nmclean. Se lo vuoi in corsivo, usa i. Non importa che uno screen reader non sappia cosa fare, perché non c'è niente da fare. I titoli dei libri sono spesso in corsivo, ma non li pronunci diversamente.
DCShannon,
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.