Dlaczego znacznik <center> jest przestarzały w HTML?

202

Jestem ciekawy, dlaczego <center>znacznik w HTML był przestarzały.

<center>Był prosty sposób szybko centrum wahliwe bloków tekstu i obrazów przez umieszczenie pojemnika w <center>tagu, a ja naprawdę nie można znaleźć żadnych prostszy sposób, w jaki to zrobić teraz.

Czy ktoś wie o prostym sposobie wyśrodkowania „rzeczy” (a nie o margin-left:auto; margin-right:auto;szerokości i szerokości), czymś, co zastępuje <center>? A także, dlaczego był przestarzały?

Andreas Grech
źródło

Odpowiedzi:

232

<center>Elementem była przestarzała, ponieważ definiuje prezentacji jego zawartości - nie opisuje jego zawartość.

Jedną z metod centrowania jest ustawienie właściwości margin-lefti margin-rightelementu na auto, a następnie ustawienie właściwości elementu nadrzędnego text-alignna center. Gwarantuje to, że element zostanie wyśrodkowany we wszystkich nowoczesnych przeglądarkach.

Jordan Ryan Moore
źródło
7
Tak, CSS polega na dzieleniu prezentacji i danych.
Ivan Nevostruev
3
Ivan, CSS polega na prezentacji; nie chodzi o dzielenie - jak pokazują atrybuty stylu wbudowanego w niektórych odpowiedziach tutaj! Oczywiście bardzo dobrym pomysłem jest stosowanie rozsądnych klas, a nie wbudowanego CSS, ale jest to odrębna koncepcja używania CSS do prezentacji.
Peter Boughton,
15
Miałem kilka przypadków (których nie pamiętam), w których ustawienie zarówno elementu margini text-alignnie wyśrodkowywało mojego elementu w IE, ale owijanie go <center>działało ... Spróbuję znaleźć przykład.
Mottie,
12
sztuczka automatycznego marginesu działa tylko dla elementów na poziomie bloku. użyj display: block;na elemencie wbudowanym.
Steve Graham
88
Jestem pewien, że siedemnaście zagnieżdżonych div na typowym szablonie WP lub Drupal naprawdę pomaga rozdzielić szczegóły prezentacji: P </troll> (<- wygląd, znacznik semantyczny!)
detly
17

Według W3Schools.com ,

Środkowy element został uznany za przestarzały w HTML 4.01 i nie jest obsługiwany w XHTML 1.0 Strict DTD.

Specyfikacja HTML 4.01 podaje następujący powód wycofania tagu:

Element CENTER jest dokładnie równoważny z określeniem elementu DIV z atrybutem align ustawionym na „środek”.

Conrad Meyer
źródło
14
Tak bardzo chciałbym , żeby to była prawda.
badp
61
To faktycznie prawda, ale atrybut wyrównania DIV jest również przestarzały: D
Oleh Prypin
22
Zauważ, że w3schools nie jest W3C.
showdev,
4
„Element CENTER jest dokładnie równoważny z określeniem elementu DIV z atrybutem align ustawionym na„ środek ”. z wyjątkiem tego, że widać, że znacznik jest wyśrodkowany. Gdyby to był prawidłowy powód, moglibyśmy osłabić <strong>, <b>, wszystkie <h> i inne tagi i powiedzieć, że robią to samo, co <span> z pewnym css. poza tym XHTML nawet nie rozpoznaje tagów HTML5, takich jak canvas. Jest przestarzały tylko z powodu wojny z namiotami, centrami, stołami, ramami, które są czysto religijne, ponieważ wszyscy mają swoje miejsce.
Dmitry
2
@Dmitry <strong> i <h> mają znaczenie semantyczne, które wykracza poza styl wizualny. Sądzę, że jeśli <center> nadal było w pobliżu, możesz nadać mu styl CSS, np. Aby usprawnić jego zawartość.
Nick Rice,
16

To, co robię, to podejmowanie typowych zadań, takich jak centrowanie lub pływanie, i tworzenie z nich klas CSS. Gdy to zrobię, mogę ich używać na dowolnej stronie. Mogę również wywołać tyle, ile chcę w tym samym elemencie.

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

Teraz mogę ich używać w kodzie HTML do wykonywania prostych zadań.

<p class="text_center">Some Text</p>
Scott Radcliff
źródło
12

Nadal czasami używam tagu <center>, ponieważ nic w CSS również nie działa. Przykłady próby użycia sztuczki <div> i niepowodzenia:

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

<center> otrzymuje wyniki. Aby zamiast tego użyć CSS, czasami trzeba umieścić CSS w kilku miejscach i zepsuć go, aby wyśrodkować. Aby odpowiedzieć na twoje pytanie, CSS stało się religią wyznawców i wyznawców, którzy unikali <center> <b> <i> <u> jako bluźnierstwa, bezbożności i zbyt prostych ze względu na bezpieczeństwo pracy. A jeśli spróbują zabrać ci <table> od ciebie, zapytaj ich, jaki jest CSS odpowiednika atrybutu colspan lub rowspan.

Liczy się nie prawda abstrakcyjna czy książkowa, ale żywa prawda.
- Zen

Russell Hankins
źródło
Możesz również użyćdisplay:flex; justify-content:center; text-align:center
Justin Liu
11

Nadal możesz go używać z XHTML 1.0 Transitional i HTML 4.01 Transitional, jeśli chcesz. Jedyny inny sposób (moim zdaniem najlepszy sposób) to marginesy:

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

Twój HTML powinien definiować element, a nie regulować jego prezentację.

Sampson
źródło
8

Ma to oznaczać, że znaczniki, tj. Znaczniki HTML, reprezentują znaczenie i strukturę, a nie wygląd. Został źle wymieszany we wczesnych wersjach HTML, ale standardy, które ludzie starają się teraz oczyścić.

Jednym z problemów z zezwoleniem tagom na kontrolowanie wyglądu jest to, że strony nie działają dobrze z urządzeniami dla osób niepełnosprawnych, takimi jak czytniki ekranu. Prowadzi to również do posiadania wielu znaczników w tekście, które nie pomagają wyjaśnić znaczenia, ale raczej zaśmiecają je informacjami na innym poziomie.

Dlatego CSS został wymyślony, aby przenieść formatowanie / wyświetlanie na inny język, który jest niezależny od tekstu i można go łatwo zachować w ten sposób. Pozwala to między innymi na zmianę arkuszy stylów w celu zmiany wyglądu strony internetowej bez dotykania innych znaczników. I aby móc to zrobić dla wielu stron w jednym puchu.

Narzędzia, które oferuje CSS, nie zawsze są eleganckie, jestem po twojej stronie. Na przykład nie ma możliwości skutecznego centrowania w pionie. A centrowanie w poziomie, jeśli nie jest to tylko tekst text-align, nie jest dużo lepsze.

Masz wybór robienia łatwych, skutecznych i mętnych lub czystych, eleganckich i nieporęcznych. Nie rozumiem, dlaczego programiści sieci znoszą ten bałagan, ale sądzę, że cieszą się, że mają przynajmniej szansę na załatwienie swoich spraw.

Carl Smotricz
źródło
4
+1: Jako ktoś, kto nie jest nawet programistą, zdaję sobie sprawę, jak niewygodne może być określenie określonych atrybutów prezentacji za pomocą CSS. Nadal uważam, że lepiej jest używać CSS niż zamazywać znaczniki strukturalne, ale ... WTF? Kto jest odpowiedzialny za zdefiniowanie tej specyfikacji CSS, przypadkowych małp, które znaleźli w odległej dżungli? Poważnie.
Dan Molding,
2
Nie obrażaj przypadkowych małp w odległych dżunglach!
DaveWalley,
7

HTML jest przeznaczony do strukturyzacji danych, a nie kontrolowania układu. CSS ma na celu kontrolę układu. Przekonasz się również, że wielu projektantów niechętnie korzysta <table>z układów z tego samego powodu.

jkndrkn
źródło
5

Do tekstu i obrazów możesz użyć text-align:

<div style="text-align: center;">
    I'm centered.
</div>
Tomas Markauskas
źródło
1
Są to tak zwane elementy wbudowane.
Christoph Bühler,
3

CSS ma text-align: centerwłaściwość, a ponieważ jest to czysto wizualna rzecz, a nie semantyczna, należy przenieść ją do CSS, a nie HTML.

keithjgrant
źródło
1
+1 za wyjaśnienie, dlaczego zostało zastąpione jako alternatywa.
moribvndvs
8
ale text-alignwyrówna zawartość pojemnika, a nie sam pojemnik
Andreas Grech,
Ach, tak, jeśli jest to element na poziomie bloku, dopełni go „automatyczne” wypełnienie. Jeśli jest to element wbudowany, użyj text-align: centerna elemencie nadrzędnym.
keithjgrant
(ups, miałem na myśli automatyczny margines, a nie padding)
keithjgrant,
@AndreasGrech - <center>robi oba . Jest denerwująco szeroki.
Quentin,
3

Jedzenie do namysłu: co zrobiłby syntezator syntezatora mowy <center>?

Jörg W Mittag
źródło
1
Prawdopodobnie mów „środkowy” lub „wyśrodkowany”.
DaveWalley,
To samo, co w przypadku css 'text-align: center; Przypuszczam.
MSpreij,
0

Możesz dodać to do swojego css i użyć <div class="center"></div>

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

lub jeśli chcesz zachować <center></center>i przygotować się na wypadek, gdyby kiedykolwiek został usunięty, dodaj to do swojego css

center{
  text-align: center;
  margin: auto;
  justify-content: center;
  display: flex;
}
SwiftNinjaPro
źródło
-1

Najmniej popularna odpowiedź

  1. Przestarzały znacznik niekoniecznie jest złym znacznikiem;
  2. Tam znaczniki, które zajmują się logiki prezentacji, centerjest jednym z nich;
  3. centerTag nie jest taka sama jak div z text-align:center;
  4. Fakt, że masz inny sposób na zrobienie czegoś, nie powoduje, że jest to nieważne.

Pozwól mi wyjaśnić, ponieważ są tutaj notoryczni downvoters, którzy będą myśleć, że bronię oldschoolowego HTML4 czy coś takiego. Nie, nie jestem. Ale debata wokół centerto po prostu wojna trendów, nie ma prawdziwego powodu, aby porzucić tag, który dobrze służy słusznemu celowi.

Zobaczmy więc główne argumenty przeciwko niemu.

  • „Opisuje prezentację, a nie semantykę!”
    Nie. Opisuje logiczny układ - i tak ma domyślny wygląd, podobnie jak inne znaczniki, takie jak<p>lub<ul>robią. Chodzi jednak o związek części zamkniętej z otoczeniem. Centrum mówi „to jest coś, co oddzielamy przez wizualnie różne pozycjonowanie”.

  • „To nieważne”
    Tak, to prawda. To jest po prostu przestarzałe, ponieważ w, można go później usunąć . Od ponad 15 lat. I najwyraźniej nigdzie nie idzie. Istnieją główne witryny, które używają tego tagu, ponieważ jest on bardzo czytelny i do rzeczy.

  • „Nie jest obsługiwany w HTML5”
    To jeden z najczęściej obsługiwanych tagów.


  • Sznurowadła „oldschool” też są oldschoolowe. Nowe metody nie unieważniają starej. Chcesz poczuć się progresywnie i nowocześnie: w porządku. Ale nie rób z tego prawa.

  • „To głupie / niezręczne / lame / opowiada o tobie”
    Żadne z nich. To jak młotek: jedno narzędzie do określonej pracy. Istnieją inne narzędzia dla tego samego zadania i inne zadania dla tego samego narzędzia; ale został stworzony, aby rozwiązać określony problem, a problem ten nadal istnieje, więc równie dobrze możemy po prostu użyć dedykowanego rozwiązania.

  • „Nie powinieneś tego robić, ponieważ CSS”
    Centrowanie można absolutnie osiągnąć za pomocą CSS, ale to tylko jeden sposób, nie jedyny, a tym bardziej jedyny odpowiedni . Wszystko, co jest obsługiwane, działające i czytelne, powinno być w porządku.

TL; DR:

Jedynym powodem, dla którego nie należy używać, <center>jest to, że ludzie cię nienawidzą.

dkellner
źródło