2012-10-09 11 views
19

Editar: La respuesta seleccionada contiene un enlace al violín de trabajo que pude componer sin el uso de una tabla anidada.Cómo codificar semánticamente una tabla anidada de HTML que alinea (y asocia) con los encabezados de la tabla padre

Quiero codificar semánticamente una tabla en HTML con un diseño como el de la imagen siguiente. Lamentablemente, no he podido encontrar nada parecido aquí en la red.

enter image description here

he podido forzar el aspecto manualmente ajustando los anchos de células, pero yo quiero para asegurarse de que el código que estoy produciendo tiene sentido, y no creo que ese es el caso, ya que sin ajuste manual de los anchos, la representación estándar se parece más a la siguiente imagen.

enter image description here

Hasta ahora, el código problemático que he llegado con el siguiente aspecto:

<table> 
    <thead> 
    <tr> 
     <th scope="col">Type of Loss Dollar</th> 
     <th scope="col">Reserve Amount</th> 
     <th scope="col">Paid Amount</th> 
     <th scope="col">Total This Loss</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td colspan="3"> 
     <table> 
      <tbody> 
      <tr> 
       <th scope="row">Medical</th> 
       <td><input type="text" /></td> 
       <td><input type="text" /></td> 
      </tr><tr> 
       <th scope="row">Indemnity</th> 
       <td><input type="text" /></td> 
       <td><input type="text" /></td> 
      </tr><tr> 
       <th scope="row">Expense</th> 
       <td><input type="text" /></td> 
       <td><input type="text" /></td> 
      </tr> 
      </tbody> 
     </table> 
     </td><td> 
     TOTAL 
     </td> 
    </tr> 
    </tbody> 
</table> 
+1

No utilice una tabla de una mesa. Use * una * tabla. Problema resuelto. – deceze

+1

Una vez que las imágenes están disponibles, el problema será más claro. Otra vez, disculpa el retraso. –

+0

la respuesta es fácil en html, difícil en el servidor:/ – Jonathan

Respuesta

14

Sin las imágenes que es un poco difícil de decir, pero creo que una solución mejor que las tablas anidadas sería simplemente usar los atributos colspan y rowspan.

Editar: Ver las imágenes Yo diría que definitivamente puede lograr eso usando rowspan (y colspan la forma en que lo está usando ya).

Además, no necesita establecer el atributo scope si es "col". Por defecto es "col".

Editar: Como Marat Tanalin señala que el valor predeterminado del atributo scope es en realidad auto que "hace que la celda del encabezado se aplique a un conjunto de celdas seleccionadas según el contexto". Y que en mi experiencia actúa exactamente igual a configurarlo en "col" (para lectores de pantalla).

Editar: Aquí hay dos grandes artículos sobre el marcado de las tablas avanzadas: http://www.456bereastreet.com/archive/200910/use_the_th_element_to_specify_row_and_column_headers_in_data_tables/ & http://www.456bereastreet.com/archive/200410/bring_on_the_tables/

Editar: Here is the fiddle que exhiben comportamiento deseado (visualmente al menos) y el código fuente de ese violín siguiente manera:

<table border="1"> 
    <thead> 
    <tr> 
     <th>Status</th> 
     <th>Type of Loss Dollar</th> 
     <th>Reserve Amount</th> 
     <th>Paid Amount</th> 
     <th>Total This Loss</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td rowspan="3">Open</td> 
     <td>Medical</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
     <td rowspan="3">TOTAL</td> 
    </tr><tr> 
     <td>Indemnity</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
    </tr><tr> 
     <td>Expense</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
    </tr> 
    </tbody> 
</table> 
+0

Sí, no estaba muy interesado en anidarlos, pero no se me ocurrió otra solución. Quizás mi comprensión de 'colspan' y' rowspan' sea insuficiente. Gracias por el consejo sobre el alcance también. –

+0

Nuevamente sería más fácil con las imágenes, pero creo que puede lograr lo que busca después de usar 'rowspan' y' colspan'. Ni siquiera estoy seguro de que las tablas de anidamiento sean semánticamente correctas, ¿un lector de pantalla asociaría su 'th's con' '' '' '' ''''''''''' No estoy muy seguro. – powerbuoy

+0

Ok, las imágenes están arriba, y definitivamente diría que puedes resolver esto usando 'rowspan'.Instalaría un violín pero no tengo tiempo en este momento, y no he usado 'rowspan' desde los días de diseños de tablas: P – powerbuoy

1

sí, como todos los píos anteriores sugirieron, todo se trata de las filas.

aquí es una re-escritura de su código:

<table> 
    <thead> 
    <tr> 
     <th>Type of Loss Dollar</th> 
     <th>Reserve Amount</th> 
     <th>Paid Amount</th> 
     <th>Total This Loss</th> 
     <th>Last Heading</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td rowspan="3"></td> 
     <td>Medical</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
     <td rowspan="3">TOTAL</td> 
    </tr><tr> 
     <td>Indemnity</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
    </tr><tr> 
     <td>Expense</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
    </tr> 
    </tbody> 
</table> 
+0

El primer 'td' está sin cerrar (solo para que lo sepa). Gracias por tu tiempo sin importar Creo que he encontrado lo que necesito en el violín al que me he vinculado (en la respuesta de Powerbuoy), pero si tienes alguna sugerencia sobre cómo podría hacerse más semánticamente correcto, ¡sería muy apreciado! –

+0

@EvanDriscoll de hecho lo fue. editado para corregir ¡ejército de reserva! – caitriona

+1

Médico tiene un en lugar de –

Cuestiones relacionadas