Почему тег <center> не рекомендуется в HTML?

202

Мне просто любопытно, почему <center>тег в HTML устарел.

Это <center>был простой способ быстрого выравнивания по центру блоков текста и изображений путем инкапсуляции контейнера в <center>тег, и я действительно не могу найти более простой способ сделать это сейчас.

Кто-нибудь знает какой-нибудь простой способ о том, как центрировать «материал» (не « margin-left:auto; margin-right:auto;вещь и ширина»), что-то, что заменяет <center>? А также, почему это устарело?

Андреас Греч
источник

Ответы:

232

<center>Элемент был устаревшим , поскольку он определяет представление о его содержании - оно не описывает его содержимое.

Один из способов центрирования является установкой margin-leftи margin-rightсвойства элемента к auto, а затем установить родительский элемент text-alignсвойство center. Это гарантирует, что элемент будет центрирован во всех современных браузерах.

Джордан Райан Мур
источник
7
Да, CSS это все о разделении представления и данных.
Иван Невоструев
3
Иван, CSS это все о презентации; это не разделение - как показывают атрибуты встроенного стиля в некоторых ответах! Конечно, очень хорошая идея использовать разумные классы, а не встроенный CSS, но это отличная концепция для использования CSS для презентации.
Питер Боутон
15
У меня были некоторые случаи (которые я не могу вспомнить), когда установка обоих элементов marginи text-alignне центрировала мой элемент в IE, но его обертывание <center>сработало ... Я попытаюсь найти пример.
Мотти
12
трюк с автоматическим запасом работает только для элементов уровня блока. использовать display: block;на встроенном элементе.
Стив Грэм
88
Я уверен, что семнадцать вложенных элементов div в типичном шаблоне WP или Drupal действительно помогают выделить детали презентации: P </ troll> (<- look, semantic tag!)
ловко
17

Согласно W3Schools.com ,

Центральный элемент устарел в HTML 4.01 и не поддерживается в XHTML 1.0 Strict DTD.

Спецификация HTML 4.01 дает эту причину для отказа от тега:

Элемент CENTER в точности эквивалентен указанию элемента DIV с атрибутом выравнивания, установленным в «center».

Конрад Мейер
источник
14
Я так хочу, чтобы это было на самом деле правда.
Badp
61
Это действительно так, но атрибут выравнивания DIV также не рекомендуется использовать: D
Олег Припин,
22
Обратите внимание, что w3schools - это не W3C.
showdev
4
«Элемент CENTER в точности эквивалентен указанию элемента DIV с атрибутом выравнивания, установленным в« center ».» за исключением того, что по тегу видно, что он центрирован. Если бы это была веская причина, мы могли бы удалить <strong>, <b>, все <h> и другие теги и сказать, что они делают то же самое, что и <span> с некоторыми css. кроме того, XHTML даже не распознает теги HTML5, такие как canvas. Это только осуждается из-за войны с шатрами, центрами, столами, каркасом, который является чисто религиозным, поскольку у них всех есть место.
Дмитрий
2
@Dmitry <strong> и <h> имеют семантическое значение, выходящее за рамки визуального оформления. Я предполагаю, что если бы <center> был все еще рядом, вы могли бы оформить его с помощью CSS, например, чтобы сделать его содержимое левым.
Ник Райс
16

То, что я делаю, - это беру обычные задачи, такие как центрирование или плавание, и делаю из них CSS-классы. Когда я делаю это, я могу использовать их на любой странице. Я также могу позвонить столько, сколько я хочу на одном элементе.

.text_center {text-align: center;}
.center {margin: auto 0px;}
.float_left {float: left;}

Теперь я могу использовать их в своем HTML-коде для выполнения простых задач.

<p class="text_center">Some Text</p>
Скотт Рэдклифф
источник
12

Я до сих пор иногда использую тег <center>, потому что в CSS ничего не работает. Примеры попыток использовать трюк <div> и неудачи:

<div style="text-align: center;">This div is centered, but it's a simple example.</div>
<br />
<div style="text-align: center;"><table border="1"><tr><td>&lt;div style="text-align: center;"&gt; didn't center correctly.</td></tr></table></div>
<br />
<div style="text-align: center;margin-left:auto;margin-right:auto"><table border="1"><tr><td>&lt;div style="text-align: center;margin-left:auto;margin-right:auto"&gt; still didn't center either</td></tr></table></div>
<br />
<center><table border="1"><tr><td>Actually Centered with &lt;center&gt; tag</td></tr></table></center>

<центр> получает результаты. Чтобы использовать CSS вместо этого, вам иногда приходится размещать CSS в нескольких местах и ​​связываться с ним, чтобы выровнять его по центру. Чтобы ответить на ваш вопрос, CSS стал религией с верующими и последователями, которые избегали <center> <b> <i> <u> как богохульство, нечестивое и слишком простое ради собственной безопасности работы. И если они попытаются отобрать у вас <table>, спросите их, что такое CSS-эквивалент атрибута colspan или rowspan.

Это не абстрактная или книжная правда, а живая правда, которая имеет значение.
- дзен

Рассел Хэнкинс
источник
Вы также можете использоватьdisplay:flex; justify-content:center; text-align:center
Джастин Лю
11

Вы все еще можете использовать это с XHTML 1.0 Transitional и HTML 4.01 Transitional, если хотите. Единственный другой способ (лучший, на мой взгляд) - с полями:

<div style="width:200px;margin:auto;">
  <p>Hello World</p>
</div>

Ваш HTML должен определять элемент, а не управлять его представлением.

Сэмпсон
источник
8

Предполагается, что разметка, т. Е. Теги HTML, представляют значение и структуру, а не внешний вид. Он был сильно перепутан в ранних версиях HTML, но стандарты сейчас пытаются это исправить.

Одной из проблем, позволяющих тегам управлять внешним видом, является то, что ваши страницы плохо воспроизводятся на устройствах для инвалидов, таких как программы чтения с экрана. Это также приводит к тому, что в вашем тексте появляется множество тегов, которые не помогают прояснить смысл, а скорее загромождают его информацией другого уровня.

Поэтому CSS был придуман для перемещения форматирования / отображения на другой язык, который отделен от текста и может быть легко сохранен таким образом. Помимо прочего, это позволяет переключать таблицы стилей для изменения внешнего вида веб-страницы, не касаясь другой разметки. И чтобы можно было сделать это для множества страниц одним махом.

Инструменты, которые CSS дает вам для этого, не всегда элегантны, я на вашей стороне. Например, нет способа сделать эффективное вертикальное центрирование. И горизонтальное центрирование, если оно не просто поддается тексту text-align, не намного лучше.

У вас есть выбор: делать легко, эффективно и нечетко или чисто, элегантно и громоздко. Я не понимаю, почему веб-разработчики терпят этот беспорядок, но я думаю, что они счастливы иметь хотя бы шанс сделать свое дело.

Карл Смотриц
источник
4
+1: как человек, который даже не является веб-разработчиком, я понимаю, насколько громоздким может быть определение определенных атрибутов представления с использованием CSS. Я все еще считаю, что лучше использовать CSS, чем путать структурную разметку, но ... WTF? Кто отвечает за определение спецификации CSS, случайных обезьян, которых они нашли в каких-то отдаленных джунглях? Шутки в сторону.
Дэн Молдинг
2
Пожалуйста, не оскорбляйте случайных обезьян в отдаленных джунглях!
Дейв Уолли
7

HTML предназначен для структурирования данных, а не для управления макетом. CSS предназначен для управления макетом. Вы также обнаружите, что многие дизайнеры не одобряют использование <table>для макетов по той же самой причине.

jkndrkn
источник
5

Для текста и изображений вы можете использовать text-align:

<div style="text-align: center;">
    I'm centered.
</div>
Томас Маркаускас
источник
1
Они называются встроенными элементами.
Кристоф Бюлер
3

У CSS есть text-align: centerсвойство, и поскольку это чисто визуальная вещь, а не семантическая, его следует отнести к CSS, а не к HTML.

keithjgrant
источник
1
+1 за объяснение, почему это устарело в дополнение к альтернативе.
moribvndvs
8
но text-alignвыровняю содержимое контейнера, а не сам контейнер
Андреас Греч
Ах, да, если это элемент уровня блока, "auto" padding сделает это. Если это встроенный элемент, используйте text-align: centerего родительский элемент.
Keithjgrant
(упс, я имел ввиду auto margin, а не padding)
keithjgrant
@AndreasGrech - <center>делает и то, и другое . Это раздражающе широк.
Квентин
3

Пища для размышления: что будет делать синтезатор преобразования текста в речь <center>?

Йорг Миттаг
источник
1
Вероятно, говорят «центр» или «по центру».
Дейв Уолли
То же самое, что и css 'text-align: center; Я полагаю.
MSpreij
0

Вы можете добавить это в свой CSS и использовать <div class="center"></div>

.center{
  text-align: center;
  margin: auto;
  justify-content: center;
  display: flex;
}

или если вы хотите сохранить <center></center>и быть готовыми к тому, что его когда-нибудь удалят, добавьте это в свой css

center{
  text-align: center;
  margin: auto;
  justify-content: center;
  display: flex;
}
SwiftNinjaPro
источник
0

Наименее популярный ответ

  1. Устаревший тег не обязательно является плохим тегом;
  2. Там являются теги , которые имеют дело с логикой представления, centerявляется одним из них;
  3. centerТег не такой же , как DIV с text-align:center;
  4. Тот факт, что у вас есть другой способ сделать что-то, не делает его недействительным.

Позвольте мне объяснить, потому что здесь есть пресловутые даунвотеры, которые подумают, что я защищаю oldschool HTML4 или что-то в этом роде. Нет. Но споры вокруг center- это просто война трендов, и нет никакой реальной причины бросать метку, которая хорошо служит целям.

Итак, давайте посмотрим основные аргументы против этого.

  • «Он описывает представление, а не семантику!»
    Нет. Он описывает логическое расположение - и да имеет внешний вид по умолчанию, как и другие теги, как<p>или<ul>делают. Но дело в том, что вложенная часть связана с окружающей средой. Центр говорит: «Это то, что мы разделяем визуально другим позиционированием».

  • «Это не действительно»
    Да, это так. Это просто устарело, как и в, может быть удалено позже . Уже более 15 лет. И, похоже, никуда не денется. Существуют крупные сайты, которые используют этот тег, потому что он очень удобочитаемый и по сути.

  • «Это не поддерживается в HTML5»
    На самом деле это один из самых широко поддерживаемых тегов.

  • "Это oldschool"
    Шнурки тоже oldschool. Новые методы не делают недействительными старые. Вы хотите чувствовать себя прогрессивным и современным: хорошо. Но не делайте это законом.

  • «Это глупо / неловко / хромает / рассказывает историю о вас»
    Ни один из них. Это как молоток: один инструмент для конкретной работы. Есть другие инструменты для той же работы и другие работы для того же инструмента; но он был создан для решения определенной проблемы, и эта проблема все еще существует, поэтому мы могли бы просто использовать специальное решение.

  • «Вы не должны этого делать, потому что CSS»
    Центрирование может быть достигнуто с помощью CSS, но это только один способ, а не единственный, не говоря уже о единственном подходящем . Все, что поддерживается, работает и доступно для чтения, должно быть в порядке.

TL; DR:

Единственная причина не использовать <center>это потому, что люди будут ненавидеть тебя.

dkellner
источник