문제

간단한 (희망), HTML 질문.

3 개의 열에 걸친 열 그룹이 있다고 가정 해 봅시다. 그러나 그것은 또한 9 줄에 걸쳐 있습니다. 그러나 실제로, 나는 3 레벨의 열이 있기를 원합니다 (기본적으로 3 개의 열, 9 행에 걸쳐 분할). 유일한 목표는 실제로 다음과 같습니다.

a) 테이블 임베딩을 피하십시오 (여러 가지 이유로) b) 섹션을 모듈화하십시오. c) 의미 적으로 모듈 식 영역의 스타일링을 허용합니다.

결국, 나는 시각적으로 좋아하는 것을 가질 것입니다.

   | col 1  | col 2 | col 3 |
   | row 1  | row 1 | row 1 |
   | row 2  | row 2 | row 2 |
   | row 3  | row 3 | row 3 |

   | col 4  | col 5 | col 6 |
   | row 4  | row 4 | row 4 |
   | row 5  | row 5 | row 5 |
   | row 6  | row 6 | row 6 |

   | col 7  | col 2 | col 3 |
   | row 7  | row 7 | row 7 |
   | row 8  | row 8 | row 8 |
   | row 9  | row 9 | row 9 |

열 그룹이 3 개의 열을 함께 유지하기 위해 열 그룹을 작동시킬 수 있었지만 "rowspan"을 추가하려는 시도가 실패했습니다. 트레드 그룹을 랩핑하는 것은 전혀 좋지 않았습니다. 그리고 내가 말하는 한, 실제 "RowGroup"태그는 없습니다.

업데이트:

피드백을받은 후, 나는 내가 생각한 것에 대한 자세한 내용을 제시해야한다는 것을 깨달았습니다.

데이터 그룹을 참조하기 위해 쿼드, 슈퍼 컬럼, 슈퍼 로우라는 용어를 사용하겠습니다. 따라서이 예를 들어보세요 :

               Quad 1       Quad 2
super-row1 | a | b | c || d | e | f |
super-row2 | 1 | 2 | 3 || 4 | 5 | 6 |
super-row3 | A | B | C || D | E | F |

               Quad 3       Quad 4
super-row4 | g | h | i || j | k | l |
super-row5 | 7 | 8 | 9 || 0 | 1 | 2 |
super-row6 | G | H | I || J | K | L |

단순화를 위해, 상단에 걸쳐 Super -Col 1-6을 썼다고 상상해보십시오.

따라서 쿼드 1의 데이터는 모두 관련되어 있고 Super-Row 1의 데이터는 모두 관련되어 있으며 Super-Col 1의 데이터는 모두 관련되어 있습니다. 따라서 위의 데이터를 사용하여

'a'는 'f', 'c'및 'g'와 직접적인 관계를 가지고 있지만 'f', 'c'및 'g'는 서로 직접적인 관계가 없습니다.

그것에 대해 생각하는 또 다른 방법은 스도쿠입니다. 각 쿼드, 열 및 행은 1-9 세트를 포함하여 81 개의 데이터 포인트 중 하나가 행, 열 또는 쿼드와 직접 공유하는 다른 데이터 포인트와 직접 관련되어 있습니다. 그러나 데이터 포인트가 아닙니다.

빠른 업데이트:

마지막으로, 죄송합니다. 이러한 관계를 HTML로 의미 적으로 그룹화하여 누군가가 스크린 리더 또는 비 전통적인 브라우저를 사용하는 경우 주어진 지점에서 테이블에있는 위치를 알 수 있습니다. Col 1, 4 열, Super Row 1, Row 1. 데이터는 '오하이오'입니다. "

이렇게하면 스타일링, 크로스 브라우저 호환성, 접근성이 훨씬 쉬워지고 액세스 키, 범위 등과 같은 움직임 등이 있습니다.

도움이 되었습니까?

해결책

을 고려하면 <colgroup> 열을 그룹화하는 유일한 의미 론적 방법입니다 <tbody> 행을 그룹화하는 유일한 의미 론적 수단인데 간단한 것을 고수하는 것이 좋습니다.

<table>
    <colgroup id="colgroup1">
        <col id="colA" />
        <col id="colB" />
    </colgroup>
    <colgroup id="colgroup2">
        <col id="colC" />
        <col id="colD" />
    </colgroup>
    <tbody id="rowgroup1">
        <tr>
            <th>A</th>
            <th>B</th>
            <th>C</th>
            <th>D</th>
        </tr>
        <tr id="row1">
            <td>A1</td>
            <td>B1</td>
            <td>C1</td>
            <td>D1</td>
        </tr>
        <tr id="row2">
            <td>A2</td>
            <td>B2</td>
            <td>C2</td>
            <td>D2</td>
        </tr>
    </tbody>
    <tbody id="rowgroup2">
        <tr>
            <th>A</th>
            <th>B</th>
            <th>C</th>
            <th>D</th>
        </tr>
        <tr id="row3">
            <td>A3</td>
            <td>B3</td>
            <td>C3</td>
            <td>D3</td>
        </tr>
        <tr id="row4">
            <td>A4</td>
            <td>B4</td>
            <td>C4</td>
            <td>D4</td>
        </tr>
    </tbody>
</table>

이렇게하면 쿼드 스타일을 유지하면서도 깨끗하고 의미 론적 구조를 유지할 수 있습니다. 스타일링에 얼마나 많은 유연성을 가질 수 있는지 잘 모르겠지만 몇 가지 옵션이 있습니다.

<style type="text/css">
    table { border-collapse:collapse; font-family:sans-serif; font-size:small; }
    td, th { border:solid 1px #000; padding:2px 10px; text-align:center; }
    th { background-color:#000; color:#fff; font-size:x-small; }
    colgroup { border:solid 3px #000; }
    tbody { border:solid 3px #000; }
</style>

table {
  border-collapse: collapse;
  font-family: sans-serif;
  font-size: small;
}
td,
th {
  border: solid 1px #000;
  padding: 2px 10px;
  text-align: center;
}
th {
  background-color: #000;
  color: #fff;
  font-size: x-small;
}
colgroup {
  border: solid 3px #000;
}
tbody {
  border: solid 3px #000;
}
<table>
  <colgroup id="colgroup1">
    <col id="colA" />
    <col id="colB" />
  </colgroup>
  <colgroup id="colgroup2">
    <col id="colC" />
    <col id="colD" />
  </colgroup>
  <tbody id="rowgroup1">
    <tr>
      <th>A</th>
      <th>B</th>
      <th>C</th>
      <th>D</th>
    </tr>
    <tr id="row1">
      <td>A1</td>
      <td>B1</td>
      <td>C1</td>
      <td>D1</td>
    </tr>
    <tr id="row2">
      <td>A2</td>
      <td>B2</td>
      <td>C2</td>
      <td>D2</td>
    </tr>
  </tbody>
  <tbody id="rowgroup2">
    <tr>
      <th>A</th>
      <th>B</th>
      <th>C</th>
      <th>D</th>
    </tr>
    <tr id="row3">
      <td>A3</td>
      <td>B3</td>
      <td>C3</td>
      <td>D3</td>
    </tr>
    <tr id="row4">
      <td>A4</td>
      <td>B4</td>
      <td>C4</td>
      <td>D4</td>
    </tr>
  </tbody>
</table>

다른 팁

<table> 여러 가지 가질 수 있습니다 <tbody> 행 그룹을 대표하는 어린이. 나는 사용하지 않았다 <colgroup> 이전에 요소, 다른 사람이 추가 할 수 있도록 남겨 둘 것입니다. 그러나 여기에는 의미를 유지하면서 스타일 요구를 달성 할 수있는 솔루션이 있습니다.

<table>
    <tbody>
        <tr>
            <th scope="col">col 1</th>
            <th scope="col">col 2</th>
            <th scope="col">col 3</th>
        </tr>
        <tr>
            <td>row 1</td>
            <td>row 1</td>
            <td>row 1</td>
        </tr>
        <tr>
            <td>row 2</td>
            <td>row 2</td>
            <td>row 2</td>
        </tr>
        <tr>
            <td>row 3</td>
            <td>row 3</td>
            <td>row 3</td>
        </tr>
    </tbody>
    <tbody>
        <tr>
            <th scope="col">col 4</th>
            <th scope="col">col 5</th>
            <th scope="col">col 6</th>
        </tr>
        <tr>
            <td>row 4</td>
            <td>row 4</td>
            <td>row 4</td>
        </tr>
        <tr>
            <td>row 5</td>
            <td>row 5</td>
            <td>row 5</td>
        </tr>
        <tr>
            <td>row 6</td>
            <td>row 6</td>
            <td>row 6</td>
        </tr>
    </tbody>
    <tbody>
        <tr>
            <th scope="col">col 7</th>
            <th scope="col">col 8</th>
            <th scope="col">col 9</th>
        </tr>
        <tr>
            <td>row 7</td>
            <td>row 7</td>
            <td>row 7</td>
        </tr>
        <tr>
            <td>row 8</td>
            <td>row 8</td>
            <td>row 8</td>
        </tr>
        <tr>
            <td>row 9</td>
            <td>row 9</td>
            <td>row 9</td>
        </tr>
    </tbody>
</table>

나는 이것을 The의 정보를 기반으로한다 HTML 5 사양, 그러나 유효한 HTML 4이어야합니다.

내가 정확하게 기억한다면, <colgroup> 모든 브라우저에서 태그가 제대로 작동하지 않습니다 (음, 오페라). 나는 모든 비용으로 그것을 피할 것입니다.

내가 당신이라면, 나는 단지 각각의 간단한 테이블을 만들 것입니다 <td> "쿼드"를 나타내고 나머지 데이터의 셀 내에 테이블을 만듭니다.

의미 적으로 올바른 방법은 실제로 중첩 된 테이블입니다. 예제에는 2x2 쿼드 테이블이 있으며 각 쿼드는 3x3 값 테이블입니다. 이것을 위해 중첩 테이블을 사용하는 데 의미 적으로 잘못된 것은 없습니다. 뉴스 NeSted-HTML-Table 군중에 대해 혼란스러워하지 마십시오. 그것은 페이지 레이아웃에 중첩 테이블을 사용하는 것과 관련이 있습니다.

중첩 테이블을 사용하면 CSS 스타일을 더 많이 제어 할 수 있습니다. Cols와 Colgroup을 사용하면 스타일 컨트롤이 매우 제한됩니다. Col 또는 Colgroup에서 설정할 수있는 유일한 CSS 속성은 테두리, 배경 및 가시성입니다.

가장 쉬운 것은 콜로 그룹 요소를 모두 함께 건너 뛰고 대신 간단한 클래스 스타일로 가야한다고 생각합니다.

<table>
    <tr class="colgroup1">
        <th>col1</th><th>col2</th><th>col3</th>
    </tr>
    <tr class="colgroup1">
        <td>row1</td><td>row1</td><td>row1</td>
    </tr>
    <tr class="colgroup1">
        <td>row2</td><td>row2</td><tr>row2</td>
    </tr>
    <tr class="colgroup2">
        <th>col4</th><th>col5</th><th>col6</th>
    </tr>
    <tr class="colgroup2">
        <td>row3</td><td>row3</td><td>row3</td>
    </tr>
    <tr class="colgroup2">
        <td>row4</td><td>row4</td><td>row4</td>
    </tr>
    <tr class="colgroup3">
        <th>col7</th><th>col8</th><th>col9</th>
    </tr>
    <tr class="colgroup3">
        <td>row5</td><td>row5</td><td>row5</td>
    </tr>
    <tr class="colgroup3">
        <td>row6</td><td>row6</td><td>row6</td>
    </tr>
</table>

그런 다음 CSS에서 다른 콜 그룹을 쉽게 타겟팅 할 수 있습니다.

.colgroup1 th {
   // Styles here
}

.colgroup2 th {
   // Styles here
}


.colgroup3 th {
   // Styles here
}

// Same for tds.

편집하다: 나는 방법을 좋아한다 로리 피츠 패트릭 여러 테이블 바디를 사용합니다. 그것이 실제로 유효하다면, 나는 해당 솔루션을 사용하여 각 테이블 본체 태그에 클래스 이름을 넣습니다. CSS는 동일하게 유지됩니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top