TD 내부의 DIV가 나쁜 생각입니까?


143

내가 듣고처럼 / A 어딘가에 읽을 것 <div>(A)의 내부가 <td>노 더 없었다. 작동하지 않는 것이 아니라 디스플레이 유형에 따라 실제로 호환되지 않는 것입니다. 직감을 뒷받침 할 증거를 찾을 수 없으므로 완전히 잘못되었을 수 있습니다.

답변:


144

divinstide a를 사용하는 것이 td레이아웃에 테이블을 사용하는 다른 방법보다 나쁘지 않습니다. (어떤 사람들은 레이아웃에 테이블을 사용하지 않으며 그중 하나가됩니다.)

div에서 a 를 사용 td하면 요소의 크기를 어떻게 예측할 수없는 상황에 처하게됩니다. div의 기본값은 부모의 너비를 결정하는 것이고, 테이블 셀의 기본값은 내용의 크기에 따라 크기를 결정하는 것입니다.

div크기 조정 방법에 대한 규칙 은 표준에 잘 정의되어 있지만 크기 조정 방법에 대한 규칙 은 잘 정의되어 td있지 않으므로 브라우저마다 약간 다른 알고리즘을 사용합니다.


나는 이것이 직감이 어디에서 왔는지 의심한다. 정리해 주셔서 감사합니다.
jcollum

9
열의 너비가 미리 지정되어 있으면 문제가되지 않습니다. 브라우저가 너비를 재정의하지 않도록 테이블에 table-layout : fixed를 설정하십시오 (잠재적으로 문제를 일으킬 수 있음)
Jens Roland

6
그는 레이아웃에 테이블을 사용한다고 말한 적이 없습니다.
texlate

@texelate table-layout:fixedCSS는 당신이 생각하는 것이 아닙니다. 첫 번째 행의 크기 만 계산하여 테이블을 렌더링 할 때 계산 브라우저의 양을 줄입니다.
SteveB

73

XHTML DTD를 확인한 후 <TD>-요소에 표제, 목록 및 <DIV>-요소와 같은 블록 요소를 포함 할 수 있음을 발견했습니다. 따라서 <TD>-요소 안에 <DIV>-요소를 사용한다고해서 XHTML 표준을 위반하지는 않습니다. 현대의 다른 HTML 변형에는 <TD> 요소에 해당하는 콘텐츠 모델이 있다고 확신합니다.

관련 DTD 규칙은 다음과 같습니다.

<!ELEMENT td %Flow;>
<!-- %Flow; mixes block and inline and is used for list items etc. -->
<!ENTITY %Flow "(#PCDATA | %block; | form | %inline; | %misc;>
<!ENTITY %block "p | %heading; | div | %lists; | %blocktext; | fieldset | table">

1
이것은 내가 찾던 특정 답변입니다. 친절하게 감사합니다. 오늘 밤에 조금 더 잘 것 같아요.
3Dom

PEC가 뒷받침하는 유일한 대답.
peterchaula

DTD에서이 부분을 설명하는 부분을 공유하십시오. 읽기 쉬운 문서가 아닙니다. 감사!
redolent

1
@redolent : 답변에 관련 DTD 규칙을 추가했습니다.
Martin Liversage

XHTML이 아닌 HTML5 사양은 어떻습니까?
분쇄

38

반드시 그런 것은 아닙니다.

TD 내에 DIV를 배치해야하는 경우 TD를 올바르게 사용하고 있는지 확인하십시오. 테이블 형식 데이터 및 의미에 대해 신경 쓰지 않으면 궁극적으로 TD의 DIV에 대해서는 신경 쓰지 않습니다. 당신이 경우에 - 나는 문제 생각이 없다고 생각 당신이 그것을 할 수있는 좋은 방법입니다 벌금을.

HTML 사양에 따르면

A는 <div>어디에 위치 할 수 유량 콘텐츠 예상 1 은 IS하는 <td>컨텐츠 모델 2 .


2
나는 항상 예 또는 아니오로 질문에 대답하고 싶었습니다.)
Jani Hartikainen

+1-정말 재치있는 답변을 원했지만 실패했습니다.
karim79

이 더 upvotes있어 비록 내가 Guffa 여기에 언급되지 않은 (내 직감의 원인이 될 수 있음) 점 제기라고 생각
jcollum

14

테이블 셀은 블록 레벨 요소를 합법적으로 포함 할 수 있으므로 본질적으로 가짜 파가 아닙니다. 물론 브라우저 함침은 추측적인 이론적 입장을 남겨둔다. 레이아웃 문제와 버그가 발생할 수 있습니다.

테이블이 레이아웃에 사용되었지만 때로는 여전히 그래도 대부분의 브라우저가 내용을 올바르게 렌더링한다고 생각합니다. 심지어 IE.


브라우저 구현이 "기다린 아이디어"를 얻은 곳이라고 생각합니다.
jcollum

13

position을 사용하려면 : absolute; position: relative;td 와 함께 div에서 문제가 발생합니다. FF, safari 및 chrome (mac, PC는 아니지만)은 div를 td에 상대적으로 배치하지 않습니다 (예상 한 것처럼) .div에도 마찬가지 display: table-whatever;이므로 두 가지 div가 필요합니다. 컨테이너에 width: 100%; height: 100%;테두리가 없으므로 시각적 영향없이 td를 채 웁니다. 그리고 절대적인 것.

그 외에는 왜 세포를 나누지 않습니까?


6
실질적이고 비성경적인 대답
Antony Hatchkins

2

<div>내부 를 배치하여 문제에 직면했습니다 <td>.

document.getElementById()td 안에 배치 하면 div를 식별 할 수 없었습니다 . 그러나 외부에서는 잘 작동했습니다.


1

모두가 언급했듯이 레이아웃 목적으로는 좋지 않을 수 있습니다. 나는 똑같이 궁금 해서이 질문에 도달했으며 그것이 유효한 코드인지 알고 싶었습니다.

유효하기 때문에 다른 용도로 사용할 수 있습니다. 예를 들어, 내가 사용할 것은 멋진 "CSSed"div를 테이블 행 안에 넣은 다음 빠른 jQuery 함수를 사용하여 사용자가 가격, 이름 등으로 정보를 정렬 할 수 있도록하는 것입니다. 레이아웃 테이블 만 나에게 "수직 순서"를 줄 것이지만 CSS로 div의 너비, 높이, 배경 등을 제어합니다.



-4

그것은 의미론을 깨뜨 립니다. 잘 작동하지만 "시맨틱을 깨 뜨리면"HTML을 처리하는 것을 좋아하지 않는 화면 판독기 나 무언가가있을 수 있습니다.


13
@ 그렉, 왜 시맨틱 스를 깰까요? div는 단순히 페이지 컨텐츠의 블록 레벨 분할 또는 하위 분할입니다. 따라서 테이블 셀에 배치하는 것이 본질적으로 그리고 돌이킬 수없는 반의 미적인 것은 아닙니다.
데이비드는 모니카 복원 복원

2
나는 내 대답을 정당화하는 몇 가지 답변을 쓰려고 노력했지만 개인적 견해를 계속했다. : / 내 최선의 응답은 셀에있는 모든 것이 다른 HTML 태그로 더 잘 표현 될 수 있다고 생각합니다. 실제로 셀을 구성 요소로 나누는 경우 테이블을 사용하여 시작해서는 안되며 레이아웃에 맞게 일련의 DIV를 스타일링해야합니다. 내가 왜 이것을 더 나은 단어로 넣을 수 없는지 잘 모르겠다 ... IMHO에게 도전한다.
Greg

흠, TD가 의미 적으로 DIV와 같은 의미이므로 두 개가 연속으로있는 이유는 무엇입니까?
jcollum

2
@ jcollum : 아니요, 의미 적으로 동일하다고 말하지는 않습니다. TD는 확실히 테이블의 셀입니다. 알려진 구조의 일부입니다. 테이블에는 행이 있고, 행에는 셀이 있고, 셀에는 데이터가 있습니다. DIV는 컨테이너 일뿐입니다. 문서의 어느 곳에서나 언제라도 표현할 수 있습니다. 마크 업의 목적 측면에서 의미를 얻으려면 스타일을 적용해야합니다.
Greg

7
DIV는 의미 적으로 의미가 없으므로 어떻게 잘못 될 수 있는지 알 수 없습니다.
Rex M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.