Чому теги <b> та <i> застаріли?


98

Це питання виникло на одному з моїх занять у коледжі. Професор тільки дав відповідь , що він був більш описовий характер, але це , здається , ніби <b>і <i>досить явно в їх сенс і простіше набрати , ніж <strong>та <em>.

Якими були офіційні аргументи щодо знецінення цих тегів?


38
Я досить впевнений <b>і <i>не застарілий.
Doval


4
Я схильний міркувати про це так: Я хочу, щоб читач екранів читав це по-іншому, чи ні? Якщо я просто хочу вибрати слова, які легко знайти (не сліпий) читач, я можу використати b- це буквально означає "це сміливо", а не "це наголошується". Але головне в тому, що вони різняться за значенням - немає зневаги, просто не те, що коли ви робили bабо i, як правило, мали на увазі strongабо em.
Луань

1
@MichaelT Я пам’ятаю, коли я вперше почав використовувати LaTeX, мене збентежили всі різні способи нанесення тексту курсивом та виділення жирним шрифтом, починаючи з чистого документа (без пакетів стилів).
Коул Джонсон

@Luaan: Навіть якщо <i>і <b>насправді не застаріли, <tt>а <u>є, і питання було б таким же застосовно до них.
supercat

Відповіді:


135

Минулого літа я прочитав повну специфікацію HTML5, і всі попередні специфікації HTML (навіть покинуті), і всі специфікації CSS, які я міг знайти, і безліч специфікацій XML. Оскільки я люблю семантично багаті гіпертекстові документи, дозвольте дати вам ідею щодо відповідної семантики HTML у HTML5.

Перед HTML5

До HTML5 iі bсправді вийшли з моди. Причина полягала в тому, що вони по суті працювали як emі strong, відповідно, але орієнтуючись на презентацію, а не на семантику (що погано).

Дійсно, iмав на увазі, що текст має містити курсив (він щось говорить про те, як текст повинен бути відображений на екрані). З іншого боку, emмав на увазі, що текст повинен бути підкреслений (він щось говорив про семантику тексту).

Тут є важлива теоретична різниця. Якщо ви користуєтесь em, користувальницький агент (= браузер) знає, що текст повинен бути підкреслений, тому він може відображати його курсивом, якщо документ відображається на екрані (або з великими ковпаками, якщо форматування неможливо, або, можливо, навіть жирним шрифтом є користувач вважає за краще це), він може вимовляти це по-різному, якщо документ розмовляє з користувачем тощо.

Зауважте, що акцент дійсно робиться на семантиці. Наприклад, фрази

  • Кішка моя. (= не собака!)
  • Кіт мій . (= не ваш!)

не мають однакового значення.

Ця ж різниця стосується b(шрифту жирного шрифту) та strong(сильного наголосу).

Загальний принцип цифрового письма взагалі, зокрема, створення тексту гіпертексту, полягає в тому, що ви повинні розділяти зміст і стиль. У створенні гіпертексту це означає, що вміст повинен бути у файлі HTML, а стиль повинен бути у файлі CSS (або у кількох CSS-файлах). Інший, але пов'язаний із цим принцип полягає в тому, що документ повинен бути багатим на семантику (наприклад, розмітка заголовків, колонтитулів, списків, акцентів, адрес, навігаційних областей тощо). Це має ряд переваг:

  • Комп'ютерним програмам набагато простіше інтерпретувати документ. Ці програми включають браузери, програми для текстового мовлення, пошукові системи та цифрові помічники. (Наприклад, веб-переглядач може дозволити вам зберегти адресу до своєї адресної книги, якщо тільки вона може знайти та інтерпретувати її. Також ви можете знати, що Microsoft Word може створити та автоматично оновити TOC для вас, якщо правильно розмітити заголовки .)
  • Набагато простіше згодом змінити стиль. (Якщо ви хочете змінити колір усіх заголовків третього рівня у своєму документі на 860 сторінках, ви можете змінити один рядок у таблиці стилів. Якби ви мали змішаний вміст та презентацію, вам доведеться пройти весь документ вручну . І ви, мабуть, пропустите заголовок або два, зробивши документ непрофесійним.)
  • Ви можете використовувати різні таблиці стилів залежно від обставини (документ відображається на екрані чи друкується на папері?). Ви навіть можете дозволити кінцевому користувачеві вибрати сам стиль. (Мій веб-сайт пропонує ряд альтернативних таблиць стилів. У IE та FF ви змінюєте їх за допомогою меню Перегляд.)

Так, в загальному, iі bбули застарілими , тому що вони були HTML теги стурбовані презентації , що абсолютно неправильно.

У HTML5

У HTML5 iі bбільше не рекомендується. Натомість їм надається сематичне значення . Тож вони зараз насправді про семантику, а не про виклад.

Як і раніше, використовувати emрозмічати увагу: «Кішка на мій.» Але ви використовуєте iмайже для всіх інших випадків, коли ви б використовували курсив у друкованому творі. Наприклад:

  • Ви використовуєте iдля позначення таксономічних позначень: "Мені подобається R. norvegicus ."
  • Ви використовуєте iдля позначення фрази іншою мовою порівняно з навколишнім текстом: À la carte
  • Ви використовуєте iдля позначення слова, коли говорите про саме слово: " пити - це і іменник, і дієслово"

Також добре використовувати classатрибут, щоб вказати точне використання (також "мікроформати" та "мікродані" Google). І, звичайно, у другому випадку вам слід реально використовувати langатрибут, щоб вказати правильну мову. (Інакше, наприклад , агент з текстовим мовленням може неправильно вимовити текст.)

Ще рік тому специфікація HTML5 також говорила, що її citeслід використовувати для позначення назв книг, фільмів, опер, картин тощо:

  • Що ви думаєте про німфоманку ?

Нарешті, з давніх часів dfnвикористовується для позначення визначального екземпляра фрази в тексті (як математичне визначення чи визначення терміна):

  • Група являє собою набір X оснащений однією бінарної операцією * такий , що ...

Тож курсив у вашій друкованій книзі, який може означати багато різних речей, представлений чотирма різними тегами HTML5, що справді чудово, адже семантика хороша, як я намагався вас переконати раніше. (Наприклад, ви можете попросити веб-переглядач скласти список усіх визначень у тексті, щоб ви могли переконатися, що знаєте їх усі до іспиту.)

Звертаючись до strongта b, специфікація HTML5 говорить, що її strongслід використовувати для позначення важливої ​​частини тексту, як-от застереження чи якесь дуже важливе для вловлювання слово в реченні. З іншого боку, bслід використовувати для позначення речей, які потрібно легко знайти в тексті, як ключові слова. Я також використовую bяк заголовки у списках (LI).


1
Виправлення: тег визначення є <dfn>, ні <def>. В іншому випадку, велике вичерпне резюме всіх питань. <b>Цікава ваша пропозиція використовувати як заголовки у списках; семантичний підхід полягає у використанні списку визначень , але так як немає браузерів в даний час не підтримують display:run-in, рядне ключове слово розмітки <b>або <span>краще , що ви можете зробити.
AmeliaBR

@AmeliaBR. Дякуємо, що спостерігали за друкарською помилкою (def). Щодо списків визначень: списки визначень повинні використовуватися для пар імен-значень, і я завжди їх використовую для цього (наприклад, перегляньте мою гостьову книгу ). Мені також подобалось display:run-in, але оскільки його підтримка зменшується , ви повинні використовувати floatабо content:трюк, див. Rejbrand.se/rejbrand/news.asp?ItemIndex=169 . Коли я говорю про використання bдля позначення "заголовків" у списках, я не маю на увазі пари іменних значень, а просто прості списки, де я хочу використовувати "заголовок" у кожному елементі.
Андреас Рейбранд

1
@SarahofGaia Є щонайменше два недоліки з міркуваннями, які <b>гарантують посилений текст. 1) Зчитувачі екрану, брайлівські екрани та інші засоби споживання тексту, для яких товстіші гліфи - це безглузде поняття. 2) b { font-weight: normal }, тобто стиль відображення не встановлений <b>ні для одного.
8bittree

1
Нарешті, ви завжди можете поставити свій власний CSS , якщо ви не довіряєте браузер: b, strong { font-weight:bold; }. Таким чином ви можете бути впевнені, наскільки це можливо. CSS - це спосіб задати візуальний формат. HTML - це значення (зміст), CSS - про візуальне його представлення.
Андреас Рейбранд

1
Ця відповідь дала мені розуміння, чому мені потрібно змінити свої теги шрифту на css. Мені завжди подобалися жирні теги шрифтів і все це. Тепер я розумію, чому я не повинен їх використовувати. Дякую
Андреас

58

Як каже Доваль, вони не застаріли. Вони все ще існують, але повинні використовуватися інакше, ніж ті, що раніше використовували HTML5.

Йдеться про «семантичний» html. Він повинен описувати "що" це, а не як він повинен виглядати. Веб-переглядач або теоретично будь-який інший дисплей (скажімо, програма для читання для сліпих) повинен мати можливість вирішити, як саме слід інтерпретувати.

Це схоже, тому не слід використовувати назви класів CSS типу "червоний" та використовувати більш описові класи, які описують функціональну ідею, використовуючи тут інший колір. Пізніше ви можете вирішити, що зелений краще (а може бути, що-небудь «сильне» слід показати, використовуючи червоний колір замість жирного тексту). Або кольоровий користувач може мати спеціальні налаштування браузера, де кольори замінюються іншими способами.


1
Чи є ситуації, в яких бажано використовувати <b> на відміну від <strong>? Або <strong> завжди є "більш семантичним" тегом?
LanceLafontaine

4
Приблизно ви можете використовувати <b> для речей, які слід "виділити", але не "підкреслити", як ключові слова в тексті. У технічній документації ви часто зустрічаєте різні стилі тексту, які використовуються для відображення певних атрибутів, наприклад, у книгах програмування зразків коду чи технічних термінів. Для такого використання можна використовувати такі випадки, як технічний термін <b> або <i>.
thorsten müller

3
@LanceLafontaine Погляньте на офіційний стандарт .
Rufflewind

4
@ thorstenmüller Я думаю, що це теж поганий приклад ... це випадок підручника, коли керівництво вирішує пізніше, що замість жирного вони хочуть, щоб їх атрибути були шрифтом шрифта шрифта, а не жирним, але підкресленим; у цьому випадку використання <span class="keyword">...</span>в першу чергу рятує вас багато клопоту.
CompuChip

2
@LanceLafontaine <b>є кращим випадком, але є вагомі приклади для використання <i>у випадках, коли <em>це недоречно: наукові назви видів або латинські слова, прийняті англійською мовою (ви можете використовувати проміжок з атрибутом мови, але це має всілякі інші наслідки - - екранний зчитувач може перемикати голоси на іншу мову). Він також може використовуватися для курсивного заголовка інших творів, хоча семантично правильний підхід полягає у використанні <cite>.
AmeliaBR

41

Справжня історія , що bі iбули першими устаревании засуджується, вилаялася і anatematized як «презентаційний» в різних проектах HTML5 ( в широкому сенсі), але потім вони зрозуміли , що ці мітки широко використовуються , а також генеруватися багатьма програмами авторинга. Замість того, щоб просто дозволити їм, вони розробили надумані нові «семантичні» визначення для них, щоб мати можливість дозволити елементам, але все ще роблять вигляд, що вони суворі щодо «презентаційної» розмітки. Нові визначення варіюються від одного проекту до іншого і є неясними: навряд чи можна знайти двох людей, які розуміють і інтерпретують їх однаково.

Вибачте, немає посилань. Опис, описаний вище, є результатом слідування за змінами та читання проектів та обговорень, часто між рядками. Вони чітко не пояснюють причину. Я все ще думаю, що це справжня історія.

Висновок такий: рухайтесь далі. Тут немає нічого корисного. Елементи bі iелементи роблять те саме, що завжди: вони роблять шрифт жирним або курсивом відповідно зі звичайними застереженнями. Це реальність, яку ви повинні враховувати, а не квазіхоластична «семантика», яка не впливає на браузери, пошукові системи чи інше програмне забезпечення.


3
Це означає, що ви можете слідувати квазіхоластичній семантиці, розглядаючи <b>як смішний вид, <span>який за замовчуванням надається жирним шрифтом. Тоді, якщо вас можуть турбувати, надайте також своїм classатрибутам використання для того, щоб, коли необхідно, ви могли переспівати кілька речей, які використовували його, оскільки вони мають загальну семантику. Це квазіхоластично в тому сенсі, що люди подумають, що ти квазі в голові, b.productname {font-weight: normal; font-style: italic; }коли ти передумав про презентацію та скористався своїм розумним вибором семантичної розмітки ;-)
Стів Джессоп

1
@SteveJessop: Для тих небагатьох у світі, які все ще піклуються про розмір файлів, приказка <b>this</b>здається набагато розумнішою, ніж <span class="bold">this</b>(восьмибайтові накладні витрати на перший план досить насторожі; 23-байтові накладні витрати останніх здаються божевільними). Цікаво, чому HTML ніколи не визначав жодної короткої форми, <@quack>this</@>як еквівалент <span class="quack">this</span>?
supercat

4
@supercat: для чого призначено кодування передачі: gzip. Або, можливо, XML + XSLT, залежно від того, куди і як ви хочете ввести більш стислі позначення для "шарлатанства".
Стів Джессоп

7
@supercat class='bold'? Майстер Суку з Кодексу без коду мав би з вами слова про використання таких бідних імен класів . Розглянемо це ваш останній boldRedText .

2
За часів 14,4 модемів CSS була ідеєю, яка ще не реалізована та не реалізована в будь-якому користувальницькому агенті. Ці елементи HTML - це лише давня спадщина, з якою ми назавжди залишимося.
Майкл Хемптон

11

<b>І <i>теги виникли з поняттями «жирний» і «курсив». Проблема полягає в тому, що вони можуть бути абсолютно безглуздими для деяких користувальницьких агентів. Наприклад, що "курсив" звучить, як у читачі екрану для сліпої людини?

Замінивши їх <strong>та <em>усунувши прямий зв’язок з типографічними поняттями. Натомість агент користувача може видати їх, але вважає за потрібне.


2
Строго кажучи, агент користувача може надавати <b>і <i>тим НЕ менш він вважає за потрібне, теж.
Джонатан Юніс

8

<b>І <i>теги мають важливе значення , коли ви буквально вимагають текст «жирний» або «курсив».

Якщо ви пишете рівняння в HTML, де курсив " Я " має інше значення від не курсивного "Я", важливо мати можливість зробити це відмінністю.

Я думаю про них так само, як я думаю <sup>або <sub>теги - ви не можете правильно представити значення рівняння, не використовуючи такі теги "зовнішнього вигляду".

Пуристичним підходом було б використовувати MathML або TeX, але підтримка браузера ще не існує ...


14
Я хотів би, щоб люди, які прагнули до "семантичної" розмітки, визнавали, що в деяких випадках старі теги були більш семантично правильними, ніж будь-які альтернативи. Якщо текст документа посилається на певні підкреслені слова, то відображення цих слів будь-яким іншим способом, крім підкреслення їх, було б семантично неправильним. Якщо хтось імпортує текст із системи, яка розміщує його частину, in a monospaced typefaceале яка не робить різниці щодо того, то використання однієї із "замін" на <tt>помилково означатиме, що код, який здійснює імпорт, знав більше, ніж це робив про мету.
supercat

Я погоджуюся з придатністю bта iв математичному (та фізичному) контекстах, але таке використання в проектах HTML5 не згадується. Коли я підняв це питання, серйозно відповів, що замість цього будуть використані спеціальні символи Unicode (математичні жирні літери та математичні курсивні букви)!
Юкка К. Корпела

1
@supercat: загальна претензія (яка, я визнаю, не завжди застосовується) полягає в тому, що ви не повинні писати чеки, які користувач-агент не може здійснити. Зокрема, ви не повинні писати сторінку, яка стверджує, що чийсь екранний читач буде говорити односхилим шрифтом (я думаю, що голос робота був би доречним: я ніколи фактично не використовував зчитувач екрана). Звичайно, це ігнорує, що сторінки більшості людей, як мінімум, не працюють на читачах екранів, і тому немає сенсу їм платити будь-яку ціну за гіпотетичну доступність, про яку вони не дбають. Однак W3C навмисно нехтує цим фактом.
Стів Джессоп

Що стосується імпорту коду, я вважаю, що канонічна (якщо незадовільна) відповідь є class="source-X-asserts-it-should-be-monospace", тим самим відрізняючи її від тексту, що семантично відрізняється в тому сенсі, що якесь інше джерело з невідомих причин стверджує, що воно має бути просторовим. По суті, це аудит того, що HTML вважає поганим, а не просто перекладати його на HTML.
Стів Джессоп

1
@SteveJessop: Іншими словами, ми повинні вдосконалити <TT>, що прямо запропонувало встановити текст контрастним шрифтом монопростіру, з розміткою, яка після декількох шарів непрямості вказуватиме на те, що текст повинен бути показаний певним шрифтом, який трапляється з бути монопростіром. Хоча я б не очікувати , що всі читачі екрану , щоб зробити що - то корисне <tt>, я б очікувати , що вони повинні були б набагато легше з <tt>чим <span class="styleNameThisImportUtilityPicked">.
supercat

0

Принципи дизайну, що лежать в основі тегів HTML, полягають у тому, що вони повинні бути "смисловими", тобто вони повинні вказувати значення та намір, а не інструкції низького рівня.

Класичний тест - "чи можна теги змістовно використовувати в браузері для незрячих".

Отже, для браузера на основі аудіо "курсор" я "є курсивним, оскільки ви не можете мати курсив. Однак тег "em" має значення, оскільки аудіопристрій може підкреслювати фразу багатьма способами: підвищуючи крок, збільшуючи гучність або змінюючи акцент. Відображувач Брайля міг би підкреслити, піднімаючи точки, змінюючи відстань, змінюючи розмір або додаючи вібрацію.


Як ви говорите, ви не можете мати курсив, але ви можете мати текст курсивом, де факт, що він є курсивом, має семантичне значення, наприклад рівняння ...
SAL

2
"Отже, для браузера на основі аудіо" курсор "я" є курсивним, оскільки ви не можете мати курсив ". ... Так, так це <img>тому, що ви не можете говорити зображення, а система без звукового обладнання не може бути представлена <audio>. Іноді презентація є самою метою елемента, і вона не потребує повсюдної підтримки (і на відміну від інших потенційно непідтримуваних елементів, <i>не потребує введення тексту, оскільки факт, що він є курсивом, є єдиною втраченою інформацією). Справжня проблема, коли люди кажуть, iколи мають на увазі em .
nmclean

@SAL: Чому не можна мати "курсив"? Якщо нормальна мова промовляється зі значенням "висота" 100, то текст у <i>тезі використовувати крок 120, а текст у <b>тезі - 80, а текст у <tt>синхронізованому мовленні із синтезованою машинкою, що створює текст, дозволить слухачеві легко розрізнити ці форми розмітки. Завдання було б набагато складніше, якби замість використання <i>тегу текст замість цього використовувався, <span class="whatever">що спричинило показ частин тексту за допомогою "Acme SemiScript", а не "Waldorf Sans" [деякі сім'ї шрифтів ...
supercat

... не мають гарного курсивного шрифту, але іноді шрифт, призначений лише курсивом, може виглядати добре, якщо встановити його в тексті, написаному за допомогою іншого сімейства шрифтів].
supercat

@supercat Ви описуєте підкреслене мовлення, а не курсив. Якщо ви хочете інший тон, то вам слід використовувати em, як сказав nmclean. Якщо ви хочете, щоб його було виділено курсивом, використовуйте i. Не має значення, що зчитувач екрану не знає, що робити, тому що робити це нічого. Назви книг часто курсивом, але ви не вимовляєте їх інакше.
DCShannon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.