Utilisation d'un div
instide atd
n'est pas pire que toute autre façon d'utiliser des tableaux pour la mise en page. (Certaines personnes n'utilisent jamais de tableaux pour la mise en page, et il se trouve que je suis l'un d'entre eux.)
Si vous utilisez un div
dans un, td
vous vous retrouverez cependant dans une situation où il peut être difficile de prédire la taille des éléments. La valeur par défaut pour un div est de déterminer sa largeur à partir de son parent, et la valeur par défaut pour une cellule de tableau est de déterminer sa taille en fonction de la taille de son contenu.
Les règles de div
dimensionnement de a sont bien définies dans les normes, mais les règles de td
dimensionnement de a ne sont pas aussi bien définies, de sorte que différents navigateurs utilisent des algorithmes légèrement différents.
table-layout:fixed
CSS n'est pas ce que vous pensez. Cela réduit le nombre de calculs effectués par les navigateurs lors du rendu des tables en calculant uniquement la taille de la première ligne.Après avoir vérifié la DTD XHTML, j'ai découvert qu'un élément <TD> est autorisé à contenir des éléments de bloc comme des en-têtes, des listes et aussi des éléments <DIV>. Ainsi, l'utilisation d'un élément <DIV> dans un élément <TD> ne viole pas le standard XHTML. Je suis presque sûr que d'autres variantes modernes de HTML ont un modèle de contenu équivalent pour l'élément <TD>.
Voici les règles DTD pertinentes:
la source
Non pas forcément.
Si vous devez placer un DIV dans un TD, assurez-vous que vous utilisez correctement le TD. Si vous ne vous souciez pas des données tabulaires et de la sémantique, vous ne vous soucierez finalement pas des DIV dans les TD. Je ne pense pas qu'il y ait de problème - si vous devez le faire, vous allez bien.
Selon la spécification HTML
Un
<div>
peut être placé là où le contenu du flux est attendu 1 , qui est le<td>
modèle de contenu 2 .la source
Une cellule de table peut légitimement contenir des éléments de niveau bloc, ce n'est donc pas, par nature, un faux-pas. L'implentation du navigateur, bien sûr, laisse à cela une position théorique spéculative. Cela peut entraîner des problèmes de mise en page et des bogues.
Bien que des tableaux aient été utilisés pour la mise en page - et le sont parfois encore - j'imagine que la plupart des navigateurs rendront le contenu correctement. Même IE.
la source
Si vous souhaitez utiliser la position: absolue; sur le div avec
position: relative;
sur le td, vous rencontrerez des problèmes. FF, safari et chrome (mac, pas PC cependant) ne positionneront pas le div par rapport au td (comme vous vous en doutez) c'est également vrai pour les divs avecdisplay: table-whatever;
donc si vous voulez faire cela, vous avez besoin de deux divs, un pour le récipientwidth: 100%;
height: 100%;
et pas de bordure donc il remplit le td sans aucun impact visuel. puis l'absolu.autre que cela, pourquoi ne pas simplement diviser la cellule?
la source
J'ai fait face au problème en plaçant un
<div>
intérieur<td>
.Je n'ai pas pu identifier le div en utilisant
document.getElementById()
si je le place dans td. Mais à l'extérieur, cela fonctionnait bien.la source
Comme tout le monde l'a mentionné, ce n'est peut-être pas une bonne idée à des fins de mise en page. Je suis arrivé à cette question parce que je me posais la même question et je voulais seulement savoir si ce serait un code valide.
Puisqu'il est valide, vous pouvez l'utiliser à d'autres fins. Par exemple, je vais l'utiliser pour mettre des divs "CSSed" fantaisistes dans les lignes du tableau, puis utiliser une fonction jQuery rapide pour permettre à l'utilisateur de trier les informations par prix, nom, etc. De cette façon, le seul le tableau de disposition me donnera "l'ordre vertical", mais je contrôlerai la largeur, la hauteur, l'arrière-plan, etc. des divs par CSS.
la source
Deux façons d'y faire face
div
intérieur de l'tbody
étiquettediv
intérieur de l'tr
étiquetteLes deux approches sont valides, si vous voyez feference: https://stackoverflow.com/a/23440419/2305243
la source
Ça casse la sémantique , c'est tout. Cela fonctionne bien, mais il se peut qu'il y ait des lecteurs d'écran ou quelque chose sur la route qui n'apprécieront pas le traitement de votre HTML si vous "rompez la sémantique".
la source