HTML 레이아웃에 테이블을 사용하지 않는 이유는 무엇입니까? [닫은] 휴일 팔년 전에 .

HTML 레이아웃에 테이블을 사용해서는 안된다는 일반적인 견해 인 것 같습니다 .

왜?

나는 이것에 대한 좋은 주장을 본 적이 없다. 일반적인 답변은 다음과 같습니다.

  • 컨텐츠를 레이아웃분리하는 것이 좋습니다.
    그러나 이것은 잘못된 주장입니다. 진부한 생각 . 레이아웃에 테이블 요소를 사용하는 것이 테이블 형식 데이터와 거의 관련이 없다는 것이 사실입니다. 그래서 무엇? 상사가 신경 쓰나요? 내 사용자는 신경 쓰나요?

    아마도 웹 페이지 관리를 유지해야하는 나와 저의 동료 개발자는 … 테이블을 관리하기가 쉽지 않습니까? div와 CSS를 사용하는 것보다 테이블을 사용하는 것이 더 쉽다고 생각합니다 .

    그건 그렇고 … 왜 div 또는 span을 사용하여 레이아웃과 테이블에서 컨텐츠를 잘 분리합니까? div만으로 좋은 레이아웃을 얻으려면 종종 중첩 된 div가 많이 필요합니다.

  • 코드의 가독성
    나는 다른 방법이라고 생각합니다. 대부분의 사람들은 HTML을 이해하고 소수의 사람들은 CSS를 이해합니다.

  • SEO가 테이블을 사용하지 않는 것이 좋습니다.
    왜 그렇습니까? 아무도 그것이 어떤 증거를 보여줄 수 있습니까? 또는 테이블이 SEO 관점에서 권장되지 않는다는 Google의 진술?

  • 테이블이 느립니다.
    여분의 tbody 요소를 삽입해야합니다. 이것은 현대 웹 브라우저를위한 땅콩입니다. 표를 사용하면 페이지 속도가 크게 저하되는 벤치 마크를 보여주세요.

  • 레이아웃 점검은 테이블없이 더 쉽습니다 . css Zen Garden을 참조하십시오 .
    업그레이드가 필요한 대부분의 웹 사이트에는 새로운 콘텐츠 (HTML)도 필요합니다. 새 버전의 웹 사이트에 새 CSS 파일 만 필요한 시나리오는 거의 없습니다. Zen Garden은 훌륭한 웹 사이트이지만 약간 이론적입니다. CSS 의 오용 은 말할 것도 없습니다 .

테이블 대신 divs + CSS를 사용하는 좋은 주장에 관심이 있습니다.



답변

나는 당신의 주장을 하나씩 차례로 살펴보고 그 안에 오류를 보여 주려고 노력할 것입니다.

컨텐츠를 레이아웃과 분리하는 것이 좋습니다. 그러나 이것은 잘못된 주장입니다. 진부한 생각.

HTML은 의도적으로 설계 되었기 때문에 전혀 실수가 아닙니다. 요소의 오용은 완전히 의문의 여지가 없지만 (이후 다른 언어로도 새로운 관용구가 개발 되었음) 가능한 부정적인 영향이 균형을 이루어야합니다. 또한 <table>오늘날 요소 를 잘못 사용하는 것에 대한 논쟁이 없었더라도 브라우저 공급 업체가 요소에 특별한 대우를 적용하는 방식으로 인해 내일이있을 수 있습니다. 결국, 그들은“ <table>요소는 테이블 형식의 데이터만을위한 것”이라는 것을 알고 있으며, 이 사실을 사용하여 렌더링 엔진을 개선하고 프로세스에서 <table>동작 방식을 미묘하게 변경 하여 이전에 잘못 사용 된 사례를 깨뜨릴 수 있습니다.

그래서 무엇? 상사가 신경 쓰나요? 내 사용자는 신경 쓰나요?

다릅니다. 당신의 상사가 뾰족한 머리입니까? 그러면 그는 신경 쓰지 않을 것입니다. 그녀가 유능하다면, 그녀는 걱정할 것입니다. 가질 것 입니다.

아마도 웹 페이지 관리를 유지해야하는 나와 저의 동료 개발자는 … 테이블을 유지 관리하기가 쉽지 않습니까? 테이블을 사용하는 것이 div와 CSS를 사용하는 것보다 쉽다고 생각합니다.

전문 웹 개발자의 대다수는 당신을 반대하는 것 같습니다[ 인용 필요 ] . 그 테이블 실제로 유지 보수가 덜 용이하다는 것이 분명해야합니다. 레이아웃에 테이블을 사용한다는 것은 회사 레이아웃을 변경하면 실제로는 모든 단일 페이지를 변경한다는 의미입니다. 이것은 매우 비쌀 수 있습니다 . 반면에 CSS와 결합 된 의미 적으로 의미있는 HTML을 신중하게 사용하면 이러한 변경 사항이 CSS와 사용 된 그림에 제한 될 수 있습니다 .

그건 그렇고 … 왜 div 또는 span을 사용하여 레이아웃과 테이블에서 내용을 잘 분리하고 있습니까? div만으로 좋은 레이아웃을 얻으려면 종종 중첩 된 div가 많이 필요합니다.

깊게 중첩 된 <div>테이블 레이아웃과 마찬가지로 안티 패턴입니다. 훌륭한 웹 디자이너는 많은 것을 필요로하지 않습니다. 다른 한편으로, 깊게 중첩 된 div조차도 테이블 레이아웃의 많은 문제가 없습니다. 실제로, 그들은 논리적으로 내용을 부분적으로 나눔으로써 의미 론적 구조에 기여할 수 있습니다.

코드의 가독성 나는 다른 방법이라고 생각합니다. 대부분의 사람들은 HTML을 이해하고 CSS는 거의 이해하지 못합니다. 더 간단합니다.

“대부분의 사람들”은 중요하지 않습니다. 전문가가 중요합니다. 전문가에게는 테이블 레이아웃이 HTML + CSS보다 더 많은 문제를 만듭니다. 메모장은 대부분의 사람들에게 더 간단하기 때문에 GVim 또는 Emacs를 사용해서는 안된다는 것과 같습니다. 또는 MS Word가 대부분의 사람들에게 더 단순하기 때문에 LaTeX를 사용해서는 안됩니다.

SEO가 테이블을 사용하지 않는 것이 좋습니다.

이것이 사실인지 모르겠으며 이것을 인수로 사용하지 않을 것이지만 논리적입니다. 검색 엔진은 관련 데이터를 검색 합니다. 테이블 형식 데이터는 물론 관련성이 있지만 사용자가 검색하는 것은 거의 없습니다. 사용자는 페이지 제목 또는 유사하게 눈에 띄는 위치에 사용 된 용어를 검색합니다. 따라서 테이블 형식 컨텐츠를 필터링에서 제외하여 처리 시간 (및 비용)을 크게 줄이는 것이 논리적입니다.

테이블이 느립니다. 여분의 tbody 요소를 삽입해야합니다. 이것은 현대 웹 브라우저를위한 땅콩입니다.

추가 요소는 테이블이 느려지는 것과 관련이 없습니다. 반면에 테이블의 레이아웃 알고리즘은 훨씬 어렵습니다. 브라우저는 종종 컨텐트 레이아웃을 시작하기 전에 전체 테이블이로드 될 때까지 기다려야합니다. 또한 레이아웃 캐싱이 작동하지 않습니다 (CSS를 쉽게 캐시 할 수 있음). 이 모든 것은 이전에 언급되었습니다.

표를 사용하면 페이지 속도가 크게 저하되는 벤치 마크를 보여주세요.

불행히도 벤치 마크 데이터가 없습니다. 이 논증에 과학적 근거가 부족하다는 것이 옳기 때문에 나는 그것에 관심을 가질 것이다.

업그레이드가 필요한 대부분의 웹 사이트에는 새로운 콘텐츠 (html)도 필요합니다. 새 버전의 웹 사이트에 새 CSS 파일 만 필요한 시나리오는 거의 없습니다.

전혀. 콘텐츠와 디자인을 분리하여 디자인 변경을 단순화 한 몇 가지 사례를 연구했습니다. 여전히 일부 HTML 코드를 변경해야하는 경우가 종종 있지만 변경 사항은 항상 훨씬 더 제한적입니다. 또한 때때로 설계 변경이 동적으로 이루어져야합니다. WordPress 블로그 시스템에서 사용하는 것과 같은 템플릿 엔진을 고려하십시오. 테이블 레이아웃은 문자 그대로이 시스템을 죽입니다. 상용 소프트웨어와 비슷한 경우를 연구했습니다. HTML 코드를 변경하지 않고 디자인을 변경할 수 있다는 것은 비즈니스 요구 사항 중 하나였습니다.

또 다른 한가지. 테이블 레이아웃은 웹 사이트의 자동 구문 분석 (화면 스크래핑)을 훨씬 어렵게 만듭니다. 결국 누가 그것을하기 때문에 사소한 것처럼 들릴 수 있습니다. 나는 놀랐다. 문제의 서비스가 데이터에 액세스 할 수있는 WebService 대안을 제공하지 않으면 화면 스크래핑이 많은 도움이 될 수 있습니다. 나는 이것이 슬픈 현실 인 생물 정보학에서 일하고 있습니다. 최신 웹 기술과 웹 서비스는 대부분의 개발자에게 도달하지 않았으며 종종 화면 스크래핑이 데이터 가져 오기 프로세스를 자동화하는 유일한 방법입니다. 많은 생물 학자들이 여전히 그러한 작업을 수동으로 수행한다는 것은 놀라운 일이 아닙니다. 수천 개의 데이터 세트


답변

다음 은 비슷한 스레드 에서 프로그래머의 답변 입니다.

시맨틱 스 101

먼저이 코드를보고 여기서 무엇이 잘못되었는지 생각해보십시오.

class car {
    int wheels = 4;
    string engine;
}

car mybike = new car();
mybike.wheels = 2;
mybike.engine = null;

물론 문제는 자전거가 자동차가 아니라는 것입니다. 자동차 클래스는 자전거 인스턴스에 부적절한 클래스입니다. 코드에 오류가 없지만 의미 상 올바르지 않습니다. 프로그래머에게 잘 반영되지 않습니다.

시맨틱 스 102

이제 이것을 문서 마크 업에 적용하십시오. 문서에 테이블 형식의 데이터가 필요한 경우 적절한 태그는입니다 <table>. 그러나 테이블에 탐색을 배치하면 의도 한 <table>요소의 목적을 잘못 사용하고있는 것 입니다. 두 번째 경우에는 테이블 형식의 데이터가 표시되지 않습니다 <table>. 프레젠테이션 목표를 달성하기 위해 요소를 사용하고 있습니다.

결론

방문자가 알 수 있습니까? 아뇨, 상사가 신경 쓰나요? 아마도. 프로그래머로서 코너를 자르는가? 확실한. 그러나 우리는해야합니까? 의미 적 마크 업을 사용하면 누구에게 도움이됩니까? 당신과 당신의 전문적인 명성. 이제 가서 옳은 일을하십시오.


답변

명백한 답변 : CSS Zen Garden을 참조하십시오 . 테이블 기반 레이아웃으로 쉽게 동일한 작업을 수행 할 수 있다고 말하면 (HTML은 변경되지 않음을 기억하십시오) 반드시 레이아웃을 위해 테이블을 사용하십시오.

또 다른 중요한 두 가지는 접근성과 SEO입니다.

둘 다 어떤 순서로 정보가 표시되는지에 관심이 있습니다. 테이블 기반 레이아웃이 페이지에서 두 번째 중첩 테이블의 두 번째 행에있는 세 번째 셀에 배치되면 탐색을 페이지 상단에 쉽게 표시 할 수 없습니다.

따라서 귀하의 답변은 유지 보수성, 접근성 및 SEO입니다.

게으르지 마십시오. 배우기가 조금 더 어려워도 옳고 적절한 방법으로 행동하십시오.


답변

이 중복 질문을 참조하십시오.

당신이 잊고있는 한 가지 항목은 접근성입니다. 예를 들어 스크린 리더를 사용해야하는 경우 테이블 기반 레이아웃도 변환되지 않습니다. 당신이 정부를 위해 일을한다면, 스크린 리더와 같은 지원 접근의 브라우저는 할 수있다 필요합니다 .

또한 귀하가 질문에서 언급 한 것 중 일부의 영향을 과소 평가한다고 생각합니다. 예를 들어, 디자이너와 프로그래머 모두 프레젠테이션과 컨텐츠를 얼마나 잘 구분하는지 완전히 인식하지 못할 수 있습니다. 그러나 일단 두 가지 역할을하는 상점에 들어 서면 장점이 더 분명해지기 시작합니다.

당신이하고있는 일을 알고 좋은 도구를 가지고 있다면 CSS는 실제로 레이아웃 테이블보다 큰 이점을 가지고 있습니다. 그리고 각 항목 자체가 포기한 테이블을 정당화 할 수는 없지만 일반적으로 가치가 있습니다.


답변

불행히도 CSS Zen Garden은 더 이상 좋은 HTML / CSS 디자인의 예로 사용될 수 없습니다. 최근의 모든 디자인은 단면 제목에 그래픽을 사용합니다. 이 그래픽 파일은 CSS에 지정되어 있습니다.

따라서 디자인을 컨텐츠에서 제외시키는 이점을 보여주는 웹 사이트는 이제 컨텐츠를 디자인에 넣는 UNSPEAKABLE SIN을 정기적으로 수행합니다. HTML 파일의 섹션 제목이 변경되면 표시된 섹션 제목이 변경되지 않습니다.

엄격한 DIV 및 CSS 종교를 옹호하는 사람들조차도 자신의 규칙을 따를 수 없다는 것을 보여줄뿐입니다. 그것들을 얼마나 밀접하게 따르는 지에 대한 지침으로 사용할 수 있습니다.


답변

이것은 확실한 결정은 아니지만 CSS를 사용하면 매체에 따라 동일한 마크 업을 사용하고 레이아웃을 변경할 수 있습니다. 이는 좋은 이점입니다. 예를 들어 인쇄 페이지의 경우 프린터 친화적 인 페이지를 만들지 않고도 탐색을 조용히 억제 할 수 있습니다.


답변

레이아웃을위한 하나의 테이블은 그렇게 나쁘지 않을 것입니다. 그러나 대부분의 경우 하나의 테이블로 필요한 레이아웃을 얻을 수 없습니다. 머지 않아 2 ~ 3 개의 중첩 테이블이 있습니다. 이것은 매우 번거로워집니다.

  • 읽기가 더 어렵다. 그것은 의견에 달려 있지 않습니다. 식별 표시가없는 중첩 된 태그가 더 있습니다.

  • 프리젠 테이션에서 컨텐츠를 분리하는 것은 현재하고있는 일에 집중할 수 있기 때문에 좋은 것입니다. 두 가지를 혼합하면 읽기 어려운 부풀린 페이지가 나타납니다.

  • 스타일 용 CSS를 사용하면 브라우저에서 파일을 캐시 할 수 있으며 후속 요청이 훨씬 빠릅니다. 이것은 거대하다.

  • 테이블은 디자인에 당신을 고정시킵니다. 물론 모든 사람이 CSS Zen Garden의 유연성을 필요로하는 것은 아니지만 디자인을 조금이라도 변경할 필요가없는 사이트에서 작업 한 적이 없습니다. CSS를 사용하면 훨씬 쉽습니다.

  • 테이블은 스타일을 지정하기가 어렵습니다. 유연성이별로 없습니다 (예 : 테이블 스타일을 완전히 제어하려면 HTML 속성을 추가해야합니다)

아마도 4 년 동안 비표 형식 데이터에 테이블을 사용하지 않았습니다. 나는 뒤돌아 보지 않았다.

Andy Budd의 CSS Mastery 를 읽는 것이 좋습니다 . 환상적이야.

ecx.images-amazon.com의 이미지 http://ecx.images-amazon.com/images/I/41TH5NFKPEL._SL500_BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg